scorm-again 3.0.3 → 3.0.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,2 +1,2 @@
1
- const e={D:86400,H:3600,M:60,S:1},t=t=>{if(!t||0>=t)return"PT0S";let i="P",s=t;return Object.entries(e).forEach(([e,t])=>{let r=Math.floor(s/t);s%=t,function(e){if(Math.floor(e)===e||0>(e+"")?.indexOf?.("."))return 0;const t=(""+e).split(".")?.[1];return t?.length??0}(s)>2&&(s=+(+s).toFixed(2)),"S"===e&&s>0&&(r+=s),r&&((i.indexOf("D")>0||["H","M","S"].includes(e))&&-1===i.indexOf("T")&&(i+="T"),i+=`${r}${e}`)}),i},i=o((e,t)=>{if("string"==typeof t&&(t=RegExp(t)),!e||!e?.match?.(t))return 0;const[,i,s,r,n,o,a,c]=RegExp(t).exec?.(e)??[];let result=0;return result+=+c||0,result+=60*+a||0,result+=3600*+o||0,result+=86400*+n||0,result+=604800*+r||0,result+=2592e3*+s||0,result+=31536e3*+i||0,result},(e,t)=>`${e??""}:${"string"==typeof t?t:t?.toString()??""}`),s=o((e,t)=>("string"==typeof t&&(t=RegExp(t)),!(!e||!e?.match?.(t))));function r(e){const result={};return function e(t,i){if(Object(t)!==t)result[i]=t;else if(Array.isArray(t))t.forEach((t,s)=>{e(t,`${i}[${s}]`)}),0===t.length&&(result[i]=[]);else{const s=Object.keys(t).filter(e=>({}.hasOwnProperty.call(t,e))),r=0===s.length;s.forEach(s=>{e(t[s],i?`${i}.${s}`:s)}),r&&i&&(result[i]={})}}(e,""),result}function n(e,t){return"string"==typeof e&&RegExp(t).test(e)}function o(e,t){const i=new Map;return(...s)=>{const r=t?t(...s):JSON.stringify(s);return i.has(r)?i.get(r):(()=>{const result=e(...s);return i.set(r,result),result})()}}class a{jsonString=!1;_cmi_element;_initialized=!1;constructor(e){this._cmi_element=e}get initialized(){return this._initialized}initialize(){this._initialized=!0}}class c extends a{_start_time;get start_time(){return this._start_time}setStartTime(){if(void 0!==this._start_time)throw Error("Start time has already been set.");this._start_time=(new Date).getTime()}}class l extends Error{constructor(e,t){super(`${e} : ${""+t}`),this._errorCode=t,Object.setPrototypeOf(this,l.prototype)}_errorCode;get errorCode(){return this._errorCode}}class u extends l{constructor(e,t,i,s){super(e,t),this.message=`${e} : ${i}`,this._errorMessage=i,s&&(this._detailedMessage=s),Object.setPrototypeOf(this,u.prototype)}_errorMessage;_detailedMessage="";get errorMessage(){return this._errorMessage}get detailedMessage(){return this._detailedMessage}}const d="true",h="false",m={cmi_children:"_version,comments_from_learner,comments_from_lms,completion_status,completion_threshold,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",comments_children:"comment,timestamp,location",score_children:"max,raw,scaled,min",objectives_children:"progress_measure,completion_status,success_status,description,score,id",correct_responses_children:"pattern",student_preference_children:"audio_level,audio_captioning,delivery_speed,language",interactions_children:"id,type,objectives,timestamp,correct_responses,weighting,learner_response,result,latency,description",adl_data_children:"id,store",error_descriptions:{0:{basicMessage:"No Error",detailMessage:"No error occurred, the previous API call was successful."},101:{basicMessage:"General Exception",detailMessage:"No specific error code exists to describe the error."},102:{basicMessage:"General Initialization Failure",detailMessage:"Call to Initialize failed for an unknown reason."},103:{basicMessage:"Already Initialized",detailMessage:"Call to Initialize failed because Initialize was already called."},104:{basicMessage:"Content Instance Terminated",detailMessage:"Call to Initialize failed because Terminate was already called."},111:{basicMessage:"General Termination Failure",detailMessage:"Call to Terminate failed for an unknown reason."},112:{basicMessage:"Termination Before Initialization",detailMessage:"Call to Terminate failed because it was made before the call to Initialize."},113:{basicMessage:"Termination After Termination",detailMessage:"Call to Terminate failed because Terminate was already called."},122:{basicMessage:"Retrieve Data Before Initialization",detailMessage:"Call to GetValue failed because it was made before the call to Initialize."},123:{basicMessage:"Retrieve Data After Termination",detailMessage:"Call to GetValue failed because it was made after the call to Terminate."},132:{basicMessage:"Store Data Before Initialization",detailMessage:"Call to SetValue failed because it was made before the call to Initialize."},133:{basicMessage:"Store Data After Termination",detailMessage:"Call to SetValue failed because it was made after the call to Terminate."},142:{basicMessage:"Commit Before Initialization",detailMessage:"Call to Commit failed because it was made before the call to Initialize."},143:{basicMessage:"Commit After Termination",detailMessage:"Call to Commit failed because it was made after the call to Terminate."},201:{basicMessage:"General Argument Error",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."},301:{basicMessage:"General Get Failure",detailMessage:"Indicates a failed GetValue call where no other specific error code is applicable. Use GetDiagnostic for more information."},351:{basicMessage:"General Set Failure",detailMessage:"Indicates a failed SetValue call where no other specific error code is applicable. Use GetDiagnostic for more information."},391:{basicMessage:"General Commit Failure",detailMessage:"Indicates a failed Commit call where no other specific error code is applicable. Use GetDiagnostic for more information."},401:{basicMessage:"Undefined Data Model Element",detailMessage:"The data model element name passed to GetValue or SetValue is not a valid SCORM data model element."},402:{basicMessage:"Unimplemented Data Model Element",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."},403:{basicMessage:"Data Model Element Value Not Initialized",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."},404:{basicMessage:"Data Model Element Is Read Only",detailMessage:"SetValue was called with a data model element that can only be read."},405:{basicMessage:"Data Model Element Is Write Only",detailMessage:"GetValue was called on a data model element that can only be written to."},406:{basicMessage:"Data Model Element Type Mismatch",detailMessage:"SetValue was called with a value that is not consistent with the data format of the supplied data model element."},407:{basicMessage:"Data Model Element Value Out Of Range",detailMessage:"The numeric value supplied to a SetValue call is outside of the numeric range allowed for the supplied data model element."},408:{basicMessage:"Data Model Dependency Not Established",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."}}},p={0:{basicMessage:"No Error",detailMessage:"No error occurred, the previous API call was successful."},101:{basicMessage:"General Exception",detailMessage:"No specific error code exists to describe the error."},201:{basicMessage:"Invalid argument error",detailMessage:"Indicates that an argument represents an invalid data model element or is otherwise incorrect."},202:{basicMessage:"Element cannot have children",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.'},203:{basicMessage:"Element not an array - cannot have count",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.'},301:{basicMessage:"Not initialized",detailMessage:"Indicates that an API call was made before the call to lmsInitialize."},401:{basicMessage:"Not implemented error",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."},402:{basicMessage:"Invalid set value, element is a keyword",detailMessage:'Indicates that LMSSetValue was called on a data model element that represents a keyword (elements that end in "_children" and "_count").'},403:{basicMessage:"Element is read only",detailMessage:"LMSSetValue was called with a data model element that can only be read."},404:{basicMessage:"Element is write only",detailMessage:"LMSGetValue was called on a data model element that can only be written to."},405:{basicMessage:"Incorrect Data Type",detailMessage:"LMSSetValue was called with a value that is not consistent with the data format of the supplied data model element."},407:{basicMessage:"Element Value Out Of Range",detailMessage:"The numeric value supplied to a LMSSetValue call is outside of the numeric range allowed for the supplied data model element."},408:{basicMessage:"Data Model Dependency Not Established",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."}};class v extends u{constructor(e,t){!{}.hasOwnProperty.call(p,t+"")?super(e,101,p[101]?.basicMessage,p[101]?.detailMessage):super(e,t,p[t+""]?.basicMessage||"Unknown error",p[t+""]?.detailMessage),Object.setPrototypeOf(this,v.prototype)}}const g=m.error_descriptions;class _ extends u{constructor(e,t){!{}.hasOwnProperty.call(g,t+"")?super(e,101,g[101]?.basicMessage,g[101]?.detailMessage):super(e,t,g[t+""]?.basicMessage||"Unknown error",g[t+""]?.detailMessage),Object.setPrototypeOf(this,_.prototype)}}const S={GENERAL:101,INITIALIZATION_FAILED:101,INITIALIZED:101,TERMINATED:101,TERMINATION_FAILURE:101,TERMINATION_BEFORE_INIT:101,MULTIPLE_TERMINATION:101,RETRIEVE_BEFORE_INIT:101,RETRIEVE_AFTER_TERM:101,STORE_BEFORE_INIT:101,STORE_AFTER_TERM:101,COMMIT_BEFORE_INIT:101,COMMIT_AFTER_TERM:101,ARGUMENT_ERROR:101,CHILDREN_ERROR:101,COUNT_ERROR:101,GENERAL_GET_FAILURE:101,GENERAL_SET_FAILURE:101,GENERAL_COMMIT_FAILURE:101,UNDEFINED_DATA_MODEL:101,UNIMPLEMENTED_ELEMENT:101,VALUE_NOT_INITIALIZED:101,INVALID_SET_VALUE:101,READ_ONLY_ELEMENT:101,WRITE_ONLY_ELEMENT:101,TYPE_MISMATCH:101,VALUE_OUT_OF_RANGE:101,DEPENDENCY_NOT_ESTABLISHED:101},f={...S,INVALID_SET_VALUE:402,READ_ONLY_ELEMENT:403,TYPE_MISMATCH:405,VALUE_OUT_OF_RANGE:407},y={...S,INITIALIZATION_FAILED:102,INITIALIZED:103,TERMINATED:104,TERMINATION_FAILURE:111,TERMINATION_BEFORE_INIT:112,MULTIPLE_TERMINATION:113,MULTIPLE_TERMINATIONS:113,RETRIEVE_BEFORE_INIT:122,RETRIEVE_AFTER_TERM:123,STORE_BEFORE_INIT:132,STORE_AFTER_TERM:133,COMMIT_BEFORE_INIT:142,COMMIT_AFTER_TERM:143,ARGUMENT_ERROR:201,GENERAL_GET_FAILURE:301,GENERAL_SET_FAILURE:351,GENERAL_COMMIT_FAILURE:391,UNDEFINED_DATA_MODEL:401,UNIMPLEMENTED_ELEMENT:402,VALUE_NOT_INITIALIZED:403,READ_ONLY_ELEMENT:404,WRITE_ONLY_ELEMENT:405,TYPE_MISMATCH:406,VALUE_OUT_OF_RANGE:407,DEPENDENCY_NOT_ESTABLISHED:408};class b extends a{_errorCode;_errorClass;__children;childArray;constructor(e){super(e.CMIElement),this.__children=e.children,this._errorCode=e.errorCode??f.GENERAL,this._errorClass=e.errorClass||l,this.childArray=[]}reset(e=!1){if(this._initialized=!1,e)this.childArray=[];else for(let e=0;this.childArray.length>e;e++)this.childArray[e]?.reset()}get _children(){return this.__children}set _children(_children){throw new this._errorClass(this._cmi_element+"._children",this._errorCode)}get _count(){return this.childArray.length}set _count(_count){throw new this._errorClass(this._cmi_element+"._count",this._errorCode)}toJSON(){this.jsonString=!0;const result={};for(let e=0;this.childArray.length>e;e++)result[e+""]=this.childArray[e];return this.jsonString=!1,result}}const C="unknown",A="true",E="false",M="passed",w="failed",R="unknown",O="completed",T="incomplete",j="unknown",I={_:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,NONE:5},q={autocommit:!1,autocommitSeconds:10,throttleCommits:!1,useAsynchronousCommits:!1,sendFullCommit:!0,lmsCommitUrl:!1,dataCommitFormat:"json",commitRequestDataType:"application/json;charset=UTF-8",autoProgress:!1,logLevel:I.ERROR,selfReportSessionTime:!1,alwaysSendTotalTime:!1,renderCommonCommitFields:!1,autoCompleteLessonStatus:!1,strict_errors:!0,xhrHeaders:{},xhrWithCredentials:!1,fetchMode:"cors",asyncModeBeaconBehavior:"never",responseHandler:async function(e){if(void 0!==e){let t=null;try{if("function"==typeof e.json)t=await e.json();else if("function"==typeof e.text){const i=await e.text();i&&(t=JSON.parse(i))}}catch(e){}return null!==t&&{}.hasOwnProperty.call(t,"result")?{result:t.result,errorCode:"number"==typeof t.errorCode?t.errorCode:!0===t.result||t.result===d?0:101}:200===e.status?{result:d,errorCode:0}:{result:h,errorCode:101}}return{result:h,errorCode:101}},xhrResponseHandler:function(e){if(void 0!==e){let t=null;if(200>e.status||e.status>299)return{result:h,errorCode:101};try{t=JSON.parse(e.responseText)}catch(e){}return null!==t&&{}.hasOwnProperty.call(t,"result")?{result:t.result,errorCode:"number"==typeof t.errorCode?t.errorCode:!0===t.result||t.result===d?0:101}:{result:d,errorCode:0}}return{result:h,errorCode:101}},requestHandler:function(e){return e},onLogMessage:N,mastery_override:!1,score_overrides_status:!1,completion_status_on_failed:"completed",scoItemIds:[],scoItemIdValidator:!1,globalObjectiveIds:[],enableOfflineSupport:!1,courseId:"",syncOnInitialize:!0,syncOnTerminate:!0,maxSyncAttempts:5,scoId:"",autoPopulateCommitMetadata:!1,httpService:null,globalStudentPreferences:!1};function N(e,t){switch(e){case"4":case 4:case"ERROR":case I.ERROR:console.error(t);break;case"3":case 3:case"WARN":case I.WARN:console.warn(t);break;case"2":case 2:case"INFO":case I.INFO:console.info(t);break;case"1":case 1:case"DEBUG":case I.DEBUG:console.debug?console.debug(t):console.log(t)}}const D="^-?([0-9]+)$",x="^[\\u0000-\\uFFFF]{0,4000}$",L="^[\\u0000-\\uFFFF]{0,64000}$",P="^({lang=([a-zA-Z]{1,8}|i|x)(-[a-zA-Z0-9-]{2,8})?})?((?!{.*$).{0,250}$)?$",z="^({lang=([a-zA-Z]{1,8}|i|x)(-[a-zA-Z0-9-]{2,8})?})?((?!{.*$).{0,4000}$)?$",F="^(19[7-9][0-9]|[2-9][0-9]{3})((-(0[1-9]|1[0-2]))((-(0[1-9]|[1-2][0-9]|3[0-1]))(T([0-1][0-9]|2[0-3])((:[0-5][0-9])((:[0-5][0-9])((\\.[0-9]{1,6})((Z|([+|-]([0-1][0-9]|2[0-3])))(:[0-5][0-9])?)?)?)?)?)?)?)?$",k="^P(?:([.,\\d]+)Y)?(?:([.,\\d]+)M)?(?:([.,\\d]+)W)?(?:([.,\\d]+)D)?(?:T?(?:([.,\\d]+)H)?(?:([.,\\d]+)M)?(?:(\\d+(?:\\.\\d{1,2})?)S)?)?$",V="^-?([0-9]{1,10})(\\.[0-9]{1,18})?$",H="^(?=.*\\w)[\\w\\-\\(\\)\\+\\.\\:\\=\\@\\;\\$\\_\\!\\*\\'\\%\\/\\#]{1,250}$",B="^(?:(?!urn:)\\S{1,4000}|urn:[A-Za-z0-9-]{1,31}:\\S{1,4000}|.{1,4000})$",U="^(completed|incomplete|not attempted|unknown)$",$="^(passed|failed|unknown)$",G="^(_?(start|resumeAll|previous|continue|exit|exitAll|abandon|abandonAll|suspendAll|retry|retryAll)|_none_|(\\{target=(?<choice_target>\\S{0,}[a-zA-Z0-9-_]+)})?choice|(\\{target=(?<jump_target>\\S{0,}[a-zA-Z0-9-_]+)})?jump)$",Y="^(unknown|true|false)$",W="^{target=\\S{0,}[a-zA-Z0-9-_]+}$",K={"true-false":{format:"^true$|^false$",max:1,delimiter:"",unique:!1},choice:{format:B,max:36,delimiter:"[,]",unique:!0},"fill-in":{format:P,max:10,delimiter:"[,]",unique:!1},"long-fill-in":{format:z,max:1,delimiter:"",unique:!1},matching:{format:H,format2:H,max:36,delimiter:"[,]",delimiter2:"[.]",unique:!1},performance:{format:"^$|"+H,format2:V+"|^$|"+H,max:250,delimiter:"[,]",delimiter2:"[.]",unique:!1},sequencing:{format:H,max:36,delimiter:"[,]",unique:!1},likert:{format:H,max:1,delimiter:"",unique:!1},numeric:{format:V,max:1,delimiter:"",unique:!1},other:{format:x,max:1,delimiter:"",unique:!1}},J={"true-false":{max:1,delimiter:"",unique:!1,duplicate:!1,format:"^true$|^false$",limit:1},choice:{max:36,delimiter:"[,]",unique:!0,duplicate:!1,format:B},"fill-in":{max:10,delimiter:"[,]",unique:!1,duplicate:!1,format:"^(({lang=([a-zA-Z]{1,8}|i|x)?(-[a-zA-Z0-9-]{2,8})?})?(.{0,250})?)?$"},"long-fill-in":{max:1,delimiter:"",unique:!1,duplicate:!0,format:z},matching:{max:36,delimiter:"[,]",delimiter2:"[.]",unique:!1,duplicate:!1,format:H,format2:H},performance:{max:250,delimiter:"[,]",delimiter2:"[.]",unique:!1,duplicate:!1,format:H,format2:`^(${H})$|^(?:\\d+(?:\\.\\d+)?(?::\\d+(?:\\.\\d+)?)?)$`},sequencing:{max:36,delimiter:"[,]",unique:!1,duplicate:!1,format:H},likert:{max:1,delimiter:"",unique:!1,duplicate:!1,format:H,limit:1},numeric:{max:2,delimiter:"[:]",unique:!1,duplicate:!1,format:V,limit:1},other:{max:1,delimiter:"",unique:!1,duplicate:!1,format:x,limit:1}},X=["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","id","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","nav","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"];class Q{_API;_cancelled=!1;_timeout;_callback;constructor(e,t,i){this._API=e,this._timeout=setTimeout(this.wrapper.bind(this),t),this._callback=i}cancel(){this._cancelled=!0,this._timeout&&clearTimeout(this._timeout)}wrapper(){this._cancelled||this._API.isInitialized()&&(async()=>{await this._API.commit(this._callback)})()}}const Z=["continue","previous","exit","exitAll","abandon","abandonAll","suspendAll"];var ee=(e=>(e.NOT="not",e.AND="and",e.OR="or",e))(ee||{}),te=(e=>(e.SKIP="skip",e.DISABLED="disabled",e.HIDE_FROM_CHOICE="hiddenFromChoice",e.STOP_FORWARD_TRAVERSAL="stopForwardTraversal",e.EXIT_PARENT="exitParent",e.EXIT_ALL="exitAll",e.RETRY="retry",e.RETRY_ALL="retryAll",e.CONTINUE="continue",e.PREVIOUS="previous",e.EXIT="exit",e))(te||{});class ie extends a{_condition="always";_operator=null;_parameters=new Map;_referencedObjective=null;static _now=()=>new Date;static _getElapsedSecondsHook=void 0;constructor(e="always",t=null,i=new Map){super("ruleCondition"),this._condition=e,this._operator=t,this._parameters=i}static setNowProvider(e){"function"==typeof e&&(ie._now=e)}static setElapsedSecondsHook(e){ie._getElapsedSecondsHook=e}reset(){this._initialized=!1,this._condition="always",this._operator=null,this._parameters=new Map}get condition(){return this._condition}set condition(e){this._condition=e}get operator(){return this._operator}set operator(e){this._operator=e}get parameters(){return this._parameters}set parameters(e){this._parameters=e}get referencedObjective(){return this._referencedObjective}set referencedObjective(e){this._referencedObjective=e}resolveReferencedObjective(e){return this._referencedObjective?e.primaryObjective?.id===this._referencedObjective?e.primaryObjective:(e.objectives||[]).find(e=>e.id===this._referencedObjective)||null:null}evaluate(e){let result;const t=this.resolveReferencedObjective(e);switch(this._condition){case"satisfied":case"objectiveSatisfied":result=t?!0===t.satisfiedStatus:e.successStatus===M||!0===e.objectiveSatisfiedStatus;break;case"objectiveStatusKnown":case"objectiveMeasureKnown":result=t?!!t.measureStatus:!!e.objectiveMeasureStatus;break;case"objectiveMeasureGreaterThan":{const i=this._parameters.get("threshold")||0;result=!!(t?t.measureStatus:e.objectiveMeasureStatus)&&(t?t.normalizedMeasure:e.objectiveNormalizedMeasure)>i;break}case"objectiveMeasureLessThan":{const i=this._parameters.get("threshold")||0;result=!!(t?t.measureStatus:e.objectiveMeasureStatus)&&i>(t?t.normalizedMeasure:e.objectiveNormalizedMeasure);break}case"completed":case"activityCompleted":result=t?t.completionStatus===O:e.isCompleted;break;case"progressKnown":case"activityProgressKnown":result=t?t.completionStatus!==j:"unknown"!==e.completionStatus;break;case"attempted":result=e.attemptCount>0;break;case"attemptLimitExceeded":result=e.hasAttemptLimitExceeded();break;case"timeLimitExceeded":result=this.evaluateTimeLimitExceeded(e);break;case"outsideAvailableTimeRange":result=this.evaluateOutsideAvailableTimeRange(e);break;case"always":result=!0;break;default:result=!1}return"not"===this._operator&&(result=!result),result}evaluateTimeLimitExceeded(e){let t=e.timeLimitDuration;if(!t&&e.attemptAbsoluteDurationLimit&&(t=e.attemptAbsoluteDurationLimit),!t)return!1;const s=i(t,k);if(0>=s)return!1;let r=0;if(ie._getElapsedSecondsHook)try{const t=ie._getElapsedSecondsHook(e);"number"!=typeof t||Number.isNaN(t)||0>t||(r=t)}catch{r=0}if(0===r&&e.attemptExperiencedDuration){const t=i(e.attemptExperiencedDuration,k);t>0&&(r=t)}if(0===r&&e.attemptAbsoluteStartTime)try{const t=new Date(e.attemptAbsoluteStartTime).getTime(),i=ie._now().getTime();Number.isNaN(t)||Number.isNaN(i)||t>i||(r=(i-t)/1e3)}catch{r=0}return r>s}evaluateOutsideAvailableTimeRange(e){const t=e.beginTimeLimit,i=e.endTimeLimit;if(!t&&!i)return!1;const s=ie._now();return!(!t||s>=new Date(t))||!(!i||new Date(i)>=s)}parseISO8601Duration(e){return 1e3*i(e,k)}toJSON(){this.jsonString=!0;const result={condition:this._condition,operator:this._operator,parameters:Object.fromEntries(this._parameters)};return this.jsonString=!1,result}}class se extends a{_conditions=[];_action="skip";_conditionCombination="and";constructor(e="skip",t="and"){super("sequencingRule"),this._action=e,this._conditionCombination=t}reset(){this._initialized=!1,this._conditions=[],this._action="skip",this._conditionCombination="and"}get conditions(){return this._conditions}addCondition(e){if(!(e instanceof ie))throw new _(this._cmi_element+".conditions",y.TYPE_MISMATCH);this._conditions.includes(e)||this._conditions.push(e)}removeCondition(e){if(!(e instanceof ie))throw new _(this._cmi_element+".conditions",y.TYPE_MISMATCH);const t=this._conditions.indexOf(e);return-1!==t&&(this._conditions.splice(t,1),!0)}get action(){return this._action}set action(e){this._action=e}get conditionCombination(){return this._conditionCombination}set conditionCombination(e){this._conditionCombination=e}evaluate(e){return 0===this._conditions.length||("all"===this._conditionCombination||"and"===this._conditionCombination?this._conditions.every(t=>t.evaluate(e)):("any"===this._conditionCombination||"or"===this._conditionCombination)&&this._conditions.some(t=>t.evaluate(e)))}toJSON(){this.jsonString=!0;const result={conditions:this._conditions,action:this._action,conditionCombination:this._conditionCombination};return this.jsonString=!1,result}}class re extends a{_preConditionRules=[];_exitConditionRules=[];_postConditionRules=[];constructor(){super("sequencingRules")}reset(){this._initialized=!1,this._preConditionRules=[],this._exitConditionRules=[],this._postConditionRules=[]}get preConditionRules(){return this._preConditionRules}addPreConditionRule(e){if(!(e instanceof se))throw new _(this._cmi_element+".preConditionRules",y.TYPE_MISMATCH);this._preConditionRules.push(e)}get exitConditionRules(){return this._exitConditionRules}addExitConditionRule(e){if(!(e instanceof se))throw new _(this._cmi_element+".exitConditionRules",y.TYPE_MISMATCH);this._exitConditionRules.push(e)}get postConditionRules(){return this._postConditionRules}addPostConditionRule(e){if(!(e instanceof se))throw new _(this._cmi_element+".postConditionRules",y.TYPE_MISMATCH);this._postConditionRules.push(e)}evaluatePreConditionRules(e){for(const t of this._preConditionRules)if(t.evaluate(e))return t.action;return null}evaluateExitConditionRules(e){for(const t of this._exitConditionRules)if(t.evaluate(e))return t.action;return null}evaluatePostConditionRules(e){for(const t of this._postConditionRules)if(t.evaluate(e))return t.action;return null}toJSON(){this.jsonString=!0;const result={preConditionRules:this._preConditionRules,exitConditionRules:this._exitConditionRules,postConditionRules:this._postConditionRules};return this.jsonString=!1,result}}class ne{constructor(e){this.activityTree=e}isInTree(e){return this.activityTree.getAllActivities().includes(e)}isAncestorOf(e,t){let i=t;for(;i;){if(i===e)return!0;i=i.parent}return!1}findCommonAncestor(e,t){if(!e||!t)return null;const i=[];let s=e;for(;s;)i.push(s),s=s.parent;for(s=t;s;){if(i.includes(s))return s;s=s.parent}return null}findChildInPath(e,t){let i=t;for(;i&&i.parent;){if(i.parent===e)return i;i=i.parent}return null}isLastInTree(e){if(e.children.length>0)return!1;let t=e;for(;t;){if(this.activityTree.getNextSibling(t))return!1;t=t.parent}return!0}getCurrentInParent(e){if(e.children)for(const t of e.children)if(t.isActive)return t;return null}isMandatory(e){if(e.sequencingRules&&e.sequencingRules.preConditionRules)for(const t of e.sequencingRules.preConditionRules)if("skip"===t.action&&t.conditions&&0===t.conditions.length)return!1;return!0===e.mandatory}isCompleted(e){return"completed"===e.completionStatus||"passed"===e.completionStatus||"passed"===e.successStatus}isAvailableForChoice(e){return e.isVisible&&!e.isHiddenFromChoice&&e.isAvailable&&(!e.sequencingControls||e.sequencingControls.choice)}getAncestors(e){const t=[];let i=e.parent;for(;i;)t.push(i),i=i.parent;return t}getPathToRoot(e){const t=[e];let i=e.parent;for(;i;)t.push(i),i=i.parent;return t}isLeaf(e){return 0===e.children.length}isCluster(e){return e.children.length>0}getDepth(e){let t=0,i=e.parent;for(;i;)t++,i=i.parent;return t}}class oe{constructor(e,t){this.activityTree=e,this.treeQueries=t}validateChoice(e,t,i={}){if(!this.treeQueries.isInTree(t))return{valid:!1,exception:"SB.2.9-2"};if(t===this.activityTree.root)return{valid:!1,exception:"SB.2.9-3"};const s=this.validatePathToRoot(t);if(!s.valid)return s;if(i.checkAvailability&&!t.isAvailable)return{valid:!1,exception:"SB.2.9-7"};if(!e)return{valid:!0,exception:null};const r=this.validateChoiceExit(e,t);if(!r.valid)return r;const n=this.validateAncestorConstraints(e,t);return n.valid?{valid:!0,exception:null}:n}validatePathToRoot(e){let t=e;for(;t;){if(t.isHiddenFromChoice)return{valid:!1,exception:"SB.2.9-4"};if(t.parent&&!t.parent.sequencingControls.choice)return{valid:!1,exception:"SB.2.9-5"};if(t.parent&&t.parent.sequencingControls.preventActivation&&0===e.attemptCount&&!e.isActive)return{valid:!1,exception:"SB.2.9-6"};t=t.parent}return{valid:!0,exception:null}}validateChoiceExit(e,t){let i=e.parent;for(;i;){if(i.isActive&&!i.sequencingControls.choiceExit){if(!this.treeQueries.isAncestorOf(i,t))return{valid:!1,exception:"SB.2.9-8"};break}i=i.parent}return{valid:!0,exception:null}}validateAncestorConstraints(e,t){let i=t.parent;for(;i;){const s=this.validateConstraintsAtLevel(i,e,t);if(!s.valid)return s;i=i.parent}return{valid:!0,exception:null}}validateConstraintsAtLevel(e,t,i){const s=this.treeQueries.findChildInPath(e,i),r=this.treeQueries.findChildInPath(e,t);if(!s||!r)return{valid:!0,exception:null};const n=e.children,o=n.indexOf(s),a=n.indexOf(r);if(-1===o||-1===a)return{valid:!0,exception:null};if(e.sequencingControls.forwardOnly&&a>o)return{valid:!1,exception:"SB.2.9-5"};if(o>a)for(let e=a+1;o>e;e++){const t=n[e];if(t&&this.treeQueries.isMandatory(t)&&!this.treeQueries.isCompleted(t))return{valid:!1,exception:"SB.2.9-6"}}if(e.sequencingControls.constrainChoice){if(o>a+1)return{valid:!1,exception:"SB.2.9-7"};if(a>o&&"completed"!==i.completionStatus&&"passed"!==i.completionStatus)return{valid:!1,exception:"SB.2.9-7"}}return e.sequencingControls.preventActivation&&0===i.attemptCount&&!i.isActive?{valid:!1,exception:"SB.2.9-6"}:{valid:!0,exception:null}}checkForwardOnlyViolation(e){let t=e.parent;for(;t;){if(t.sequencingControls.forwardOnly)return{valid:!1,exception:"SB.2.9-5"};t=t.parent}return{valid:!0,exception:null}}isAvailableForChoice(e){return this.treeQueries.isAvailableForChoice(e)}validateFlowConstraints(e,t){const i=[];for(const s of t)this.meetsFlowConstraints(s,e)&&i.push(s);return{valid:i.length>0,validChildren:i}}meetsFlowConstraints(e,t){return!(!e.isAvailable||e.isHiddenFromChoice)&&(!t.sequencingControls.constrainChoice||this.validateConstrainChoiceForFlow(e,t))}validateConstrainChoiceForFlow(e,t){if(!t.sequencingControls||!t.sequencingControls.constrainChoice)return!0;const i=t.children;if(!i||0===i.length)return!0;const s=i.indexOf(e);if(-1===s)return!1;const r=this.treeQueries.getCurrentInParent(t);if(!r)return this.isAvailableForChoice(e);const n=i.indexOf(r);return-1===n||(t.sequencingControls.flow?t.sequencingControls.forwardOnly&&n>s?"completed"===e.completionStatus||"passed"===e.completionStatus:n>s?n>s&&("completed"===e.completionStatus||"passed"===e.completionStatus)&&this.isAvailableForChoice(e):(s===n||s===n+1)&&this.isAvailableForChoice(e):this.isAvailableForChoice(e)&&("completed"===e.completionStatus||"unknown"===e.completionStatus||"incomplete"===e.completionStatus))}validateTraversalConstraints(e){let t=!0,i=!0;return e.parent?.sequencingControls.constrainChoice&&(t=this.evaluateConstrainChoiceForTraversal(e)),e.sequencingControls&&e.sequencingControls.stopForwardTraversal&&(i=!1),e.parent?.sequencingControls.forwardOnly&&(i=this.evaluateForwardOnlyForChoice(e)),{canTraverse:t,canTraverseInto:i}}evaluateConstrainChoiceForTraversal(e){if(!e.parent)return!0;let t=e.parent;for(;t;){if(t.sequencingControls&&t.sequencingControls.constrainChoice){const i=t.children,s=this.treeQueries.findChildInPath(t,e);if(s){const r=i.indexOf(s),n=this.treeQueries.getCurrentInParent(t);if(n){const s=i.indexOf(n);if(-1!==s&&-1!==r){if(r>s)for(let e=s+1;r>e;e++){const t=i[e];if(t&&this.treeQueries.isMandatory(t)&&!this.treeQueries.isCompleted(t))return!1}if(t.sequencingControls.forwardOnly&&s>r&&!this.treeQueries.isCompleted(e))return!1}}}}t=t.parent}return this.isAvailableForChoice(e)}evaluateForwardOnlyForChoice(e){if(!e.parent)return!0;const t=e.parent;if(!t.sequencingControls||!t.sequencingControls.forwardOnly)return!0;const i=t.children;if(!i||0===i.length)return!0;const s=i.indexOf(e);if(-1===s)return!1;const r=this.treeQueries.getCurrentInParent(t);if(!r)return this.isAvailableForChoice(e);const n=i.indexOf(r);return-1===n||(n>s?!("completed"!==e.completionStatus&&"passed"!==e.completionStatus||!e.sequencingControls||!e.sequencingControls.choice):this.isAvailableForChoice(e))}hasTimeBoundaryViolation(e,t){if(e.beginTimeLimit)try{if(new Date(e.beginTimeLimit)>t)return!0}catch{}if(e.endTimeLimit)try{if(t>new Date(e.endTimeLimit))return!0}catch{}return!1}hasAttemptLimitViolation(e){return!(!e.attemptLimit||e.attemptLimit>e.attemptCount)}}var ae=(e=>(e.START="start",e.RESUME_ALL="resumeAll",e.CONTINUE="continue",e.PREVIOUS="previous",e.CHOICE="choice",e.JUMP="jump",e.EXIT="exit",e.EXIT_PARENT="exitParent",e.EXIT_ALL="exitAll",e.ABANDON="abandon",e.ABANDON_ALL="abandonAll",e.SUSPEND_ALL="suspendAll",e.RETRY="retry",e.RETRY_ALL="retryAll",e))(ae||{}),ce=(e=>(e.DELIVER="deliver",e.DO_NOT_DELIVER="doNotDeliver",e))(ce||{});class le{deliveryRequest;targetActivity;exception;endSequencingSession;constructor(e="doNotDeliver",t=null,i=null,s=!1){this.deliveryRequest=e,this.targetActivity=t,this.exception=i,this.endSequencingSession=s}}class ue{identifiedActivity;deliverable;exception;endSequencingSession;constructor(e,t,i=null,s=!1){this.identifiedActivity=e,this.deliverable=t,this.exception=i,this.endSequencingSession=s}}class de{activity;exception;constructor(e,t=null){this.activity=e,this.exception=t}}var he=(e=>(e.FORWARD="forward",e.BACKWARD="backward",e))(he||{});class me{now;getAttemptElapsedSecondsHook;constructor(e={}){this.now=e.now||(()=>new Date),this.getAttemptElapsedSecondsHook=e.getAttemptElapsedSecondsHook||null}checkSequencingRules(e,t){for(const i of t)if(this.checkRuleSubprocess(e,i))return i.action;return null}checkRuleSubprocess(e,t){if(0===t.conditions.length)return!0;const i=t.conditionCombination;return"all"===i||i===ee.AND?t.conditions.every(t=>t.evaluate(e)):("any"===i||i===ee.OR)&&t.conditions.some(t=>t.evaluate(e))}evaluateExitRules(e){const t=this.checkSequencingRules(e,e.sequencingRules.exitConditionRules);return t===te.EXIT||t===te.EXIT_PARENT||t===te.EXIT_ALL?t:null}evaluatePostConditionAction(e){const t=this.checkSequencingRules(e,e.sequencingRules.postConditionRules);return t&&[te.EXIT_PARENT,te.EXIT_ALL,te.RETRY,te.RETRY_ALL,te.CONTINUE,te.PREVIOUS,te.STOP_FORWARD_TRAVERSAL].includes(t)?t:null}evaluatePostConditions(e){const t=this.evaluatePostConditionAction(e);if(!t)return{sequencingRequest:null,terminationRequest:null};switch(t){case te.EXIT_PARENT:return{sequencingRequest:null,terminationRequest:ae.EXIT_PARENT};case te.EXIT_ALL:return{sequencingRequest:null,terminationRequest:ae.EXIT_ALL};case te.RETRY:return{sequencingRequest:ae.RETRY,terminationRequest:null};case te.RETRY_ALL:return{sequencingRequest:ae.RETRY,terminationRequest:ae.EXIT_ALL};case te.CONTINUE:return{sequencingRequest:ae.CONTINUE,terminationRequest:null};case te.PREVIOUS:return{sequencingRequest:ae.PREVIOUS,terminationRequest:null};case te.STOP_FORWARD_TRAVERSAL:return e.sequencingControls.stopForwardTraversal=!0,{sequencingRequest:null,terminationRequest:null};default:return{sequencingRequest:null,terminationRequest:null}}}checkLimitConditions(e){if(null!==e.attemptLimit&&e.attemptCount>=e.attemptLimit)return!0;if(null!==e.attemptAbsoluteDurationLimit){const t=this.parseDuration(e.attemptAbsoluteDurationLimit);if(t>0&&this.parseDuration(e.attemptExperiencedDuration)>=t)return!0}if(null!==e.activityAbsoluteDurationLimit){const t=this.parseDuration(e.activityAbsoluteDurationLimit);if(t>0&&this.parseDuration(e.activityExperiencedDuration)>=t)return!0}return!1}parseDuration(e){if(!e||"string"!=typeof e)return 0;const t=e.match(/^P(?:(\d+(?:\.\d+)?)Y)?(?:(\d+(?:\.\d+)?)M)?(?:(\d+(?:\.\d+)?)W)?(?:(\d+(?:\.\d+)?)D)?(?:T(?:(\d+(?:\.\d+)?)H)?(?:(\d+(?:\.\d+)?)M)?(?:(\d+(?:\.\d+)?)S)?)?$/);if(!t||"P"===e||e.endsWith("T"))return 0;let i=0;return i+=315576e5*parseFloat(t[1]||"0"),i+=30.44*24*parseFloat(t[2]||"0")*36e5,i+=6048e5*parseFloat(t[3]||"0"),i+=864e5*parseFloat(t[4]||"0"),i+=36e5*parseFloat(t[5]||"0"),i+=6e4*parseFloat(t[6]||"0"),i+=1e3*parseFloat(t[7]||"0"),i}getElapsedSeconds(e){if(this.getAttemptElapsedSecondsHook)try{return this.getAttemptElapsedSecondsHook(e)||0}catch{return 0}if(e.attemptAbsoluteStartTime){const t=new Date(e.attemptAbsoluteStartTime).getTime(),i=this.now().getTime();if(!Number.isNaN(t)&&i>t)return Math.max(0,(i-t)/1e3)}return 0}isTimeLimitExceeded(e){let t=e.timeLimitDuration;if(!t&&e.attemptAbsoluteDurationLimit&&(t=e.attemptAbsoluteDurationLimit),!t)return!1;const s=i(t,k);return s>0&&this.getElapsedSeconds(e)>s}isOutsideAvailableTimeRange(e){const t=this.now();if(e.beginTimeLimit)try{const i=new Date(e.beginTimeLimit);if(!Number.isNaN(i.getTime())&&i>t)return!0}catch{}if(e.endTimeLimit)try{const i=new Date(e.endTimeLimit);if(!Number.isNaN(i.getTime())&&t>i)return!0}catch{}return!1}canDeliverActivity(e){if(this.checkLimitConditions(e))return{canDeliver:!1,wasSkipped:!1};const t=this.checkSequencingRules(e,e.sequencingRules.preConditionRules);return{canDeliver:t!==te.SKIP&&t!==te.DISABLED,wasSkipped:t===te.SKIP}}}var pe=(e=>(e.NEVER="never",e.ONCE="once",e.ON_EACH_NEW_ATTEMPT="onEachNewAttempt",e))(pe||{}),ve=(e=>(e.NEVER="never",e.ONCE="once",e.ON_EACH_NEW_ATTEMPT="onEachNewAttempt",e))(ve||{});class ge extends a{_enabled=!0;_choice=!0;_choiceExit=!0;_flow=!0;_forwardOnly=!1;_useCurrentAttemptObjectiveInfo=!0;_useCurrentAttemptProgressInfo=!0;_preventActivation=!1;_constrainChoice=!1;_stopForwardTraversal=!1;_rollupObjectiveSatisfied=!0;_rollupProgressCompletion=!0;_objectiveMeasureWeight=1;_selectionTiming="never";_selectCount=null;_selectionCountStatus=!1;_randomizeChildren=!1;_randomizationTiming="never";_reorderChildren=!1;_completionSetByContent=!1;_objectiveSetByContent=!1;_tracked=!0;constructor(){super("sequencingControls")}reset(){this._initialized=!1,this._enabled=!0,this._choice=!0,this._choiceExit=!0,this._flow=!0,this._forwardOnly=!1,this._useCurrentAttemptObjectiveInfo=!0,this._useCurrentAttemptProgressInfo=!0,this._preventActivation=!1,this._constrainChoice=!1,this._stopForwardTraversal=!1,this._rollupObjectiveSatisfied=!0,this._rollupProgressCompletion=!0,this._objectiveMeasureWeight=1,this._selectionTiming="never",this._selectCount=null,this._selectionCountStatus=!1,this._randomizeChildren=!1,this._randomizationTiming="never",this._reorderChildren=!1,this._completionSetByContent=!1,this._objectiveSetByContent=!1,this._tracked=!0}get enabled(){return this._enabled}set enabled(e){this._enabled=e}get choice(){return this._choice}set choice(e){this._choice=e}get choiceExit(){return this._choiceExit}set choiceExit(e){this._choiceExit=e}get flow(){return this._flow}set flow(e){this._flow=e}get forwardOnly(){return this._forwardOnly}set forwardOnly(e){this._forwardOnly=e}get useCurrentAttemptObjectiveInfo(){return this._useCurrentAttemptObjectiveInfo}set useCurrentAttemptObjectiveInfo(e){this._useCurrentAttemptObjectiveInfo=e}get useCurrentAttemptProgressInfo(){return this._useCurrentAttemptProgressInfo}set useCurrentAttemptProgressInfo(e){this._useCurrentAttemptProgressInfo=e}get preventActivation(){return this._preventActivation}set preventActivation(e){this._preventActivation=e}get constrainChoice(){return this._constrainChoice}set constrainChoice(e){this._constrainChoice=e}get stopForwardTraversal(){return this._stopForwardTraversal}set stopForwardTraversal(e){this._stopForwardTraversal=e}get rollupObjectiveSatisfied(){return this._rollupObjectiveSatisfied}set rollupObjectiveSatisfied(e){this._rollupObjectiveSatisfied=e}get rollupProgressCompletion(){return this._rollupProgressCompletion}set rollupProgressCompletion(e){this._rollupProgressCompletion=e}get objectiveMeasureWeight(){return this._objectiveMeasureWeight}set objectiveMeasureWeight(e){0>e||(this._objectiveMeasureWeight=e)}isChoiceNavigationAllowed(){return this._enabled&&!this._constrainChoice}isFlowNavigationAllowed(){return this._enabled&&this._flow}isForwardNavigationAllowed(){return this._enabled&&this._flow}isBackwardNavigationAllowed(){return this._enabled&&this._flow&&!this._forwardOnly}get selectionTiming(){return this._selectionTiming}set selectionTiming(e){this._selectionTiming=e}get selectCount(){return this._selectCount}set selectCount(e){(null===e||e>0)&&(this._selectCount=e)}get selectionCountStatus(){return this._selectionCountStatus}set selectionCountStatus(e){this._selectionCountStatus=e}get randomizeChildren(){return this._randomizeChildren}set randomizeChildren(e){this._randomizeChildren=e}get randomizationTiming(){return this._randomizationTiming}set randomizationTiming(e){this._randomizationTiming=e}get reorderChildren(){return this._reorderChildren}set reorderChildren(e){this._reorderChildren=e}get completionSetByContent(){return this._completionSetByContent}set completionSetByContent(e){this._completionSetByContent=e}get objectiveSetByContent(){return this._objectiveSetByContent}set objectiveSetByContent(e){this._objectiveSetByContent=e}get tracked(){return this._tracked}set tracked(e){this._tracked=e}toJSON(){this.jsonString=!0;const result={enabled:this._enabled,choice:this._choice,choiceExit:this._choiceExit,flow:this._flow,forwardOnly:this._forwardOnly,useCurrentAttemptObjectiveInfo:this._useCurrentAttemptObjectiveInfo,useCurrentAttemptProgressInfo:this._useCurrentAttemptProgressInfo,preventActivation:this._preventActivation,constrainChoice:this._constrainChoice,stopForwardTraversal:this._stopForwardTraversal,rollupObjectiveSatisfied:this._rollupObjectiveSatisfied,rollupProgressCompletion:this._rollupProgressCompletion,objectiveMeasureWeight:this._objectiveMeasureWeight,selectionTiming:this._selectionTiming,selectCount:this._selectCount,selectionCountStatus:this._selectionCountStatus,randomizeChildren:this._randomizeChildren,randomizationTiming:this._randomizationTiming,reorderChildren:this._reorderChildren,completionSetByContent:this._completionSetByContent,objectiveSetByContent:this._objectiveSetByContent,tracked:this._tracked};return this.jsonString=!1,result}}class _e{static selectChildrenProcess(e){const t=e.sequencingControls,i=[...e.children];if(t.selectionTiming===pe.NEVER)return i;if(t.selectionTiming===pe.ONCE&&t.selectionCountStatus)return i;if(t.selectionTiming!==pe.ONCE&&!t.selectionCountStatus)return i;const s=t.selectCount;if(null===s||s>=i.length)return t.selectionTiming===pe.ONCE&&(t.selectionCountStatus=!0),i;const r=[],n=i.map((e,t)=>t);for(let e=0;s>e&&0!==n.length;e++){const e=Math.floor(Math.random()*n.length),t=n[e];void 0!==t&&i[t]&&r.push(i[t]),n.splice(e,1)}t.selectionTiming===pe.ONCE&&(t.selectionCountStatus=!0);for(const e of i)r.includes(e)||(e.isHiddenFromChoice=!0,e.isAvailable=!1);return r}static randomizeChildrenProcess(e){const t=e.sequencingControls,i=[...e.children];if(t.randomizationTiming===ve.NEVER)return i;if(t.randomizationTiming===ve.ONCE&&t.reorderChildren)return i;if(!t.randomizeChildren)return i;const s=[...i];for(let e=s.length-1;e>0;e--){const t=Math.floor(Math.random()*(e+1)),i=s[e],r=s[t];i&&r&&(s[e]=r,s[t]=i)}return t.randomizationTiming===ve.ONCE&&(t.reorderChildren=!0),e.children.length=0,e.children.push(...s),s}static applySelectionAndRandomization(e,t=!1){const i=e.sequencingControls;if(!t&&(e.isActive||e.isSuspended))return e.children;let s=!1,r=!1;i.selectionTiming===pe.ON_EACH_NEW_ATTEMPT?(s=t,t&&(i.selectionCountStatus=!0)):i.selectionTiming===pe.ONCE&&(s=!i.selectionCountStatus),i.randomizationTiming===ve.ON_EACH_NEW_ATTEMPT?(r=t,t&&(i.reorderChildren=!1)):i.randomizationTiming===ve.ONCE&&(r=!i.reorderChildren),s&&this.selectChildrenProcess(e),r&&this.randomizeChildrenProcess(e);const n=e.children.filter(e=>e.isAvailable);return e.setProcessedChildren(n),n}static isSelectionNeeded(e){const t=e.sequencingControls;return t.selectionTiming!==pe.NEVER&&(t.selectionTiming!==pe.ONCE||!t.selectionCountStatus)&&null!==t.selectCount&&e.children.length>t.selectCount}static isRandomizationNeeded(e){const t=e.sequencingControls;return t.randomizationTiming!==ve.NEVER&&(t.randomizationTiming!==ve.ONCE||!t.reorderChildren)&&t.randomizeChildren}}class Se{constructor(e,t){this.activityTree=e,this.ruleEngine=t}flowSubprocess(e,t){let i=e,s=!0,r=!1;for(;i;){const e=this.flowTreeTraversalSubprocess(i,t,s);if(!e.activity){let s=null;return e.exception?s=e.exception:t===he.BACKWARD?s="SB.2.1-3":r&&(s="SB.2.1-2"),new ue(i,!1,s,e.endSequencingSession)}r=e.activity.children.length>0&&0===e.activity.getAvailableChildren().length;const n=this.flowActivityTraversalSubprocess(e.activity,t===he.FORWARD,!0,t);if(n)return new ue(n,!0,null,!1);i=e.activity,s=!1}return new ue(null,!1,null,!1)}flowTreeTraversalSubprocess(e,t,i=!1){return t===he.FORWARD?this.traverseForward(e,i):this.traverseBackward(e)}traverseForward(e,t){if(t&&this.isActivityLastOverall(e))return this.activityTree.root&&this.terminateDescendentAttempts(this.activityTree.root),{activity:null,endSequencingSession:!0};if(!t){this.ensureSelectionAndRandomization(e);const t=e.getAvailableChildren();if(t.length>0)return{activity:t[0]||null,endSequencingSession:!1}}let i=e;for(;i;){const e=this.activityTree.getNextSibling(i);if(e)return{activity:e,endSequencingSession:!1};i=i.parent}return this.activityTree.root&&this.terminateDescendentAttempts(this.activityTree.root),{activity:null,endSequencingSession:!0}}traverseBackward(e){if(e.parent&&e.parent.sequencingControls.forwardOnly)return{activity:null,endSequencingSession:!1,exception:"SB.2.1-4"};const t=this.activityTree.getPreviousSibling(e);if(t)return{activity:this.getLastDescendant(t),endSequencingSession:!1};let i=e,s=0;for(;i&&i.parent;){if(++s>1e4)throw Error("Infinite loop detected in backward traversal");const e=this.activityTree.getPreviousSibling(i.parent);if(e)return{activity:this.getLastDescendant(e),endSequencingSession:!1};i=i.parent}return{activity:null,endSequencingSession:!1}}getLastDescendant(e){let t=e,i=0;for(;;){if(++i>1e4)throw Error("Infinite loop detected while getting last descendant");this.ensureSelectionAndRandomization(t);const e=t.getAvailableChildren();if(0===e.length)break;const s=e[e.length-1];if(!s)break;t=s}return t}flowActivityTraversalSubprocess(e,t,i,mode){const s=e.parent;if(s&&!s.sequencingControls.flow)return null;if(!e.isAvailable)return null;if(mode===he.FORWARD&&e.sequencingControls.stopForwardTraversal)return null;if(i){this.ensureSelectionAndRandomization(e);const t=e.getAvailableChildren();for(const e of t){const t=this.flowActivityTraversalSubprocess(e,mode===he.FORWARD,!0,mode);if(t)return t}}return 0===e.children.length&&this.checkActivityProcess(e)?e:null}checkActivityProcess(e){if(!e.isAvailable)return!1;if(0===e.children.length&&!e.isVisible)return!1;if(this.ruleEngine.checkLimitConditions(e))return!1;const t=this.ruleEngine.canDeliverActivity(e);return e.wasSkipped=t.wasSkipped,t.canDeliver}ensureSelectionAndRandomization(e){e.getAvailableChildren()===e.children&&(_e.isSelectionNeeded(e)||_e.isRandomizationNeeded(e))&&_e.applySelectionAndRandomization(e,e.isNewAttempt)}isActivityLastOverall(e){if(e.children.length>0)return!1;let t=e;for(;t;){if(this.activityTree.getNextSibling(t))return!1;t=t.parent}return!0}terminateDescendentAttempts(e){e.isActive=!1;for(const t of e.children)this.terminateDescendentAttempts(t)}findFirstDeliverableActivity(e){if(0===e.children.length)return this.checkActivityProcess(e)?e:null;this.ensureSelectionAndRandomization(e);const t=e.getAvailableChildren();for(const e of t){const t=this.flowActivityTraversalSubprocess(e,!0,!0,he.FORWARD);if(t)return t}return null}canDeliver(e){return this.checkActivityProcess(e)}}class fe{constructor(e,t){this.activityTree=e,this.traversalService=t}handleStart(){const result=new le;if(!this.activityTree.root)return result.exception="SB.2.5-1",result;if(this.activityTree.currentActivity)return result.exception="SB.2.5-2",result;const e=this.traversalService.findFirstDeliverableActivity(this.activityTree.root);return e?(result.deliveryRequest=ce.DELIVER,result.targetActivity=e,result):(result.exception="SB.2.5-3",result)}handleResumeAll(){const result=new le;return this.activityTree.suspendedActivity?this.activityTree.currentActivity?(result.exception="SB.2.6-2",result):(result.deliveryRequest=ce.DELIVER,result.targetActivity=this.activityTree.suspendedActivity,result):(result.exception="SB.2.6-1",result)}handleContinue(e){const result=new le;if(e.isActive)return result.exception="SB.2.7-1",result;if(e.parent&&!e.parent.sequencingControls.flow)return result.exception="SB.2.7-2",result;const t=this.traversalService.flowSubprocess(e,he.FORWARD);return result.endSequencingSession=t.endSequencingSession,t.deliverable&&t.identifiedActivity?(result.deliveryRequest=ce.DELIVER,result.targetActivity=t.identifiedActivity,result):(result.exception=t.exception||"SB.2.7-2",result)}handlePrevious(e){const result=new le;if(e.isActive)return result.exception="SB.2.8-1",result;if(e.parent&&!e.parent.sequencingControls.flow)return result.exception="SB.2.8-2",result;const t=this.checkForwardOnlyViolation(e);if(t)return result.exception=t,result;const i=this.traversalService.flowSubprocess(e,he.BACKWARD);return i.deliverable&&i.identifiedActivity?(result.deliveryRequest=ce.DELIVER,result.targetActivity=i.identifiedActivity,result):(result.exception=i.exception||"SB.2.8-3",result)}checkForwardOnlyViolation(e){let t=e.parent;for(;t;){if(t.sequencingControls.forwardOnly)return"SB.2.9-5";t=t.parent}return null}}class ye{constructor(e,t,i,s){this.activityTree=e,this.constraintValidator=t,this.traversalService=i,this.treeQueries=s}handleChoice(e,t){const result=new le,i=this.activityTree.getActivity(e);if(!i)return result.exception="SB.2.9-1",result;if(t&&t.isActive)return result.exception="SB.2.9-6",result;const s=this.constraintValidator.validateChoice(t,i,{checkAvailability:!0});if(!s.valid)return result.exception=s.exception,result;const r=this.treeQueries.findCommonAncestor(t,i);t&&this.terminateDescendentAttemptsProcess(r||this.activityTree.root);const n=this.buildActivityPath(i,r);for(const e of n)if(!this.traversalService.checkActivityProcess(e))return result;let o=i;if(i.children.length>0){const e=this.choiceFlowSubprocess(i);if(!e)return result.exception="SB.2.9-7",result;o=e}return result.deliveryRequest=ce.DELIVER,result.targetActivity=o,result}handleJump(e){const result=new le,t=this.activityTree.getActivity(e);return t?this.treeQueries.isInTree(t)?t.isAvailable?(result.deliveryRequest=ce.DELIVER,result.targetActivity=t,result):(result.exception="SB.2.13-3",result):(result.exception="SB.2.13-2",result):(result.exception="SB.2.13-1",result)}getAvailableChoices(){const e=this.activityTree.getAllActivities(),t=this.activityTree.currentActivity,i=[];for(const s of e)s!==this.activityTree.root&&!s.isHiddenFromChoice&&s.isAvailable&&s.isVisible&&(s.parent&&!s.parent.sequencingControls.choice||this.constraintValidator.validateChoice(t,s).valid&&i.push(s));return i}buildActivityPath(e,t){const i=[];let s=e;for(;s&&s!==t;)i.unshift(s),s=s.parent;return i}choiceFlowSubprocess(e){return 0===e.children.length?e:this.choiceFlowTreeTraversal(e)}choiceFlowTreeTraversal(e){this.traversalService.ensureSelectionAndRandomization(e);const t=e.getAvailableChildren(),i=this.constraintValidator.validateFlowConstraints(e,t);if(!i.valid)return null;for(const e of i.validChildren){const t=this.enhancedChoiceTraversal(e);if(t.activity)return t.activity}return null}enhancedChoiceTraversal(e,t=!1){if(t&&e===this.activityTree.root)return new de(null,"SB.2.4-3");if(!e.isAvailable)return new de(null,null);if(e.isHiddenFromChoice)return new de(null,null);if(e.sequencingControls&&e.sequencingControls.stopForwardTraversal)return new de(null,"SB.2.4-1");const i=this.constraintValidator.validateTraversalConstraints(e);if(!i.canTraverse)return new de(null,null);if(0===e.children.length)return this.traversalService.checkActivityProcess(e)?new de(e,null):new de(null,null);if(e.parent?.sequencingControls.constrainChoice&&!i.canTraverseInto)return new de(null,"SB.2.4-2");if(i.canTraverseInto){const t=this.choiceFlowTreeTraversal(e);return new de(t,null)}return new de(null,null)}terminateDescendentAttemptsProcess(e){e.isActive=!1;for(const t of e.children)this.terminateDescendentAttemptsProcess(t)}}class be{constructor(e,t){this.activityTree=e,this.ruleEngine=t}handleExit(e){const result=new le;return e.parent?e.parent.sequencingControls.choiceExit?(this.terminateDescendentAttempts(e),result):(result.exception="SB.2.11-2",result):(result.exception="SB.2.11-1",result)}handleExitAll(){const result=new le;return this.activityTree.root&&this.terminateDescendentAttempts(this.activityTree.root),result}handleAbandon(e){const result=new le;return e.isActive=!1,this.activityTree.currentActivity=e.parent,result}handleAbandonAll(){const result=new le;return this.activityTree.currentActivity=null,result}handleSuspendAll(e){const result=new le;return e===this.activityTree.root?(result.exception="SB.2.15-1",result):(e.isSuspended=!0,this.activityTree.suspendedActivity=e,this.activityTree.currentActivity=null,result)}terminateDescendentAttempts(e,t=!1){let i=null;t||(i=this.ruleEngine.evaluateExitRules(e)),e.isActive=!1;for(const i of e.children)this.terminateDescendentAttempts(i,t);i&&!t&&this.processDeferredExitAction(i,e)}processDeferredExitAction(e,t){switch(e){case te.EXIT:break;case te.EXIT_PARENT:t.parent&&t.parent.isActive&&this.terminateDescendentAttempts(t.parent,!0);break;case te.EXIT_ALL:this.activityTree.root&&this.activityTree.root!==t&&this.activityTree.getAllActivities().some(e=>e.isActive)&&this.terminateDescendentAttempts(this.activityTree.root,!0)}}}class Ce{constructor(e,t){this.activityTree=e,this.traversalService=t}handleRetry(e){const result=new le;if(e.isActive||e.isSuspended)return result.exception="SB.2.10-2",result;if(e.children.length>0){this.traversalService.ensureSelectionAndRandomization(e);const t=e.getAvailableChildren();let i=null;for(const e of t)if(i=this.traversalService.flowActivityTraversalSubprocess(e,!0,!0,he.FORWARD),i)break;return i?(result.deliveryRequest=ce.DELIVER,result.targetActivity=i,result):(result.exception="SB.2.10-3",result)}return this.terminateDescendentAttempts(e),result.deliveryRequest=ce.DELIVER,result.targetActivity=e,result}handleRetryAll(){if(this.activityTree.currentActivity=null,!this.activityTree.root){const e=new le;return e.exception="SB.2.10-1",e}const e=this.traversalService.findFirstDeliverableActivity(this.activityTree.root),result=new le;return e?(result.deliveryRequest=ce.DELIVER,result.targetActivity=e,result):(result.exception="SB.2.10-3",result)}terminateDescendentAttempts(e){e.isActive=!1;for(const t of e.children)this.terminateDescendentAttempts(t)}}class Ae{activityTree;treeQueries;constraintValidator;ruleEngine;traversalService;flowHandler;choiceHandler;exitHandler;retryHandler;_now;get now(){return this._now}set now(e){this._now=e,ie.setNowProvider(e),this.ruleEngine=new me({now:e,getAttemptElapsedSecondsHook:this._getAttemptElapsedSecondsHook}),this.traversalService=new Se(this.activityTree,this.ruleEngine),this.flowHandler=new fe(this.activityTree,this.traversalService),this.choiceHandler=new ye(this.activityTree,this.constraintValidator,this.traversalService,this.treeQueries),this.retryHandler=new Ce(this.activityTree,this.traversalService)}_getAttemptElapsedSecondsHook;get getAttemptElapsedSecondsHook(){return this._getAttemptElapsedSecondsHook}set getAttemptElapsedSecondsHook(e){this._getAttemptElapsedSecondsHook=e,ie.setElapsedSecondsHook(e),this.ruleEngine=new me({now:this._now,getAttemptElapsedSecondsHook:e}),this.traversalService=new Se(this.activityTree,this.ruleEngine),this.flowHandler=new fe(this.activityTree,this.traversalService),this.choiceHandler=new ye(this.activityTree,this.constraintValidator,this.traversalService,this.treeQueries),this.retryHandler=new Ce(this.activityTree,this.traversalService)}constructor(e,t,i,s=null,r){this.activityTree=e,this._now=r?.now||(()=>new Date),this._getAttemptElapsedSecondsHook=r?.getAttemptElapsedSeconds,this.treeQueries=new ne(e),this.ruleEngine=new me({now:this._now,getAttemptElapsedSecondsHook:this._getAttemptElapsedSecondsHook}),this.constraintValidator=new oe(e,this.treeQueries),this.traversalService=new Se(e,this.ruleEngine),this.flowHandler=new fe(e,this.traversalService),this.choiceHandler=new ye(e,this.constraintValidator,this.traversalService,this.treeQueries),this.exitHandler=new be(e,this.ruleEngine),this.retryHandler=new Ce(e,this.traversalService)}sequencingRequestProcess(request,e=null){const t=this.activityTree.currentActivity;switch(request){case ae.START:return this.flowHandler.handleStart();case ae.RESUME_ALL:return this.flowHandler.handleResumeAll();case ae.CONTINUE:return t?this.flowHandler.handleContinue(t):new le(ce.DO_NOT_DELIVER,null,"SB.2.12-1");case ae.PREVIOUS:return t?this.flowHandler.handlePrevious(t):new le(ce.DO_NOT_DELIVER,null,"SB.2.12-1");case ae.CHOICE:return e?this.choiceHandler.handleChoice(e,t):new le(ce.DO_NOT_DELIVER,null,"SB.2.12-5");case ae.JUMP:return e?this.choiceHandler.handleJump(e):new le(ce.DO_NOT_DELIVER,null,"SB.2.12-5");case ae.EXIT:return t?this.exitHandler.handleExit(t):new le(ce.DO_NOT_DELIVER,null,"SB.2.12-1");case ae.EXIT_ALL:return t?this.exitHandler.handleExitAll():new le(ce.DO_NOT_DELIVER,null,"SB.2.12-1");case ae.ABANDON:return t?this.exitHandler.handleAbandon(t):new le(ce.DO_NOT_DELIVER,null,"SB.2.12-1");case ae.ABANDON_ALL:return t?this.exitHandler.handleAbandonAll():new le(ce.DO_NOT_DELIVER,null,"SB.2.12-1");case ae.SUSPEND_ALL:return t?this.exitHandler.handleSuspendAll(t):new le(ce.DO_NOT_DELIVER,null,"SB.2.12-1");case ae.RETRY:return t?this.retryHandler.handleRetry(t):new le(ce.DO_NOT_DELIVER,null,"SB.2.12-1");case ae.RETRY_ALL:return this.retryHandler.handleRetryAll();default:return new le(ce.DO_NOT_DELIVER,null,"SB.2.12-6")}}evaluatePostConditionRules(e){return this.ruleEngine.evaluatePostConditions(e)}canActivityBeDelivered(e){return this.traversalService.canDeliver(e)}validateNavigationRequest(request,e=null,t=null){if(!Object.values(ae).includes(request))return{valid:!1,exception:"SB.2.12-6"};switch(request){case ae.CONTINUE:case ae.PREVIOUS:if(!t)return{valid:!1,exception:"SB.2.12-1"};if(t.isActive)return{valid:!1,exception:request===ae.CONTINUE?"SB.2.7-1":"SB.2.8-1"};if(t.parent&&!t.parent.sequencingControls.flow)return{valid:!1,exception:request===ae.CONTINUE?"SB.2.7-2":"SB.2.8-2"};if(request===ae.PREVIOUS){const e=this.constraintValidator.checkForwardOnlyViolation(t);if(!e.valid)return e}break;case ae.CHOICE:{if(!e)return{valid:!1,exception:"SB.2.12-5"};const i=this.activityTree.getActivity(e);if(!i)return{valid:!1,exception:"SB.2.9-1"};const s=this.constraintValidator.validateChoice(t,i,{checkAvailability:!0});if(!s.valid)return s;if(!this.traversalService.canDeliver(i))return{valid:!1,exception:"SB.2.9-6"};if(this.ruleEngine.checkSequencingRules(i,i.sequencingRules.preConditionRules)===te.HIDE_FROM_CHOICE)return{valid:!1,exception:"SB.2.9-4"};break}case ae.JUMP:if(!e)return{valid:!1,exception:"SB.2.12-5"};if(!this.activityTree.getActivity(e))return{valid:!1,exception:"SB.2.13-1"}}return{valid:!0,exception:null}}getAvailableChoices(){return this.choiceHandler.getAvailableChoices()}getTreeQueries(){return this.treeQueries}getConstraintValidator(){return this.constraintValidator}getRuleEngine(){return this.ruleEngine}getTraversalService(){return this.traversalService}}class Ee{eventService;loggingService;callbacks;currentDeliveredActivity=null;pendingDelivery=null;constructor(e,t,i={}){this.eventService=e,this.loggingService=t,this.callbacks=i}processSequencingResult(result){if(result.exception)return this.loggingService.error("Sequencing error: "+result.exception),void this.callbacks.onSequencingError?.(result.exception);result.deliveryRequest===ce.DELIVER&&result.targetActivity?this.deliverActivity(result.targetActivity):this.loggingService.info("Sequencing completed with no delivery request"),this.callbacks.onSequencingComplete?.(result)}deliverActivity(e){this.currentDeliveredActivity!==e?(this.currentDeliveredActivity&&this.unloadActivity(this.currentDeliveredActivity),this.pendingDelivery=e,this.loggingService.info(`Delivering activity: ${e.id} - ${e.title}`),this.eventService.processListeners("ActivityDelivery",e.id,e),this.callbacks.onDeliverActivity?.(e),this.currentDeliveredActivity=e,this.pendingDelivery=null,e.isActive=!0):this.loggingService.info("Skipping delivery - activity already delivered: "+e.id)}unloadActivity(e){this.loggingService.info(`Unloading activity: ${e.id} - ${e.title}`),this.eventService.processListeners("ActivityUnload",e.id,e),this.callbacks.onUnloadActivity?.(e),e.isActive=!1}getCurrentDeliveredActivity(){return this.currentDeliveredActivity}getPendingDelivery(){return this.pendingDelivery}updateCallbacks(e){this.callbacks={...this.callbacks,...e}}reset(){this.currentDeliveredActivity&&this.unloadActivity(this.currentDeliveredActivity),this.currentDeliveredActivity=null,this.pendingDelivery=null}}class Me{settings;error_codes;constructor(e,t){this.settings=e,this.error_codes=t}processHttpRequest(e,t,i=!1,s,r){return this._performAsyncRequest(e,t,i,s,r),{result:d,errorCode:0}}async _performAsyncRequest(e,t,i,s,r){try{const s=this.settings.requestHandler(t);let n;n=i&&"never"!==this.settings.asyncModeBeaconBehavior?await this.performBeacon(e,s):await this.performFetch(e,s);const result=await this.transformResponse(n,r);this._isSuccessResponse(n,result)?r("CommitSuccess"):r("CommitError",void 0,result.errorCode)}catch(e){s("processHttpRequest","Async request failed: "+(e instanceof Error?e.message:e+""),I.ERROR),r("CommitError")}}_prepareRequestBody(e){return{body:e instanceof Array?e.join("&"):JSON.stringify(e),contentType:e instanceof Array?"application/x-www-form-urlencoded":this.settings.commitRequestDataType}}async performFetch(e,t){if("always"===this.settings.asyncModeBeaconBehavior)return this.performBeacon(e,t);const{body:i,contentType:s}=this._prepareRequestBody(t),r={method:"POST",mode:this.settings.fetchMode,body:i,headers:{...this.settings.xhrHeaders,"Content-Type":s},keepalive:!0};return this.settings.xhrWithCredentials&&(r.credentials="include"),fetch(e,r)}async performBeacon(e,t){const{body:i,contentType:s}=this._prepareRequestBody(t),r=navigator.sendBeacon(e,new Blob([i],{type:s}));return Promise.resolve({status:r?200:0,ok:r,json:async()=>({result:r?"true":"false",errorCode:r?0:this.error_codes.GENERAL_COMMIT_FAILURE||391}),text:async()=>JSON.stringify({result:r?"true":"false",errorCode:r?0:this.error_codes.GENERAL_COMMIT_FAILURE||391})})}async transformResponse(e,t){let result;try{result="function"==typeof this.settings.responseHandler?await this.settings.responseHandler(e):await e.json()}catch(t){const i=await e.text().catch(()=>"Unable to read response text");return{result:h,errorCode:this.error_codes.GENERAL_COMMIT_FAILURE||391,errorMessage:"Failed to parse LMS response: "+(t instanceof Error?t.message:t+""),errorDetails:JSON.stringify({status:e.status,statusText:e.statusText,url:e.url,responseText:i.substring(0,500),parseError:t instanceof Error?t.message:t+""})}}return Object.hasOwnProperty.call(result,"errorCode")||(result.errorCode=this._isSuccessResponse(e,result)?0:this.error_codes.GENERAL_COMMIT_FAILURE||391),this._isSuccessResponse(e,result)||(result.errorDetails={status:e.status,statusText:e.statusText,url:e.url,...result.errorDetails}),result}_isSuccessResponse(e,result){const t=result.result;return!(200>e.status||e.status>299||!0!==t&&"true"!==t&&t!==d)}updateSettings(e){this.settings=e}}const we="{target=";function Re(e,t){const i=e[t];return void 0===i?(void 0!==console&&console.warn&&console.warn("CMIValueAccessService: Unknown error code key: "+t),e.GENERAL??0):i}class Oe{context;constructor(e){this.context=e}getUndefinedDataModelErrorCode(e){return Re(this.context.errorCodes,e?"UNDEFINED_DATA_MODEL":"GENERAL")}setCMIValue(e,t,i,s){if(!i||""===i)return t&&this.context.throwSCORMError(i,Re(this.context.errorCodes,"GENERAL_SET_FAILURE"),"The data model element was not specified"),h;this.context.setLastErrorCode("0");const r=i.split(".");let n=this.context.getDataModel(),o=h,a=!1;const c=`The data model element passed to ${e} (${i}) is not a valid SCORM data model element.`,l=this.getUndefinedDataModelErrorCode(t);for(let e=0;r.length>e;e++){if(e===r.length-1){o=this.setFinalAttribute(n,r[e],s,i,t,l,c);break}{const o=this.traverseToNextLevel(n,r,e,s,i,t,a,l,c);if(o.error)break;n=o.refObject,e=o.idx,a=o.foundFirstIndex}}return o===h&&this.context.apiLog(e,`There was an error setting the value for: ${i}, value of: ${s}`,I.WARN),o}getCMIValue(e,t,i){if(!i||""===i)return t&&this.context.throwSCORMError(i,Re(this.context.errorCodes,"GENERAL_GET_FAILURE"),"The data model element was not specified"),"";if(t&&i.endsWith("._version")&&"cmi._version"!==i)return this.context.throwSCORMError(i,Re(this.context.errorCodes,"GENERAL_GET_FAILURE"),"The _version keyword was used incorrectly"),"";const s=i.split(".");let r=this.context.getDataModel(),n=null;const o=`The data model element passed to ${e} (${i}) has not been initialized.`,a=`The data model element passed to ${e} (${i}) is not a valid SCORM data model element.`,c=this.getUndefinedDataModelErrorCode(t);for(let e=0;s.length>e;e++){n=s[e];const l=this.validateGetAttribute(r,n,i,t,c,a,e===s.length-1);if(void 0!==l.returnValue)return l.returnValue;if(l.error)return"";if(null==n){this.context.throwSCORMError(i,c,a);break}if(r=r[n],void 0===r){this.context.throwSCORMError(i,c,a);break}if(r instanceof b){const t=this.handleGetArrayAccess(r,s,e,i,o);if(t.error)return"";r=t.refObject,e=t.idx}}return null==r?(t||("_children"===n?this.context.throwSCORMError(i,Re(this.context.errorCodes,"CHILDREN_ERROR"),void 0):"_count"===n&&this.context.throwSCORMError(i,Re(this.context.errorCodes,"COUNT_ERROR"),void 0)),""):r}setFinalAttribute(e,t,i,s,r,o,a){return r&&t?.startsWith(we)?this.context.isInitialized()?(this.context.throwSCORMError(s,Re(this.context.errorCodes,"READ_ONLY_ELEMENT")),h):d:void 0!==t&&this.context.checkObjectHasProperty(e,t)?n(s,"\\.correct_responses\\.\\d+$")&&this.context.isInitialized()&&"pattern"!==t&&(this.context.validateCorrectResponse(s,i),"0"!==this.context.getLastErrorCode())?(this.context.throwSCORMError(s,Re(this.context.errorCodes,"TYPE_MISMATCH")),h):r&&"0"!==this.context.getLastErrorCode()?h:void 0===t||"__proto__"===t||"constructor"===t?(this.context.throwSCORMError(s,o,a),h):r&&"id"===t&&this.context.isInitialized()&&this.context.checkForDuplicateId(s,i)?(this.context.throwSCORMError(s,Re(this.context.errorCodes,"GENERAL_SET_FAILURE")),h):(e[t]=i,d):(this.context.throwSCORMError(s,o,a),h)}traverseToNextLevel(e,t,i,s,r,n,o,a,c){const l=t[i];if(void 0===l||!this.context.checkObjectHasProperty(e,l))return this.context.throwSCORMError(r,a,c),{refObject:e,idx:i,foundFirstIndex:o,error:!0};if(!(e=e[l]))return this.context.throwSCORMError(r,a,c),{refObject:e,idx:i,foundFirstIndex:o,error:!0};if(e instanceof b){const l=this.handleSetArrayAccess(e,t,i,s,r,n,o,a,c);return l.error?{refObject:e,idx:i,foundFirstIndex:o,error:!0}:l}return{refObject:e,idx:i,foundFirstIndex:o,error:!1}}handleSetArrayAccess(e,t,i,s,r,n,o,a,c){const l=parseInt(t[i+1]||"0",10);if(!isNaN(l)){const t=e.childArray[l];if(t)return{refObject:t,idx:i+1,foundFirstIndex:!0,error:!1};{if(l>e.childArray.length){const t=n?Re(this.context.errorCodes,"GENERAL_SET_FAILURE"):Re(this.context.errorCodes,"INVALID_SET_VALUE")||Re(this.context.errorCodes,"GENERAL_SET_FAILURE");return this.context.throwSCORMError(r,t,`Cannot set array element at index ${l}. Array indices must be sequential. Current array length is ${e.childArray.length}, expected index ${e.childArray.length}.`),{refObject:e,idx:i,foundFirstIndex:o,error:!0}}const t=this.context.getChildElement(r,s,o);return t?(e.initialized&&t.initialize(),e.childArray[l]=t,{refObject:t,idx:i+1,foundFirstIndex:!0,error:!1}):("0"===this.context.getLastErrorCode()&&this.context.throwSCORMError(r,a,c),{refObject:e,idx:i,foundFirstIndex:o,error:!0})}}return{refObject:e,idx:i,foundFirstIndex:o,error:!1}}validateGetAttribute(e,t,i,s,r,n,o){if(s){const s=t+"";if(s.startsWith(we)&&"function"==typeof e._isTargetValid){const t=s.substring(8,s.length-1);return{error:!1,returnValue:e._isTargetValid(t)}}if(void 0===t||!this.context.checkObjectHasProperty(e,t))return"_children"===t?(this.context.throwSCORMError(i,Re(this.context.errorCodes,"GENERAL_GET_FAILURE"),"The data model element does not have children"),{error:!0}):"_count"===t?(this.context.throwSCORMError(i,Re(this.context.errorCodes,"GENERAL_GET_FAILURE"),"The data model element is not a collection and therefore does not have a count"),{error:!0}):(this.context.throwSCORMError(i,r,n),{error:!0})}else if(o&&(void 0===t||!this.context.checkObjectHasProperty(e,t)))return this.context.throwSCORMError(i,r,n),{error:!0};return{error:!1}}handleGetArrayAccess(e,t,i,s,r){const n=parseInt(t[i+1]||"",10);if(!isNaN(n)){const t=e.childArray[n];return t?{refObject:t,idx:i+1,error:!1}:(this.context.throwSCORMError(s,Re(this.context.errorCodes,"VALUE_NOT_INITIALIZED"),r),{refObject:e,idx:i,error:!0})}return{refObject:e,idx:i,error:!1}}}class Te{static _instance;_logLevel=I.ERROR;_logHandler;constructor(){this._logHandler=N}static getInstance(){return Te._instance||(Te._instance=new Te),Te._instance}setLogLevel(e){this._logLevel=e}getLogLevel(){return this._logLevel}setLogHandler(e){this._logHandler=e}log(e,t){this.shouldLog(e)&&this._logHandler(e,t)}error(e){this.log(I.ERROR,e)}warn(e){this.log(I.WARN,e)}info(e){this.log(I.INFO,e)}debug(e){this.log(I.DEBUG,e)}shouldLog(e){return this.getNumericLevel(e)>=this.getNumericLevel(this._logLevel)}getNumericLevel(e){if(void 0===e)return I.NONE;if("number"==typeof e)return e;switch(e){case"1":case"DEBUG":return I.DEBUG;case"2":case"INFO":return I.INFO;case"3":case"WARN":return I.WARN;case"4":case"ERROR":default:return I.ERROR;case"5":case"NONE":return I.NONE}}}function je(){return Te.getInstance()}class Ie{_lastErrorCode="0";_lastDiagnostic="";_errorCodes;_apiLog;_getLmsErrorMessageDetails;_loggingService;constructor(e,t,i,s){this._errorCodes=e,this._apiLog=t,this._getLmsErrorMessageDetails=i,this._loggingService=s||je()}get lastErrorCode(){return this._lastErrorCode}set lastErrorCode(e){this._lastErrorCode=e}get lastDiagnostic(){return this._lastDiagnostic}throwSCORMError(e,t,i){this._lastDiagnostic=i||"",i||(i=this._getLmsErrorMessageDetails(t,!0));const s=`SCORM Error ${t}: ${i}${e?` [Element: ${e}]`:""}`;this._apiLog("throwSCORMError",t+": "+i,I.ERROR,e),this._loggingService.error(s),this._lastErrorCode=t+""}clearSCORMError(e){void 0!==e&&e!==h&&(this._lastErrorCode="0")}handleValueAccessException(e,t,i){if(t instanceof u){const s=t;this._lastErrorCode=s.errorCode+"",this._lastDiagnostic="",this._loggingService.warn(`Validation Error ${s.errorCode}: ${s.message} [Element: ${e}]`),i=h}else if(t instanceof Error){const s=t.constructor.name;this._loggingService.error(`${s}: ${t.message} [Element: ${e}]\n${t.stack||""}`),this.throwSCORMError(e,this._errorCodes.GENERAL,`${s}: ${t.message}`),i=h}else{this._loggingService.error(`Unknown error occurred while accessing [Element: ${e}]`);try{const e=JSON.stringify(t);this._loggingService.error("Error details: "+e)}catch(e){this._loggingService.error("Could not stringify error object for details")}this.throwSCORMError(e,this._errorCodes.GENERAL,"Unknown error"),i=h}return i}get errorCodes(){return this._errorCodes}}class qe{listenerMap=new Map;listenerCount=0;apiLog;constructor(e){this.apiLog=e}parseListenerName(e){if(!e)return null;const t=e.split("."),i=t[0];let s=null;return t.length>1&&(s=e.replace(i+".","")),{functionName:i??e,CMIElement:s}}on(e,t){if(!t)return;const i=e.split(" ");for(const e of i){const i=this.parseListenerName(e);if(!i)continue;const{functionName:s,CMIElement:r}=i,n=this.listenerMap.get(s)??[];n.push({functionName:s,CMIElement:r,callback:t}),this.listenerMap.set(s,n),this.listenerCount++,this.apiLog("on","Added event listener: "+this.listenerCount,I.INFO,s)}}off(e,t){if(!t)return;const i=e.split(" ");for(const e of i){const i=this.parseListenerName(e);if(!i)continue;const{functionName:s,CMIElement:r}=i,n=this.listenerMap.get(s);if(!n)continue;const o=n.findIndex(e=>e.CMIElement===r&&e.callback===t);-1!==o&&(n.splice(o,1),this.listenerCount--,0===n.length&&this.listenerMap.delete(s),this.apiLog("off","Removed event listener: "+this.listenerCount,I.INFO,s))}}clear(e){const t=e.split(" ");for(const e of t){const t=this.parseListenerName(e);if(!t)continue;const{functionName:i,CMIElement:s}=t;if(this.listenerMap.has(i)){const e=this.listenerMap.get(i),t=null===s?[]:e.filter(e=>e.CMIElement!==s);this.listenerCount-=e.length-t.length,0===t.length?this.listenerMap.delete(i):this.listenerMap.set(i,t)}}}processListeners(e,t,i){this.apiLog(e,i,I.INFO,t);const s=this.listenerMap.get(e);if(s)for(const r of s){const s=!!r.CMIElement;let n=!1;if(t&&r.CMIElement)if(r.CMIElement.endsWith("*")){const e=r.CMIElement.slice(0,-1);n=t.startsWith(e)}else n=r.CMIElement===t;s&&!n||(this.apiLog("processListeners","Processing listener: "+r.functionName,I.DEBUG,t),e.startsWith("Sequence")||"CommitError"===e?r.callback(i):"CommitSuccess"===e?r.callback():r.callback(t,i))}}reset(){this.listenerMap.clear(),this.listenerCount=0}}class Ne{constructor(e,t,i){this.apiLog=i,this.settings=e,this.error_codes=t,this.boundOnlineStatusChangeHandler=this.handleOnlineStatusChange.bind(this),this.boundCustomNetworkStatusHandler=this.handleCustomNetworkStatus.bind(this),window.addEventListener("online",this.boundOnlineStatusChangeHandler),window.addEventListener("offline",this.boundOnlineStatusChangeHandler),window.addEventListener("scorm-again:network-status",this.boundCustomNetworkStatusHandler)}settings;error_codes;storeName="scorm_again_offline_data";syncQueue="scorm_again_sync_queue";isOnline=navigator.onLine;syncInProgress=!1;boundOnlineStatusChangeHandler;boundCustomNetworkStatusHandler;handleOnlineStatusChange(){const e=this.isOnline;this.isOnline=navigator.onLine,!e&&this.isOnline?(this.apiLog("OfflineStorageService","Device is back online, attempting to sync...",I.INFO),this.syncOfflineData().then(e=>{e?this.apiLog("OfflineStorageService","Sync completed successfully",I.INFO):this.apiLog("OfflineStorageService","Sync failed",I.ERROR)},e=>{this.apiLog("OfflineStorageService","Error during sync: "+e,I.ERROR)})):e&&!this.isOnline&&this.apiLog("OfflineStorageService","Device is offline, data will be stored locally",I.INFO)}handleCustomNetworkStatus(e){if(!(e instanceof CustomEvent))return void this.apiLog("OfflineStorageService","Invalid network status event received",I.WARN);const{online:t}=e.detail;if("boolean"!=typeof t)return void this.apiLog("OfflineStorageService","Invalid online status value in custom event",I.WARN);const i=this.isOnline;this.isOnline=t,this.apiLog("OfflineStorageService","Network status updated via custom event: "+(t?"online":"offline"),I.INFO),!i&&this.isOnline?(this.apiLog("OfflineStorageService","Device is back online, attempting to sync...",I.INFO),this.syncOfflineData().then(e=>{e?this.apiLog("OfflineStorageService","Sync completed successfully",I.INFO):this.apiLog("OfflineStorageService","Sync failed",I.ERROR)},e=>{this.apiLog("OfflineStorageService","Error during sync: "+e,I.ERROR)})):i&&!this.isOnline&&this.apiLog("OfflineStorageService","Device is offline, data will be stored locally",I.INFO)}storeOffline(e,t){try{const i={id:`${e}_${Date.now()}_${Math.random().toString(36).substring(2,9)}`,courseId:e,timestamp:Date.now(),data:t,syncAttempts:0},s=this.getFromStorage(this.syncQueue)||[];return s.push(i),this.saveToStorage(this.syncQueue,s),this.saveToStorage(`${this.storeName}_${e}`,t),this.apiLog("OfflineStorageService","Stored data offline for course "+e,I.INFO),{result:d,errorCode:0}}catch(t){const i=(t instanceof Error?t.message:t+"").includes("storage quota");return this.apiLog("OfflineStorageService",i?"storage quota exceeded - cannot store offline data for course "+e:"Error storing offline data: "+t,I.ERROR),{result:h,errorCode:this.error_codes.GENERAL??0}}}async getOfflineData(e){try{return this.getFromStorage(`${this.storeName}_${e}`)||null}catch(e){return this.apiLog("OfflineStorageService","Error retrieving offline data: "+e,I.ERROR),null}}async syncOfflineData(){if(this.syncInProgress||!this.isOnline)return!1;this.syncInProgress=!0;try{const e=this.getFromStorage(this.syncQueue)||[];if(0===e.length)return this.syncInProgress=!1,!0;this.apiLog("OfflineStorageService",`Found ${e.length} items to sync`,I.INFO);const t=[];for(const i of e){const e=this.settings.maxSyncAttempts??5;if(e>i.syncAttempts)try{const e=await this.sendDataToLMS(i.data);!0===e.result||e.result===d?this.apiLog("OfflineStorageService","Successfully synced item "+i.id,I.INFO):(i.syncAttempts++,t.push(i),this.apiLog("OfflineStorageService",`Failed to sync item ${i.id}, attempt #${i.syncAttempts}`,I.WARN))}catch(e){i.syncAttempts++,t.push(i),this.apiLog("OfflineStorageService",`Error syncing item ${i.id}: ${e}`,I.ERROR)}else this.apiLog("OfflineStorageService",`Removing abandoned item ${i.id} after ${e} failed sync attempts`,I.WARN)}return this.saveToStorage(this.syncQueue,t),this.apiLog("OfflineStorageService",`Sync completed. ${e.length-t.length} items synced, ${t.length} items remaining`,I.INFO),this.syncInProgress=!1,!0}catch(e){return this.apiLog("OfflineStorageService","Error during sync process: "+e,I.ERROR),this.syncInProgress=!1,!1}}async sendDataToLMS(e){if(!this.settings.lmsCommitUrl)return{result:h,errorCode:this.error_codes.GENERAL||101};try{const t=this.settings.requestHandler(e),i={method:"POST",mode:this.settings.fetchMode,body:JSON.stringify(t),headers:{...this.settings.xhrHeaders,"Content-Type":this.settings.commitRequestDataType}};this.settings.xhrWithCredentials&&(i.credentials="include");const s=await fetch(this.settings.lmsCommitUrl,i),result="function"==typeof this.settings.responseHandler?await this.settings.responseHandler(s):await s.json();return 200>s.status||s.status>299||!0!==result.result&&result.result!==d?(Object.hasOwnProperty.call(result,"errorCode")||(result.errorCode=this.error_codes.GENERAL),result):(Object.hasOwnProperty.call(result,"errorCode")||(result.errorCode=0),result)}catch(e){return this.apiLog("OfflineStorageService","Error sending data to LMS: "+e,I.ERROR),{result:h,errorCode:this.error_codes.GENERAL||101}}}isDeviceOnline(){return this.isOnline}getFromStorage(e){const t=localStorage.getItem(e);if(t)try{return JSON.parse(t)}catch(e){return null}return null}saveToStorage(e,t){try{localStorage.setItem(e,JSON.stringify(t))}catch(e){if(e instanceof DOMException&&"QuotaExceededError"===e.name)throw Error("storage quota exceeded - localStorage is full",{cause:e});throw e}}async hasPendingOfflineData(e){return(this.getFromStorage(this.syncQueue)||[]).some(t=>t.courseId===e)}updateSettings(e){this.settings=e}destroy(){window.removeEventListener("online",this.boundOnlineStatusChangeHandler),window.removeEventListener("offline",this.boundOnlineStatusChangeHandler),window.removeEventListener("scorm-again:network-status",this.boundCustomNetworkStatusHandler)}}const De=o((e,t,i,s,r,n)=>{if("string"!=typeof t)return!1;const o=RegExp(i),a=t.match(o);if(n&&""===t)return!0;if(!a||""===a[0])throw new r(e,s);return!0},(e,t,i,s,r,n)=>`${e}:${"string"==typeof t?t:`[${typeof t}]`}:${i}:${s}:${n||!1}`),xe=o((e,t,i,s,r)=>{const n=i.split("#");if(isNaN(t=+t))throw new r(e,s);const o=n[0],a=n[1],c=void 0!==a&&""!==a&&"*"!==a;if(void 0!==o&&""!==o&&+o>t)throw new r(e,s);if(c&&t>+a)throw new r(e,s);return!0},(e,t,i,s,r)=>`${e}:${t}:${i}:${s}`);function Le(e,t,i,s){return De(e,t,i,y.TYPE_MISMATCH,_,s)}function Pe(e,t,i){return xe(e,t,i,y.VALUE_OUT_OF_RANGE,_)}var ze=(e=>(e.SATISFIED="satisfied",e.NOT_SATISFIED="notSatisfied",e.COMPLETED="completed",e.INCOMPLETE="incomplete",e))(ze||{}),Fe=(e=>(e.ALL="all",e.ANY="any",e.NONE="none",e.AT_LEAST_COUNT="atLeastCount",e.AT_LEAST_PERCENT="atLeastPercent",e))(Fe||{});class ke extends a{_condition="always";_parameters=new Map;constructor(e="always",t=new Map){super("rollupCondition"),this._condition=e,this._parameters=t}reset(){this._initialized=!1}get condition(){return this._condition}set condition(e){this._condition=e}get parameters(){return this._parameters}set parameters(e){this._parameters=e}evaluate(e){switch(this._condition){case"satisfied":return!0===e.objectiveSatisfiedStatus||e.successStatus===M;case"objectiveStatusKnown":return e.objectiveSatisfiedStatusKnown;case"objectiveMeasureKnown":return e.objectiveMeasureStatus;case"objectiveMeasureGreaterThan":{const t=this._parameters.get("threshold")||0;return e.objectiveMeasureStatus&&e.objectiveNormalizedMeasure>t}case"objectiveMeasureLessThan":{const t=this._parameters.get("threshold")||0;return e.objectiveMeasureStatus&&t>e.objectiveNormalizedMeasure}case"completed":return e.isCompleted;case"progressKnown":return e.completionStatus!==j;case"attempted":return e.attemptCount>0;case"notAttempted":return 0===e.attemptCount;case"always":return!0;default:return!1}}toJSON(){this.jsonString=!0;const result={condition:this._condition,parameters:Object.fromEntries(this._parameters)};return this.jsonString=!1,result}}class Ve extends a{_conditions=[];_action="satisfied";_consideration="all";_minimumCount=0;_minimumPercent=0;constructor(e="satisfied",t="all",i=0,s=0){super("rollupRule"),this._action=e,this._consideration=t,this._minimumCount=i,this._minimumPercent=s}reset(){this._initialized=!1,this._conditions=[]}get conditions(){return this._conditions}addCondition(e){if(!(e instanceof ke))throw new _(this._cmi_element+".conditions",y.TYPE_MISMATCH);this._conditions.push(e)}removeCondition(e){const t=this._conditions.indexOf(e);return-1!==t&&(this._conditions.splice(t,1),!0)}get action(){return this._action}set action(e){this._action=e}get consideration(){return this._consideration}set consideration(e){this._consideration=e}get minimumCount(){return this._minimumCount}set minimumCount(e){0>e||(this._minimumCount=e)}get minimumPercent(){return this._minimumPercent}set minimumPercent(e){0>e||e>100||(this._minimumPercent=e)}evaluate(e){if(0===e.length)return!1;const t=e.filter(e=>this._conditions.every(t=>t.evaluate(e)));switch(this._consideration){case"all":return t.length===e.length;case"any":return t.length>0;case"none":return 0===t.length;case"atLeastCount":return t.length>=this._minimumCount;case"atLeastPercent":return t.length/e.length*100>=this._minimumPercent;default:return!1}}toJSON(){this.jsonString=!0;const result={conditions:this._conditions,action:this._action,consideration:this._consideration,minimumCount:this._minimumCount,minimumPercent:this._minimumPercent};return this.jsonString=!1,result}}class He extends a{_rules=[];constructor(){super("rollupRules")}reset(){this._initialized=!1,this._rules=[]}get rules(){return this._rules}addRule(e){if(!(e instanceof Ve))throw new _(this._cmi_element+".rules",y.TYPE_MISMATCH);this._rules.push(e)}removeRule(e){const t=this._rules.indexOf(e);return-1!==t&&(this._rules.splice(t,1),!0)}processRollup(e){if(!e||0===e.children.length)return;const t=e.getAvailableChildren();let i=!1,s=!1;if(e.sequencingControls.rollupObjectiveSatisfied&&null!==this._objectiveRollupUsingMeasure(e,t)&&(s=!0),!s)for(const r of this._rules)if(r.evaluate(t))switch(r.action){case"satisfied":e.successStatus=M,s=!0;break;case"notSatisfied":e.successStatus=w,s=!0;break;case"completed":e.completionStatus=O,e.isCompleted=!0,i=!0;break;case"incomplete":e.completionStatus=T,e.isCompleted=!1,i=!0}i||this._defaultCompletionRollup(e,t),s||this._defaultSuccessRollup(e,t)}_defaultCompletionRollup(e,t){t.every(e=>e.isCompleted)?(e.completionStatus=O,e.isCompleted=!0):t.some(e=>e.completionStatus===T)&&(e.completionStatus=T,e.isCompleted=!1)}_objectiveRollupUsingMeasure(e,t){if(0>=e.sequencingControls.objectiveMeasureWeight)return null;let i=0,s=0,r=!1;for(const e of t)if(e.sequencingControls.rollupObjectiveSatisfied&&e.objectiveMeasureStatus&&!0===e.objectiveMeasureStatus){const t=e.sequencingControls.objectiveMeasureWeight;t>0&&(s+=e.objectiveNormalizedMeasure*t,i+=t,r=!0)}if(!r||0===i)return null;const n=s/i;return e.objectiveNormalizedMeasure=n,e.objectiveMeasureStatus=!0,e.scaledPassingScore>n?(e.successStatus=w,e.objectiveSatisfiedStatus=!1,!1):(e.successStatus=M,e.objectiveSatisfiedStatus=!0,!0)}_defaultSuccessRollup(e,t){t.every(e=>e.successStatus===M)?e.successStatus=M:t.some(e=>e.successStatus===w)&&(e.successStatus=w)}toJSON(){this.jsonString=!0;const result={rules:this._rules};return this.jsonString=!1,result}}class Be{_id;_description;_satisfiedByMeasure;_minNormalizedMeasure;_mapInfo;_isPrimary;_satisfiedStatus=!1;_satisfiedStatusKnown=!1;_measureStatus=!1;_normalizedMeasure=0;_progressMeasure=0;_progressMeasureStatus=!1;_completionStatus=j;_progressStatus=!1;_satisfiedStatusDirty=!1;_normalizedMeasureDirty=!1;_completionStatusDirty=!1;_progressMeasureDirty=!1;constructor(id,e={}){this._id=id,this._description=e.description??null,this._satisfiedByMeasure=e.satisfiedByMeasure??!1,this._minNormalizedMeasure=e.minNormalizedMeasure??null,this._mapInfo=e.mapInfo?[...e.mapInfo]:[],this._isPrimary=e.isPrimary??!1}get id(){return this._id}get description(){return this._description}get satisfiedByMeasure(){return this._satisfiedByMeasure}set satisfiedByMeasure(e){this._satisfiedByMeasure=e}get minNormalizedMeasure(){return this._minNormalizedMeasure}set minNormalizedMeasure(e){this._minNormalizedMeasure=e}get mapInfo(){return this._mapInfo}set mapInfo(e){this._mapInfo=[...e]}get isPrimary(){return this._isPrimary}set isPrimary(e){this._isPrimary=e}get satisfiedStatus(){return this._satisfiedStatus}set satisfiedStatus(e){this._satisfiedStatus!==e&&(this._satisfiedStatus=e,this._satisfiedStatusDirty=!0)}get satisfiedStatusKnown(){return this._satisfiedStatusKnown}set satisfiedStatusKnown(e){this._satisfiedStatusKnown=e}get measureStatus(){return this._measureStatus}set measureStatus(e){this._measureStatus=e}get normalizedMeasure(){return this._normalizedMeasure}set normalizedMeasure(e){this._normalizedMeasure!==e&&(this._normalizedMeasure=e,this._normalizedMeasureDirty=!0)}get progressMeasure(){return this._progressMeasure}set progressMeasure(e){this._progressMeasure!==e&&(this._progressMeasure=e,this._progressMeasureDirty=!0)}get progressMeasureStatus(){return this._progressMeasureStatus}set progressMeasureStatus(e){this._progressMeasureStatus=e}get completionStatus(){return this._completionStatus}set completionStatus(e){this._completionStatus!==e&&(this._completionStatus=e,this._completionStatusDirty=!0)}get progressStatus(){return this._progressStatus}set progressStatus(e){this._progressStatus=e}isDirty(e){switch(e){case"satisfiedStatus":return this._satisfiedStatusDirty;case"normalizedMeasure":return this._normalizedMeasureDirty;case"completionStatus":return this._completionStatusDirty;case"progressMeasure":return this._progressMeasureDirty}}clearDirty(e){switch(e){case"satisfiedStatus":this._satisfiedStatusDirty=!1;break;case"normalizedMeasure":this._normalizedMeasureDirty=!1;break;case"completionStatus":this._completionStatusDirty=!1;break;case"progressMeasure":this._progressMeasureDirty=!1}}clearAllDirty(){this._satisfiedStatusDirty=!1,this._normalizedMeasureDirty=!1,this._completionStatusDirty=!1,this._progressMeasureDirty=!1}initializeFromCMI(e,t,i){this._satisfiedStatus=e,this._satisfiedStatusDirty=!0,this._normalizedMeasure=t,this._normalizedMeasureDirty=!0,this._measureStatus=i}resetState(){this._satisfiedStatus=!1,this._satisfiedStatusKnown=!1,this._measureStatus=!1,this._normalizedMeasure=0,this._progressMeasure=0,this._progressMeasureStatus=!1,this._completionStatus=j,this._progressStatus=!1,this.clearAllDirty()}updateFromActivity(e){this._satisfiedStatus!==e.objectiveSatisfiedStatus&&(this._satisfiedStatus=e.objectiveSatisfiedStatus,this._satisfiedStatusDirty=!0),this._satisfiedStatusKnown=e.objectiveSatisfiedStatusKnown,this._measureStatus=e.objectiveMeasureStatus,this._normalizedMeasure!==e.objectiveNormalizedMeasure&&(this._normalizedMeasure=e.objectiveNormalizedMeasure,this._normalizedMeasureDirty=!0),this._progressMeasure!==e.progressMeasure&&(this._progressMeasure=e.progressMeasure,this._progressMeasureDirty=!0),this._progressMeasureStatus=e.progressMeasureStatus,this._completionStatus!==e.completionStatus&&(this._completionStatus=e.completionStatus,this._completionStatusDirty=!0)}applyToActivity(e){this._isPrimary&&e.setPrimaryObjectiveState(this._satisfiedStatus,this._measureStatus,this._normalizedMeasure,this._progressMeasure,this._progressMeasureStatus,this._completionStatus)}}class Ue extends a{_id="";_title="";_children=[];_parent=null;_isVisible=!0;_isActive=!1;_isSuspended=!1;_isCompleted=!1;_completionStatus=j;_successStatus=R;_attemptCount=0;_attemptCompletionAmount=0;_attemptAbsoluteDuration="PT0H0M0S";_attemptExperiencedDuration="PT0H0M0S";_activityAbsoluteDuration="PT0H0M0S";_activityExperiencedDuration="PT0H0M0S";_attemptAbsoluteDurationValue="PT0H0M0S";_attemptExperiencedDurationValue="PT0H0M0S";_activityAbsoluteDurationValue="PT0H0M0S";_activityExperiencedDurationValue="PT0H0M0S";_activityStartTimestampUtc=null;_attemptStartTimestampUtc=null;_activityEndedDate=null;_objectiveSatisfiedStatus=!1;_objectiveSatisfiedStatusKnown=!1;_objectiveMeasureStatus=!1;_objectiveNormalizedMeasure=0;_scaledPassingScore=.7;_objectiveSatisfiedStatusDirty=!1;_objectiveNormalizedMeasureDirty=!1;_objectiveMeasureStatusDirty=!1;_progressMeasure=0;_progressMeasureStatus=!1;_location="";_attemptAbsoluteStartTime="";_learnerPrefs=null;_activityAttemptActive=!1;_isHiddenFromChoice=!1;_isAvailable=!0;_hideLmsUi=[];_auxiliaryResources=[];_attemptLimit=null;_attemptAbsoluteDurationLimit=null;_activityAbsoluteDurationLimit=null;_timeLimitAction=null;_timeLimitDuration=null;_beginTimeLimit=null;_endTimeLimit=null;_launchData="";_credit="credit";_maxTimeAllowed="";_completionThreshold="";_sequencingControls;_sequencingRules;_rollupRules;_processedChildren=null;_isNewAttempt=!1;_primaryObjective=null;_objectives=[];_rollupConsiderations={requiredForSatisfied:"always",requiredForNotSatisfied:"always",requiredForCompleted:"always",requiredForIncomplete:"always",measureSatisfactionIfActive:!0};_requiredForSatisfied="always";_requiredForNotSatisfied="always";_requiredForCompleted="always";_requiredForIncomplete="always";_wasSkipped=!1;_attemptProgressStatus=!1;_wasAutoCompleted=!1;_wasAutoSatisfied=!1;_completedByMeasure=!1;_minProgressMeasure=1;_progressWeight=1;_attemptCompletionAmountStatus=!1;constructor(id="",e=""){super("activity"),this._id=id,this._title=e,this._sequencingControls=new ge,this._sequencingRules=new re,this._rollupRules=new He,this._primaryObjective=null,this._objectives=[]}initialize(){super.initialize();for(const e of this._children)e.initialize()}reset(){this._initialized=!1,this._isActive=!1,this._isSuspended=!1,this._isCompleted=!1,this._completionStatus=j,this._successStatus=R,this._attemptCount=0,this._attemptCompletionAmount=0,this._attemptAbsoluteDuration="PT0H0M0S",this._attemptExperiencedDuration="PT0H0M0S",this._activityAbsoluteDuration="PT0H0M0S",this._activityExperiencedDuration="PT0H0M0S",this._attemptAbsoluteDurationValue="PT0H0M0S",this._attemptExperiencedDurationValue="PT0H0M0S",this._activityAbsoluteDurationValue="PT0H0M0S",this._activityExperiencedDurationValue="PT0H0M0S",this._activityStartTimestampUtc=null,this._attemptStartTimestampUtc=null,this._activityEndedDate=null,this._objectiveSatisfiedStatus=!1,this._objectiveSatisfiedStatusKnown=!1,this._objectiveMeasureStatus=!1,this._objectiveNormalizedMeasure=0,this._progressMeasure=0,this._progressMeasureStatus=!1,this._location="",this._attemptAbsoluteStartTime="",this._learnerPrefs=null,this._activityAttemptActive=!1,this._primaryObjective&&(this._primaryObjective.resetState(),this._primaryObjective.updateFromActivity(this));for(const e of this._objectives)e.resetState();for(const e of this._children)e.reset();this._wasSkipped=!1,this._attemptProgressStatus=!1,this._wasAutoCompleted=!1,this._wasAutoSatisfied=!1,this._completedByMeasure=!1,this._minProgressMeasure=1,this._progressWeight=1,this._attemptCompletionAmountStatus=!1,this.clearAllObjectiveDirty()}get id(){return this._id}set id(id){Le(this._cmi_element+".id",id,B)&&(this._id=id)}get title(){return this._title}set title(e){Le(this._cmi_element+".title",e,P)&&(this._title=e)}get children(){return this._children}addChild(e){if(!(e instanceof Ue))throw new _(this._cmi_element+".children",y.TYPE_MISMATCH);e._parent=this,this._children.push(e)}setChildOrder(e){if(0===e.length)return;const t=new Map(this._children.map(e=>[e.id,e])),i=[];for(const id of e){const e=t.get(id);e&&(i.push(e),t.delete(id))}if(t.size>0)for(const e of this._children)t.has(e.id)&&(i.push(e),t.delete(e.id));i.length===this._children.length&&this._children.splice(0,this._children.length,...i)}removeChild(e){const t=this._children.indexOf(e);return-1!==t&&(this._children.splice(t,1),e._parent=null,!0)}get parent(){return this._parent}get isVisible(){return this._isVisible}set isVisible(e){this._isVisible=e}get isActive(){return this._isActive}set isActive(e){this._isActive=e}get isSuspended(){return this._isSuspended}set isSuspended(e){this._isSuspended=e}get isCompleted(){return this._isCompleted}set isCompleted(e){this._isCompleted=e,this._completionStatus=e?O:T}get completionStatus(){return this._completionStatus}set completionStatus(e){this._completionStatus=e,this._isCompleted=e===O,this.updatePrimaryObjectiveFromActivity()}get successStatus(){return this._successStatus}set successStatus(e){this._successStatus=e}get attemptCount(){return this._attemptCount}set attemptCount(e){this._attemptCount=e}get attemptCompletionAmount(){return this._attemptCompletionAmount}set attemptCompletionAmount(e){this._attemptCompletionAmount=e}incrementAttemptCount(){this._attemptCount++,this._isNewAttempt=!0;const e=this._sequencingControls;"onEachNewAttempt"!==e.selectionTiming&&"onEachNewAttempt"!==e.randomizationTiming||(this._processedChildren=null)}get objectiveSatisfiedStatus(){return this._objectiveSatisfiedStatus}set objectiveSatisfiedStatus(e){this._objectiveSatisfiedStatus!==e&&(this._objectiveSatisfiedStatus=e,this._objectiveSatisfiedStatusDirty=!0),this._objectiveSatisfiedStatusKnown=!0,this._successStatus=e?M:w,this.updatePrimaryObjectiveFromActivity()}get objectiveSatisfiedStatusKnown(){return this._objectiveSatisfiedStatusKnown}set objectiveSatisfiedStatusKnown(e){this._objectiveSatisfiedStatusKnown=e}get objectiveMeasureStatus(){return this._objectiveMeasureStatus}set objectiveMeasureStatus(e){this._objectiveMeasureStatus!==e&&(this._objectiveMeasureStatus=e,this._objectiveMeasureStatusDirty=!0),this.updatePrimaryObjectiveFromActivity()}get objectiveNormalizedMeasure(){return this._objectiveNormalizedMeasure}set objectiveNormalizedMeasure(e){this._objectiveNormalizedMeasure!==e&&(this._objectiveNormalizedMeasure=e,this._objectiveNormalizedMeasureDirty=!0),this.updatePrimaryObjectiveFromActivity()}get scaledPassingScore(){return this._scaledPassingScore}set scaledPassingScore(e){-1>e||e>1||(this._scaledPassingScore=e)}get progressMeasure(){return this._progressMeasure}set progressMeasure(e){this._progressMeasure=e,this.updatePrimaryObjectiveFromActivity()}get progressMeasureStatus(){return this._progressMeasureStatus}set progressMeasureStatus(e){this._progressMeasureStatus=e,this.updatePrimaryObjectiveFromActivity()}get location(){return this._location}set location(location){this._location=location}get attemptAbsoluteStartTime(){return this._attemptAbsoluteStartTime}set attemptAbsoluteStartTime(e){this._attemptAbsoluteStartTime=e}get learnerPrefs(){return this._learnerPrefs}set learnerPrefs(e){this._learnerPrefs=e}get activityAttemptActive(){return this._activityAttemptActive}set activityAttemptActive(e){this._activityAttemptActive=e}get isHiddenFromChoice(){return this._isHiddenFromChoice}set isHiddenFromChoice(e){this._isHiddenFromChoice=e}get isAvailable(){return this._isAvailable}set isAvailable(e){this._isAvailable=e}get attemptLimit(){return this._attemptLimit}set attemptLimit(e){this._attemptLimit=e}hasAttemptLimitExceeded(){return null!==this._attemptLimit&&this._attemptCount>=this._attemptLimit}get timeLimitDuration(){return this._timeLimitDuration}set timeLimitDuration(e){this._timeLimitDuration=e}get timeLimitAction(){return this._timeLimitAction}set timeLimitAction(e){this._timeLimitAction=e}get beginTimeLimit(){return this._beginTimeLimit}set beginTimeLimit(e){this._beginTimeLimit=e}get endTimeLimit(){return this._endTimeLimit}set endTimeLimit(e){this._endTimeLimit=e}get attemptAbsoluteDurationLimit(){return this._attemptAbsoluteDurationLimit}set attemptAbsoluteDurationLimit(e){if(null!==e&&!s(e,k))throw new _(this._cmi_element+".attemptAbsoluteDurationLimit",y.TYPE_MISMATCH);this._attemptAbsoluteDurationLimit=e}get attemptExperiencedDuration(){return this._attemptExperiencedDuration}set attemptExperiencedDuration(e){if(!s(e,k))throw new _(this._cmi_element+".attemptExperiencedDuration",y.TYPE_MISMATCH);this._attemptExperiencedDuration=e}get activityAbsoluteDurationLimit(){return this._activityAbsoluteDurationLimit}set activityAbsoluteDurationLimit(e){if(null!==e&&!s(e,k))throw new _(this._cmi_element+".activityAbsoluteDurationLimit",y.TYPE_MISMATCH);this._activityAbsoluteDurationLimit=e}get activityExperiencedDuration(){return this._activityExperiencedDuration}set activityExperiencedDuration(e){if(!s(e,k))throw new _(this._cmi_element+".activityExperiencedDuration",y.TYPE_MISMATCH);this._activityExperiencedDuration=e}get attemptAbsoluteDuration(){return this._attemptAbsoluteDurationLimit||"PT0H0M0S"}set attemptAbsoluteDuration(e){this._attemptAbsoluteDurationLimit=e}get activityAbsoluteDuration(){return this._activityAbsoluteDurationLimit||"PT0H0M0S"}set activityAbsoluteDuration(e){this._activityAbsoluteDurationLimit=e}get attemptAbsoluteDurationValue(){return this._attemptAbsoluteDurationValue}set attemptAbsoluteDurationValue(e){if(!s(e,k))throw new _(this._cmi_element+".attemptAbsoluteDurationValue",y.TYPE_MISMATCH);this._attemptAbsoluteDurationValue=e}get attemptExperiencedDurationValue(){return this._attemptExperiencedDurationValue}set attemptExperiencedDurationValue(e){if(!s(e,k))throw new _(this._cmi_element+".attemptExperiencedDurationValue",y.TYPE_MISMATCH);this._attemptExperiencedDurationValue=e}get activityAbsoluteDurationValue(){return this._activityAbsoluteDurationValue}set activityAbsoluteDurationValue(e){if(!s(e,k))throw new _(this._cmi_element+".activityAbsoluteDurationValue",y.TYPE_MISMATCH);this._activityAbsoluteDurationValue=e}get activityExperiencedDurationValue(){return this._activityExperiencedDurationValue}set activityExperiencedDurationValue(e){if(!s(e,k))throw new _(this._cmi_element+".activityExperiencedDurationValue",y.TYPE_MISMATCH);this._activityExperiencedDurationValue=e}get activityStartTimestampUtc(){return this._activityStartTimestampUtc}set activityStartTimestampUtc(timestamp){this._activityStartTimestampUtc=timestamp}get attemptStartTimestampUtc(){return this._attemptStartTimestampUtc}set attemptStartTimestampUtc(timestamp){this._attemptStartTimestampUtc=timestamp}get activityEndedDate(){return this._activityEndedDate}set activityEndedDate(e){this._activityEndedDate=e}get sequencingControls(){return this._sequencingControls}set sequencingControls(e){this._sequencingControls=e}get sequencingRules(){return this._sequencingRules}set sequencingRules(e){this._sequencingRules=e}get rollupRules(){return this._rollupRules}set rollupRules(e){this._rollupRules=e}get rollupConsiderations(){return{...this._rollupConsiderations}}set rollupConsiderations(e){this._rollupConsiderations={...e}}applyRollupConsiderations(e){this._rollupConsiderations={...this._rollupConsiderations,...e}}get requiredForSatisfied(){return this._requiredForSatisfied}set requiredForSatisfied(e){this._requiredForSatisfied=e}get requiredForNotSatisfied(){return this._requiredForNotSatisfied}set requiredForNotSatisfied(e){this._requiredForNotSatisfied=e}get requiredForCompleted(){return this._requiredForCompleted}set requiredForCompleted(e){this._requiredForCompleted=e}get requiredForIncomplete(){return this._requiredForIncomplete}set requiredForIncomplete(e){this._requiredForIncomplete=e}get wasSkipped(){return this._wasSkipped}set wasSkipped(e){this._wasSkipped=e}get attemptProgressStatus(){return this._attemptProgressStatus}set attemptProgressStatus(e){this._attemptProgressStatus=e}get wasAutoCompleted(){return this._wasAutoCompleted}set wasAutoCompleted(e){this._wasAutoCompleted=e}get wasAutoSatisfied(){return this._wasAutoSatisfied}set wasAutoSatisfied(e){this._wasAutoSatisfied=e}get completedByMeasure(){return this._completedByMeasure}set completedByMeasure(e){this._completedByMeasure=e}get minProgressMeasure(){return this._minProgressMeasure}set minProgressMeasure(e){if(0>e||e>1)throw new _(this._cmi_element+".minProgressMeasure",y.TYPE_MISMATCH);this._minProgressMeasure=e}get progressWeight(){return this._progressWeight}set progressWeight(e){if(0>e)throw new _(this._cmi_element+".progressWeight",y.TYPE_MISMATCH);this._progressWeight=e}get attemptCompletionAmountStatus(){return this._attemptCompletionAmountStatus}set attemptCompletionAmountStatus(e){this._attemptCompletionAmountStatus=e}get primaryObjective(){return this._primaryObjective}set primaryObjective(e){this._primaryObjective=e,this._primaryObjective&&(this._primaryObjective.isPrimary=!0,null!==this._primaryObjective.minNormalizedMeasure&&(this._scaledPassingScore=this._primaryObjective.minNormalizedMeasure??this._scaledPassingScore),this._primaryObjective.updateFromActivity(this)),this.syncPrimaryObjectiveCollection()}get objectives(){return this._objectives.filter(e=>e.id!==this._primaryObjective?.id)}set objectives(objectives){this._objectives=[...objectives],this.syncPrimaryObjectiveCollection()}addObjective(e){this._objectives.find(t=>t.id===e.id)||this._objectives.push(e)}syncPrimaryObjectiveCollection(){if(!this._primaryObjective)return void(this._objectives=this._objectives.filter(e=>!e.isPrimary));const e=this._objectives.findIndex(e=>e.id===this._primaryObjective?.id);0>e?this._objectives=[this._primaryObjective,...this._objectives]:this._objectives[e]=this._primaryObjective}getObjectiveById(e){if(this._primaryObjective?.id===e)return{objective:this._primaryObjective,isPrimary:!0};const t=this._objectives.find(t=>t.id===e);return t?{objective:t,isPrimary:!1}:null}getAllObjectives(){const objectives=[];this._primaryObjective&&objectives.push(this._primaryObjective);const e=this._objectives.filter(e=>e!==this._primaryObjective&&e.id!==this._primaryObjective?.id);return objectives.concat(e)}updatePrimaryObjectiveFromActivity(){this._primaryObjective&&this._primaryObjective.updateFromActivity(this)}isObjectiveDirty(e){switch(e){case"satisfiedStatus":return this._objectiveSatisfiedStatusDirty;case"normalizedMeasure":return this._objectiveNormalizedMeasureDirty;case"measureStatus":return this._objectiveMeasureStatusDirty}}clearObjectiveDirty(e){switch(e){case"satisfiedStatus":this._objectiveSatisfiedStatusDirty=!1;break;case"normalizedMeasure":this._objectiveNormalizedMeasureDirty=!1;break;case"measureStatus":this._objectiveMeasureStatusDirty=!1}}clearAllObjectiveDirty(){this._objectiveSatisfiedStatusDirty=!1,this._objectiveNormalizedMeasureDirty=!1,this._objectiveMeasureStatusDirty=!1}setPrimaryObjectiveState(e,t,i,s,r,n){this._objectiveSatisfiedStatus!==e&&(this._objectiveSatisfiedStatus=e,this._objectiveSatisfiedStatusDirty=!0),this._objectiveSatisfiedStatusKnown=!0,this._objectiveMeasureStatus!==t&&(this._objectiveMeasureStatus=t,this._objectiveMeasureStatusDirty=!0),this._objectiveNormalizedMeasure!==i&&(this._objectiveNormalizedMeasure=i,this._objectiveNormalizedMeasureDirty=!0),this._progressMeasure=s,this._progressMeasureStatus=r,this._completionStatus=n,this._primaryObjective&&(this._primaryObjective.satisfiedStatus=e,this._primaryObjective.measureStatus=t,this._primaryObjective.normalizedMeasure=i,this._primaryObjective.progressMeasure=s,this._primaryObjective.progressMeasureStatus=r,this._primaryObjective.completionStatus=n)}getObjectiveStateSnapshot(){return{primary:this._primaryObjective?{id:this._primaryObjective.id,satisfiedStatus:this.objectiveSatisfiedStatus,measureStatus:this.objectiveMeasureStatus,normalizedMeasure:this.objectiveNormalizedMeasure,progressMeasure:this.progressMeasure??0,progressMeasureStatus:this.progressMeasureStatus,progressStatus:this._primaryObjective.progressStatus,completionStatus:this.completionStatus,satisfiedByMeasure:this._primaryObjective.satisfiedByMeasure,minNormalizedMeasure:this._primaryObjective.minNormalizedMeasure}:null,objectives:this._objectives.map(e=>({id:e.id,satisfiedStatus:e.satisfiedStatus,measureStatus:e.measureStatus,normalizedMeasure:e.normalizedMeasure,progressMeasure:e.progressMeasure,progressMeasureStatus:e.progressMeasureStatus,progressStatus:e.progressStatus,completionStatus:e.completionStatus,satisfiedByMeasure:e.satisfiedByMeasure,minNormalizedMeasure:e.minNormalizedMeasure}))}}applyObjectiveStateSnapshot(e){if(e.primary){const t=this.getObjectiveById(e.primary.id);if(t&&t.isPrimary){const i=e.primary;t.objective.satisfiedByMeasure=i.satisfiedByMeasure??t.objective.satisfiedByMeasure,t.objective.minNormalizedMeasure=void 0!==i.minNormalizedMeasure?i.minNormalizedMeasure:t.objective.minNormalizedMeasure,this.setPrimaryObjectiveState(i.satisfiedStatus,i.measureStatus,i.normalizedMeasure,i.progressMeasure,i.progressMeasureStatus,i.completionStatus)}}for(const t of e.objectives){const e=this.getObjectiveById(t.id);if(e&&!e.isPrimary){const i=e.objective;i.satisfiedStatus=t.satisfiedStatus,i.measureStatus=t.measureStatus,i.normalizedMeasure=t.normalizedMeasure,i.progressMeasure=t.progressMeasure,i.progressMeasureStatus=t.progressMeasureStatus,i.completionStatus=t.completionStatus,i.satisfiedByMeasure=t.satisfiedByMeasure??i.satisfiedByMeasure,i.minNormalizedMeasure=void 0!==t.minNormalizedMeasure?t.minNormalizedMeasure:i.minNormalizedMeasure}}}getAvailableChildren(){return 0===this._children.length?[]:null!==this._processedChildren?this._processedChildren:this._children}setProcessedChildren(e){this._processedChildren=e}resetProcessedChildren(){this._processedChildren=null}get isNewAttempt(){return this._isNewAttempt}set isNewAttempt(e){this._isNewAttempt=e}get launchData(){return this._launchData}set launchData(e){this._launchData=e}get credit(){return this._credit}set credit(credit){this._credit=credit}get maxTimeAllowed(){return this._maxTimeAllowed}set maxTimeAllowed(e){this._maxTimeAllowed=e}get completionThreshold(){return this._completionThreshold}set completionThreshold(e){this._completionThreshold=e}getSuspensionState(){return{id:this._id,title:this._title,isVisible:this._isVisible,isActive:this._isActive,isSuspended:this._isSuspended,isCompleted:this._isCompleted,completionStatus:this._completionStatus,successStatus:this._successStatus,attemptCount:this._attemptCount,attemptCompletionAmount:this._attemptCompletionAmount,attemptAbsoluteDuration:this._attemptAbsoluteDuration,attemptExperiencedDuration:this._attemptExperiencedDuration,activityAbsoluteDuration:this._activityAbsoluteDuration,activityExperiencedDuration:this._activityExperiencedDuration,attemptAbsoluteDurationValue:this._attemptAbsoluteDurationValue,attemptExperiencedDurationValue:this._attemptExperiencedDurationValue,activityAbsoluteDurationValue:this._activityAbsoluteDurationValue,activityExperiencedDurationValue:this._activityExperiencedDurationValue,activityStartTimestampUtc:this._activityStartTimestampUtc,attemptStartTimestampUtc:this._attemptStartTimestampUtc,objectiveSatisfiedStatus:this._objectiveSatisfiedStatus,objectiveSatisfiedStatusKnown:this._objectiveSatisfiedStatusKnown,objectiveMeasureStatus:this._objectiveMeasureStatus,objectiveNormalizedMeasure:this._objectiveNormalizedMeasure,scaledPassingScore:this._scaledPassingScore,progressMeasure:this._progressMeasure,progressMeasureStatus:this._progressMeasureStatus,location:this._location,attemptAbsoluteStartTime:this._attemptAbsoluteStartTime,activityAttemptActive:this._activityAttemptActive,isHiddenFromChoice:this._isHiddenFromChoice,isAvailable:this._isAvailable,rollupConsiderations:{...this._rollupConsiderations},wasSkipped:this._wasSkipped,attemptProgressStatus:this._attemptProgressStatus,wasAutoCompleted:this._wasAutoCompleted,wasAutoSatisfied:this._wasAutoSatisfied,completedByMeasure:this._completedByMeasure,minProgressMeasure:this._minProgressMeasure,progressWeight:this._progressWeight,attemptCompletionAmountStatus:this._attemptCompletionAmountStatus,processedChildren:this._processedChildren?this._processedChildren.map(e=>e.id):null,isNewAttempt:this._isNewAttempt,selectionCountStatus:this._sequencingControls.selectionCountStatus,reorderChildren:this._sequencingControls.reorderChildren,primaryObjective:this._primaryObjective?{id:this._primaryObjective.id,satisfiedStatus:this._primaryObjective.satisfiedStatus,measureStatus:this._primaryObjective.measureStatus,normalizedMeasure:this._primaryObjective.normalizedMeasure,progressMeasure:this._primaryObjective.progressMeasure,progressMeasureStatus:this._primaryObjective.progressMeasureStatus,completionStatus:this._primaryObjective.completionStatus,satisfiedByMeasure:this._primaryObjective.satisfiedByMeasure,minNormalizedMeasure:this._primaryObjective.minNormalizedMeasure,progressStatus:this._primaryObjective.progressStatus,mapInfo:this._primaryObjective.mapInfo}:null,objectives:this._objectives.map(e=>({id:e.id,satisfiedStatus:e.satisfiedStatus,measureStatus:e.measureStatus,normalizedMeasure:e.normalizedMeasure,progressMeasure:e.progressMeasure,progressMeasureStatus:e.progressMeasureStatus,completionStatus:e.completionStatus,satisfiedByMeasure:e.satisfiedByMeasure,minNormalizedMeasure:e.minNormalizedMeasure,progressStatus:e.progressStatus,mapInfo:e.mapInfo})),children:this._children.map(e=>e.getSuspensionState())}}restoreSuspensionState(e){if(e){if(this._isVisible=e.isVisible??this._isVisible,this._isActive=e.isActive??this._isActive,this._isSuspended=e.isSuspended??this._isSuspended,this._isCompleted=e.isCompleted??this._isCompleted,this._completionStatus=e.completionStatus??this._completionStatus,this._successStatus=e.successStatus??this._successStatus,this._attemptCount=e.attemptCount??this._attemptCount,this._attemptCompletionAmount=e.attemptCompletionAmount??this._attemptCompletionAmount,this._attemptAbsoluteDuration=e.attemptAbsoluteDuration??this._attemptAbsoluteDuration,this._attemptExperiencedDuration=e.attemptExperiencedDuration??this._attemptExperiencedDuration,this._activityAbsoluteDuration=e.activityAbsoluteDuration??this._activityAbsoluteDuration,this._activityExperiencedDuration=e.activityExperiencedDuration??this._activityExperiencedDuration,this._attemptAbsoluteDurationValue=e.attemptAbsoluteDurationValue??this._attemptAbsoluteDurationValue,this._attemptExperiencedDurationValue=e.attemptExperiencedDurationValue??this._attemptExperiencedDurationValue,this._activityAbsoluteDurationValue=e.activityAbsoluteDurationValue??this._activityAbsoluteDurationValue,this._activityExperiencedDurationValue=e.activityExperiencedDurationValue??this._activityExperiencedDurationValue,this._activityStartTimestampUtc=e.activityStartTimestampUtc??this._activityStartTimestampUtc,this._attemptStartTimestampUtc=e.attemptStartTimestampUtc??this._attemptStartTimestampUtc,this._objectiveSatisfiedStatus=e.objectiveSatisfiedStatus??this._objectiveSatisfiedStatus,this._objectiveSatisfiedStatusKnown=e.objectiveSatisfiedStatusKnown??this._objectiveSatisfiedStatusKnown,this._objectiveMeasureStatus=e.objectiveMeasureStatus??this._objectiveMeasureStatus,this._objectiveNormalizedMeasure=e.objectiveNormalizedMeasure??this._objectiveNormalizedMeasure,this._scaledPassingScore=e.scaledPassingScore??this._scaledPassingScore,this._progressMeasure=e.progressMeasure??this._progressMeasure,this._progressMeasureStatus=e.progressMeasureStatus??this._progressMeasureStatus,this._location=e.location??this._location,this._attemptAbsoluteStartTime=e.attemptAbsoluteStartTime??this._attemptAbsoluteStartTime,this._activityAttemptActive=e.activityAttemptActive??this._activityAttemptActive,this._isHiddenFromChoice=e.isHiddenFromChoice??this._isHiddenFromChoice,this._isAvailable=e.isAvailable??this._isAvailable,e.rollupConsiderations&&(this._rollupConsiderations={...e.rollupConsiderations}),this._wasSkipped=e.wasSkipped??this._wasSkipped,this._attemptProgressStatus=e.attemptProgressStatus??this._attemptProgressStatus,this._wasAutoCompleted=e.wasAutoCompleted??this._wasAutoCompleted,this._wasAutoSatisfied=e.wasAutoSatisfied??this._wasAutoSatisfied,this._completedByMeasure=e.completedByMeasure??this._completedByMeasure,this._minProgressMeasure=e.minProgressMeasure??this._minProgressMeasure,this._progressWeight=e.progressWeight??this._progressWeight,this._attemptCompletionAmountStatus=e.attemptCompletionAmountStatus??this._attemptCompletionAmountStatus,this._isNewAttempt=e.isNewAttempt??this._isNewAttempt,void 0!==e.selectionCountStatus&&(this._sequencingControls.selectionCountStatus=e.selectionCountStatus),void 0!==e.reorderChildren&&(this._sequencingControls.reorderChildren=e.reorderChildren),e.processedChildren){const t=new Map(this._children.map(e=>[e.id,e]));this._processedChildren=e.processedChildren.map(id=>t.get(id)).filter(e=>void 0!==e)}else this._processedChildren=null;if(e.primaryObjective&&this._primaryObjective&&(this._primaryObjective.satisfiedStatus=e.primaryObjective.satisfiedStatus??this._primaryObjective.satisfiedStatus,this._primaryObjective.measureStatus=e.primaryObjective.measureStatus??this._primaryObjective.measureStatus,this._primaryObjective.normalizedMeasure=e.primaryObjective.normalizedMeasure??this._primaryObjective.normalizedMeasure,this._primaryObjective.progressMeasure=e.primaryObjective.progressMeasure??this._primaryObjective.progressMeasure,this._primaryObjective.progressMeasureStatus=e.primaryObjective.progressMeasureStatus??this._primaryObjective.progressMeasureStatus,this._primaryObjective.completionStatus=e.primaryObjective.completionStatus??this._primaryObjective.completionStatus,this._primaryObjective.progressStatus=e.primaryObjective.progressStatus??this._primaryObjective.progressStatus),e.objectives)for(const t of e.objectives){const e=this._objectives.find(e=>e.id===t.id);e&&(e.satisfiedStatus=t.satisfiedStatus??e.satisfiedStatus,e.measureStatus=t.measureStatus??e.measureStatus,e.normalizedMeasure=t.normalizedMeasure??e.normalizedMeasure,e.progressMeasure=t.progressMeasure??e.progressMeasure,e.progressMeasureStatus=t.progressMeasureStatus??e.progressMeasureStatus,e.completionStatus=t.completionStatus??e.completionStatus,e.progressStatus=t.progressStatus??e.progressStatus)}if(e.children&&Array.isArray(e.children))for(let t=0;e.children.length>t&&this._children.length>t;t++){const i=e.children[t],s=this._children.find(e=>e.id===i.id);s&&s.restoreSuspensionState(i)}}}toJSON(){this.jsonString=!0;const result={id:this._id,title:this._title,isVisible:this._isVisible,isActive:this._isActive,isSuspended:this._isSuspended,isCompleted:this._isCompleted,completionStatus:this._completionStatus,successStatus:this._successStatus,attemptCount:this._attemptCount,attemptCompletionAmount:this._attemptCompletionAmount,attemptAbsoluteDuration:this._attemptAbsoluteDuration,attemptExperiencedDuration:this._attemptExperiencedDuration,activityAbsoluteDuration:this._activityAbsoluteDuration,activityExperiencedDuration:this._activityExperiencedDuration,objectiveSatisfiedStatus:this._objectiveSatisfiedStatus,objectiveSatisfiedStatusKnown:this._objectiveSatisfiedStatusKnown,objectiveMeasureStatus:this._objectiveMeasureStatus,objectiveNormalizedMeasure:this._objectiveNormalizedMeasure,rollupConsiderations:{...this._rollupConsiderations},wasSkipped:this._wasSkipped,completedByMeasure:this._completedByMeasure,minProgressMeasure:this._minProgressMeasure,progressWeight:this._progressWeight,attemptCompletionAmountStatus:this._attemptCompletionAmountStatus,hideLmsUi:[...this._hideLmsUi],auxiliaryResources:this._auxiliaryResources.map(e=>({...e})),children:this._children.map(e=>e.toJSON())};return this.jsonString=!1,result}get auxiliaryResources(){return this._auxiliaryResources.map(e=>({...e}))}set auxiliaryResources(e){const t=[],i=new Set;for(const s of e||[]){if(!s)continue;const e="string"==typeof s.resourceId?s.resourceId.trim():"",r="string"==typeof s.purpose?s.purpose.trim():"";e&&!i.has(e)&&(i.add(e),t.push({resourceId:e,purpose:r}))}this._auxiliaryResources=t}addAuxiliaryResource(e){this.auxiliaryResources=[...this._auxiliaryResources,e]}captureRollupStatus(){return{measureStatus:this._objectiveMeasureStatus,normalizedMeasure:this._objectiveNormalizedMeasure,objectiveProgressStatus:null!=this._objectiveSatisfiedStatus,objectiveSatisfiedStatus:this._objectiveSatisfiedStatus,attemptProgressStatus:this._completionStatus!==j,attemptCompletionStatus:this._completionStatus===O}}static compareRollupStatus(e,t){return e.measureStatus===t.measureStatus&&1e-4>Math.abs(e.normalizedMeasure-t.normalizedMeasure)&&e.objectiveProgressStatus===t.objectiveProgressStatus&&e.objectiveSatisfiedStatus===t.objectiveSatisfiedStatus&&e.attemptProgressStatus===t.attemptProgressStatus&&e.attemptCompletionStatus===t.attemptCompletionStatus}get hideLmsUi(){return[...this._hideLmsUi]}set hideLmsUi(e){const t=new Set(Z),i=new Set,s=[];for(const r of e)t.has(r)&&!i.has(r)&&(i.add(r),s.push(r));this._hideLmsUi=s}}class $e{checkChildForRollupSubprocess(e,t,i){if(!1===e.sequencingControls.tracked)return!1;let s=!1;if("measure"===t||"objective"===t){if(!e.sequencingControls.rollupObjectiveSatisfied)return!1;s=!0;const t=e.requiredForSatisfied,r=e.requiredForNotSatisfied;"satisfied"===i&&"ifNotSuspended"===t||"notSatisfied"===i&&"ifNotSuspended"===r?(!e.attemptProgressStatus||e.attemptCount>0&&e.isSuspended)&&(s=!1):"satisfied"===i&&"ifAttempted"===t||"notSatisfied"===i&&"ifAttempted"===r?e.attemptProgressStatus&&0!==e.attemptCount||(s=!1):("satisfied"===i&&"ifNotSkipped"===t||"notSatisfied"===i&&"ifNotSkipped"===r)&&e.wasSkipped&&(s=!1)}if("progress"===t){if(!e.sequencingControls.rollupProgressCompletion)return!1;s=!0;const t=e.requiredForCompleted,r=e.requiredForIncomplete;"completed"===i&&"ifNotSuspended"===t||"incomplete"===i&&"ifNotSuspended"===r?(!e.attemptProgressStatus||e.attemptCount>0&&e.isSuspended)&&(s=!1):"completed"===i&&"ifAttempted"===t||"incomplete"===i&&"ifAttempted"===r?e.attemptProgressStatus&&0!==e.attemptCount||(s=!1):("completed"===i&&"ifNotSkipped"===t||"incomplete"===i&&"ifNotSkipped"===r)&&e.wasSkipped&&(s=!1)}return!(s&&!e.isAvailable)&&s}filterChildrenForRequirement(e,t,mode,i){return e.filter(e=>this.shouldIncludeChildForRollup(e,t,mode,i))}shouldIncludeChildForRollup(e,t,mode,i){return!(!this.checkChildForRollupSubprocess(e,t,mode)||"objective"===t&&!i.measureSatisfactionIfActive&&(e.activityAttemptActive||e.isActive))}isChildSatisfiedForRollup(e){return!0===e.objectiveSatisfiedStatus||!1!==e.objectiveSatisfiedStatus&&e.successStatus===M}isChildCompletedForRollup(e){return!("completed"!==e.completionStatus&&!e.isCompleted)}getTrackableChildren(e){return e.children.filter(e=>!1!==e.sequencingControls.tracked)}}class Ge{childFilter;constructor(e){this.childFilter=e}evaluateRollupRule(e,t){const i=e.getAvailableChildren();let s=0,r=0;for(const e of i){let i=!1;switch(t.action){case ze.SATISFIED:i=this.childFilter.checkChildForRollupSubprocess(e,"objective","satisfied");break;case ze.NOT_SATISFIED:i=this.childFilter.checkChildForRollupSubprocess(e,"objective","notSatisfied");break;case ze.COMPLETED:i=this.childFilter.checkChildForRollupSubprocess(e,"progress","completed");break;case ze.INCOMPLETE:i=this.childFilter.checkChildForRollupSubprocess(e,"progress","incomplete")}i&&(s++,this.evaluateRollupConditionsSubprocess(e,t)&&r++)}return t.consideration===Fe.ALL?s>0&&r===s:null!==t.minimumCount?r>=t.minimumCount:null!==t.minimumPercent?(s>0?r/s:0)>=t.minimumPercent:s>0&&r===s}evaluateRollupConditionsSubprocess(e,t){if(0===t.conditions.length)return!0;switch(t.consideration){case Fe.ALL:return t.conditions.every(t=>t.evaluate(e));case Fe.ANY:return t.conditions.some(t=>t.evaluate(e));case Fe.NONE:return!t.conditions.some(t=>t.evaluate(e));case Fe.AT_LEAST_COUNT:case Fe.AT_LEAST_PERCENT:return t.conditions.every(t=>t.evaluate(e));default:return!1}}evaluateRulesForAction(e,t,i){const s=t.filter(e=>e.action===i);if(0===s.length)return null;for(const t of s)if(this.evaluateRollupRule(e,t))return!0;return!1}}class Ye{childFilter;eventCallback;constructor(e,t){this.childFilter=e,this.eventCallback=t||null}measureRollupProcess(e){if(!e.sequencingControls.rollupObjectiveSatisfied)return[];const t=e.getAvailableChildren();if(0===t.length)return[];const i=e.rollupConsiderations,s=t.filter(e=>!(!this.childFilter.checkChildForRollupSubprocess(e,"measure")||!e.objectiveMeasureStatus||null===e.objectiveNormalizedMeasure||!i.measureSatisfactionIfActive&&(e.activityAttemptActive||e.isActive)));if(0===s.length)return e.objectiveMeasureStatus=!1,[];const r=this.calculateComplexWeightedMeasure(e,s,{enableThresholdBias:!1});return e.objectiveNormalizedMeasure=r,e.objectiveMeasureStatus=!0,this.identifyActivityClusters(s)}completionMeasureRollupProcess(e){const t=e.getAvailableChildren();if(0===t.length)return;const i=t.filter(e=>e.attemptCompletionAmountStatus);if(0===i.length)return void(e.attemptCompletionAmountStatus=!1);let s=0,r=0;for(const e of i)s+=e.attemptCompletionAmount*e.progressWeight,r+=e.progressWeight;r>0&&(e.attemptCompletionAmount=s/r,e.attemptCompletionAmountStatus=!0)}calculateComplexWeightedMeasure(e,t,i){let s=0,r=0;const n=[],o=i?.enableThresholdBias??!0;for(const e of t)if(this.childFilter.checkChildForRollupSubprocess(e,"measure")&&e.objectiveMeasureStatus&&null!==e.objectiveNormalizedMeasure){const t=this.calculateAdjustedWeight(e,e.sequencingControls.objectiveMeasureWeight,o);s+=e.objectiveNormalizedMeasure*t,r+=t,n.push({childId:e.id,measure:e.objectiveNormalizedMeasure,weight:t})}return this.eventCallback?.("complex_weighting_calculated",{activityId:e.id,weightingDetails:n,totalWeight:r,totalWeightedMeasure:s,result:r>0?s/r:0}),r>0?s/r:0}calculateAdjustedWeight(e,t,i=!0){let s=t;return"completed"!==e.completionStatus&&(s*=.8),e.attemptCount>1&&(s*=Math.max(.5,1-.1*(e.attemptCount-1))),e.hasAttemptLimitExceeded()&&(s*=.6),i&&e.objectiveMeasureStatus&&(s*=(e.scaledPassingScore??.7)>e.objectiveNormalizedMeasure?.95:1.05),Math.max(0,s)}identifyActivityClusters(e){const t=[];for(const i of e)i.children.length>0&&i.sequencingControls.flow&&t.push(i);return t}}class We{childFilter;ruleEvaluator;eventCallback;constructor(e,t,i){this.childFilter=e,this.ruleEvaluator=t,this.eventCallback=i||null}objectiveRollupProcess(e){const t=this.objectiveRollupUsingRules(e,e.rollupRules.rules);if(null!==t)return e.objectiveSatisfiedStatus=t,void this.syncPrimaryObjectiveFromActivity(e);const i=this.objectiveRollupUsingMeasure(e);if(null!==i)return e.objectiveSatisfiedStatus=i,void this.syncPrimaryObjectiveFromActivity(e);e.objectiveSatisfiedStatus=this.objectiveRollupUsingDefault(e),this.syncPrimaryObjectiveFromActivity(e)}objectiveRollupUsingRules(e,t){const i=t.filter(e=>e.action===ze.SATISFIED),s=t.filter(e=>e.action===ze.NOT_SATISFIED);for(const t of i)if(this.ruleEvaluator.evaluateRollupRule(e,t))return!0;for(const t of s)if(this.ruleEvaluator.evaluateRollupRule(e,t))return!1;return null}objectiveRollupUsingMeasure(e){return e.objectiveMeasureStatus&&null!==e.scaledPassingScore?e.objectiveNormalizedMeasure>=e.scaledPassingScore:null}objectiveRollupUsingDefault(e){const t=e.getAvailableChildren();if(0===t.length)return!1;const i=e.rollupConsiderations,s=t.filter(e=>!(!this.childFilter.checkChildForRollupSubprocess(e,"objective","satisfied")||!this.childFilter.checkChildForRollupSubprocess(e,"objective","notSatisfied")||!i.measureSatisfactionIfActive&&(e.activityAttemptActive||e.isActive)));return 0!==s.length&&!s.some(e=>!this.childFilter.isChildSatisfiedForRollup(e))&&s.every(e=>this.childFilter.isChildSatisfiedForRollup(e))}syncPrimaryObjectiveFromActivity(e){e.primaryObjective&&(e.primaryObjective.satisfiedStatus=e.objectiveSatisfiedStatus,e.primaryObjective.satisfiedStatusKnown=e.objectiveSatisfiedStatusKnown,e.primaryObjective.measureStatus=e.objectiveMeasureStatus,e.primaryObjective.normalizedMeasure=e.objectiveNormalizedMeasure,e.primaryObjective.progressMeasure=e.progressMeasure,e.primaryObjective.progressMeasureStatus=e.progressMeasureStatus,e.primaryObjective.completionStatus=e.completionStatus)}}class Ke{childFilter;ruleEvaluator;objectiveProcessor;eventCallback;constructor(e,t,i,s){this.childFilter=e,this.ruleEvaluator=t,this.objectiveProcessor=i,this.eventCallback=s||null}activityProgressRollupProcess(e){if(this.activityProgressRollupUsingMeasure(e))return;const t=e.rollupRules,i=t.rules.filter(e=>e.action===ze.COMPLETED),s=t.rules.filter(e=>e.action===ze.INCOMPLETE);for(const t of i)if(this.ruleEvaluator.evaluateRollupRule(e,t))return e.completionStatus=O,void this.objectiveProcessor.syncPrimaryObjectiveFromActivity(e);for(const t of s)if(this.ruleEvaluator.evaluateRollupRule(e,t))return e.completionStatus=T,void this.objectiveProcessor.syncPrimaryObjectiveFromActivity(e);const r=e.getAvailableChildren().filter(e=>this.childFilter.checkChildForRollupSubprocess(e,"progress","completed")&&this.childFilter.checkChildForRollupSubprocess(e,"progress","incomplete"));return 0===r.length||r.some(e=>!this.childFilter.isChildCompletedForRollup(e))?(e.completionStatus=T,void this.objectiveProcessor.syncPrimaryObjectiveFromActivity(e)):(e.completionStatus=O,void this.objectiveProcessor.syncPrimaryObjectiveFromActivity(e))}activityProgressRollupUsingMeasure(e){return!!e.completedByMeasure&&(e.attemptCompletionAmountStatus?(e.completionStatus=e.minProgressMeasure>e.attemptCompletionAmount?T:O,this.objectiveProcessor.syncPrimaryObjectiveFromActivity(e),!0):(e.completionStatus=j,this.objectiveProcessor.syncPrimaryObjectiveFromActivity(e),!0))}}class Je{eventCallback;constructor(e){this.eventCallback=e||null}durationRollupProcess(e){if(0===e.children.length)return;const s=e.getAvailableChildren();if(0===s.length)return;let r=null,n=null,o=null,a=null,c=0,l=0;for(const t of s){t.activityStartTimestampUtc&&(r&&t.activityStartTimestampUtc>=r||(r=t.activityStartTimestampUtc)),t.activityEndedDate&&(o&&o>=t.activityEndedDate||(o=t.activityEndedDate));const s="PT0H0M0S"!==t.activityExperiencedDurationValue?t.activityExperiencedDurationValue:t.activityExperiencedDuration;if(s&&"PT0H0M0S"!==s&&(c+=i(s,k)),!e.attemptStartTimestampUtc||t.attemptStartTimestampUtc&&t.attemptStartTimestampUtc>=e.attemptStartTimestampUtc){t.attemptStartTimestampUtc&&(n&&t.attemptStartTimestampUtc>=n||(n=t.attemptStartTimestampUtc)),t.activityEndedDate&&(a&&a>=t.activityEndedDate||(a=t.activityEndedDate));const e="PT0H0M0S"!==t.attemptExperiencedDurationValue?t.attemptExperiencedDurationValue:t.attemptExperiencedDuration;e&&"PT0H0M0S"!==e&&(l+=i(e,k))}}if(null!==r){if(e.activityStartTimestampUtc=r,!e.attemptStartTimestampUtc&&n&&(e.attemptStartTimestampUtc=n),e.activityEndedDate=o,o&&e.activityStartTimestampUtc){const i=new Date(e.activityStartTimestampUtc),s=o.getTime()-i.getTime();e.activityAbsoluteDurationValue=t(Math.max(0,s/1e3))}if(a&&e.attemptStartTimestampUtc){const i=new Date(e.attemptStartTimestampUtc),s=a.getTime()-i.getTime();e.attemptAbsoluteDurationValue=t(Math.max(0,s/1e3))}e.activityExperiencedDurationValue=t(c),e.attemptExperiencedDurationValue=t(l),this.eventCallback?.("duration_rollup_completed",{activityId:e.id,activityAbsoluteDuration:e.activityAbsoluteDurationValue,attemptAbsoluteDuration:e.attemptAbsoluteDurationValue,activityExperiencedDuration:e.activityExperiencedDurationValue,attemptExperiencedDuration:e.attemptExperiencedDurationValue,childCount:s.length})}}}class Xe{measureProcessor;objectiveProcessor;progressProcessor;eventCallback;processingClusters=new Set;constructor(e,t,i,s){this.measureProcessor=e,this.objectiveProcessor=t,this.progressProcessor=i,this.eventCallback=s||null}processCrossClusterDependencies(e,t,i=0){if(10>i)if(this.processingClusters.has(e.id))this.eventCallback?.("cross_cluster_skip_reentrant",{activityId:e.id});else try{this.processingClusters.add(e.id),this.eventCallback?.("cross_cluster_processing_started",{activityId:e.id,clusterCount:t.length,depth:i});const s=new Map;for(const e of t)this.analyzeCrossClusterDependencies(e,s);const r=this.resolveDependencyOrder(s);for(const e of r){const s=t.find(t=>t.id===e);s&&this.processClusterRollup(s,i)}this.eventCallback?.("cross_cluster_processing_completed",{activityId:e.id,processedClusters:r.length,dependencyMap:Array.from(s.entries())})}catch(t){this.eventCallback?.("cross_cluster_processing_error",{activityId:e.id,error:t instanceof Error?t.message:t+""})}finally{this.processingClusters.delete(e.id)}else this.eventCallback?.("cross_cluster_max_depth_reached",{activityId:e.id,depth:i,maxDepth:10})}identifyActivityClusters(e){const t=[];for(const i of e)i.children.length>0&&i.sequencingControls.flow&&t.push(i);return t}analyzeCrossClusterDependencies(e,t){t.set(e.id,[])}resolveDependencyOrder(e){const t=[],i=new Set,s=id=>{if(t.includes(id))return;if(i.has(id))return void this.eventCallback?.("circular_dependency_detected",{activityId:id});i.add(id);const r=e.get(id)||[];for(const e of r)s(e);i.delete(id),t.push(id)};for(const id of Array.from(e.keys()))s(id);return t}processClusterRollup(e,t=0){const i=this.measureProcessor.measureRollupProcess(e);e.sequencingControls.rollupObjectiveSatisfied&&this.objectiveProcessor.objectiveRollupProcess(e),e.sequencingControls.rollupProgressCompletion&&this.progressProcessor.activityProgressRollupProcess(e),i.length>1&&this.processCrossClusterDependencies(e,i,t+1)}}class Qe{eventCallback;constructor(e){this.eventCallback=e||null}processGlobalObjectiveMapping(e,t){try{this.eventCallback?.("global_objective_processing_started",{activityId:e.id,globalObjectiveCount:t.size});const i=[];this.collectActivitiesRecursive(e,i);for(const e of i)this.syncGlobalObjectivesWritePhase(e,t);for(const e of i)this.syncGlobalObjectivesReadPhase(e,t);this.eventCallback?.("global_objective_processing_completed",{activityId:e.id,processedObjectives:t.size})}catch(t){this.eventCallback?.("global_objective_processing_error",{activityId:e.id,error:t instanceof Error?t.message:t+""})}}collectActivitiesRecursive(e,result){result.push(e);for(const t of e.children)this.collectActivitiesRecursive(t,result)}syncGlobalObjectivesWritePhase(e,t){const objectives=e.getAllObjectives();for(const i of objectives){const s=i.mapInfo.length>0?i.mapInfo:[this.createDefaultMapInfo(i)];for(const r of s){const s=this.ensureGlobalObjectiveEntry(t,r.targetObjectiveID||i.id,i);r.writeSatisfiedStatus&&i.measureStatus&&i.isDirty("satisfiedStatus")&&(s.satisfiedStatus=i.satisfiedStatus,s.satisfiedStatusKnown=!0,i.clearDirty("satisfiedStatus")),r.writeNormalizedMeasure&&i.measureStatus&&i.isDirty("normalizedMeasure")&&(s.normalizedMeasure=i.normalizedMeasure,s.normalizedMeasureKnown=!0,i.clearDirty("normalizedMeasure"),s.satisfiedByMeasure||i.satisfiedByMeasure)&&(s.satisfiedStatus=i.normalizedMeasure>=(i.minNormalizedMeasure??e.scaledPassingScore??.7),s.satisfiedStatusKnown=!0,i.clearDirty("satisfiedStatus")),r.writeCompletionStatus&&i.completionStatus!==j&&i.isDirty("completionStatus")&&(s.completionStatus=i.completionStatus,s.completionStatusKnown=!0,i.clearDirty("completionStatus")),r.writeProgressMeasure&&i.progressMeasureStatus&&i.isDirty("progressMeasure")&&(s.progressMeasure=i.progressMeasure,s.progressMeasureKnown=!0,i.clearDirty("progressMeasure")),r.updateAttemptData&&this.updateActivityAttemptData(e,s,i)}}}syncGlobalObjectivesReadPhase(e,t){const objectives=e.getAllObjectives();for(const i of objectives){const s=i.mapInfo.length>0?i.mapInfo:[this.createDefaultMapInfo(i)];for(const r of s){const s=t.get(r.targetObjectiveID||i.id);if(!s)continue;const n=i.isPrimary;r.readSatisfiedStatus&&s.satisfiedStatusKnown&&(i.satisfiedStatus=s.satisfiedStatus,i.measureStatus=!0),r.readNormalizedMeasure&&s.normalizedMeasureKnown&&(i.normalizedMeasure=s.normalizedMeasure,i.measureStatus=!0,s.satisfiedByMeasure||i.satisfiedByMeasure)&&(i.satisfiedStatus=s.normalizedMeasure>=(i.minNormalizedMeasure??e.scaledPassingScore??.7)),r.readProgressMeasure&&s.progressMeasureKnown&&(i.progressMeasure=s.progressMeasure,i.progressMeasureStatus=!0),r.readCompletionStatus&&s.completionStatusKnown&&(i.completionStatus=s.completionStatus),n&&i.applyToActivity(e),this.eventCallback?.("objective_synchronized",{activityId:e.id,objectiveId:i.id,globalState:s,synchronizationTime:(new Date).toISOString()})}}}synchronizeGlobalObjectives(e,t){const objectives=e.getAllObjectives();for(const i of objectives){const s=i.mapInfo.length>0?i.mapInfo:[this.createDefaultMapInfo(i)];for(const r of s){const s=this.ensureGlobalObjectiveEntry(t,r.targetObjectiveID||i.id,i);this.syncObjectiveState(e,i,r,s)}}}syncObjectiveState(e,t,i,s){try{const r=this.getLocalObjectiveState(e,t,t.isPrimary);i.readSatisfiedStatus&&s.satisfiedStatusKnown&&(t.satisfiedStatus=s.satisfiedStatus,t.measureStatus=!0),i.readNormalizedMeasure&&s.normalizedMeasureKnown&&(t.normalizedMeasure=s.normalizedMeasure,t.measureStatus=!0,s.satisfiedByMeasure||t.satisfiedByMeasure)&&(t.satisfiedStatus=s.normalizedMeasure>=(t.minNormalizedMeasure??e.scaledPassingScore??.7)),i.readProgressMeasure&&s.progressMeasureKnown&&(t.progressMeasure=s.progressMeasure,t.progressMeasureStatus=!0),i.readCompletionStatus&&s.completionStatusKnown&&(t.completionStatus=s.completionStatus),t.isPrimary&&t.applyToActivity(e),i.writeSatisfiedStatus&&t.measureStatus&&(s.satisfiedStatus=t.satisfiedStatus,s.satisfiedStatusKnown=!0),i.writeNormalizedMeasure&&t.measureStatus&&(s.normalizedMeasure=t.normalizedMeasure,s.normalizedMeasureKnown=!0,s.satisfiedByMeasure||t.satisfiedByMeasure)&&(s.satisfiedStatus=t.normalizedMeasure>=(t.minNormalizedMeasure??e.scaledPassingScore??.7),s.satisfiedStatusKnown=!0),i.writeCompletionStatus&&t.completionStatus!==j&&(s.completionStatus=t.completionStatus,s.completionStatusKnown=!0),i.writeProgressMeasure&&t.progressMeasureStatus&&(s.progressMeasure=t.progressMeasure,s.progressMeasureKnown=!0),i.updateAttemptData&&this.updateActivityAttemptData(e,s,t),this.eventCallback?.("objective_synchronized",{activityId:e.id,objectiveId:t.id,localState:r,globalState:s,synchronizationTime:(new Date).toISOString()})}catch(i){this.eventCallback?.("objective_sync_error",{activityId:e.id,objectiveId:t.id,error:i instanceof Error?i.message:i+"",timestamp:(new Date).toISOString()})}}ensureGlobalObjectiveEntry(e,t,i){return e.has(t)||e.set(t,{id:t,satisfiedStatus:i.satisfiedStatus,satisfiedStatusKnown:i.satisfiedStatusKnown,normalizedMeasure:i.normalizedMeasure,normalizedMeasureKnown:i.measureStatus,progressMeasure:i.progressMeasure,progressMeasureKnown:i.progressMeasureStatus,completionStatus:i.completionStatus,completionStatusKnown:i.completionStatus!==j,satisfiedByMeasure:i.satisfiedByMeasure,minNormalizedMeasure:i.minNormalizedMeasure}),e.get(t)}createDefaultMapInfo(e){return{targetObjectiveID:e.id,readSatisfiedStatus:!1,writeSatisfiedStatus:!0,readNormalizedMeasure:!1,writeNormalizedMeasure:!0,readCompletionStatus:!1,writeCompletionStatus:!0,readProgressMeasure:!1,writeProgressMeasure:!0,updateAttemptData:e.isPrimary}}getLocalObjectiveState(e,t,i){return i?{id:t.id,satisfiedStatus:e.objectiveSatisfiedStatus,measureStatus:e.objectiveMeasureStatus,normalizedMeasure:e.objectiveNormalizedMeasure,progressMeasure:e.progressMeasure,progressMeasureStatus:e.progressMeasureStatus,completionStatus:e.completionStatus,scaledPassingScore:e.scaledPassingScore}:{id:t.id,satisfiedStatus:t.satisfiedStatus,measureStatus:t.measureStatus,normalizedMeasure:t.normalizedMeasure,progressMeasure:t.progressMeasure,progressMeasureStatus:t.progressMeasureStatus,completionStatus:t.completionStatus,scaledPassingScore:t.minNormalizedMeasure}}updateActivityAttemptData(e,t,i){try{if(!i.isPrimary&&!t.updateAttemptData)return;const s=e.rollupRules.rules.some(e=>"completed"===e.action||"incomplete"===e.action);t.satisfiedStatusKnown&&t.satisfiedStatus&&(s||e.completionStatus!==j&&e.completionStatus!==T||(e.completionStatus=O),"unknown"===e.successStatus&&(e.successStatus="passed")),t.attemptCount&&t.attemptCount>e.attemptCount&&(e.attemptCount=t.attemptCount),t.progressMeasureKnown&&void 0!==t.progressMeasure&&(e.attemptCompletionAmount=t.progressMeasure),t.attemptAbsoluteDuration&&(e.attemptAbsoluteDuration=t.attemptAbsoluteDuration),t.attemptExperiencedDuration&&(e.attemptExperiencedDuration=t.attemptExperiencedDuration),t.activityAbsoluteDuration&&(e.activityAbsoluteDuration=t.activityAbsoluteDuration),t.activityExperiencedDuration&&(e.activityExperiencedDuration=t.activityExperiencedDuration),void 0!==t.location&&(e.location=t.location),void 0!==t.suspendData&&(e.isSuspended=t.suspendData.length>0)}catch(t){this.eventCallback?.("attempt_data_update_error",{activityId:e.id,error:t instanceof Error?t.message:t+"",timestamp:(new Date).toISOString()})}}}class Ze{rollupStateLog=[];childFilter;eventCallback;constructor(e,t){this.childFilter=e,this.eventCallback=t||null}validateRollupStateConsistency(e){try{this.eventCallback?.("rollup_validation_started",{activityId:e.id,timestamp:(new Date).toISOString()});const t=[];return this.validateActivityRollupState(e,t),t.length>0?(this.eventCallback?.("rollup_state_inconsistencies",{activityId:e.id,inconsistencies:t,count:t.length}),!1):(this.eventCallback?.("rollup_validation_completed",{activityId:e.id,result:"consistent"}),!0)}catch(t){return this.eventCallback?.("rollup_validation_error",{activityId:e.id,error:t instanceof Error?t.message:t+""}),!1}}validateActivityRollupState(e,t){const i=e.id;e.objectiveMeasureStatus&&null===e.objectiveNormalizedMeasure&&t.push(`Activity ${i}: measure status true but normalized measure is null`),e.objectiveMeasureStatus&&null!==e.scaledPassingScore&&"unknown"!==e.successStatus&&e.objectiveSatisfiedStatus!==e.objectiveNormalizedMeasure>=e.scaledPassingScore&&t.push(`Activity ${i}: satisfaction status inconsistent with measure`);const s=e.sequencingControls,r=e.getAvailableChildren();if(r.length>0&&s.rollupObjectiveSatisfied){const s=r.filter(e=>this.childFilter.checkChildForRollupSubprocess(e,"objective","satisfied")&&this.childFilter.isChildSatisfiedForRollup(e)),n=r.filter(e=>this.childFilter.checkChildForRollupSubprocess(e,"objective","notSatisfied")&&!this.childFilter.isChildSatisfiedForRollup(e));s.length>0&&0===n.length&&!1===e.objectiveSatisfiedStatus&&0===e.rollupRules.rules.length&&t.push(`Activity ${i}: all children satisfied but parent is not satisfied (no rollup rules to override)`)}if(r.length>0&&s.rollupProgressCompletion){const s=r.filter(e=>this.childFilter.checkChildForRollupSubprocess(e,"progress","completed")&&this.childFilter.isChildCompletedForRollup(e)),n=r.filter(e=>this.childFilter.checkChildForRollupSubprocess(e,"progress","incomplete")&&!this.childFilter.isChildCompletedForRollup(e));s.length>0&&0===n.length&&"completed"!==e.completionStatus&&0===e.rollupRules.rules.length&&t.push(`Activity ${i}: all children completed but parent is incomplete (no rollup rules to override)`)}for(const e of r)this.validateActivityRollupState(e,t);this.rollupStateLog.push({activity:i,timestamp:(new Date).toISOString(),state:{measureStatus:e.objectiveMeasureStatus,measure:e.objectiveNormalizedMeasure,satisfiedStatus:e.objectiveSatisfiedStatus,completionStatus:e.completionStatus}})}getRollupStateLog(){return[...this.rollupStateLog]}clearRollupStateLog(){this.rollupStateLog=[]}}class et{childFilter;ruleEvaluator;measureProcessor;objectiveProcessor;progressProcessor;durationProcessor;globalObjectiveSynchronizer;stateValidator;crossClusterProcessor;eventCallback;constructor(e){this.eventCallback=e||null,this.childFilter=new $e,this.ruleEvaluator=new Ge(this.childFilter),this.measureProcessor=new Ye(this.childFilter,e),this.objectiveProcessor=new We(this.childFilter,this.ruleEvaluator,e),this.progressProcessor=new Ke(this.childFilter,this.ruleEvaluator,this.objectiveProcessor,e),this.durationProcessor=new Je(e),this.globalObjectiveSynchronizer=new Qe(e),this.stateValidator=new Ze(this.childFilter,e),this.crossClusterProcessor=new Xe(this.measureProcessor,this.objectiveProcessor,this.progressProcessor,e)}overallRollupProcess(e){const t=[];let i=e.parent,s=!1,r=!0;for(;i;){if(i.children.length>0&&this.durationProcessor.durationRollupProcess(i),!s){const e=i.captureRollupStatus();if(i.sequencingControls.rollupObjectiveSatisfied||i.sequencingControls.rollupProgressCompletion){if(i.children.length>0){const e=this.measureProcessor.measureRollupProcess(i);this.measureProcessor.completionMeasureRollupProcess(i),e.length>1&&this.crossClusterProcessor.processCrossClusterDependencies(i,e)}i.sequencingControls.rollupObjectiveSatisfied&&this.objectiveProcessor.objectiveRollupProcess(i),i.sequencingControls.rollupProgressCompletion&&this.progressProcessor.activityProgressRollupProcess(i)}const n=i.captureRollupStatus();r||!Ue.compareRollupStatus(e,n)||(this.eventCallback?.("rollup_optimization_activated",{activityId:i.id,depth:t.length}),s=!0),!r&&Ue.compareRollupStatus(e,n)||t.push(i)}i=i.parent,r=!1}return t}validateRollupStateConsistency(e){return this.stateValidator.validateRollupStateConsistency(e)}processGlobalObjectiveMapping(e,t){this.globalObjectiveSynchronizer.processGlobalObjectiveMapping(e,t)}calculateComplexWeightedMeasure(e,t,i){return this.measureProcessor.calculateComplexWeightedMeasure(e,t,i)}processCrossClusterDependencies(e,t){this.crossClusterProcessor.processCrossClusterDependencies(e,t)}getChildFilter(){return this.childFilter}getRuleEvaluator(){return this.ruleEvaluator}getMeasureProcessor(){return this.measureProcessor}getObjectiveProcessor(){return this.objectiveProcessor}getProgressProcessor(){return this.progressProcessor}getDurationProcessor(){return this.durationProcessor}getGlobalObjectiveSynchronizer(){return this.globalObjectiveSynchronizer}getStateValidator(){return this.stateValidator}getCrossClusterProcessor(){return this.crossClusterProcessor}}const tt=[O,T,j],it=[M,w,R];function st(e){return e&&tt.includes(e)?e:null}function rt(e){return e&&it.includes(e)?e:null}class nt{context;constructor(e){this.context=e}transferRteData(e){if(!this.context.getCMIData)return;const t=this.context.getCMIData();t&&(this.transferPrimaryObjective(e,t),this.transferNonPrimaryObjectives(e,t),this.context.fireEvent("onRteDataTransfer",{activityId:e.id,timestamp:(new Date).toISOString()}))}transferPrimaryObjective(e,t){const i=st(t.completion_status);i&&i!==j&&(e.completionStatus=i,e.attemptProgressStatus=!0);let s=!1,r=!1,n=!1,o=0;const a=rt(t.success_status);if(a&&a!==R&&(r=a===M,s=!0,e.objectiveSatisfiedStatus=r,e.objectiveSatisfiedStatusKnown=!0,e.successStatus=a,e.objectiveMeasureStatus=!0),t.score){const i=this.normalizeScore(t.score);null!==i&&(o=i,n=!0,e.objectiveNormalizedMeasure=o,e.objectiveMeasureStatus=!0)}if(e.primaryObjective&&(s||n)&&(e.primaryObjective.initializeFromCMI(s?r:e.primaryObjective.satisfiedStatus,n?o:e.primaryObjective.normalizedMeasure,s||n),s&&(e.primaryObjective.satisfiedStatusKnown=!0,e.primaryObjective.progressStatus=!0)),t.progress_measure&&""!==t.progress_measure){const i=parseFloat(t.progress_measure);isNaN(i)||(e.progressMeasure=i,e.progressMeasureStatus=!0,e.primaryObjective&&(e.primaryObjective.progressMeasure=i,e.primaryObjective.progressMeasureStatus=!0))}}transferNonPrimaryObjectives(e,t){if(t.objectives&&0!==t.objectives.length)for(const i of t.objectives){if(!i.id)continue;const t=e.getObjectiveById(i.id);if(!t||t.isPrimary)continue;const s=t.objective;let r=!1,n=!1,o=!1,a=0;const c=rt(i.success_status);c&&c!==R&&(n=c===M,r=!0,s.progressStatus=!0);const l=st(i.completion_status);if(l&&l!==j&&(s.completionStatus=l),i.score){const e=this.normalizeScore(i.score);null!==e&&(a=e,o=!0)}if((r||o)&&s.initializeFromCMI(r?n:s.satisfiedStatus,o?a:s.normalizedMeasure,o),i.progress_measure&&""!==i.progress_measure){const e=parseFloat(i.progress_measure);isNaN(e)||(s.progressMeasure=e,s.progressMeasureStatus=!0)}}}normalizeScore(score){if(score.scaled&&""!==score.scaled){const e=parseFloat(score.scaled);if(!isNaN(e))return e}if(score.raw&&""!==score.raw&&score.min&&""!==score.min&&score.max&&""!==score.max){const e=parseFloat(score.raw),t=parseFloat(score.min),i=parseFloat(score.max);if(!isNaN(e)&&!isNaN(t)&&!isNaN(i)&&i>t)return Math.max(-1,Math.min(1,(e-t)/(i-t)))}return null}}class ot{activityTree;sequencingProcess;rollupProcess;globalObjectiveMap;eventCallback;getCMIData;is4thEdition;invalidateCacheCallback=null;_rteDataTransferService;constructor(e,t,i,s,r=null,n){this.activityTree=e,this.sequencingProcess=t,this.rollupProcess=i,this.globalObjectiveMap=s,this.eventCallback=r,this.getCMIData=n?.getCMIData||null,this.is4thEdition=n?.is4thEdition||!1,this._rteDataTransferService=new nt({getCMIData:this.getCMIData,fireEvent:(e,t)=>this.fireEvent(e,t)})}setInvalidateCacheCallback(e){this.invalidateCacheCallback=e}processTerminationRequest(request,e=!1,t){const i=this.activityTree.currentActivity;if(!i)return{terminationRequest:request,sequencingRequest:null,exception:"TB.2.3-1",valid:!1};if((request===ae.EXIT||request===ae.ABANDON)&&!i.isActive)return{terminationRequest:request,sequencingRequest:null,exception:"TB.2.3-2",valid:!1};if(this.fireEvent("onTerminationRequestProcessing",{request:request,hasSequencingRequest:e,currentActivity:i.id,exitType:t}),"logout"===t)return this.fireEvent("onSequencingDebug",{message:"cmi.exit='logout' detected, treating as EXIT_ALL",activityId:i.id}),this.handleExitAll(i);switch(request){case ae.EXIT:return this.handleExit(i,e);case ae.EXIT_ALL:return this.handleExitAll(i);case ae.ABANDON:return this.handleAbandon(i,e);case ae.ABANDON_ALL:return this.handleAbandonAll(i);case ae.SUSPEND_ALL:return this.handleSuspendAll(i);default:return{terminationRequest:request,sequencingRequest:null,exception:"TB.2.3-7",valid:!1}}}handleExitTermination(e,t){return this.handleExit(e,t)}handleExit(e,t){e.children.length>0&&this.terminateDescendants(e),this.endAttempt(e);const i=this.evaluateExitRules(e);if("EXIT_ALL"===i.action)return this.handleExitAll(e);let s,r;"EXIT_PARENT"===i.action&&e.parent&&(this.activityTree.currentActivity=e.parent,this.endAttempt(this.activityTree.currentActivity));do{if(s=!1,r=this.evaluatePostConditions(this.activityTree.currentActivity||e),r.terminationRequest===ae.EXIT_ALL)return this.fireEvent("onPostConditionExitAll",{activity:(this.activityTree.currentActivity||e).id}),this.handleExitAll(this.activityTree.root);if(r.terminationRequest===ae.EXIT_PARENT){const t=this.activityTree.currentActivity||e;if(!t.parent)return{terminationRequest:ae.EXIT_PARENT,sequencingRequest:null,exception:"TB.2.3-4",valid:!1};this.activityTree.currentActivity=t.parent,this.endAttempt(this.activityTree.currentActivity),s=!0,this.fireEvent("onPostConditionExitParent",{fromActivity:t.id,toActivity:this.activityTree.currentActivity.id})}if(!s&&(this.activityTree.currentActivity||e)===this.activityTree.root&&r.sequencingRequest!==ae.RETRY)return{terminationRequest:ae.EXIT,sequencingRequest:ae.EXIT,exception:null,valid:!0}}while(s);if(!t&&!r.sequencingRequest){const t=this.activityTree.currentActivity||e;t.parent&&this.activityTree.setCurrentActivityWithoutActivation(t.parent)}return{terminationRequest:ae.EXIT,sequencingRequest:r.sequencingRequest,exception:null,valid:!0}}handleExitAll(e){return this.activityTree.root&&this.handleMultiLevelExit(this.activityTree.root),this.activityTree.root&&this.endAttempt(this.activityTree.root),this.activityTree.currentActivity=null,this.cleanupSuspendedActivity(),{terminationRequest:ae.EXIT_ALL,sequencingRequest:ae.EXIT,exception:null,valid:!0}}handleAbandon(e,t){return e.isActive=!1,t||(this.activityTree.currentActivity=e.parent),{terminationRequest:ae.ABANDON,sequencingRequest:null,exception:null,valid:!0}}handleAbandonAll(e){const t=[];let i=e;for(;null!==i;)t.push(i),i=i.parent;if(0===t.length)return{terminationRequest:ae.ABANDON_ALL,sequencingRequest:null,exception:"TB.2.3-6",valid:!1};for(const e of t)e.isActive=!1;return this.activityTree.currentActivity=null,this.cleanupSuspendedActivity(),{terminationRequest:ae.ABANDON_ALL,sequencingRequest:null,exception:null,valid:!0}}handleSuspendAll(e){const t=this.processSuspendAllRequest(e);return t.valid?{terminationRequest:ae.SUSPEND_ALL,sequencingRequest:ae.EXIT,exception:null,valid:!0}:t}processSuspendAllRequest(e){const t=this.activityTree.root;if(!e||!t)return this.fireEvent("onSuspendError",{exception:"TB.2.3-1",message:"No current activity to suspend",activity:e?.id}),{terminationRequest:ae.SUSPEND_ALL,sequencingRequest:null,exception:"TB.2.3-1",valid:!1};if(e===t&&!e.isActive&&!e.isSuspended)return this.fireEvent("onSuspendError",{exception:"TB.2.3-3",message:"Nothing to suspend (root activity)",activity:e.id}),{terminationRequest:ae.SUSPEND_ALL,sequencingRequest:null,exception:"TB.2.3-3",valid:!1};this.activityTree.suspendedActivity=e;const i=e,s=[];let r=i;for(;null!==r;)s.push(r),r=r.parent;if(0===s.length)return this.fireEvent("onSuspendError",{exception:"TB.2.3-5",message:"Activity path is empty",activity:i?.id}),{terminationRequest:ae.SUSPEND_ALL,sequencingRequest:null,exception:"TB.2.3-5",valid:!1};for(const e of s)e.isActive=!1,e.isSuspended=!0;return this.activityTree.currentActivity=t,t.isActive=!1,this.fireEvent("onActivitySuspended",{activity:i?.id,suspendedPath:s.map(e=>e.id),pathLength:s.length,timestamp:(new Date).toISOString()}),{terminationRequest:ae.SUSPEND_ALL,sequencingRequest:null,exception:null,valid:!0}}evaluateExitRules(e,t=0){t++;const i=e.sequencingRules.exitConditionRules;for(const s of i){let i;if(i="all"===s.conditionCombination?s.conditions.every(t=>t.evaluate(e)):s.conditions.some(t=>t.evaluate(e)),i){if(s.action===te.EXIT_PARENT)return{action:"EXIT_PARENT",recursionDepth:t};if(s.action===te.EXIT_ALL)return{action:"EXIT_ALL",recursionDepth:t}}}return{action:null,recursionDepth:t}}evaluatePostConditions(e){const t=this.sequencingProcess.evaluatePostConditionRules(e);return(t.sequencingRequest||t.terminationRequest)&&this.fireEvent("onPostConditionEvaluated",{activity:e.id,sequencingRequest:t.sequencingRequest,terminationRequest:t.terminationRequest,timestamp:(new Date).toISOString()}),t}handleMultiLevelExit(e){this.processExitAtLevel(e,0),this.terminateAll(e)}processExitAtLevel(e,t){const i=this.evaluateExitRules(e,0);i.action&&this.fireEvent("onMultiLevelExitAction",{activity:e.id,level:t,action:i.action});for(const i of e.children)this.processExitAtLevel(i,t+1)}cleanupSuspendedActivity(){const e=this.activityTree.suspendedActivity;if(e){let t=e;const i=[];for(;t;)t.isSuspended&&(t.isSuspended=!1,i.push(t.id)),t=t.parent;this.activityTree.suspendedActivity=null,this.fireEvent("onSuspendedActivityCleanup",{cleanedActivities:i,originalSuspendedActivity:e.id})}}terminateAll(e){for(const t of e.children)this.terminateAll(t);e.isActive&&this.endAttempt(e)}terminateDescendants(e){for(const t of e.children){t.children.length>0&&this.terminateDescendants(t);const e=this.exitActionRulesSubprocess(t);t.isActive&&("EXIT_ALL"===e&&this.terminateDescendants(t),this.endAttempt(t))}}exitActionRulesSubprocess(e){const t=e.sequencingRules.exitConditionRules;for(const i of t){let t;if(t="all"===i.conditionCombination?i.conditions.every(t=>t.evaluate(e)):i.conditions.some(t=>t.evaluate(e)),t){if(i.action===te.EXIT_PARENT)return"EXIT_PARENT";if(i.action===te.EXIT_ALL)return"EXIT_ALL"}}return null}clearSuspendedActivity(){if(this.activityTree.suspendedActivity){let e=this.activityTree.suspendedActivity;for(;e;)e.isSuspended=!1,e=e.parent;this.activityTree.suspendedActivity=null}}endAttempt(e){if(e.isActive){if(this._rteDataTransferService.transferRteData(e),e.isActive=!1,e.activityAttemptActive=!1,0===e.children.length){if(!e.isSuspended&&(e.sequencingControls.completionSetByContent||e.attemptProgressStatus||(e.attemptProgressStatus=!0,e.completionStatus="completed",e.wasAutoCompleted=!0,this.fireEvent("onAutoCompletion",{activityId:e.id,timestamp:(new Date).toISOString()})),!e.sequencingControls.objectiveSetByContent)){const t=e.primaryObjective;t&&(t.progressStatus||(t.progressStatus=!0,t.satisfiedStatus=!0,e.objectiveSatisfiedStatus=!0,e.successStatus="passed",e.wasAutoSatisfied=!0,this.fireEvent("onAutoSatisfaction",{activityId:e.id,timestamp:(new Date).toISOString()})))}}else{const t=e.children.some(e=>e.isSuspended);e.isSuspended=t}"unknown"===e.completionStatus&&(e.completionStatus="incomplete"),"unknown"===e.successStatus&&e.objectiveSatisfiedStatus&&(e.successStatus=e.objectiveSatisfiedStatus?"passed":"failed"),this.rollupProcess.processGlobalObjectiveMapping(this.activityTree.root||e,this.globalObjectiveMap),this.rollupProcess.overallRollupProcess(e),this.invalidateCacheCallback&&this.invalidateCacheCallback(),this.activityTree.root&&this.rollupProcess.validateRollupStateConsistency(this.activityTree.root),_e.applySelectionAndRandomization(e,!1)}}fireEvent(e,t){try{this.eventCallback&&this.eventCallback(e,t)}catch(t){console.warn(`Failed to fire sequencing event ${e}: ${t}`)}}}class at{valid;targetActivity;exception;constructor(e=!1,t=null,i=null){this.valid=e,this.targetActivity=t,this.exception=i}}class ct{static HIDE_LMS_UI_ORDER=[...Z];activityTree;rollupProcess;globalObjectiveMap;adlNav;eventCallback;now;defaultHideLmsUi;defaultAuxiliaryResources;_deliveryInProgress=!1;contentDelivered=!1;checkActivityCallback=null;invalidateCacheCallback=null;updateNavigationValidityCallback=null;clearSuspendedActivityCallback=null;constructor(e,t,i,s=null,r=null,n){this.activityTree=e,this.rollupProcess=t,this.globalObjectiveMap=i,this.adlNav=s,this.eventCallback=r,this.now=n?.now||(()=>new Date),this.defaultHideLmsUi=n?.defaultHideLmsUi?[...n.defaultHideLmsUi]:[],this.defaultAuxiliaryResources=n?.defaultAuxiliaryResources?n.defaultAuxiliaryResources.map(e=>({...e})):[]}setCheckActivityCallback(e){this.checkActivityCallback=e}setInvalidateCacheCallback(e){this.invalidateCacheCallback=e}setUpdateNavigationValidityCallback(e){this.updateNavigationValidityCallback=e}setClearSuspendedActivityCallback(e){this.clearSuspendedActivityCallback=e}isDeliveryInProgress(){return this._deliveryInProgress}hasContentBeenDelivered(){return this.contentDelivered}resetContentDelivered(){this.contentDelivered=!1}setContentDelivered(e){this.contentDelivered=e}processDeliveryRequest(e){if(this.fireEvent("onDeliveryRequestProcessing",{activity:e.id,timestamp:(new Date).toISOString()}),e.children.length>0)return new at(!1,null,"DB.1.1-1");const t=this.getActivityPath(e,!0);if(0===t.length)return new at(!1,null,"DB.1.1-2");for(const e of t)if(this.checkActivityCallback&&!this.checkActivityCallback(e))return new at(!1,null,"DB.1.1-3");return new at(!0,e)}contentDeliveryEnvironmentProcess(e){this._deliveryInProgress=!0;try{const t=e.isSuspended;this.activityTree.suspendedActivity&&this.clearSuspendedActivityCallback&&this.clearSuspendedActivityCallback();const i=this.getActivityPath(e,!0);for(const e of i)e.isActive||(t||e.isSuspended?e.isSuspended=!1:e.incrementAttemptCount(),e.isActive=!0,_e.applySelectionAndRandomization(e,1>=e.attemptCount));this.activityTree.currentActivity=e,this.initializeForDelivery(e),this.setupAttemptTracking(e),this.contentDelivered=!0,this.adlNav&&this.updateNavigationValidityCallback&&this.updateNavigationValidityCallback(),this.fireDeliveryEvent(e)}finally{this._deliveryInProgress=!1}}initializeForDelivery(e){"unknown"===e.completionStatus&&0===e.children.length&&(e.completionStatus="not attempted"),null===e.objectiveSatisfiedStatus&&(e.objectiveSatisfiedStatus=!1),null===e.progressMeasure&&(e.progressMeasure=0,e.progressMeasureStatus=!1),null===e.objectiveNormalizedMeasure&&(e.objectiveNormalizedMeasure=0,e.objectiveMeasureStatus=!1),e.attemptAbsoluteDuration="PT0H0M0S",e.attemptExperiencedDuration="PT0H0M0S",e.isAvailable=!0}setupAttemptTracking(e){e.wasSkipped=!1,e.attemptAbsoluteStartTime=this.now().toISOString(),e.location||(e.location=""),e.activityAttemptActive=!0,e.learnerPrefs||(e.learnerPrefs={audioCaptioning:"0",audioLevel:"1",deliverySpeed:"1",language:""})}fireDeliveryEvent(e){try{this.eventCallback&&this.eventCallback("onActivityDelivery",e),console.debug(`Activity delivered: ${e.id} - ${e.title}`)}catch(e){console.warn("Failed to fire activity delivery event: "+e)}}getEffectiveHideLmsUi(e){const t=new Set;for(const e of this.defaultHideLmsUi)t.add(e);let i=e;for(;i;){for(const e of i.hideLmsUi)t.add(e);i=i.parent}return ct.HIDE_LMS_UI_ORDER.filter(e=>t.has(e))}getEffectiveAuxiliaryResources(e){const t=new Map;for(const e of this.defaultAuxiliaryResources)e.resourceId&&t.set(e.resourceId,{...e});const i=[];let s=e;for(;s;)i.push(s),s=s.parent;for(const e of i.reverse())for(const i of e.auxiliaryResources)i.resourceId&&t.set(i.resourceId,{...i});return Array.from(t.values())}getContentActivityData(e){return{hideLmsUi:this.getEffectiveHideLmsUi(e),auxiliaryResources:this.getEffectiveAuxiliaryResources(e),location:e.location||"",credit:e.credit||"credit",launchData:e.launchData||"",maxTimeAllowed:e.attemptAbsoluteDurationLimit||"",completionThreshold:e.completionThreshold?.toString()||"",timeLimitAction:e.timeLimitAction||"continue,no message"}}getActivityPath(e,t=!0){const i=[];let s=e;for(;null!==s;)i.unshift(s),s=s.parent;return!t&&i.length>0&&i.pop(),i}fireEvent(e,t){try{this.eventCallback&&this.eventCallback(e,t)}catch(t){console.warn(`Failed to fire sequencing event ${e}: ${t}`)}}}class lt{activityTree;sequencingProcess;cache=null;isDirty=!0;constructor(e,t){this.activityTree=e,this.sequencingProcess=t}predictContinueEnabled(){return this.ensureCacheValid(),this.cache?.continueEnabled??!1}predictPreviousEnabled(){return this.ensureCacheValid(),this.cache?.previousEnabled??!1}predictChoiceEnabled(e){return this.ensureCacheValid(),this.cache?.choiceEnabledMap.get(e)??!1}getAvailableChoices(){return this.ensureCacheValid(),Array.from(this.cache?.availableChoices??[])}getAllPredictions(){return this.ensureCacheValid(),{continueEnabled:this.cache?.continueEnabled??!1,previousEnabled:this.cache?.previousEnabled??!1,availableChoices:Array.from(this.cache?.availableChoices??[])}}invalidateCache(){this.isDirty=!0}updateCache(){this.isDirty=!0,this.ensureCacheValid()}ensureCacheValid(){const e=this.calculateTreeStateHash();!this.isDirty&&this.cache&&this.cache.treeStateHash===e||(this.recalculateCache(e),this.isDirty=!1)}recalculateCache(e){const t=this.activityTree.currentActivity;this.cache={continueEnabled:!1,previousEnabled:!1,availableChoices:new Set,choiceEnabledMap:new Map,treeStateHash:e},t?(this.cache.continueEnabled=this.predictContinueInternal(t),this.cache.previousEnabled=this.predictPreviousInternal(t),this.calculateAvailableChoices()):this.calculateAvailableChoicesFromRoot()}predictContinueInternal(e){return!!e.parent&&!!e.parent.sequencingControls.flow&&this.hasAvailableNextActivity(e)}hasAvailableNextActivity(e){const t=e.parent;if(!t)return!1;const i=t.children,s=i.indexOf(e);if(-1===s)return!1;if(i.length-1>s)for(let e=s+1;i.length>e;e++){const t=i[e];if(t&&this.isActivityPotentiallyDeliverableForward(t))return!0}return!(!t.parent||!t.sequencingControls.flow)&&this.hasAvailableNextActivity(t)}predictPreviousInternal(e){return!!e.parent&&!!e.parent.sequencingControls.flow&&!e.parent.sequencingControls.forwardOnly&&this.hasAvailablePreviousActivity(e)}hasAvailablePreviousActivity(e){const t=e.parent;if(!t)return!1;const i=t.children,s=i.indexOf(e);if(-1===s)return!1;if(s>0)for(let e=s-1;e>=0;e--){const t=i[e];if(t&&this.isActivityPotentiallyDeliverableBackward(t))return!0}return!(!t.parent||!t.sequencingControls.flow||t.sequencingControls.forwardOnly)&&this.hasAvailablePreviousActivity(t)}calculateAvailableChoicesFromRoot(){}calculateAvailableChoices(){this.cache&&this.activityTree.root&&this.recursivelyCheckChoiceAvailability(this.activityTree.root)}recursivelyCheckChoiceAvailability(e){if(!this.cache)return;const t=this.sequencingProcess.validateNavigationRequest(ae.CHOICE,e.id,this.activityTree.currentActivity).valid;if(this.cache.choiceEnabledMap.set(e.id,t),t&&this.cache.availableChoices.add(e.id),e.children)for(const t of e.children)this.recursivelyCheckChoiceAvailability(t)}isActivityPotentiallyDeliverableForward(e){if(e.isHiddenFromChoice||!e.isAvailable)return!1;if(0===e.children.length)return!!e.isVisible&&this.sequencingProcess.canActivityBeDelivered(e);for(const t of e.children)if(this.isActivityPotentiallyDeliverableForward(t))return!0;return!1}isActivityPotentiallyDeliverableBackward(e){if(e.isHiddenFromChoice||!e.isAvailable)return!1;if(0===e.children.length)return e.isVisible;for(const t of e.children)if(this.isActivityPotentiallyDeliverableBackward(t))return!0;return!1}calculateTreeStateHash(){const e=this.activityTree.currentActivity,t=this.activityTree.suspendedActivity;return[e?.id??"none",t?.id??"none",this.getActivityTreeStateSignature()].join("|")}getActivityTreeStateSignature(){if(!this.activityTree.root)return"empty";const e=[];return this.collectActivitySignatures(this.activityTree.root,e),e.join(":")}collectActivitySignatures(e,t){if(t.push(e.id+(e.isActive?"A":"-")+(e.isSuspended?"S":"-")+e.completionStatus+e.successStatus+e.attemptCount),e.children)for(const i of e.children)this.collectActivitySignatures(i,t)}}var ut=(e=>(e.START="start",e.RESUME_ALL="resumeAll",e.CONTINUE="continue",e.PREVIOUS="previous",e.CHOICE="choice",e.JUMP="jump",e.EXIT="exit",e.EXIT_ALL="exitAll",e.ABANDON="abandon",e.ABANDON_ALL="abandonAll",e.SUSPEND_ALL="suspendAll",e.NOT_VALID="_none_",e))(ut||{});class dt{valid;terminationRequest;sequencingRequest;targetActivityId;exception;constructor(e=!1,t=null,i=null,s=null,r=null){this.valid=e,this.terminationRequest=t,this.sequencingRequest=i,this.targetActivityId=s,this.exception=r}}class ht{activityTree;sequencingProcess;adlNav;eventCallback;navigationLookAhead;getEffectiveHideLmsUiCallback=null;constructor(e,t,i=null,s=null){this.activityTree=e,this.sequencingProcess=t,this.adlNav=i,this.eventCallback=s,this.navigationLookAhead=new lt(e,t)}setGetEffectiveHideLmsUiCallback(e){this.getEffectiveHideLmsUiCallback=e}getNavigationLookAhead(){return this.navigationLookAhead}validateRequest(request,e=null){this.fireEvent("onNavigationRequestProcessing",{request:request,targetActivityId:e});const t=this.activityTree.currentActivity;switch(request){case"start":return this.validateStartRequest(t);case"resumeAll":return this.validateResumeRequest(t);case"continue":return this.validateContinueRequest(t);case"previous":return this.validatePreviousRequest(t);case"choice":return this.validateChoiceRequest(t,e);case"jump":return this.validateJumpRequest(e);case"exit":return this.validateExitRequest(t);case"exitAll":return this.validateExitAllRequest(t);case"abandon":return this.validateAbandonRequest(t);case"abandonAll":return this.validateAbandonAllRequest(t);case"suspendAll":return this.validateSuspendAllRequest(t);default:return new dt(!1,null,null,null,"NB.2.1-18")}}validateStartRequest(e){return null!==e?new dt(!1,null,null,null,"NB.2.1-1"):new dt(!0,null,ae.START,null)}validateResumeRequest(e){return null!==e?new dt(!1,null,null,null,"NB.2.1-2"):null===this.activityTree.suspendedActivity?new dt(!1,null,null,null,"NB.2.1-3"):new dt(!0,null,ae.RESUME_ALL,null)}validateContinueRequest(e){return e?e.parent&&e.parent.sequencingControls.flow?new dt(!0,e.isActive?ae.EXIT:null,ae.CONTINUE,null):new dt(!1,null,null,null,"NB.2.1-5"):new dt(!1,null,null,null,"NB.2.1-4")}validatePreviousRequest(e){if(!e)return new dt(!1,null,null,null,"NB.2.1-6");if(!e.parent||!e.parent.sequencingControls.flow)return new dt(!1,null,null,null,"NB.2.1-7");const t=this.validateForwardOnlyConstraints(e);return t.valid?new dt(!0,e.isActive?ae.EXIT:null,ae.PREVIOUS,null):new dt(!1,null,null,null,t.exception)}validateChoiceRequest(e,t){if(!t)return new dt(!1,null,null,null,"NB.2.1-9");const i=this.activityTree.getActivity(t);if(!i)return new dt(!1,null,null,null,"NB.2.1-10");const s=this.validateChoicePath(e,i);return s.valid?new dt(!0,e?.isActive?ae.EXIT:null,ae.CHOICE,t):new dt(!1,null,null,null,s.exception)}validateJumpRequest(e){return e?new dt(!0,null,ae.JUMP,e):new dt(!1,null,null,null,"NB.2.1-12")}validateExitRequest(e){return e?new dt(!0,e===this.activityTree.root?ae.EXIT_ALL:ae.EXIT,null,null):new dt(!1,null,null,null,"NB.2.1-13")}validateExitAllRequest(e){return e?new dt(!0,ae.EXIT_ALL,null,null):new dt(!1,null,null,null,"NB.2.1-14")}validateAbandonRequest(e){return e?new dt(!0,ae.ABANDON,null,null):new dt(!1,null,null,null,"NB.2.1-15")}validateAbandonAllRequest(e){return e?new dt(!0,ae.ABANDON_ALL,null,null):new dt(!1,null,null,null,"NB.2.1-16")}validateSuspendAllRequest(e){return e?new dt(!0,ae.SUSPEND_ALL,null,null):new dt(!1,null,null,null,"NB.2.1-17")}validateChoicePath(e,t){if(t.isHiddenFromChoice)return{valid:!1,exception:"NB.2.1-11"};if(!t.isAvailable)return{valid:!1,exception:"NB.2.1-11"};if(this.isActivityDisabled(t))return{valid:!1,exception:"NB.2.1-11"};if(e){const i=this.findCommonAncestor(e,t);if(!i)return{valid:!1,exception:"NB.2.1-11"};let s=e;for(;s&&s!==i;){if(!0===s.isActive&&s.sequencingControls&&!1===s.sequencingControls.choiceExit&&t!==s&&!this.activityContains(s,t))return{valid:!1,exception:"NB.2.1-11"};s=s.parent}const r=this.validateConstrainChoice(e,t,i);if(!r.valid)return r;const n=this.validateChoiceSet(e,t,i);if(!n.valid)return n}let i=t;for(;i;){if(i.parent&&!i.parent.sequencingControls.choice)return{valid:!1,exception:"NB.2.1-11"};i=i.parent}return{valid:!0,exception:null}}validateForwardOnlyConstraints(e){if(e.parent?.sequencingControls.forwardOnly)return{valid:!1,exception:"NB.2.1-8"};let t=e.parent?.parent;for(;t;){if(t.sequencingControls.forwardOnly)return{valid:!1,exception:"NB.2.1-8"};t=t.parent}return{valid:!0,exception:null}}validateConstrainChoice(e,t,i){let s=i;for(;s;){if(s.sequencingControls?.constrainChoice||s.sequencingControls?.preventActivation){const i=this.findChildContaining(s,e);if(!i)return{valid:!1,exception:"NB.2.1-11"};if(t===s)return{valid:!1,exception:"NB.2.1-11"};const r=this.findChildContaining(s,t);if(!r)return{valid:!1,exception:"NB.2.1-11"};if(s.sequencingControls?.constrainChoice&&r!==i)return{valid:!1,exception:"NB.2.1-11"};if(s.sequencingControls?.preventActivation&&r!==i&&this.requiresNewActivation(r,t))return{valid:!1,exception:"NB.2.1-11"}}s=s.parent}return this.validateAncestors(i,e,t)}validateChoiceSet(e,t,i){if(!this.activityContains(i,t)&&t!==i)return{valid:!1,exception:"NB.2.1-11"};let s=t;for(;s&&s!==i;){if(!s.isAvailable||s.isHiddenFromChoice||this.isActivityDisabled(s))return{valid:!1,exception:"NB.2.1-11"};s=s.parent}return{valid:!0,exception:null}}isActivityDisabled(e){if(!e.isAvailable)return!0;if(e.isHiddenFromChoice)return!0;const t=this.evaluatePreConditionRulesForChoice(e);return!!t&&(t===te.DISABLED||t===te.HIDE_FROM_CHOICE||t===te.STOP_FORWARD_TRAVERSAL)}findChildContaining(e,t){for(const i of e.children){if(i===t)return i;if(this.activityContains(i,t))return i}return null}activityContains(e,t){let i=t;for(;i;){if(i===e)return!0;i=i.parent}return!1}findCommonAncestor(e,t){const i=[];let s=e;for(;s;)i.push(s),s=s.parent;for(s=t;s;){if(i.includes(s))return s;s=s.parent}return null}validateAncestors(e,t,i){const s=e.children;if(!s||0===s.length)return{valid:!0,exception:null};const r=this.findChildContaining(e,t),n=this.findChildContaining(e,i);if(!r||!n)return{valid:!1,exception:"NB.2.1-11"};const o=s.indexOf(r),a=s.indexOf(n);if(e.sequencingControls.forwardOnly&&o>a)return{valid:!1,exception:"NB.2.1-8"};const c=s.findIndex(e=>e?.sequencingControls.stopForwardTraversal);if(r.sequencingControls.stopForwardTraversal&&a>o)return{valid:!1,exception:"NB.2.1-11"};if(-1!==c&&a>c)return{valid:!1,exception:"NB.2.1-11"};if(a>o&&e.sequencingControls.forwardOnly)for(let e=o+1;a>e;e++){const t=s[e];if(t){if(t.sequencingControls.stopForwardTraversal)return{valid:!1,exception:"NB.2.1-11"};if(this.isActivityMandatory(t)&&!this.isActivityCompleted(t))return{valid:!1,exception:"NB.2.1-11"}}}return{valid:!0,exception:null}}requiresNewActivation(e,t){return!this.branchHasActiveAttempt(e)&&!t.activityAttemptActive&&!t.isActive}branchHasActiveAttempt(e){if(e.activityAttemptActive||e.isActive)return!0;for(const t of e.children)if(this.branchHasActiveAttempt(t))return!0;return!1}isActivityMandatory(e){if(!e.isAvailable||e.isHiddenFromChoice)return!1;const t=this.evaluatePreConditionRulesForChoice(e);return t!==te.SKIP&&t!==te.DISABLED&&t!==te.HIDE_FROM_CHOICE&&t!==te.STOP_FORWARD_TRAVERSAL&&!this.isActivityDisabled(e)&&!1!==e.mandatory}isActivityCompleted(e){if(!e.isAvailable||e.isHiddenFromChoice)return!0;const t=this.evaluatePreConditionRulesForChoice(e);return t===te.SKIP||t===te.DISABLED||t===te.HIDE_FROM_CHOICE||t===te.STOP_FORWARD_TRAVERSAL||!!this.isActivityDisabled(e)||"completed"===e.completionStatus||"passed"===e.successStatus||"passed"===e.successStatus}evaluatePreConditionRulesForChoice(e){if(!e.sequencingRules)return null;return e.sequencingRules.evaluatePreConditionRules(e)||null}updateNavigationValidity(){if(!this.adlNav||!this.activityTree.currentActivity)return;this.navigationLookAhead.invalidateCache();const e=this.navigationLookAhead.predictContinueEnabled();try{this.adlNav.request_valid.continue=e?"true":"false"}catch(e){}const t=this.navigationLookAhead.predictPreviousEnabled();try{this.adlNav.request_valid.previous=t?"true":"false"}catch(e){}const i=this.activityTree.getAllActivities(),s={},r={};for(const e of i){const t=this.validateRequest("choice",e.id);s[e.id]=t.valid?"true":"false";const i=this.validateRequest("jump",e.id);r[e.id]=i.valid?"true":"false"}try{this.adlNav.request_valid.choice=s}catch(e){}try{this.adlNav.request_valid.jump=r}catch(e){}const n=this.getEffectiveHideLmsUiCallback?this.getEffectiveHideLmsUiCallback(this.activityTree.currentActivity):[];this.fireEvent("onNavigationValidityUpdate",{continue:e,previous:t,choice:s,jump:r,hideLmsUi:n})}getAllPredictions(){return this.navigationLookAhead.getAllPredictions()}predictContinueEnabled(){return this.navigationLookAhead.predictContinueEnabled()}predictPreviousEnabled(){return this.navigationLookAhead.predictPreviousEnabled()}predictChoiceEnabled(e){return this.navigationLookAhead.predictChoiceEnabled(e)}getAvailableChoices(){return this.navigationLookAhead.getAvailableChoices()}invalidateCache(){this.navigationLookAhead.invalidateCache()}fireEvent(e,t){try{this.eventCallback&&this.eventCallback(e,t)}catch(t){console.warn(`Failed to fire sequencing event ${e}: ${t}`)}}}class mt{globalObjectiveMap=new Map;eventCallback=null;constructor(e){this.eventCallback=e||null}initialize(e){try{this.globalObjectiveMap.clear(),e&&this.collectObjectives(e),this.fireEvent("onGlobalObjectiveMapInitialized",{objectiveCount:this.globalObjectiveMap.size,timestamp:(new Date).toISOString()})}catch(e){this.fireEvent("onGlobalObjectiveMapError",{error:e instanceof Error?e.message:e+"",timestamp:(new Date).toISOString()})}}collectObjectives(e){const objectives=e.getAllObjectives();if(0===objectives.length){const t=e.id+"_default_objective";this.globalObjectiveMap.has(t)||this.globalObjectiveMap.set(t,{id:t,satisfiedStatus:e.objectiveSatisfiedStatus,satisfiedStatusKnown:e.objectiveMeasureStatus,normalizedMeasure:e.objectiveNormalizedMeasure,normalizedMeasureKnown:e.objectiveMeasureStatus,progressMeasure:e.progressMeasure,progressMeasureKnown:e.progressMeasureStatus,completionStatus:e.completionStatus,completionStatusKnown:e.completionStatus!==j,readSatisfiedStatus:!0,writeSatisfiedStatus:!0,readNormalizedMeasure:!0,writeNormalizedMeasure:!0,readCompletionStatus:!0,writeCompletionStatus:!0,readProgressMeasure:!0,writeProgressMeasure:!0,satisfiedByMeasure:null!==e.scaledPassingScore,minNormalizedMeasure:e.scaledPassingScore,updateAttemptData:!0})}for(const e of objectives){const t=e.mapInfo.length>0?e.mapInfo:[{targetObjectiveID:e.id,readSatisfiedStatus:!0,writeSatisfiedStatus:!0,readNormalizedMeasure:!0,writeNormalizedMeasure:!0,readProgressMeasure:!0,writeProgressMeasure:!0,readCompletionStatus:!0,writeCompletionStatus:!0,updateAttemptData:e.isPrimary}];for(const i of t){const t=i.targetObjectiveID||e.id;this.globalObjectiveMap.has(t)||this.globalObjectiveMap.set(t,{id:t,satisfiedStatus:e.satisfiedStatus,satisfiedStatusKnown:e.measureStatus,normalizedMeasure:e.normalizedMeasure,normalizedMeasureKnown:e.measureStatus,progressMeasure:e.progressMeasure,progressMeasureKnown:e.progressMeasureStatus,completionStatus:e.completionStatus,completionStatusKnown:e.completionStatus!==j,readSatisfiedStatus:i.readSatisfiedStatus??!1,writeSatisfiedStatus:i.writeSatisfiedStatus??!1,readNormalizedMeasure:i.readNormalizedMeasure??!1,writeNormalizedMeasure:i.writeNormalizedMeasure??!1,readProgressMeasure:i.readProgressMeasure??!1,writeProgressMeasure:i.writeProgressMeasure??!1,readCompletionStatus:i.readCompletionStatus??!1,writeCompletionStatus:i.writeCompletionStatus??!1,readRawScore:i.readRawScore??!1,writeRawScore:i.writeRawScore??!1,readMinScore:i.readMinScore??!1,writeMinScore:i.writeMinScore??!1,readMaxScore:i.readMaxScore??!1,writeMaxScore:i.writeMaxScore??!1,satisfiedByMeasure:e.satisfiedByMeasure,minNormalizedMeasure:e.minNormalizedMeasure,updateAttemptData:i.updateAttemptData??e.isPrimary})}}for(const t of e.children)this.collectObjectives(t)}getMap(){return this.globalObjectiveMap}getSnapshot(){return this.serialize()}restoreSnapshot(e){this.restore(e)}updateObjective(e,t){try{this.globalObjectiveMap.set(e,{...this.globalObjectiveMap.get(e),...t,lastUpdated:(new Date).toISOString()}),this.fireEvent("onGlobalObjectiveUpdated",{objectiveId:e,data:t,timestamp:(new Date).toISOString()})}catch(t){this.fireEvent("onGlobalObjectiveUpdateError",{objectiveId:e,error:t instanceof Error?t.message:t+"",timestamp:(new Date).toISOString()})}}synchronize(e,t){e&&t.processGlobalObjectiveMapping(e,this.globalObjectiveMap)}getObjective(e){return this.globalObjectiveMap.get(e)}hasObjective(e){return this.globalObjectiveMap.has(e)}getObjectiveIds(){return Array.from(this.globalObjectiveMap.keys())}getObjectiveCount(){return this.globalObjectiveMap.size}clear(){this.globalObjectiveMap.clear(),this.fireEvent("onGlobalObjectiveMapCleared",{timestamp:(new Date).toISOString()})}serialize(){const e={};return this.globalObjectiveMap.forEach((t,id)=>{e[id]={...t}}),e}restore(e){if(this.globalObjectiveMap.clear(),e){for(const[id,t]of Object.entries(e))this.globalObjectiveMap.set(id,{...t});this.fireEvent("onGlobalObjectiveMapRestored",{objectiveCount:this.globalObjectiveMap.size,timestamp:(new Date).toISOString()})}}fireEvent(e,t){try{this.eventCallback&&this.eventCallback(e,t)}catch(t){console.warn(`Failed to fire global objective event ${e}: ${t}`)}}}class pt{activityTree;globalObjectiveService;rollupProcess;adlNav;eventCallback;getEffectiveHideLmsUiCallback=null;getEffectiveAuxiliaryResourcesCallback=null;contentDeliveredGetter=null;contentDeliveredSetter=null;constructor(e,t,i,s=null,r=null){this.activityTree=e,this.globalObjectiveService=t,this.rollupProcess=i,this.adlNav=s,this.eventCallback=r}setGetEffectiveHideLmsUiCallback(e){this.getEffectiveHideLmsUiCallback=e}setGetEffectiveAuxiliaryResourcesCallback(e){this.getEffectiveAuxiliaryResourcesCallback=e}setContentDeliveredAccessors(e,t){this.contentDeliveredGetter=e,this.contentDeliveredSetter=t}getState(){return{version:"1.0",timestamp:(new Date).toISOString(),contentDelivered:!!this.contentDeliveredGetter&&this.contentDeliveredGetter(),currentActivity:this.activityTree.currentActivity?.id||null,suspendedActivity:this.activityTree.suspendedActivity?.id||null,activityStates:this.serializeActivities(),navigationState:this.getNavigationState(),globalObjectiveMap:this.globalObjectiveService.getSnapshot()}}restoreState(e){try{if(!e||"1.0"!==e.version)return console.warn("Incompatible sequencing state version"),!1;if(this.contentDeliveredSetter&&this.contentDeliveredSetter(e.contentDelivered||!1),e.globalObjectiveMap&&this.globalObjectiveService.restoreSnapshot(e.globalObjectiveMap),e.activityStates&&this.deserializeActivities(e.activityStates),e.currentActivity){const t=this.activityTree.getActivity(e.currentActivity);t&&(this.activityTree.currentActivity=t,t.isActive=!0)}if(e.suspendedActivity){const t=this.activityTree.getActivity(e.suspendedActivity);t&&(this.activityTree.suspendedActivity=t,t.isSuspended=!0)}return e.navigationState&&this.restoreNavigationState(e.navigationState),this.activityTree.root&&this.globalObjectiveService.synchronize(this.activityTree.root,this.rollupProcess),console.debug("Sequencing state restored successfully"),!0}catch(e){return console.error("Failed to restore sequencing state: "+e),!1}}serializeActivities(){const e={},t=i=>{e[i.id]={id:i.id,title:i.title,isActive:i.isActive,isSuspended:i.isSuspended,isCompleted:i.isCompleted,completionStatus:i.completionStatus,successStatus:i.successStatus,attemptCount:i.attemptCount,attemptCompletionAmount:i.attemptCompletionAmount,attemptAbsoluteDuration:i.attemptAbsoluteDuration,attemptExperiencedDuration:i.attemptExperiencedDuration,activityAbsoluteDuration:i.activityAbsoluteDuration,activityExperiencedDuration:i.activityExperiencedDuration,objectiveSatisfiedStatus:i.objectiveSatisfiedStatus,objectiveMeasureStatus:i.objectiveMeasureStatus,objectiveNormalizedMeasure:i.objectiveNormalizedMeasure,progressMeasure:i.progressMeasure,progressMeasureStatus:i.progressMeasureStatus,isAvailable:i.isAvailable,isHiddenFromChoice:i.isHiddenFromChoice,location:i.location,attemptAbsoluteStartTime:i.attemptAbsoluteStartTime,objectives:i.getObjectiveStateSnapshot(),auxiliaryResources:i.auxiliaryResources,selectionRandomizationState:{selectionCountStatus:i.sequencingControls.selectionCountStatus,reorderChildren:i.sequencingControls.reorderChildren,childOrder:i.children.map(e=>e.id),selectedChildIds:i.children.filter(e=>e.isAvailable).map(e=>e.id),hiddenFromChoiceChildIds:i.children.filter(e=>e.isHiddenFromChoice).map(e=>e.id)}};for(const e of i.children)t(e)};return this.activityTree.root&&t(this.activityTree.root),e}deserializeActivities(e){const t=i=>{const s=e[i.id];s&&(i.isActive=s.isActive||!1,i.isSuspended=s.isSuspended||!1,i.isCompleted=s.isCompleted||!1,i.completionStatus=s.completionStatus||"unknown",i.successStatus=s.successStatus||"unknown",i.attemptCount=s.attemptCount||0,i.attemptCompletionAmount=s.attemptCompletionAmount||0,i.attemptAbsoluteDuration=s.attemptAbsoluteDuration||"PT0H0M0S",i.attemptExperiencedDuration=s.attemptExperiencedDuration||"PT0H0M0S",i.activityAbsoluteDuration=s.activityAbsoluteDuration||"PT0H0M0S",i.activityExperiencedDuration=s.activityExperiencedDuration||"PT0H0M0S",i.objectiveSatisfiedStatus=s.objectiveSatisfiedStatus||!1,i.objectiveMeasureStatus=s.objectiveMeasureStatus||!1,i.objectiveNormalizedMeasure=s.objectiveNormalizedMeasure||0,i.progressMeasure=s.progressMeasure??0,i.progressMeasureStatus=s.progressMeasureStatus||!1,i.isAvailable=!1!==s.isAvailable,i.isHiddenFromChoice=!0===s.isHiddenFromChoice,i.location=s.location||"",i.attemptAbsoluteStartTime=s.attemptAbsoluteStartTime||"",Array.isArray(s.auxiliaryResources)&&(i.auxiliaryResources=s.auxiliaryResources),s.objectives&&i.applyObjectiveStateSnapshot(s.objectives));for(const e of i.children)t(e);if(s?.selectionRandomizationState){const e=s.selectionRandomizationState,t=i.sequencingControls;void 0!==e.selectionCountStatus&&(t.selectionCountStatus=e.selectionCountStatus),void 0!==e.reorderChildren&&(t.reorderChildren=e.reorderChildren),e.childOrder&&e.childOrder.length>0&&i.setChildOrder(e.childOrder);const r=Array.isArray(e.selectedChildIds)?new Set(e.selectedChildIds):null,n=Array.isArray(e.hiddenFromChoiceChildIds)?new Set(e.hiddenFromChoiceChildIds):null;if(r||n)for(const e of i.children){if(r){const t=r.has(e.id);e.isAvailable=t,n||(e.isHiddenFromChoice=!t)}n&&(e.isHiddenFromChoice=n.has(e.id))}i.setProcessedChildren(i.children.filter(e=>e.isAvailable))}else i.resetProcessedChildren()};this.activityTree.root&&t(this.activityTree.root)}getNavigationState(){if(!this.adlNav)return null;const e=this.getEffectiveHideLmsUiCallback?this.getEffectiveHideLmsUiCallback(this.activityTree.currentActivity):[],t=this.getEffectiveAuxiliaryResourcesCallback?this.getEffectiveAuxiliaryResourcesCallback(this.activityTree.currentActivity):[];return{request:this.adlNav.request||"_none_",requestValid:{continue:this.adlNav.request_valid?.continue||"false",previous:this.adlNav.request_valid?.previous||"false",choice:"unknown",jump:"unknown",exit:this.adlNav.request_valid?.exit||"false",exitAll:this.adlNav.request_valid?.exitAll||"false",abandon:this.adlNav.request_valid?.abandon||"false",abandonAll:this.adlNav.request_valid?.abandonAll||"false",suspendAll:this.adlNav.request_valid?.suspendAll||"false"},hideLmsUi:e,auxiliaryResources:t}}restoreNavigationState(e){if(this.adlNav&&e)try{if(e.requestValid){const t=e.requestValid;this.adlNav.request_valid.continue=t.continue||"false",this.adlNav.request_valid.previous=t.previous||"false",this.adlNav.request_valid.exit=t.exit||"false",this.adlNav.request_valid.exitAll=t.exitAll||"false",this.adlNav.request_valid.abandon=t.abandon||"false",this.adlNav.request_valid.abandonAll=t.abandonAll||"false",this.adlNav.request_valid.suspendAll=t.suspendAll||"false"}}catch(e){console.warn("Could not fully restore navigation state: "+e)}}getSuspensionState(){const e={activityTree:this.activityTree.root?this.activityTree.root.getSuspensionState():null,currentActivityId:this.activityTree.currentActivity?.id||null,suspendedActivityId:this.activityTree.suspendedActivity?.id||null,globalObjectives:this.globalObjectiveService.getSnapshot(),timestamp:(new Date).toISOString()};return this.fireEvent("onSuspensionStateCaptured",{hasActivityTree:!!e.activityTree,currentActivityId:e.currentActivityId,suspendedActivityId:e.suspendedActivityId,globalObjectiveCount:Object.keys(e.globalObjectives).length,timestamp:e.timestamp}),e}restoreSuspensionState(e){if(e)try{if(e.globalObjectives&&this.globalObjectiveService.restoreSnapshot(e.globalObjectives),e.activityTree&&this.activityTree.root&&this.activityTree.root.restoreSuspensionState(e.activityTree),e.currentActivityId){const t=this.activityTree.getActivity(e.currentActivityId);t&&(this.activityTree.currentActivity=t)}if(e.suspendedActivityId){const t=this.activityTree.getActivity(e.suspendedActivityId);t&&(this.activityTree.suspendedActivity=t)}this.fireEvent("onSuspensionStateRestored",{currentActivityId:e.currentActivityId,suspendedActivityId:e.suspendedActivityId,globalObjectiveCount:e.globalObjectives?Object.keys(e.globalObjectives).length:0,originalTimestamp:e.timestamp,restoreTimestamp:(new Date).toISOString()})}catch(e){throw this.fireEvent("onSuspensionStateRestoreError",{error:e instanceof Error?e.message:e+"",timestamp:(new Date).toISOString()}),e}else this.fireEvent("onSuspensionStateRestoreError",{error:"No suspension state provided",timestamp:(new Date).toISOString()})}fireEvent(e,t){try{this.eventCallback&&this.eventCallback(e,t)}catch(t){console.warn(`Failed to fire state manager event ${e}: ${t}`)}}}class vt{activityTree;eventCallback;now;contentDeliveredGetter=null;constructor(e,t=null,i){this.activityTree=e,this.eventCallback=t,this.now=i?.now||(()=>new Date)}setContentDeliveredGetter(e){this.contentDeliveredGetter=e}validateTreeConsistency(e){if(!this.activityTree.root)return{consistent:!1,exception:"DB.1.1-4"};if(!this.isActivityPartOfTree(e,this.activityTree.root))return{consistent:!1,exception:"DB.1.1-5"};const t=this.getActiveActivities();if(t.length>1)return this.fireEvent("onStateInconsistency",{activeActivities:t.map(e=>e.id),targetActivity:e.id}),{consistent:!1,exception:"DB.1.1-6"};let i=e;for(;i?.parent;){if(!i.parent.children.includes(i))return{consistent:!1,exception:"DB.1.1-7"};i=i.parent}return{consistent:!0,exception:null}}validateResources(e){const t=this.getRequiredResources(e);for(const e of t)if(!this.isResourceAvailable(e))return{available:!1,exception:"DB.1.1-8"};return this.checkSystemLimits().adequate?{available:!0,exception:null}:{available:!1,exception:"DB.1.1-9"}}validateConcurrentDelivery(e){return this.contentDeliveredGetter&&this.contentDeliveredGetter()&&this.activityTree.currentActivity&&this.activityTree.currentActivity!==e?{allowed:!1,exception:"DB.1.1-10"}:this.hasPendingDeliveryRequests()?{allowed:!1,exception:"DB.1.1-11"}:this.isDeliveryLocked()?{allowed:!1,exception:"DB.1.1-12"}:{allowed:!0,exception:null}}validateDependencies(e){const t=this.getPrerequisites(e);for(const i of t)if(!this.isPrerequisiteSatisfied(i,e))return{satisfied:!1,exception:"DB.1.1-13"};const i=this.getObjectiveDependencies(e);for(const e of i)if(!this.isObjectiveDependencySatisfied(e))return{satisfied:!1,exception:"DB.1.1-14"};return this.getSequencingRuleDependencies(e).satisfied?{satisfied:!0,exception:null}:{satisfied:!1,exception:"DB.1.1-15"}}checkActivity(e){return!!e.isAvailable&&!!this.checkLimitConditions(e)}checkLimitConditions(e){let result=!0,t="";if(null!==e.attemptLimit&&e.attemptLimit>0&&(e.attemptLimit>e.attemptCount||(result=!1,t="Attempt limit exceeded")),result&&e.attemptAbsoluteDurationLimit){const s=i(e.attemptAbsoluteDurationLimit,k);s>0&&(s>i(e.attemptAbsoluteDuration||"PT0H0M0S",k)||(result=!1,t="Attempt duration limit exceeded"))}if(result&&e.activityAbsoluteDurationLimit){const s=i(e.activityAbsoluteDurationLimit,k);s>0&&(s>i(e.activityAbsoluteDuration||"PT0H0M0S",k)||(result=!1,t="Activity duration limit exceeded"))}if(result&&e.beginTimeLimit){const i=this.now();new Date(e.beginTimeLimit)>i&&(result=!1,t="Not yet time to begin")}return result&&e.endTimeLimit&&this.now()>new Date(e.endTimeLimit)&&(result=!1,t="Time limit expired"),this.fireEvent("onLimitConditionCheck",{activity:e,result:result,failureReason:t,checks:{attemptLimit:e.attemptLimit,attemptCount:e.attemptCount,attemptDurationLimit:e.attemptAbsoluteDurationLimit,activityDurationLimit:e.activityAbsoluteDurationLimit,beginTimeLimit:e.beginTimeLimit,endTimeLimit:e.endTimeLimit}}),result}isActivityPartOfTree(e,t){if(e===t)return!0;for(const i of t.children)if(this.isActivityPartOfTree(e,i))return!0;return!1}getActiveActivities(){const e=[];return this.activityTree.root&&this.collectActiveActivities(this.activityTree.root,e),e}collectActiveActivities(e,t){e.isActive&&t.push(e);for(const i of e.children)this.collectActiveActivities(i,t)}getRequiredResources(e){const t=[],i=(e.title+" "+e.location).toLowerCase();return(i.includes("video")||i.includes("multimedia"))&&t.push("video-codec"),(i.includes("audio")||i.includes("sound"))&&t.push("audio-codec"),(i.includes("flash")||i.includes(".swf"))&&t.push("flash-plugin"),(i.includes("java")||i.includes("applet"))&&t.push("java-runtime"),e.children&&e.children.length>0&&t.push("high-bandwidth"),e.attemptAbsoluteDurationLimit&&this.parseDurationToMinutes(e.attemptAbsoluteDurationLimit)>60&&t.push("extended-storage"),e.attemptLimit&&e.attemptLimit>1&&t.push("persistent-storage"),t}isResourceAvailable(e){try{switch(e){case"video-codec":return!!document.createElement("video").canPlayType;case"audio-codec":return!!document.createElement("audio").canPlayType;case"flash-plugin":return navigator.plugins&&Array.from(navigator.plugins).some(e=>"Shockwave Flash"===e.name);case"java-runtime":return navigator.plugins&&Array.from(navigator.plugins).some(e=>"Java"===e.name);case"high-bandwidth":if("connection"in navigator){const e=navigator.connection;return"4g"===e.effectiveType||e.downlink>5}return!0;case"extended-storage":default:return!0;case"persistent-storage":return"localStorage"in window&&"sessionStorage"in window}}catch(e){return!1}}checkSystemLimits(){try{let e=!0;if("memory"in performance){const t=performance.memory;t.usedJSHeapSize/t.jsHeapSizeLimit>.8&&(e=!1)}if("deviceMemory"in navigator&&2>navigator.deviceMemory&&(e=!1),"hardwareConcurrency"in navigator&&2>navigator.hardwareConcurrency&&(e=!1),"connection"in navigator){const t=navigator.connection;(t.saveData||"slow-2g"===t.effectiveType)&&(e=!1)}return{adequate:e}}catch(e){return{adequate:!0}}}hasPendingDeliveryRequests(){return this.activityTree&&this.activityTree.pendingRequests?this.activityTree.pendingRequests.length>0:!("undefined"==typeof window||!window.pendingScormRequests)&&window.pendingScormRequests>0}isDeliveryLocked(){return!(!this.activityTree||!this.activityTree.navigationLocked)||(!(!this.activityTree||!this.activityTree.terminationInProgress)||(!this.checkSystemLimits().adequate||!("undefined"==typeof window||!window.scormMaintenanceMode)))}getPrerequisites(e){const t=[];if(e.sequencingRules&&e.sequencingRules.preConditionRules)for(const i of e.sequencingRules.preConditionRules)if(i.conditions&&i.conditions.length>0)for(const s of i.conditions)s.referencedObjectiveID&&s.referencedObjectiveID!==e.id&&t.push(s.referencedObjectiveID);if(e.parent&&e.sequencingControls&&!e.sequencingControls.choiceExit){const i=e.parent.children;if(i){const s=i.indexOf(e);for(let e=0;s>e;e++){const s=i[e];s&&t.push(s.id)}}}return e.prerequisiteActivities&&t.push(...e.prerequisiteActivities),Array.from(new Set(t))}isPrerequisiteSatisfied(e,t){const i=this.activityTree.getActivity(e);return!!i&&"completed"===i.completionStatus}getObjectiveDependencies(e){const t=[],objectives=e.objectives;if(objectives&&objectives.length>0)for(const e of objectives)e.globalObjectiveID&&t.push(e.globalObjectiveID),!e.satisfiedByMeasure&&e.readNormalizedMeasure&&t.push(e.id+"_measure");if(e.sequencingRules){const i=[...e.sequencingRules.preConditionRules||[],...e.sequencingRules.exitConditionRules||[],...e.sequencingRules.postConditionRules||[]];for(const s of i)if(s.conditions&&s.conditions.length>0)for(const i of s.conditions)i.objectiveReference&&i.objectiveReference!==e.id&&t.push(i.objectiveReference)}return Array.from(new Set(t))}isObjectiveDependencySatisfied(e){if(this.activityTree&&this.activityTree.globalObjectives){const t=this.activityTree.globalObjectives[e];if(t)return!0===t.satisfied&&!0===t.statusKnown}if(e.endsWith("_measure")){const t=e.replace("_measure","");if(this.activityTree&&this.activityTree.globalObjectives){const e=this.activityTree.globalObjectives[t];if(e)return!0===e.measureKnown&&e.normalizedMeasure>=0}}const t=this.activityTree.getActivity(e);return!!t&&t.objectiveSatisfiedStatus&&t.objectiveMeasureStatus}getSequencingRuleDependencies(e){let t=!0;try{if(e.sequencingRules&&e.sequencingRules.preConditionRules)for(const i of e.sequencingRules.preConditionRules)if(i.conditions&&i.conditions.length>0)for(const s of i.conditions)switch(s.conditionType||s.condition){case"activityProgressKnown":e.progressMeasureStatus||(t=!1);break;case"objectiveStatusKnown":case"objectiveSatisfied":this.isObjectiveDependencySatisfied(s.referencedObjectiveID||e.id)||(t=!1);break;case"attemptLimitExceeded":null===e.attemptLimit&&(t=!1);break;case"timeLimitExceeded":e.attemptAbsoluteDurationLimit||e.activityAbsoluteDurationLimit||(t=!1);break;case"always":case"never":break;default:t=!1}if(e.sequencingRules&&e.sequencingRules.exitConditionRules)for(const i of e.sequencingRules.exitConditionRules)if(i.conditions&&i.conditions.length>0)for(const s of i.conditions)["objectiveStatusKnown","objectiveSatisfied"].includes(s.conditionType||s.condition)&&(this.isObjectiveDependencySatisfied(s.referencedObjectiveID||e.id)||(t=!1));if(e.rollupRules&&e.rollupRules.rules)for(const i of e.rollupRules.rules)if(i.conditions&&i.conditions.length>0&&e.children&&e.children.length>0)for(const i of e.children)if(!i.isCompleted){t=!1;break}}catch(e){t=!1}return{satisfied:t}}parseDurationToMinutes(e){return i(e,k)/60}fireEvent(e,t){try{this.eventCallback&&this.eventCallback(e,t)}catch(t){console.warn(`Failed to fire delivery validator event ${e}: ${t}`)}}}class gt{activityTree;sequencingProcess;rollupProcess;adlNav;eventCallback=null;terminationHandler;deliveryHandler;navigationValidityService;globalObjectiveService;stateManager;deliveryValidator;navigationLookAhead;enhancedDeliveryValidation;is4thEdition;constructor(e,t,i,s=null,r=null,n){this.activityTree=e,this.sequencingProcess=t,this.rollupProcess=i,this.adlNav=s,this.eventCallback=r,this.enhancedDeliveryValidation=!0===n?.enhancedDeliveryValidation,this.is4thEdition=n?.is4thEdition||!1,this.globalObjectiveService=new mt(r||void 0),this.globalObjectiveService.initialize(e.root);const o={};n?.now&&(o.now=n.now),this.deliveryValidator=new vt(e,r,o);const a={};n?.getCMIData&&(a.getCMIData=n.getCMIData),void 0!==n?.is4thEdition&&(a.is4thEdition=n.is4thEdition),this.terminationHandler=new ot(e,t,i,this.globalObjectiveService.getMap(),r,a);const c={};n?.now&&(c.now=n.now),n?.defaultHideLmsUi&&(c.defaultHideLmsUi=n.defaultHideLmsUi),n?.defaultAuxiliaryResources&&(c.defaultAuxiliaryResources=n.defaultAuxiliaryResources),this.deliveryHandler=new ct(e,i,this.globalObjectiveService.getMap(),s,r,c),this.navigationValidityService=new ht(e,t,s,r),this.stateManager=new pt(e,this.globalObjectiveService,i,s,r),this.navigationLookAhead=this.navigationValidityService.getNavigationLookAhead(),this.setupCallbacks()}setupCallbacks(){this.terminationHandler.setInvalidateCacheCallback(()=>{this.navigationLookAhead.invalidateCache()}),this.deliveryHandler.setCheckActivityCallback(e=>this.deliveryValidator.checkActivity(e)),this.deliveryHandler.setInvalidateCacheCallback(()=>{this.navigationLookAhead.invalidateCache()}),this.deliveryHandler.setUpdateNavigationValidityCallback(()=>{this.navigationValidityService.updateNavigationValidity()}),this.deliveryHandler.setClearSuspendedActivityCallback(()=>{this.terminationHandler.clearSuspendedActivity()}),this.deliveryValidator.setContentDeliveredGetter(()=>this.deliveryHandler.hasContentBeenDelivered()),this.navigationValidityService.setGetEffectiveHideLmsUiCallback(e=>this.deliveryHandler.getEffectiveHideLmsUi(e)),this.stateManager.setGetEffectiveHideLmsUiCallback(e=>this.deliveryHandler.getEffectiveHideLmsUi(e)),this.stateManager.setGetEffectiveAuxiliaryResourcesCallback(e=>this.deliveryHandler.getEffectiveAuxiliaryResources(e)),this.stateManager.setContentDeliveredAccessors(()=>this.deliveryHandler.hasContentBeenDelivered(),e=>this.deliveryHandler.setContentDelivered(e))}processNavigationRequest(e,t=null,i){const s=this.navigationValidityService.validateRequest(e,t);if(!s.valid)return new at(!1,null,s.exception);if(s.terminationRequest){const t=!!s.sequencingRequest,r=this.terminationHandler.processTerminationRequest(s.terminationRequest,t,i);if(!r.valid)return new at(!1,null,r.exception||"TB.2.3-1");if(null!==r.sequencingRequest&&(t||r.sequencingRequest!==ae.EXIT)&&(s.sequencingRequest=r.sequencingRequest),!s.sequencingRequest)return s.terminationRequest!==ae.EXIT_ALL&&s.terminationRequest!==ae.ABANDON_ALL||this.fireEvent("onSequencingSessionEnd",{reason:s.terminationRequest===ae.EXIT_ALL?"exit_all":"abandon_all",navigationRequest:e}),new at(!0,null)}if(s.sequencingRequest){const t=this.sequencingProcess.sequencingRequestProcess(s.sequencingRequest,s.targetActivityId);if(t.endSequencingSession)return this.fireEvent("onSequencingSessionEnd",{reason:"end_of_content",exception:t.exception,navigationRequest:e}),new at(!1,null,t.exception||"SESSION_ENDED");if(t.exception)return new at(!1,null,t.exception);if(t.deliveryRequest===ce.DELIVER&&t.targetActivity)return this.activityTree.root&&(this.rollupProcess.validateRollupStateConsistency(this.activityTree.root)||this.fireEvent("onSequencingDebug",{message:"Rollup state inconsistency detected before delivery",activityId:this.activityTree.root.id})),this.rollupProcess.processGlobalObjectiveMapping(t.targetActivity,this.globalObjectiveService.getMap()),this.processDelivery(t.targetActivity)}return new at(!1,null,"OP.1-1")}processDelivery(e){if(this.enhancedDeliveryValidation){const t=this.deliveryValidator.validateTreeConsistency(e);if(!t.consistent)return new at(!1,null,t.exception);const i=this.deliveryValidator.validateResources(e);if(!i.available)return new at(!1,null,i.exception);const s=this.deliveryValidator.validateConcurrentDelivery(e);if(!s.allowed)return new at(!1,null,s.exception);const r=this.deliveryValidator.validateDependencies(e);if(!r.satisfied)return new at(!1,null,r.exception)}const t=this.deliveryHandler.processDeliveryRequest(e);return t.valid&&(this.deliveryHandler.contentDeliveryEnvironmentProcess(t.targetActivity),this.navigationLookAhead.invalidateCache(),this.activityTree.root&&this.rollupProcess.validateRollupStateConsistency(this.activityTree.root)),t}hasContentBeenDelivered(){return this.deliveryHandler.hasContentBeenDelivered()}isDeliveryInProgress(){return this.deliveryHandler.isDeliveryInProgress()}resetContentDelivered(){this.deliveryHandler.resetContentDelivered()}setContentDelivered(e){this.deliveryHandler.setContentDelivered(e)}updateNavigationValidity(){this.navigationValidityService.updateNavigationValidity()}synchronizeGlobalObjectives(){this.globalObjectiveService.synchronize(this.activityTree.root,this.rollupProcess)}getGlobalObjectiveMap(){return this.globalObjectiveService.getMap()}getGlobalObjectiveMapSnapshot(){return this.globalObjectiveService.getSnapshot()}restoreGlobalObjectiveMapSnapshot(e){this.globalObjectiveService.restoreSnapshot(e)}updateGlobalObjective(e,t){this.globalObjectiveService.updateObjective(e,t)}getSequencingState(){return this.stateManager.getState()}restoreSequencingState(e){return this.stateManager.restoreState(e)}getSuspensionState(){return this.stateManager.getSuspensionState()}restoreSuspensionState(e){this.stateManager.restoreSuspensionState(e)}getNavigationLookAhead(){return this.navigationValidityService.getAllPredictions()}predictContinueEnabled(){return this.navigationValidityService.predictContinueEnabled()}predictPreviousEnabled(){return this.navigationValidityService.predictPreviousEnabled()}predictChoiceEnabled(e){return this.navigationValidityService.predictChoiceEnabled(e)}getAvailableChoices(){return this.navigationValidityService.getAvailableChoices()}invalidateNavigationCache(){this.navigationValidityService.invalidateCache()}applyDeliveryControls(e){e.sequencingControls.completionSetByContent||e.completionStatus===j&&(e.completionStatus=O,e.wasAutoCompleted=!0),e.sequencingControls.objectiveSetByContent||e.successStatus===R&&(e.successStatus=M,e.wasAutoSatisfied=!0)}getEffectiveHideLmsUi(e){return this.deliveryHandler.getEffectiveHideLmsUi(e)}getEffectiveAuxiliaryResources(e){return this.deliveryHandler.getEffectiveAuxiliaryResources(e)}getContentActivityData(e){return this.deliveryHandler.getContentActivityData(e)}terminationRequestProcess(request,e,t){return this.terminationHandler.processTerminationRequest(request,e,t)}contentDeliveryEnvironmentProcess(e){this.deliveryHandler.contentDeliveryEnvironmentProcess(e)}endAttemptProcess(e){this.terminationHandler.endAttempt(e)}handleExitTermination(e,t){return this.terminationHandler.handleExitTermination(e,t)}fireEvent(e,t){try{this.eventCallback&&this.eventCallback(e,t)}catch(t){console.warn(`Failed to fire sequencing event ${e}: ${t}`)}}}class _t{sequencing;cmi;adl;eventService;loggingService;activityDeliveryService;rollupProcess;overallSequencingProcess=null;sequencingProcess=null;eventListeners={};configuration;isInitialized=!1;isSequencingActive=!1;lastCMIValues=new Map;lastSequencingResult=null;constructor(e,cmi,adl,t,i,s={}){this.sequencing=e,this.cmi=cmi,this.adl=adl,this.eventService=t,this.loggingService=i,this.configuration={autoRollupOnCMIChange:!0,autoProgressOnCompletion:!1,validateNavigationRequests:!0,enableEventSystem:!0,logLevel:"info",now:()=>new Date,...s},this.activityDeliveryService=new Ee(t,i,{onDeliverActivity:e=>this.handleActivityDelivery(e),onUnloadActivity:e=>this.handleActivityUnload(e),onSequencingComplete:result=>this.handleSequencingComplete(result),onSequencingError:e=>this.handleSequencingError(e)}),this.rollupProcess=new et,this.configuration.now&&ie.setNowProvider(this.configuration.now),this.setupCMIChangeWatchers(),this.createSequencingProcesses()}createSequencingProcesses(){try{if(this.sequencing.initialized||this.sequencing.initialize(),this.sequencing.adlNav=this.adl.nav,this.sequencing.activityTree.root){const e={};this.configuration.now&&(e.now=this.configuration.now),this.configuration.getAttemptElapsedSeconds&&(e.getAttemptElapsedSeconds=this.configuration.getAttemptElapsedSeconds),this.configuration.getActivityElapsedSeconds&&(e.getActivityElapsedSeconds=this.configuration.getActivityElapsedSeconds),this.sequencingProcess=new Ae(this.sequencing.activityTree,this.sequencing.sequencingRules,this.sequencing.sequencingControls,this.adl.nav,e);const t={};this.configuration.now&&(t.now=this.configuration.now),t.defaultHideLmsUi=[...this.sequencing.hideLmsUi],this.sequencing.auxiliaryResources.length>0&&(t.defaultAuxiliaryResources=this.sequencing.auxiliaryResources.map(e=>({resourceId:e.resourceId,purpose:e.purpose}))),t.getCMIData=()=>this.getCMIDataForTransfer(),this.overallSequencingProcess=new gt(this.sequencing.activityTree,this.sequencingProcess,this.rollupProcess,this.adl.nav,(e,t)=>this.handleSequencingProcessEvent(e,t),t),this.sequencing.overallSequencingProcess=this.overallSequencingProcess,this.isInitialized=!0,this.log("info","Sequencing processes created and ready for navigation")}}catch(e){this.log("error","Failed to create sequencing processes: "+e)}}initialize(){try{return this.log("info","Initializing sequencing service for SCO session"),this.isInitialized||this.createSequencingProcesses(),this.shouldAutoStartSequencing()&&!this.isSequencingActive&&this.startSequencing(),this.initializeCMITracking(),this.fireEvent("onSequencingStart",this.sequencing.getCurrentActivity()),this.log("info","Sequencing service initialized successfully"),d}catch(e){const t="Failed to initialize sequencing service: "+e;return this.log("error",t),this.fireEvent("onSequencingError",t,"initialization"),h}}terminate(){try{return this.log("info","Terminating sequencing service"),this.triggerFinalRollup(),this.endSequencing(),this.isInitialized=!1,this.fireEvent("onSequencingEnd"),this.log("info","Sequencing service terminated successfully"),d}catch(e){const t="Failed to terminate sequencing service: "+e;return this.log("error",t),this.fireEvent("onSequencingError",t,"termination"),h}}processNavigationRequest(request,e,t){if(!this.isInitialized||!this.overallSequencingProcess)return this.log("warn",`Navigation request '${request}' ignored - sequencing not initialized`),!1;try{this.log("info",`Processing navigation request: ${request}${e?` (target: ${e})`:""}${t?` (exit: ${t})`:""}`),this.fireEvent("onNavigationRequest",request,e);const i=this.parseNavigationRequest(request);if(null===i)return this.log("warn","Invalid navigation request: "+request),!1;const s=this.overallSequencingProcess.processNavigationRequest(i,e||null,t),r={deliveryRequest:s.valid?ce.DELIVER:ce.DO_NOT_DELIVER,targetActivity:s.targetActivity,exception:s.exception||null,endSequencingSession:!1};return this.lastSequencingResult=r,s.valid&&s.targetActivity?(this.activityDeliveryService.processSequencingResult(r),this.overallSequencingProcess.updateNavigationValidity(),this.log("info",`Navigation request '${request}' resulted in activity delivery: ${s.targetActivity.id}`),!0):(s.exception?(this.log("warn",`Navigation request '${request}' failed: ${s.exception}`),this.fireEvent("onSequencingError",s.exception,"navigation")):this.log("info",`Navigation request '${request}' completed with no activity delivery`),s.valid)}catch(e){const t=`Error processing navigation request '${request}': ${e}`;return this.log("error",t),this.fireEvent("onSequencingError",t,"navigation"),!1}}triggerRollupOnCMIChange(e,t,i){if(this.configuration.autoRollupOnCMIChange&&this.isInitialized&&["cmi.completion_status","cmi.success_status","cmi.score.scaled","cmi.score.raw","cmi.score.min","cmi.score.max","cmi.progress_measure","cmi.objectives.n.success_status","cmi.objectives.n.completion_status","cmi.objectives.n.score.scaled"].some(t=>e.startsWith(t)))try{this.log("debug",`Triggering rollup due to CMI change: ${e} = ${i} (was ${t})`);const s=this.sequencing.getCurrentActivity();if(!s)return void this.log("debug","No current activity for rollup");this.updateActivityFromCMI(s),this.rollupProcess.overallRollupProcess(s),this.overallSequencingProcess&&this.overallSequencingProcess.synchronizeGlobalObjectives(),this.overallSequencingProcess&&this.overallSequencingProcess.updateNavigationValidity(),this.fireEvent("onRollupComplete",s),this.log("debug","Rollup completed for activity: "+s.id)}catch(e){const t="Error during rollup on CMI change: "+e;this.log("error",t),this.fireEvent("onSequencingError",t,"rollup")}}setEventListeners(e){this.eventListeners={...this.eventListeners,...e},this.log("debug","Sequencing event listeners updated")}updateConfiguration(e){this.configuration={...this.configuration,...e},this.log("debug","Sequencing configuration updated")}getSequencingState(){return{isInitialized:this.isInitialized,isActive:this.isSequencingActive,currentActivity:this.sequencing.getCurrentActivity(),rootActivity:this.sequencing.getRootActivity(),lastSequencingResult:this.lastSequencingResult}}getOverallSequencingProcess(){return this.overallSequencingProcess}isDeliveryInProgress(){return this.overallSequencingProcess?.isDeliveryInProgress()??!1}setupCMIChangeWatchers(){}initializeCMITracking(){this.lastCMIValues.set("cmi.completion_status",this.cmi.completion_status),this.lastCMIValues.set("cmi.success_status",this.cmi.success_status),this.lastCMIValues.set("cmi.progress_measure",this.cmi.progress_measure),this.cmi.score&&(this.lastCMIValues.set("cmi.score.scaled",this.cmi.score.scaled),this.lastCMIValues.set("cmi.score.raw",this.cmi.score.raw))}shouldAutoStartSequencing(){return!(!this.sequencing.activityTree.root||this.sequencing.getCurrentActivity())}startSequencing(){if(this.overallSequencingProcess)try{this.processNavigationRequest("start")&&(this.isSequencingActive=!0,this.log("info","Automatic sequencing started"))}catch(e){this.log("error","Failed to start automatic sequencing: "+e)}}endSequencing(){this.isSequencingActive=!1,this.activityDeliveryService.reset()}triggerFinalRollup(){try{const e=this.sequencing.getCurrentActivity();e&&(this.updateActivityFromCMI(e),this.rollupProcess.overallRollupProcess(e),this.overallSequencingProcess&&this.overallSequencingProcess.synchronizeGlobalObjectives(),this.log("info","Final rollup completed"))}catch(e){this.log("error","Error during final rollup: "+e)}}updateActivityFromCMI(e){if("unknown"!==this.cmi.completion_status&&(e.completionStatus=this.cmi.completion_status,e.attemptProgressStatus=!0),"unknown"!==this.cmi.success_status&&(e.successStatus=this.cmi.success_status,e.objectiveSatisfiedStatus="passed"===this.cmi.success_status,e.objectiveMeasureStatus=!0,e.primaryObjective&&(e.primaryObjective.progressStatus=!0)),""!==this.cmi.progress_measure){const t=parseFloat(this.cmi.progress_measure);isNaN(t)||(e.progressMeasure=t,e.progressMeasureStatus=!0)}if(this.cmi.score&&""!==this.cmi.score.scaled){const t=parseFloat(this.cmi.score.scaled);isNaN(t)||(e.objectiveNormalizedMeasure=t,e.objectiveMeasureStatus=!0,e.primaryObjective&&(e.primaryObjective.progressStatus=!0))}e.primaryObjective&&e.primaryObjective.updateFromActivity(e)}getCMIDataForTransfer(){const e={completion_status:this.cmi.completion_status,success_status:this.cmi.success_status,progress_measure:this.cmi.progress_measure,score:{scaled:this.cmi.score?.scaled||"",raw:this.cmi.score?.raw||"",min:this.cmi.score?.min||"",max:this.cmi.score?.max||""},objectives:[]};if(this.cmi.objectives&&this.cmi.objectives.childArray)for(const t of this.cmi.objectives.childArray){const i=t;i.id&&e.objectives.push({id:i.id,success_status:i.success_status,completion_status:i.completion_status,progress_measure:i.progress_measure,score:{scaled:i.score?.scaled||"",raw:i.score?.raw||"",min:i.score?.min||"",max:i.score?.max||""}})}return e}parseNavigationRequest(request){let e=request;if(e.startsWith("_")&&"_none_"!==e&&(e=e.substring(1)),request.includes("choice"))return ut.CHOICE;if(request.includes("jump"))return ut.JUMP;switch(e){case"start":return ut.START;case"resumeAll":return ut.RESUME_ALL;case"continue":return ut.CONTINUE;case"previous":return ut.PREVIOUS;case"exit":return ut.EXIT;case"exitAll":return ut.EXIT_ALL;case"abandon":return ut.ABANDON;case"abandonAll":return ut.ABANDON_ALL;case"suspendAll":return ut.SUSPEND_ALL;case"_none_":return ut.NOT_VALID;default:return null}}handleActivityDelivery(e){this.log("info",`Activity delivered: ${e.id} - ${e.title}`),this.fireEvent("onActivityDelivery",e)}handleActivityUnload(e){this.log("info",`Activity unloaded: ${e.id} - ${e.title}`),this.fireEvent("onActivityUnload",e)}handleSequencingComplete(result){this.log("debug","Sequencing completed",result)}handleSequencingError(e){this.log("error","Sequencing error: "+e),this.fireEvent("onSequencingError",e,"sequencing")}fireEvent(e,...t){if(this.configuration.enableEventSystem){"onSequencingDebug"!==e&&this.fireDebugEvent(e+" fired",{eventType:e,argsLength:t.length});try{const i=this.eventListeners[e];if(i&&"function"==typeof i)try{i(...t),this.log("debug",`Internal listener for ${e} executed successfully`)}catch(t){this.log("error",`Internal listener for ${e} failed: ${t}`)}try{this.eventService.processListeners("Sequencing."+e,t[0],...t.slice(1)),this.log("debug",`Event service listeners for ${e} processed`)}catch(t){this.log("warn",`Event service failed for ${e}: ${t}`)}try{if("undefined"!=typeof window&&window.scormSequencingEvents){const i=window.scormSequencingEvents;i[e]&&"function"==typeof i[e]&&(i[e](...t),this.log("debug",`Global listener for ${e} executed`))}}catch(t){this.log("warn",`Global listener for ${e} failed: ${t}`)}}catch(t){this.log("error",`Critical error firing event ${e}: ${t}`)}}}fireDebugEvent(e,t){try{const i=this.eventListeners.onSequencingDebug;i&&"function"==typeof i&&i(e,{timestamp:(new Date).toISOString(),...t});try{this.eventService.processListeners("Sequencing.onSequencingDebug",e,{timestamp:(new Date).toISOString(),...t})}catch(e){}}catch(e){console.debug("Debug event failed: "+e)}}fireActivityAttemptStart(e){this.fireEvent("onActivityAttemptStart",e),this.fireDebugEvent("Activity attempt started",{activityId:e.id,title:e.title,attemptCount:e.attemptCount})}fireActivityAttemptEnd(e){this.fireEvent("onActivityAttemptEnd",e),this.fireDebugEvent("Activity attempt ended",{activityId:e.id,title:e.title,completionStatus:e.completionStatus,successStatus:e.successStatus})}fireLimitConditionCheck(e,result){this.fireEvent("onLimitConditionCheck",e,result),this.fireDebugEvent("Limit condition check",{activityId:e.id,result:result,attemptCount:e.attemptCount,attemptLimit:e.attemptLimit})}fireNavigationValidityUpdate(e){this.fireEvent("onNavigationValidityUpdate",e),this.fireDebugEvent("Navigation validity updated",{validity:e})}fireSequencingStateChange(e){this.fireEvent("onSequencingStateChange",e),this.fireDebugEvent("Sequencing state changed",{stateKeys:Object.keys(e)})}handleSequencingProcessEvent(e,t){try{switch(e){case"onActivityDelivery":this.fireEvent("onActivityDelivery",t);break;case"onLimitConditionCheck":this.fireLimitConditionCheck(t.activity,t.result);break;case"onActivityAttemptStart":this.fireActivityAttemptStart(t);break;case"onActivityAttemptEnd":this.fireActivityAttemptEnd(t);break;case"onNavigationValidityUpdate":this.fireNavigationValidityUpdate(t);break;case"onSequencingSessionEnd":this.fireEvent("onSequencingSessionEnd",t);break;default:this.fireDebugEvent("Sequencing process event: "+e,t)}}catch(t){this.log("error",`Error handling sequencing process event ${e}: ${t}`)}}log(e,t,i){const s=["debug","info","warn","error"],r=this.configuration.logLevel||"info";if(s.indexOf(e)>=s.indexOf(r))switch(e){case"debug":this.loggingService.debug(`[Sequencing] ${t}${i?" - "+JSON.stringify(i):""}`);break;case"info":this.loggingService.info(`[Sequencing] ${t}${i?" - "+JSON.stringify(i):""}`);break;case"warn":this.loggingService.warn(`[Sequencing] ${t}${i?" - "+JSON.stringify(i):""}`);break;case"error":this.loggingService.error(`[Sequencing] ${t}${i?" - "+JSON.stringify(i):""}`)}}}class St{loadFromFlattenedJSON(e,t="",i,s,r){if(!s())return void console.error("loadFromFlattenedJSON can only be called before the call to lmsInitialize.");const n=/^(cmi\.interactions\.)(\d+)\.(.*)$/,o=/^(cmi\.objectives\.)(\d+)\.(.*)$/,interactions=[],objectives=[],a=[];for(const t in e)if({}.hasOwnProperty.call(e,t)){const i=t.match(n);if(i){interactions.push({key:t,value:e[t],index:+i[2],field:i[3]||""});continue}const s=t.match(o);if(s){objectives.push({key:t,value:e[t],index:+s[2],field:s[3]||""});continue}a.push({key:t,value:e[t]})}interactions.sort((e,t)=>e.index!==t.index?e.index-t.index:"id"===e.field?-1:"id"===t.field?1:"type"===e.field?-1:"type"===t.field?1:e.field.localeCompare(t.field)),objectives.sort((e,t)=>e.index!==t.index?e.index-t.index:"id"===e.field?-1:"id"===t.field?1:e.field.localeCompare(t.field)),a.sort((e,t)=>e.key.localeCompare(t.key));const c=e=>{e.forEach(e=>{const n={};n[e.key]=e.value,this.loadFromJSON(function(e){if(Object(e)!==e||Array.isArray(e))return e;const result={},pattern=/\.?([^.[\]]+)|\[(\d+)]/g;return Object.keys(e).filter(t=>({}.hasOwnProperty.call(e,t))).forEach(t=>{let i=result,s="";const r=RegExp(pattern);Array.from({length:t.match(RegExp(pattern,"g"))?.length??0},()=>r.exec(t)).forEach(e=>{e&&(i=i[s]??(i[s]=e[2]?[]:{}),s=e[2]||e[1]||"")}),i[s]=e[t]}),result[""]??result}(n),t,i,s,r)})};c(interactions),c(objectives),c(a)}loadFromJSON(e,t="",i,s,r){if(s()){t=void 0!==t?t:"cmi",r(e);for(const n in e)if({}.hasOwnProperty.call(e,n)&&e[n]){const o=(t?t+".":"")+n,a=e[n];if(a.constructor===Array){for(let e=0;a.length>e;e++)if(a[e]){const t=a[e],n=`${o}.${e}`;t.constructor===Object?this.loadFromJSON(t,n,i,s,r):i(n,t)}}else a.constructor===Object?this.loadFromJSON(a,o,i,s,r):i(o,a)}}else console.error("loadFromJSON can only be called before the call to lmsInitialize.")}renderCMIToJSONString(cmi,e){return e?JSON.stringify({cmi:cmi}):JSON.stringify({cmi:cmi},(e,t)=>void 0===t?null:t,2)}renderCMIToJSONObject(cmi,e){return JSON.parse(this.renderCMIToJSONString(cmi,e))}getCommitObject(e,t,i,s,r,n){const o=t||e,a=i?s(e,o):r(e,o);return[I.DEBUG,"1",1,"DEBUG"].includes(n)&&(console.debug("Commit (terminated: "+(e?"yes":"no")+"): "),console.debug(a)),a}}class ft{settings;error_codes;constructor(e,t){this.settings=e,this.error_codes=t}processHttpRequest(e,t,i=!1,s,r){return i?this._handleImmediateRequest(e,t):this._performSyncXHR(e,t)}_handleImmediateRequest(e,t){const i=this.settings.requestHandler(t)??t,{body:s}=this._prepareRequestBody(i),r=navigator.sendBeacon(e,new Blob([s],{type:"text/plain;charset=UTF-8"}));return{result:r?"true":"false",errorCode:r?0:this.error_codes.GENERAL_COMMIT_FAILURE||391}}_performSyncXHR(e,t){const i=this.settings.requestHandler(t)??t,{body:s,contentType:r}=this._prepareRequestBody(i),n=new XMLHttpRequest;n.open("POST",e,!1),n.setRequestHeader("Content-Type",r),Object.entries(this.settings.xhrHeaders).forEach(([e,t])=>{n.setRequestHeader(e,t+"")}),this.settings.xhrWithCredentials&&(n.withCredentials=!0);try{return n.send(s),this.settings.xhrResponseHandler(n)}catch(e){return{result:h,errorCode:this.error_codes.GENERAL_COMMIT_FAILURE||391,errorMessage:e instanceof Error?e.message:e+""}}}_prepareRequestBody(e){return{body:e instanceof Array?e.join("&"):JSON.stringify(e),contentType:e instanceof Array?"application/x-www-form-urlencoded":this.settings.commitRequestDataType}}updateSettings(e){this.settings=e}}function yt(e,t,i,s){return De(e,t,i,f.TYPE_MISMATCH,v,s)}function bt(e,t,i,s){if(""===t)throw new v(e,f.VALUE_OUT_OF_RANGE);return xe(e,t,i,f.VALUE_OUT_OF_RANGE,v)}const Ct=new class{validateScore(e,t,i,s,r,n,o){return De(e,t,i,r,o)&&(!s||xe(e,t,s,n,o))}validateScorm12Audio(e,t){return yt(e,t,D)&&bt(e,t,"-1#100")}validateScorm12Language(e,t){return yt(e,t,"^[\\s\\S]{0,255}$")}validateScorm12Speed(e,t){return yt(e,t,D)&&bt(e,t,"-100#100")}validateScorm12Text(e,t){return yt(e,t,D)&&bt(e,t,"-1#1")}validateReadOnly(e,t){if(t)throw new v(e,f.READ_ONLY_ELEMENT)}};class At{_timeout;_error_codes;_settings=q;_httpService;_eventService;_serializationService;_errorHandlingService;_loggingService;_offlineStorageService;_cmiValueAccessService;_courseId="";constructor(e,t,i,s,r,n,o,a,c){if(new.target===At)throw new TypeError("Cannot construct BaseAPI instances directly");this.currentState=0,this._error_codes=e,t&&(this.settings={...q,...t}),void 0!==t?.asyncCommit&&void 0===t.useAsynchronousCommits&&void 0===t.throttleCommits&&(console.warn("DEPRECATED: 'asyncCommit' setting is deprecated and will be removed in a future version. Use 'useAsynchronousCommits: true' and 'throttleCommits: true' instead."),t.asyncCommit&&(this.settings.useAsynchronousCommits=!0,this.settings.throttleCommits=!0)),!this.settings.useAsynchronousCommits&&this.settings.throttleCommits&&(console.warn("throttleCommits cannot be used with synchronous commits. Setting throttleCommits to false."),this.settings.throttleCommits=!1),this._loggingService=a||je(),this._loggingService.setLogLevel(this.settings.logLevel),this._loggingService.setLogHandler(this.settings.onLogMessage?this.settings.onLogMessage:N),i?this._httpService=i:this.settings.httpService?this._httpService=this.settings.httpService:this.settings.useAsynchronousCommits?(console.warn("WARNING: useAsynchronousCommits=true is not SCORM compliant. Commit failures will not be reported to the SCO, which may cause data loss. This setting should only be used for specific legacy compatibility cases."),this._httpService=new Me(this.settings,this._error_codes)):this._httpService=new ft(this.settings,this._error_codes),this._eventService=s||new qe((e,t,i,s)=>this.apiLog(e,t,i,s)),this._serializationService=r||new St,this._errorHandlingService=o||new Ie(this._error_codes,(e,t,i,s)=>this.apiLog(e,t,i||I.ERROR,s),(e,t)=>this.getLmsErrorMessageDetails(e,t),void 0),this.settings.enableOfflineSupport&&(this._offlineStorageService=c||new Ne(this.settings,this._error_codes,(e,t,i,s)=>this.apiLog(e,t,i,s)),this.settings.courseId&&(this._courseId=this.settings.courseId),this.settings.syncOnTerminate&&this._eventService.on("BeforeTerminate",()=>{this._offlineStorageService?.isDeviceOnline()&&this._courseId&&this._offlineStorageService.hasPendingOfflineData(this._courseId).then(e=>{if(e)return this.apiLog("BeforeTerminate","Syncing pending offline data before termination",I.INFO),this._offlineStorageService?.syncOfflineData()}).then(e=>{e?this.processListeners("OfflineDataSynced"):!1===e&&this.processListeners("OfflineDataSyncFailed")}).catch(e=>{this.apiLog("BeforeTerminate","Error syncing offline data: "+e,I.ERROR),this.processListeners("OfflineDataSyncFailed")})}),this._offlineStorageService&&this._courseId&&this._offlineStorageService.getOfflineData(this._courseId).then(e=>{e&&(this.apiLog("constructor","Found offline data to restore",I.INFO),this.loadFromJSON(e.runtimeData))}).catch(e=>{this.apiLog("constructor","Error retrieving offline data: "+e,I.ERROR)})),this._cmiValueAccessService=new Oe({errorCodes:this._error_codes,getLastErrorCode:()=>this.lastErrorCode,setLastErrorCode:e=>{this.lastErrorCode=e},throwSCORMError:(e,t,i)=>this.throwSCORMError(e,t,i),isInitialized:()=>this.isInitialized(),validateCorrectResponse:(e,t)=>this.validateCorrectResponse(e,t),checkForDuplicateId:(e,t)=>this._checkForDuplicateId(e,t),getChildElement:(e,t,i)=>this.getChildElement(e,t,i),apiLog:(e,t,i)=>this.apiLog(e,t,i),checkObjectHasProperty:(e,t)=>this._checkObjectHasProperty(e,t),getDataModel:()=>this})}startingData;currentState;get lastErrorCode(){return this._errorHandlingService?.lastErrorCode??"0"}set lastErrorCode(e){this._errorHandlingService&&(this._errorHandlingService.lastErrorCode=e)}get eventService(){return this._eventService}get loggingService(){return this._loggingService}commonReset(e){this.apiLog("reset","Called",I.INFO),this.settings={...this.settings,...e},this.clearScheduledCommit(),this.currentState=0,this.lastErrorCode="0",this._eventService.reset(),this.startingData={},this._offlineStorageService&&(this._offlineStorageService.updateSettings(this.settings),e?.courseId&&(this._courseId=e.courseId))}initialize(e,t,i){let s=h;return this.isInitialized()?this.throwSCORMError("api",this._error_codes.INITIALIZED,t):this.isTerminated()?this.throwSCORMError("api",this._error_codes.TERMINATED,i):(this.settings.selfReportSessionTime&&this.cmi.setStartTime(),this.currentState=1,this.lastErrorCode="0",s=d,this.processListeners(e),this.settings.enableOfflineSupport&&this._offlineStorageService&&this._courseId&&this.settings.syncOnInitialize&&this._offlineStorageService.isDeviceOnline()&&this._offlineStorageService.hasPendingOfflineData(this._courseId).then(t=>{t&&(this.apiLog(e,"Syncing pending offline data on initialization",I.INFO),this._offlineStorageService?.syncOfflineData().then(t=>{t&&(this.apiLog(e,"Successfully synced offline data",I.INFO),this.processListeners("OfflineDataSynced"))}))})),this.apiLog(e,"returned: "+s,I.INFO),this.clearSCORMError(s),s}apiLog(e,t,i,s){t=function(e,t,i){let s=e?(e+"").padEnd(20)+": ":"";return i&&(s+=i,s=s.padEnd(70)),s+=t??"",s}(e,t,s),this._loggingService.log(i,t)}get settings(){return this._settings}set settings(e){const t=this._settings;this._settings={...this._settings,...e},this._httpService?.updateSettings(this._settings),void 0!==e.logLevel&&e.logLevel!==t.logLevel&&this._loggingService?.setLogLevel(e.logLevel),void 0!==e.onLogMessage&&e.onLogMessage!==t.onLogMessage&&this._loggingService?.setLogHandler(e.onLogMessage)}terminate(e,t){let i=d,s=!1;if(this.isNotInitialized()){const e=this._error_codes.TERMINATION_BEFORE_INIT??0;this.throwSCORMError("api",e),112===e&&(i=h)}else if(t&&this.isTerminated()){const e=this._error_codes.MULTIPLE_TERMINATION??0;this.throwSCORMError("api",e),113===e&&(i=h)}else{s=!0,this.processListeners("BeforeTerminate");const result=this.storeData(!0);if((result.errorCode??0)>0)result.errorMessage&&this.apiLog("terminate","Terminate failed with error: "+result.errorMessage,I.ERROR),result.errorDetails&&this.apiLog("terminate","Error details: "+JSON.stringify(result.errorDetails),I.DEBUG),this.throwSCORMError("api",result.errorCode??0),i=h;else{this.currentState=2,t&&(this.lastErrorCode="0");const e=result?.result??d;i="boolean"==typeof e?e+"":e}this.processListeners(e)}return this.apiLog(e,"returned: "+i,I.INFO),s&&this.clearSCORMError(i),i}getValue(e,t,i){let s="";if(this.checkState(t,this._error_codes.RETRIEVE_BEFORE_INIT??0,this._error_codes.RETRIEVE_AFTER_TERM??0)){try{s=this.getCMIValue(i)}catch(e){s=this.handleValueAccessException(i,e,s)}this.processListeners(e,i)}return this.apiLog(e,": returned: "+s,I.INFO,i),void 0===s?"":("0"===this.lastErrorCode&&this.clearSCORMError(s),s)}setValue(e,t,i,s,r){void 0!==r&&(r+="");let n=h;if(this.checkState(i,this._error_codes.STORE_BEFORE_INIT??0,this._error_codes.STORE_AFTER_TERM??0)){try{n=this.setCMIValue(s,r)}catch(e){n=this.handleValueAccessException(s,e,n)}this.processListeners(e,s,r)}return void 0===n&&(n=h),this.lastErrorCode+""=="0"&&this.settings.autocommit&&this.scheduleCommit(1e3*this.settings.autocommitSeconds,t),this.apiLog(e,": "+r+": result: "+n,I.INFO,s),"0"===this.lastErrorCode&&this.clearSCORMError(n),n}commit(e,t=!1){this.clearScheduledCommit();let i=d;if(this.isNotInitialized()){const e=this._error_codes.COMMIT_BEFORE_INIT??0;this.throwSCORMError("api",e),142===e&&(i=h)}else if(t&&this.isTerminated()){const e=this._error_codes.COMMIT_AFTER_TERM??0;this.throwSCORMError("api",e),143===e&&(i=h)}else{const result=this.storeData(!1);(result.errorCode??0)>0&&(result.errorMessage&&this.apiLog("commit","Commit failed with error: "+result.errorMessage,I.ERROR),result.errorDetails&&this.apiLog("commit","Error details: "+JSON.stringify(result.errorDetails),I.DEBUG),this.throwSCORMError("api",result.errorCode));const s=result?.result??h;i="boolean"==typeof s?s+"":s,this.apiLog(e," Result: "+i,I.DEBUG,"HttpRequest"),t&&(this.lastErrorCode="0"),this.processListeners(e),this.settings.enableOfflineSupport&&this._offlineStorageService&&this._offlineStorageService.isDeviceOnline()&&this._courseId&&this._offlineStorageService.hasPendingOfflineData(this._courseId).then(t=>{t&&(this.apiLog(e,"Syncing pending offline data",I.INFO),this._offlineStorageService?.syncOfflineData().then(t=>{t?(this.apiLog(e,"Successfully synced offline data",I.INFO),this.processListeners("OfflineDataSynced")):this.apiLog(e,"Failed to sync some offline data",I.WARN)}))})}return this.apiLog(e,"returned: "+i,I.INFO),this.isNotInitialized()||t&&this.isTerminated()||this.clearSCORMError(i),i}getLastError(e){const t=this.lastErrorCode+"";return this.processListeners(e),this.apiLog(e,"returned: "+t,I.INFO),t}getErrorString(e,t){let i="";return null!==t&&""!==t&&(i=this.getLmsErrorMessageDetails(t),this.processListeners(e)),i.length>255&&(i=i.substring(0,255)),this.apiLog(e,"returned: "+i,I.INFO),i}getDiagnostic(e,t){let i="";const s=""===t?this.lastErrorCode+"":t;if(null!==s&&""!==s){const t=this._errorHandlingService.lastDiagnostic;i=t&&s+""==this.lastErrorCode+""?t:this.getLmsErrorMessageDetails(s,!0),this.processListeners(e)}return i.length>255&&(i=i.substring(0,255)),this.apiLog(e,"returned: "+i,I.INFO),i}checkState(e,t,i){return this.isNotInitialized()?(this.throwSCORMError("api",t),!1):!e||!this.isTerminated()||(this.throwSCORMError("api",i),!1)}_checkForDuplicateId(e,t){const i=(e,t)=>{if(e&&"object"==typeof e&&t in e){const i=e[t];return i instanceof b?i:void 0}},s=(e,t,i)=>{for(let s=0;e.childArray.length>s;s++)if(s!==t){const t=e.childArray[s];if(t&&"object"==typeof t&&"id"in t&&t.id===i)return!0}return!1},r=e.match(/^cmi\.objectives\.(\d+)\.id$/);if(r&&r[1]){const e=parseInt(r[1],10),objectives=i(this.cmi,"objectives");return!!objectives&&s(objectives,e,t)}const n=e.match(/^cmi\.interactions\.(\d+)\.id$/);if(n&&n[1]){const e=parseInt(n[1],10),interactions=i(this.cmi,"interactions");return!!interactions&&s(interactions,e,t)}const o=e.match(/^cmi\.interactions\.(\d+)\.objectives\.(\d+)\.id$/);if(o&&o[1]&&o[2]){const e=parseInt(o[1],10),r=parseInt(o[2],10),interactions=i(this.cmi,"interactions");if(interactions){const n=interactions.childArray[e];if(n){const objectives=i(n,"objectives");if(objectives)return s(objectives,r,t)}}return!1}return!1}getLmsErrorMessageDetails(e,t=!1){throw Error("The getLmsErrorMessageDetails method has not been implemented")}getCMIValue(e){throw Error("The getCMIValue method has not been implemented")}setCMIValue(e,t){throw Error("The setCMIValue method has not been implemented")}_commonSetCMIValue(e,t,i,s){return this._cmiValueAccessService.setCMIValue(e,t,i,s)}_commonGetCMIValue(e,t,i){return this._cmiValueAccessService.getCMIValue(e,t,i)}isInitialized(){return 1===this.currentState}isNotInitialized(){return 0===this.currentState}isTerminated(){return 2===this.currentState}on(e,t){this._eventService.on(e,t)}off(e,t){this._eventService.off(e,t)}clear(e){this._eventService.clear(e)}processListeners(e,t,i){this._eventService.processListeners(e,t,i)}throwSCORMError(e,t,i){this._errorHandlingService.throwSCORMError(e,t??0,i)}clearSCORMError(e){this._errorHandlingService.clearSCORMError(e)}loadFromFlattenedJSON(e,t){t||(t=""),this._serializationService.loadFromFlattenedJSON(e,t,(e,t)=>this.setCMIValue(e,t),()=>this.isNotInitialized(),e=>{this.startingData=e})}getFlattenedCMI(){return r(this.renderCMIToJSONObject())}loadFromJSON(e,t=""){t&&""!==t||Object.hasOwnProperty.call(e,"cmi")||Object.hasOwnProperty.call(e,"adl")||(t="cmi"),this._serializationService.loadFromJSON(e,t,(e,t)=>this.setCMIValue(e,t),()=>this.isNotInitialized(),e=>{this.startingData=e})}renderCMIToJSONString(){return this._serializationService.renderCMIToJSONString(this.cmi,this.settings.sendFullCommit)}renderCMIToJSONObject(){return this._serializationService.renderCMIToJSONObject(this.cmi,this.settings.sendFullCommit)}processHttpRequest(e,t,i=!1){return this.settings.enableOfflineSupport&&this._offlineStorageService&&!this._offlineStorageService.isDeviceOnline()&&this._courseId?(this.apiLog("processHttpRequest","Device is offline, storing data locally",I.INFO),t&&"object"==typeof t&&"cmi"in t?this._offlineStorageService.storeOffline(this._courseId,t):(this.apiLog("processHttpRequest","Invalid commit data format for offline storage",I.ERROR),{result:h,errorCode:this._error_codes.GENERAL??101})):this._httpService.processHttpRequest(e,t,i,(e,t,i,s)=>this.apiLog(e,t,i,s),(e,t,i)=>this.processListeners(e,t,i))}scheduleCommit(e,t){this._timeout||(this._timeout=new Q(this,e,t),this.apiLog("scheduleCommit","scheduled",I.DEBUG,""))}clearScheduledCommit(){this._timeout&&(this._timeout.cancel(),this._timeout=void 0,this.apiLog("clearScheduledCommit","cleared",I.DEBUG,""))}_checkObjectHasProperty(e,t){return null!=e&&"object"==typeof e&&(Object.hasOwnProperty.call(e,t)||null!=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(e),t)||t in e)}handleValueAccessException(e,t,i){return t instanceof u?(this.lastErrorCode=t.errorCode+"",""!==i&&(i=h),this.throwSCORMError(e,t.errorCode,t.errorMessage)):this.throwSCORMError(e,this._error_codes.GENERAL,t instanceof Error&&t.message?t.message:"Unknown error"),i}getCommitObject(e){return this._serializationService.getCommitObject(e,this.settings.alwaysSendTotalTime,this.settings.renderCommonCommitFields,(e,t)=>this.renderCommitObject(e,t),(e,t)=>this.renderCommitCMI(e,t),this.settings.logLevel)}}class Et extends a{__children=m.student_preference_children;_audio_level="1";_language="";_delivery_speed="1";_audio_captioning="0";constructor(){super("cmi.learner_preference")}reset(){this._initialized=!1}get _children(){return this.__children}set _children(_children){throw new _(this._cmi_element+"._children",y.READ_ONLY_ELEMENT)}get audio_level(){return this._audio_level}set audio_level(audio_level){Le(this._cmi_element+".audio_level",audio_level,V)&&Pe(this._cmi_element+".audio_level",audio_level,"0#999.9999999")&&(this._audio_level=audio_level)}get language(){return this._language}set language(language){Le(this._cmi_element+".language",language,"^([a-zA-Z]{1,8}|i|x)(-[a-zA-Z0-9-]{2,8})?$|^$")&&(this._language=language)}get delivery_speed(){return this._delivery_speed}set delivery_speed(delivery_speed){if(Le(this._cmi_element+".delivery_speed",delivery_speed,V)&&Pe(this._cmi_element+".delivery_speed",delivery_speed,"0#999.9999999")){if(0===parseFloat(delivery_speed))throw new _(this._cmi_element+".delivery_speed",y.VALUE_OUT_OF_RANGE);this._delivery_speed=delivery_speed}}get audio_captioning(){return this._audio_captioning}set audio_captioning(audio_captioning){Le(this._cmi_element+".audio_captioning",audio_captioning,"^-?([0-9]+)$")&&Pe(this._cmi_element+".audio_captioning",audio_captioning,"-1#1")&&(this._audio_captioning=audio_captioning)}toJSON(){this.jsonString=!0;const result={audio_level:this.audio_level,language:this.language,delivery_speed:this.delivery_speed,audio_captioning:this.audio_captioning};return this.jsonString=!1,result}}class Mt extends b{constructor(){super({CMIElement:"cmi.interactions",children:m.interactions_children,errorCode:y.READ_ONLY_ELEMENT,errorClass:_})}}class wt extends a{_id="";_idIsSet=!1;_type="";_timestamp="";_weighting="";_learner_response="";_result="";_latency="";_description="";constructor(){super("cmi.interactions.n"),this.objectives=new b({CMIElement:"cmi.interactions.n.objectives",errorCode:y.READ_ONLY_ELEMENT,errorClass:_,children:m.objectives_children}),this.correct_responses=new b({CMIElement:"cmi.interactions.n.correct_responses",errorCode:y.READ_ONLY_ELEMENT,errorClass:_,children:m.correct_responses_children})}objectives;correct_responses;initialize(){super.initialize(),this.objectives?.initialize(),this.correct_responses?.initialize()}reset(){this._initialized=!1,this._id="",this._idIsSet=!1,this._type="",this._timestamp="",this._weighting="",this._learner_response="",this._result="",this._latency="",this._description="",this.objectives=new b({CMIElement:"cmi.interactions.n.objectives",errorCode:y.READ_ONLY_ELEMENT,errorClass:_,children:m.objectives_children}),this.correct_responses=new b({CMIElement:"cmi.interactions.n.correct_responses",errorCode:y.READ_ONLY_ELEMENT,errorClass:_,children:m.correct_responses_children})}get id(){return this._id}set id(id){if(""===id||""===id.trim())throw new _(this._cmi_element+".id",y.TYPE_MISMATCH);if(this._idIsSet&&this._id!==id)throw new _(this._cmi_element+".id",y.GENERAL_SET_FAILURE);Le(this._cmi_element+".id",id,B)&&(this._id=id,this._idIsSet=!0)}get type(){return this._type}set type(type){if(this.initialized&&""===this._id)throw new _(this._cmi_element+".type",y.DEPENDENCY_NOT_ESTABLISHED);Le(this._cmi_element+".type",type,"^(true-false|choice|fill-in|long-fill-in|matching|performance|sequencing|likert|numeric|other)$")&&(this._type=type)}get timestamp(){return this._timestamp}set timestamp(timestamp){if(this.initialized&&""===this._id)throw new _(this._cmi_element+".timestamp",y.DEPENDENCY_NOT_ESTABLISHED);Le(this._cmi_element+".timestamp",timestamp,F)&&(this._timestamp=timestamp)}get weighting(){return this._weighting}set weighting(weighting){if(this.initialized&&""===this._id)throw new _(this._cmi_element+".weighting",y.DEPENDENCY_NOT_ESTABLISHED);Le(this._cmi_element+".weighting",weighting,V)&&(this._weighting=weighting)}get learner_response(){return this._learner_response}set learner_response(learner_response){if(this.initialized&&(""===this._type||""===this._id))throw new _(this._cmi_element+".learner_response",y.DEPENDENCY_NOT_ESTABLISHED);{let e=[];const t=K[this.type];if(!t)throw new _(this._cmi_element+".learner_response",y.TYPE_MISMATCH);if(t?.delimiter?e=learner_response.split("[,]"===t.delimiter?",":t.delimiter):e[0]=learner_response,0>=e.length||e.length>t.max)throw new _(this._cmi_element+".learner_response",y.GENERAL_SET_FAILURE);{const i=RegExp(t.format);for(let s=0;e.length>s;s++)if(t?.delimiter2){const r="[.]"===t.delimiter2?".":t.delimiter2,n=e[s]?.split(r);if(2!==n?.length)throw new _(this._cmi_element+".learner_response",y.TYPE_MISMATCH);if("performance"===this.type&&(""===n[0]||""===n[1]))throw new _(this._cmi_element+".learner_response",y.TYPE_MISMATCH);if(!n[0]?.match(i))throw new _(this._cmi_element+".learner_response",y.TYPE_MISMATCH);if(!t.format2||!n[1]?.match(RegExp(t.format2)))throw new _(this._cmi_element+".learner_response",y.TYPE_MISMATCH)}else{if(!e[s]?.match(i))throw new _(this._cmi_element+".learner_response",y.TYPE_MISMATCH);if(""!==e[s]&&t.unique)for(let t=0;s>t;t++)if(e[s]===e[t])throw new _(this._cmi_element+".learner_response",y.TYPE_MISMATCH)}}this._learner_response=learner_response}}get result(){return this._result}set result(result){Le(this._cmi_element+".result",result,"^(correct|incorrect|unanticipated|neutral|-?([0-9]{1,4})(\\.[0-9]{1,18})?)$")&&(this._result=result)}get latency(){return this._latency}set latency(latency){if(this.initialized&&""===this._id)throw new _(this._cmi_element+".latency",y.DEPENDENCY_NOT_ESTABLISHED);Le(this._cmi_element+".latency",latency,k)&&(this._latency=latency)}get description(){return this._description}set description(description){if(this.initialized&&""===this._id)throw new _(this._cmi_element+".description",y.DEPENDENCY_NOT_ESTABLISHED);Le(this._cmi_element+".description",description,P,!0)&&(this._description=description)}toJSON(){this.jsonString=!0;const result={id:this.id,type:this.type,objectives:this.objectives,timestamp:this.timestamp,weighting:this.weighting,learner_response:this.learner_response,result:this.result,latency:this.latency,description:this.description,correct_responses:this.correct_responses};return this.jsonString=!1,result}}class Rt extends a{_id="";constructor(){super("cmi.interactions.n.objectives.n")}reset(){this._initialized=!1,this._id=""}get id(){return this._id}set id(id){if(""===id||""===id.trim())throw new _(this._cmi_element+".id",y.TYPE_MISMATCH);Le(this._cmi_element+".id",id,B)&&(this._id=id)}toJSON(){this.jsonString=!0;const result={id:this.id};return this.jsonString=!1,result}}function Ot(e){return e.replace(/[[\]]/g,"")}function Tt(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function jt(text,e){const t=Tt(e),i=RegExp("(?<!\\\\)"+t,"g"),s=RegExp("\\\\"+t,"g");return text.split(i).map(t=>t.replace(s,e))}function It(text,e){const t=Tt(e),i=RegExp("(?<!\\\\)"+t),s=RegExp("\\\\"+t,"g"),r=text.split(i),n=r[0]??"";return 1===r.length?[n.replace(s,e)]:[n.replace(s,e),r.slice(1).join(e).replace(s,e)]}class qt extends a{_pattern="";_interactionType;constructor(e){super("cmi.interactions.n.correct_responses.n"),this._interactionType=e}reset(){this._initialized=!1,this._pattern=""}get pattern(){return this._pattern}set pattern(pattern){if("fill-in"!==this._interactionType||""!==pattern){if(Le(this._cmi_element+".pattern",pattern,"^.*$")){if(this._interactionType){const e=J[this._interactionType];e&&("matching"===this._interactionType&&/\\[.,]/.test(pattern)||function(type,pattern,e){if(pattern.trim()!==pattern)throw new _("cmi.interactions.n.correct_responses.n.pattern",y.TYPE_MISMATCH);const t=e.delimiter?Ot(e.delimiter):null,i=t?jt(pattern,t):[pattern];for(const e of i)if(e.trim()!==e)throw new _("cmi.interactions.n.correct_responses.n.pattern",y.TYPE_MISMATCH);if("fill-in"===type&&""===pattern)return;const s=e.delimiter?Ot(e.delimiter):null;let r;if(r=s?jt(pattern,s):[pattern],!e.delimiter&&pattern.includes(","))throw new _("cmi.interactions.n.correct_responses.n.pattern",y.TYPE_MISMATCH);if((e.unique||!1===e.duplicate)&&new Set(r).size!==r.length)throw new _("cmi.interactions.n.correct_responses.n.pattern",y.TYPE_MISMATCH);if(0===r.length||r.length>e.max)throw new _("cmi.interactions.n.correct_responses.n.pattern",y.GENERAL_SET_FAILURE);const n=RegExp(e.format),o=e.format2?RegExp(e.format2):null,a=e=>{if(!n.test(e))throw new _("cmi.interactions.n.correct_responses.n.pattern",y.TYPE_MISMATCH)},c=(e,t)=>{if(!t)throw new _("cmi.interactions.n.correct_responses.n.pattern",y.TYPE_MISMATCH);const i=Ot(t),s=e.split(RegExp("(?<!\\\\)"+Tt(i),"g")).map(e=>e.replace(RegExp("\\\\"+Tt(i),"g"),i));if(2!==s.length||""===s[0]||""===s[1])throw new _("cmi.interactions.n.correct_responses.n.pattern",y.TYPE_MISMATCH);if(void 0!==s[0]&&!n.test(s[0])||o&&void 0!==s[1]&&!o.test(s[1]))throw new _("cmi.interactions.n.correct_responses.n.pattern",y.TYPE_MISMATCH)};for(const t of r)switch(type){case"numeric":{const i=e.delimiter?Ot(e.delimiter):":",s=t.split(i);if(1>s.length||s.length>2)throw new _("cmi.interactions.n.correct_responses.n.pattern",y.TYPE_MISMATCH);s.forEach(a);break}case"performance":{const i=e.delimiter2;if(!i)throw new _("cmi.interactions.n.correct_responses.n.pattern",y.TYPE_MISMATCH);const s=It(t,Ot(i));if(2!==s.length)throw new _("cmi.interactions.n.correct_responses.n.pattern",y.TYPE_MISMATCH);const[r,a]=s;if(""===r||""===a||r===a)throw new _("cmi.interactions.n.correct_responses.n.pattern",y.TYPE_MISMATCH);if(void 0===r||!n.test(r))throw new _("cmi.interactions.n.correct_responses.n.pattern",y.TYPE_MISMATCH);if(o&&void 0!==a&&!o.test(a))throw new _("cmi.interactions.n.correct_responses.n.pattern",y.TYPE_MISMATCH);break}default:e.delimiter2?c(t,e.delimiter2):a(t)}}(this._interactionType,pattern,e))}this._pattern=pattern}}else this._pattern=""}toJSON(){this.jsonString=!0;const result={pattern:this.pattern};return this.jsonString=!1,result}}class Nt extends a{__children;__score_range;__invalid_error_code;__invalid_type_code;__invalid_range_code;__decimal_regex;__error_class;_raw="";_min="";_max;constructor(e){super(e.CMIElement),this.__children=e.score_children||"raw,min,max",this.__score_range=!!e.score_range&&"0#100",this._max=e.max||""===e.max?e.max:"100",this.__invalid_error_code=e.invalidErrorCode||f.INVALID_SET_VALUE,this.__invalid_type_code=e.invalidTypeCode||f.TYPE_MISMATCH,this.__invalid_range_code=e.invalidRangeCode||f.VALUE_OUT_OF_RANGE,this.__decimal_regex=e.decimalRegex||"^-?([0-9]{0,10})(\\.[0-9]*)?$",this.__error_class=e.errorClass}reset(){this._initialized=!1,this._raw="",this._min=""}get _children(){return this.__children}set _children(_children){throw new this.__error_class(this._cmi_element+"._children",this.__invalid_error_code)}get raw(){return this._raw}set raw(e){Ct.validateScore(this._cmi_element+".raw",e,this.__decimal_regex,this.__score_range,this.__invalid_type_code,this.__invalid_range_code,this.__error_class)&&(this._raw=e)}get min(){return this._min}set min(e){Ct.validateScore(this._cmi_element+".min",e,this.__decimal_regex,this.__score_range,this.__invalid_type_code,this.__invalid_range_code,this.__error_class)&&(this._min=e)}get max(){return this._max}set max(e){Ct.validateScore(this._cmi_element+".max",e,this.__decimal_regex,this.__score_range,this.__invalid_type_code,this.__invalid_range_code,this.__error_class)&&(this._max=e)}getScoreObject(){const e={};return Number.isNaN(Number.parseFloat(this.raw))||(e.raw=Number.parseFloat(this.raw)),Number.isNaN(Number.parseFloat(this.min))||(e.min=Number.parseFloat(this.min)),Number.isNaN(Number.parseFloat(this.max))||(e.max=Number.parseFloat(this.max)),e}toJSON(){this.jsonString=!0;const result={raw:this.raw,min:this.min,max:this.max};return this.jsonString=!1,result}}class Dt extends Nt{_scaled="";constructor(){super({CMIElement:"cmi.score",score_children:m.score_children,max:"",invalidErrorCode:y.READ_ONLY_ELEMENT,invalidTypeCode:y.TYPE_MISMATCH,invalidRangeCode:y.VALUE_OUT_OF_RANGE,decimalRegex:V,errorClass:_})}reset(){this._initialized=!1,this._scaled="",this._raw="",this._min="",this._max=""}get scaled(){return this._scaled}set scaled(e){Le(this._cmi_element+".scaled",e,V)&&Pe(this._cmi_element+".scaled",e,"-1#1")&&(this._scaled=e)}getScoreObject(){const e=super.getScoreObject();return Number.isNaN(Number.parseFloat(this.scaled))||(e.scaled=Number.parseFloat(this.scaled)),e}toJSON(){this.jsonString=!0;const result={scaled:this.scaled,raw:this.raw,min:this.min,max:this.max};return this.jsonString=!1,result}}class xt extends b{constructor(){super({CMIElement:"cmi.comments_from_lms",children:m.comments_children,errorCode:y.READ_ONLY_ELEMENT,errorClass:_})}}class Lt extends b{constructor(){super({CMIElement:"cmi.comments_from_learner",children:m.comments_children,errorCode:y.READ_ONLY_ELEMENT,errorClass:_})}}class Pt extends a{_comment="";_location="";_timestamp="";_readOnlyAfterInit;constructor(e=!1){super("cmi.comments_from_learner.n"),this._comment="",this._location="",this._timestamp="",this._readOnlyAfterInit=e}reset(){this._initialized=!1}get comment(){return this._comment}set comment(comment){if(this.initialized&&this._readOnlyAfterInit)throw new _(this._cmi_element+".comment",y.READ_ONLY_ELEMENT);Le(this._cmi_element+".comment",comment,z,!0)&&(this._comment=comment)}get location(){return this._location}set location(location){if(this.initialized&&this._readOnlyAfterInit)throw new _(this._cmi_element+".location",y.READ_ONLY_ELEMENT);Le(this._cmi_element+".location",location,"^[\\u0000-\\uFFFF]{0,250}$")&&(this._location=location)}get timestamp(){return this._timestamp}set timestamp(timestamp){if(this.initialized&&this._readOnlyAfterInit)throw new _(this._cmi_element+".timestamp",y.READ_ONLY_ELEMENT);Le(this._cmi_element+".timestamp",timestamp,F)&&(this._timestamp=timestamp)}toJSON(){this.jsonString=!0;const result={comment:this.comment,location:this.location,timestamp:this.timestamp};return this.jsonString=!1,result}}class zt extends b{constructor(){super({CMIElement:"cmi.objectives",children:m.objectives_children,errorCode:y.READ_ONLY_ELEMENT,errorClass:_})}findObjectiveById(id){return this.childArray.find(e=>e.id===id)}findObjectiveByIndex(e){return this.childArray[e]}setObjectiveByIndex(e,t){this.childArray[e]=t}}class Ft extends a{_id="";_idIsSet=!1;_success_status="unknown";_completion_status="unknown";_progress_measure="";_description="";constructor(){super("cmi.objectives.n"),this.score=new Dt}reset(){this._initialized=!1,this._id="",this._idIsSet=!1,this._success_status="unknown",this._completion_status="unknown",this._progress_measure="",this._description="",this.score?.reset()}score;initialize(){super.initialize(),this.score?.initialize()}get id(){return this._id}set id(id){if(""===id||""===id.trim())throw new _(this._cmi_element+".id",y.TYPE_MISMATCH);if(this._idIsSet&&this._id!==id)throw new _(this._cmi_element+".id",y.GENERAL_SET_FAILURE);Le(this._cmi_element+".id",id,B)&&(this._id=id,this._idIsSet=!0)}get success_status(){return this._success_status}set success_status(success_status){if(this.initialized&&""===this._id)throw new _(this._cmi_element+".success_status",y.DEPENDENCY_NOT_ESTABLISHED);Le(this._cmi_element+".success_status",success_status,$)&&(this._success_status=success_status)}get completion_status(){return this._completion_status}set completion_status(completion_status){if(this.initialized&&""===this._id)throw new _(this._cmi_element+".completion_status",y.DEPENDENCY_NOT_ESTABLISHED);Le(this._cmi_element+".completion_status",completion_status,U)&&(this._completion_status=completion_status)}get progress_measure(){return this._progress_measure}set progress_measure(progress_measure){if(this.initialized&&""===this._id)throw new _(this._cmi_element+".progress_measure",y.DEPENDENCY_NOT_ESTABLISHED);Le(this._cmi_element+".progress_measure",progress_measure,V)&&Pe(this._cmi_element+".progress_measure",progress_measure,"0#1")&&(this._progress_measure=progress_measure)}get description(){return this._description}set description(description){if(this.initialized&&""===this._id)throw new _(this._cmi_element+".description",y.DEPENDENCY_NOT_ESTABLISHED);Le(this._cmi_element+".description",description,P,!0)&&(this._description=description)}toJSON(){this.jsonString=!0;const result={id:this.id,success_status:this.success_status,completion_status:this.completion_status,progress_measure:this.progress_measure,description:this.description,score:this.score};return this.jsonString=!1,result}fromJSON(e){e&&"object"==typeof e&&("string"==typeof e.id&&(this.id=e.id),"string"==typeof e.success_status&&(this.success_status=e.success_status),"string"==typeof e.completion_status&&(this.completion_status=e.completion_status),void 0!==e.progress_measure&&(this.progress_measure=e.progress_measure+""),"string"==typeof e.description&&(this.description=e.description),e.score&&"object"==typeof e.score&&(void 0!==e.score.scaled&&(this.score.scaled=e.score.scaled+""),void 0!==e.score.raw&&(this.score.raw=e.score.raw+""),void 0!==e.score.min&&(this.score.min=e.score.min+""),void 0!==e.score.max&&(this.score.max=e.score.max+"")))}}class kt extends a{__version="1.0";__children=m.cmi_children;constructor(){super("cmi")}get _version(){return this.__version}set _version(_version){throw new _(this._cmi_element+"._version",y.READ_ONLY_ELEMENT)}get _children(){return this.__children}set _children(_children){throw new _(this._cmi_element+"._children",y.READ_ONLY_ELEMENT)}reset(){this._initialized=!1}}class Vt extends a{_learner_id="";_learner_name="";constructor(){super("cmi")}get learner_id(){return this._learner_id}set learner_id(learner_id){if(this.initialized)throw new _(this._cmi_element+".learner_id",y.READ_ONLY_ELEMENT);this._learner_id=learner_id}get learner_name(){return this._learner_name}set learner_name(learner_name){if(this.initialized)throw new _(this._cmi_element+".learner_name",y.READ_ONLY_ELEMENT);this._learner_name=learner_name}reset(){this._initialized=!1}}class Ht extends a{_completion_status="unknown";_success_status="unknown";_progress_measure="";constructor(){super("cmi")}get completion_status(){return this._completion_status}set completion_status(completion_status){Le(this._cmi_element+".completion_status",completion_status,U)&&(this._completion_status=completion_status)}get success_status(){return this._success_status}set success_status(success_status){Le(this._cmi_element+".success_status",success_status,$)&&(this._success_status=success_status)}get progress_measure(){return this._progress_measure}set progress_measure(progress_measure){Le(this._cmi_element+".progress_measure",progress_measure,V)&&Pe(this._cmi_element+".progress_measure",progress_measure,"0#1")&&(this._progress_measure=progress_measure)}reset(){this._initialized=!1,this._completion_status="unknown",this._success_status="unknown",this._progress_measure=""}}class Bt extends a{_entry="";_exit="";_session_time="PT0H0M0S";_total_time="PT0S";constructor(){super("cmi")}get entry(){return this._entry}set entry(entry){if(this.initialized)throw new _(this._cmi_element+".entry",y.READ_ONLY_ELEMENT);this._entry=entry}get exit(){if(!this.jsonString)throw new _(this._cmi_element+".exit",y.WRITE_ONLY_ELEMENT);return this._exit}getExitValueInternal(){return this._exit}set exit(exit){"logout"===exit&&console.warn('SCORM 2004: cmi.exit value "logout" is deprecated per 4th Edition. Consider using "normal" or "suspend" instead.'),Le(this._cmi_element+".exit",exit,"^(time-out|suspend|logout|normal)$",!0)&&(this._exit=exit)}get session_time(){if(!this.jsonString)throw new _(this._cmi_element+".session_time",y.WRITE_ONLY_ELEMENT);return this._session_time}set session_time(session_time){Le(this._cmi_element+".session_time",session_time,k)&&(this._session_time=session_time)}get total_time(){return this._total_time}set total_time(total_time){if(this.initialized)throw new _(this._cmi_element+".total_time",y.READ_ONLY_ELEMENT);this._total_time=total_time}getCurrentTotalTime(e){let s=this._session_time;if(void 0!==e){const i=(new Date).getTime()-e;s=t(i/1e3)}return function(e,s){const r=RegExp(k);return t(i(e,r)+i(s,r))}(this._total_time,s)}reset(){this._initialized=!1,this._entry="ab-initio",this._exit="",this._session_time="PT0H0M0S"}}class Ut extends a{_location="";_launch_data="";_suspend_data="";constructor(){super("cmi")}get location(){return this._location}set location(location){Le(this._cmi_element+".location",location,"^[\\u0000-\\uFFFF]{0,1000}$")&&(this._location=location)}get launch_data(){return this._launch_data}set launch_data(launch_data){if(this.initialized)throw new _(this._cmi_element+".launch_data",y.READ_ONLY_ELEMENT);this._launch_data=launch_data}get suspend_data(){return this._suspend_data}set suspend_data(suspend_data){Le(this._cmi_element+".suspend_data",suspend_data,L,!0)&&(this._suspend_data=suspend_data)}reset(){this._initialized=!1,this._location="",this._suspend_data=""}}class $t extends a{_credit="credit";_mode="normal";_time_limit_action="continue,no message";_max_time_allowed="";constructor(){super("cmi")}get credit(){return this._credit}set credit(credit){if(this.initialized)throw new _(this._cmi_element+".credit",y.READ_ONLY_ELEMENT);if(!/^(credit|no-credit)$/.test(credit))throw new _(this._cmi_element+".credit",y.TYPE_MISMATCH);this._credit=credit}get mode(){return this._mode}set mode(mode){if(this.initialized)throw new _(this._cmi_element+".mode",y.READ_ONLY_ELEMENT);if(!/^(browse|normal|review)$/.test(mode))throw new _(this._cmi_element+".mode",y.TYPE_MISMATCH);this._mode=mode}get time_limit_action(){return this._time_limit_action}set time_limit_action(time_limit_action){if(this.initialized)throw new _(this._cmi_element+".time_limit_action",y.READ_ONLY_ELEMENT);if(!/^(exit,message|exit,no message|continue,message|continue,no message)$/.test(time_limit_action))throw new _(this._cmi_element+".time_limit_action",y.TYPE_MISMATCH);this._time_limit_action=time_limit_action}get max_time_allowed(){return this._max_time_allowed}set max_time_allowed(max_time_allowed){if(this.initialized)throw new _(this._cmi_element+".max_time_allowed",y.READ_ONLY_ELEMENT);if(""!==max_time_allowed){if(!RegExp(k).test(max_time_allowed))throw new _(this._cmi_element+".max_time_allowed",y.TYPE_MISMATCH);this._max_time_allowed=max_time_allowed}else this._max_time_allowed=max_time_allowed}reset(){this._initialized=!1}}class Gt extends a{_scaled_passing_score="";_completion_threshold="";constructor(){super("cmi")}get scaled_passing_score(){return this._scaled_passing_score}set scaled_passing_score(scaled_passing_score){if(this.initialized)throw new _(this._cmi_element+".scaled_passing_score",y.READ_ONLY_ELEMENT??404);if(""===scaled_passing_score)return void(this._scaled_passing_score=scaled_passing_score);if(!RegExp(V).test(scaled_passing_score))throw new _(this._cmi_element+".scaled_passing_score",y.TYPE_MISMATCH??406);const e=parseFloat(scaled_passing_score);if(-1>e||e>1)throw new _(this._cmi_element+".scaled_passing_score",y.VALUE_OUT_OF_RANGE??407);this._scaled_passing_score=scaled_passing_score}get completion_threshold(){return this._completion_threshold}set completion_threshold(e){if(this.initialized)throw new _(this._cmi_element+".completion_threshold",y.READ_ONLY_ELEMENT??404);if(""===e)return void(this._completion_threshold=e);if(!RegExp(V).test(e))throw new _(this._cmi_element+".completion_threshold",y.TYPE_MISMATCH??406);const t=parseFloat(e);if(0>t||t>1)throw new _(this._cmi_element+".completion_threshold",y.VALUE_OUT_OF_RANGE??407);this._completion_threshold=e}reset(){this._initialized=!1}}class Yt extends c{constructor(e=!1){super("cmi"),this.metadata=new kt,this.learner=new Vt,this.status=new Ht,this.session=new Bt,this.content=new Ut,this.settings=new $t,this.thresholds=new Gt,this.learner_preference=new Et,this.score=new Dt,this.comments_from_learner=new Lt,this.comments_from_lms=new xt,this.interactions=new Mt,this.objectives=new zt,e&&this.initialize()}metadata;learner;status;session;content;settings;thresholds;learner_preference;score;comments_from_learner;comments_from_lms;interactions;objectives;initialize(){super.initialize(),this.metadata?.initialize(),this.learner?.initialize(),this.status?.initialize(),this.session?.initialize(),this.content?.initialize(),this.settings?.initialize(),this.thresholds?.initialize(),this.learner_preference?.initialize(),this.score?.initialize(),this.comments_from_learner?.initialize(),this.comments_from_lms?.initialize(),this.interactions?.initialize(),this.objectives?.initialize()}reset(){this._initialized=!1,this.metadata?.reset(),this.learner?.reset(),this.status?.reset(),this.session?.reset(),this.content?.reset(),this.settings?.reset(),this.thresholds?.reset(),this.objectives?.reset(!0),this.interactions?.reset(!0),this.score?.reset(),this.comments_from_learner?.reset(),this.comments_from_lms?.reset(),this.learner_preference?.reset()}get _version(){return this.metadata._version}set _version(_version){this.metadata._version=_version}get _children(){return this.metadata._children}set _children(_children){this.metadata._children=_children}get completion_status(){return this.status.completion_status}set completion_status(completion_status){this.status.completion_status=completion_status}get completion_threshold(){return this.thresholds.completion_threshold}set completion_threshold(e){this.thresholds.completion_threshold=e}get credit(){return this.settings.credit}set credit(credit){this.settings.credit=credit}get entry(){return this.session.entry}set entry(entry){this.session.entry=entry}get exit(){return this.session.jsonString=this.jsonString,this.session.exit}set exit(exit){this.session.exit=exit}getExitValueInternal(){return this.session.getExitValueInternal()}get launch_data(){return this.content.launch_data}set launch_data(launch_data){this.content.launch_data=launch_data}get learner_id(){return this.learner.learner_id}set learner_id(learner_id){this.learner.learner_id=learner_id}get learner_name(){return this.learner.learner_name}set learner_name(learner_name){this.learner.learner_name=learner_name}get location(){return this.content.location}set location(location){this.content.location=location}get max_time_allowed(){return this.settings.max_time_allowed}set max_time_allowed(max_time_allowed){this.settings.max_time_allowed=max_time_allowed}get mode(){return this.settings.mode}set mode(mode){this.settings.mode=mode}get progress_measure(){return this.status.progress_measure}set progress_measure(progress_measure){this.status.progress_measure=progress_measure}get scaled_passing_score(){return this.thresholds.scaled_passing_score}set scaled_passing_score(scaled_passing_score){this.thresholds.scaled_passing_score=scaled_passing_score}get session_time(){return this.session.jsonString=this.jsonString,this.session.session_time}set session_time(session_time){this.session.session_time=session_time}get success_status(){return this.status.success_status}set success_status(success_status){this.status.success_status=success_status}get suspend_data(){return this.content.suspend_data}set suspend_data(suspend_data){this.content.suspend_data=suspend_data}get time_limit_action(){return this.settings.time_limit_action}set time_limit_action(time_limit_action){this.settings.time_limit_action=time_limit_action}get total_time(){return this.session.total_time}set total_time(total_time){this.session.total_time=total_time}getCurrentTotalTime(){return this.session.getCurrentTotalTime(this.start_time)}toJSON(){this.jsonString=!0,this.session.jsonString=!0;const result={comments_from_learner:this.comments_from_learner,comments_from_lms:this.comments_from_lms,completion_status:this.completion_status,completion_threshold:this.completion_threshold,credit:this.credit,entry:this.entry,exit:this.exit,interactions:this.interactions,launch_data:this.launch_data,learner_id:this.learner_id,learner_name:this.learner_name,learner_preference:this.learner_preference,location:this.location,max_time_allowed:this.max_time_allowed,mode:this.mode,objectives:this.objectives,progress_measure:this.progress_measure,scaled_passing_score:this.scaled_passing_score,score:this.score,session_time:this.session_time,success_status:this.success_status,suspend_data:this.suspend_data,time_limit_action:this.time_limit_action,total_time:this.total_time};return this.jsonString=!1,this.session.jsonString=!1,result}}class Wt extends a{constructor(){super("adl"),this.nav=new Kt,this.data=new Jt}nav;data=new Jt;_sequencing=null;initialize(){super.initialize(),this.nav?.initialize()}reset(){this._initialized=!1,this.nav?.reset()}get sequencing(){return this._sequencing}set sequencing(e){this._sequencing=e,e&&(e.adlNav=this.nav,this.nav.sequencing=e)}toJSON(){this.jsonString=!0;const result={nav:this.nav,data:this.data};return this.jsonString=!1,result}}class Kt extends a{_request="_none_";_sequencing=null;constructor(){super("adl.nav"),this.request_valid=new ei,this.request_valid.setParentNav(this)}request_valid;get sequencing(){return this._sequencing}set sequencing(e){this._sequencing=e}initialize(){super.initialize(),this.request_valid?.initialize()}reset(){this._initialized=!1,this._request="_none_",this._sequencing&&(this._sequencing.adlNav=null),this._sequencing=null,this.request_valid?.reset()}get request(){return this._request}set request(request){Le(this._cmi_element+".request",request,G)&&(this._request=request)}toJSON(){this.jsonString=!0;const result={request:this.request};return this.jsonString=!1,result}}class Jt extends b{constructor(){super({CMIElement:"adl.data",children:m.adl_data_children,errorCode:y.READ_ONLY_ELEMENT,errorClass:_})}}class Xt extends a{_id="";_store="";_idIsSet=!1;_storeIsSet=!1;constructor(){super("adl.data.n")}reset(){this._initialized=!1,this._idIsSet=!1,this._storeIsSet=!1}get id(){return this._id}set id(id){if(this.initialized)throw new _(this._cmi_element+".id",y.READ_ONLY_ELEMENT);Le(this._cmi_element+".id",id,B)&&(this._id=id,this._idIsSet=!0)}get store(){if(this.initialized&&!this._storeIsSet)throw new _(this._cmi_element+".store",y.VALUE_NOT_INITIALIZED);return this._store}set store(e){if(this.initialized&&!this._idIsSet)throw new _(this._cmi_element+".store",y.DEPENDENCY_NOT_ESTABLISHED);Le(this._cmi_element+".store",e,L)&&(this._store=e,this._storeIsSet=!0)}toJSON(){this.jsonString=!0;const result={id:this._id,store:this._store};return this.jsonString=!1,result}}class Qt{_parentNav=null;_staticValues={};setParentNav(nav){this._parentNav=nav}_isTargetValid(e){if(this._parentNav?.sequencing?.overallSequencingProcess){const t=this._parentNav.sequencing.overallSequencingProcess;if(t.predictChoiceEnabled)return t.predictChoiceEnabled(e)?"true":"false"}const t=this._staticValues[e];return t===A?"true":t===E?"false":"unknown"}getAll(){return{...this._staticValues}}setAll(e){this._staticValues={...e}}}class Zt{_parentNav=null;_staticValues={};setParentNav(nav){this._parentNav=nav}_isTargetValid(e){if(this._parentNav?.sequencing?.activityTree)return this._parentNav.sequencing.activityTree.getActivity(e)?"true":"false";const t=this._staticValues[e];return t===A?"true":t===E?"false":"unknown"}getAll(){return{...this._staticValues}}setAll(e){this._staticValues={...e}}}class ei extends a{_continue="unknown";_previous="unknown";_choice;_jump;_exit="unknown";_exitAll="unknown";_abandon="unknown";_abandonAll="unknown";_suspendAll="unknown";_parentNav=null;constructor(){super("adl.nav.request_valid"),this._choice=new Qt,this._jump=new Zt}setParentNav(nav){this._parentNav=nav,this._choice.setParentNav(nav),this._jump.setParentNav(nav)}reset(){this._initialized=!1,this._continue="unknown",this._previous="unknown",this._choice.setAll({}),this._jump.setAll({}),this._exit="unknown",this._exitAll="unknown",this._abandon="unknown",this._abandonAll="unknown",this._suspendAll="unknown"}get continue(){if(this._parentNav?.sequencing?.overallSequencingProcess){const e=this._parentNav.sequencing.overallSequencingProcess;if(e.predictContinueEnabled)return e.predictContinueEnabled()?"true":"false"}return this._continue}set continue(e){if(this.initialized)throw new _(this._cmi_element+".continue",y.READ_ONLY_ELEMENT);Le(this._cmi_element+".continue",e,Y)&&(this._continue=e)}get previous(){if(this._parentNav?.sequencing?.overallSequencingProcess){const e=this._parentNav.sequencing.overallSequencingProcess;if(e.predictPreviousEnabled)return e.predictPreviousEnabled()?"true":"false"}return this._previous}set previous(e){if(this.initialized)throw new _(this._cmi_element+".previous",y.READ_ONLY_ELEMENT);Le(this._cmi_element+".previous",e,Y)&&(this._previous=e)}get choice(){return this._choice}set choice(e){if(this.initialized)throw new _(this._cmi_element+".choice",y.READ_ONLY_ELEMENT);if("object"!=typeof e)throw new _(this._cmi_element+".choice",y.TYPE_MISMATCH);const t={};for(const i in e)if({}.hasOwnProperty.call(e,i)&&Le(this._cmi_element+".choice."+i,e[i]||"",Y)&&Le(this._cmi_element+".choice."+i,i,W)){const s=e[i];"true"===s?t[i]=A:"false"===s?t[i]=E:"unknown"===s&&(t[i]=C)}this._choice.setAll(t)}get jump(){return this._jump}set jump(e){if(this.initialized)throw new _(this._cmi_element+".jump",y.READ_ONLY_ELEMENT);if("object"!=typeof e)throw new _(this._cmi_element+".jump",y.TYPE_MISMATCH);const t={};for(const i in e)if({}.hasOwnProperty.call(e,i)&&Le(this._cmi_element+".jump."+i,e[i]||"",Y)&&Le(this._cmi_element+".jump."+i,i,W)){const s=e[i];"true"===s?t[i]=A:"false"===s?t[i]=E:"unknown"===s&&(t[i]=C)}this._jump.setAll(t)}get exit(){return this._exit}set exit(e){if(this.initialized)throw new _(this._cmi_element+".exit",y.READ_ONLY_ELEMENT);Le(this._cmi_element+".exit",e,Y)&&(this._exit=e)}get exitAll(){return this._exitAll}set exitAll(e){if(this.initialized)throw new _(this._cmi_element+".exitAll",y.READ_ONLY_ELEMENT);Le(this._cmi_element+".exitAll",e,Y)&&(this._exitAll=e)}get abandon(){return this._abandon}set abandon(e){if(this.initialized)throw new _(this._cmi_element+".abandon",y.READ_ONLY_ELEMENT);Le(this._cmi_element+".abandon",e,Y)&&(this._abandon=e)}get abandonAll(){return this._abandonAll}set abandonAll(e){if(this.initialized)throw new _(this._cmi_element+".abandonAll",y.READ_ONLY_ELEMENT);Le(this._cmi_element+".abandonAll",e,Y)&&(this._abandonAll=e)}get suspendAll(){return this._suspendAll}set suspendAll(e){if(this.initialized)throw new _(this._cmi_element+".suspendAll",y.READ_ONLY_ELEMENT);Le(this._cmi_element+".suspendAll",e,Y)&&(this._suspendAll=e)}toJSON(){this.jsonString=!0;const result={previous:this.previous,continue:this.continue,choice:this._choice.getAll(),jump:this._jump.getAll(),exit:this.exit,exitAll:this.exitAll,abandon:this.abandon,abandonAll:this.abandonAll,suspendAll:this.suspendAll};return this.jsonString=!1,result}}class ti extends a{_root=null;_currentActivity=null;_suspendedActivity=null;_activities=new Map;constructor(e){super("activityTree"),e&&(this.root=e)}initialize(){super.initialize(),this._root&&this._root.initialize()}reset(){this._initialized=!1,this._currentActivity=null,this._suspendedActivity=null,this._activities.clear(),this._root&&(this._root.reset(),this._activities.set(this._root.id,this._root),this._addActivitiesToMap(this._root))}get root(){return this._root}set root(e){if(null!==e&&!(e instanceof Ue))throw new _(this._cmi_element+".root",y.TYPE_MISMATCH);this._activities.clear(),this._root=e,e&&(this._activities.set(e.id,e),this._addActivitiesToMap(e))}_addActivitiesToMap(e){for(const t of e.children)this._activities.set(t.id,t),this._addActivitiesToMap(t)}get currentActivity(){return this._currentActivity}set currentActivity(e){if(null!==e&&!(e instanceof Ue))throw new _(this._cmi_element+".currentActivity",y.TYPE_MISMATCH);if(this._currentActivity){this._currentActivity.isActive=!1;let e=this._currentActivity.parent;for(;e;)e.isActive=!1,e=e.parent}if(this._currentActivity=e,e){e.isActive=!0;let t=e.parent;for(;t;)t.isActive=!0,t=t.parent}}setCurrentActivityWithoutActivation(e){if(null!==e&&!(e instanceof Ue))throw new _(this._cmi_element+".currentActivity",y.TYPE_MISMATCH);if(this._currentActivity){const t=new Set;if(e){t.add(e);let i=e.parent;for(;i;)t.add(i),i=i.parent}this._currentActivity.isActive=!1;let i=this._currentActivity.parent;for(;i;)t.has(i)||(i.isActive=!1),i=i.parent}this._currentActivity=e}get suspendedActivity(){return this._suspendedActivity}set suspendedActivity(e){if(null!==e&&!(e instanceof Ue))throw new _(this._cmi_element+".suspendedActivity",y.TYPE_MISMATCH);if(this._suspendedActivity){this._suspendedActivity.isSuspended=!1;let e=this._suspendedActivity.parent;for(;e;)e.isSuspended=!1,e=e.parent}if(this._suspendedActivity=e,e){e.isSuspended=!0;let t=e.parent;for(;t;)t.isSuspended=!0,t=t.parent}}getActivity(id){return this._activities.get(id)||null}getAllActivities(){return Array.from(this._activities.values())}getParent(e){return e.parent}getChildren(e,t=!0){return t?e.getAvailableChildren():e.children}getSiblings(e){return e.parent?e.parent.children.filter(t=>t!==e):[]}getNextSibling(e,t=!0){if(!e.parent)return null;let i=t?e.parent.getAvailableChildren():e.parent.children,s=i.indexOf(e);return-1===s&&t&&(i=e.parent.children,s=i.indexOf(e)),-1===s||s===i.length-1?null:i[s+1]??null}getPreviousSibling(e,t=!0){if(!e.parent)return null;let i=t?e.parent.getAvailableChildren():e.parent.children,s=i.indexOf(e);return-1===s&&t&&(i=e.parent.children,s=i.indexOf(e)),s>0?i[s-1]??null:null}getFirstChild(e,t=!0){const i=t?e.getAvailableChildren():e.children;return 0===i.length?null:i[0]??null}getLastChild(e,t=!0){const i=t?e.getAvailableChildren():e.children;return 0===i.length?null:i[i.length-1]??null}getCommonAncestor(e,t){const i=[];let s=e;for(;s;)i.unshift(s),s=s.parent;for(s=t;s;){if(i.includes(s))return s;s=s.parent}return null}toJSON(){this.jsonString=!0;const result={root:this._root,currentActivity:this._currentActivity?this._currentActivity.id:null,suspendedActivity:this._suspendedActivity?this._suspendedActivity.id:null};return this.jsonString=!1,result}}class ii extends a{_activityTree;_sequencingRules;_sequencingControls;_rollupRules;_adlNav=null;_hideLmsUi=[];_auxiliaryResources=[];_overallSequencingProcess=null;constructor(){super("sequencing"),this._activityTree=new ti,this._sequencingRules=new re,this._sequencingControls=new ge,this._rollupRules=new He}initialize(){super.initialize(),this._activityTree.initialize(),this._sequencingRules.initialize(),this._sequencingControls.initialize(),this._rollupRules.initialize()}reset(){this._initialized=!1,this._activityTree.reset(),this._sequencingRules.reset(),this._sequencingControls.reset(),this._rollupRules.reset(),this._hideLmsUi=[],this._auxiliaryResources=[]}get activityTree(){return this._activityTree}set activityTree(e){if(!(e instanceof ti))throw new _(this._cmi_element+".activityTree",y.TYPE_MISMATCH);this._activityTree=e}get sequencingRules(){return this._sequencingRules}set sequencingRules(e){if(!(e instanceof re))throw new _(this._cmi_element+".sequencingRules",y.TYPE_MISMATCH);this._sequencingRules=e}get sequencingControls(){return this._sequencingControls}set sequencingControls(e){if(!(e instanceof ge))throw new _(this._cmi_element+".sequencingControls",y.TYPE_MISMATCH);this._sequencingControls=e}get hideLmsUi(){return[...this._hideLmsUi]}set hideLmsUi(e){this._hideLmsUi=[...e]}get auxiliaryResources(){return this._auxiliaryResources.map(e=>({...e}))}set auxiliaryResources(e){this._auxiliaryResources=e.map(e=>({...e}))}get rollupRules(){return this._rollupRules}set rollupRules(e){if(!(e instanceof He))throw new _(this._cmi_element+".rollupRules",y.TYPE_MISMATCH);this._rollupRules=e}get adlNav(){return this._adlNav}set adlNav(e){this._adlNav=e}get overallSequencingProcess(){return this._overallSequencingProcess}set overallSequencingProcess(e){this._overallSequencingProcess=e}processRollup(){const e=this._activityTree.root;e&&this._processRollupRecursive(e)}_processRollupRecursive(e){for(const t of e.children)this._processRollupRecursive(t);this._rollupRules.processRollup(e)}getCurrentActivity(){return this._activityTree.currentActivity}getRootActivity(){return this._activityTree.root}toJSON(){this.jsonString=!0;const result={activityTree:this._activityTree,sequencingRules:this._sequencingRules,sequencingControls:this._sequencingControls,rollupRules:this._rollupRules,adlNav:this._adlNav};return this.jsonString=!1,result}}class si{context;constructor(e){this.context=e}checkValidResponseType(e,t,i,s){let r=[];t?.delimiter?r=(i+"").split(t.delimiter):r[0]=i,r.length>0&&t.max>=r.length?this.context.checkCorrectResponseValue?this.context.checkCorrectResponseValue(e,s,r,i):this.checkCorrectResponseValue(e,s,r,i):r.length>t.max&&this.context.throwSCORMError(e,y.GENERAL_SET_FAILURE,"Data Model Element Pattern Too Long: "+i)}checkDuplicateChoiceResponse(e,t,i){const s=t.correct_responses._count;if("choice"===t.type)for(let r=0;s>r&&"0"===this.context.getLastErrorCode();r++){const s=t.correct_responses.childArray[r];s?.pattern===i&&this.context.throwSCORMError(e,y.GENERAL_SET_FAILURE,""+i)}}validateCorrectResponse(e,t,i){const s=+e.split(".")[4];if(!t)return void this.context.throwSCORMError(e,y.DEPENDENCY_NOT_ESTABLISHED,e);const r=t.correct_responses._count;this.checkDuplicateChoiceResponse(e,t,i);const n=J[t.type];n&&(void 0===n.limit||n.limit>r)?(this.checkValidResponseType(e,n,i,t.type),"0"===this.context.getLastErrorCode()&&(!n.duplicate||!this.checkDuplicatedPattern(t.correct_responses,s,i))||"0"===this.context.getLastErrorCode()&&""===i||"0"===this.context.getLastErrorCode()&&this.context.throwSCORMError(e,y.GENERAL_SET_FAILURE,`Data Model Element Pattern Already Exists: ${e} - ${i}`)):this.context.throwSCORMError(e,y.GENERAL_SET_FAILURE,`Data Model Element Collection Limit Reached: ${e} - ${i}`)}checkDuplicatedPattern(e,t,i){let s=!1;const r=e._count;for(let n=0;r>n&&!s;n++)if(n!==t){const t=e.childArray[n],r=t?.pattern;r===i&&(s=!0)}return s}checkCorrectResponseValue(e,t,i,s){const r=J[t];if(!r)return void this.context.throwSCORMError(e,y.TYPE_MISMATCH,"Incorrect Response Type: "+t);const n=RegExp(r.format);for(let o=0;i.length>o&&"0"===this.context.getLastErrorCode();o++)if(t.match("^(fill-in|long-fill-in|matching|performance|sequencing)$")&&(i[o]=this.removeCorrectResponsePrefixes(e,i[o])),r?.delimiter2){const a=i[o].split(r.delimiter2);2===a.length&&a[0].match(n)&&r.format2&&a[1].match(RegExp(r.format2))||this.context.throwSCORMError(e,y.TYPE_MISMATCH,`${t}: ${s}`)}else{const a=i[o].match(n);if(!a&&""!==s||!a&&"true-false"===t)this.context.throwSCORMError(e,y.TYPE_MISMATCH,`${t}: ${s}`);else if("numeric"===t&&i.length>1)+i[0]>+i[1]&&this.context.throwSCORMError(e,y.TYPE_MISMATCH,`${t}: ${s}`);else if(""!==i[o]&&r.unique)for(let r=0;o>r&&"0"===this.context.getLastErrorCode();r++)i[o]===i[r]&&this.context.throwSCORMError(e,y.TYPE_MISMATCH,`${t}: ${s}`)}}removeCorrectResponsePrefixes(e,t){let i=!1,s=!1,r=!1;const n=RegExp("^({(lang|case_matters|order_matters)=([^}]+)})");let o,a=t.match(n);for(;a;){switch(a[2]){case"lang":if(o=t.match("^(({lang=([a-zA-Z]{1,8}|i|x)?(-[a-zA-Z0-9-]{2,8})?}))(.*?)$"),o){const i=o[3];void 0!==i&&i.length>0&&(X.includes(i.toLowerCase())||this.context.throwSCORMError(e,y.TYPE_MISMATCH,""+t))}r=!0;break;case"case_matters":r||i||s||"true"!==a[3]&&"false"!==a[3]&&this.context.throwSCORMError(e,y.TYPE_MISMATCH,""+t),s=!0;break;case"order_matters":s||r||i||"true"!==a[3]&&"false"!==a[3]&&this.context.throwSCORMError(e,y.TYPE_MISMATCH,""+t),i=!0}a=(t=t.substring(a[1]?.length||0)).match(n)}return t}}class ri{context;responseValidator;constructor(e,t){this.context=e,this.responseValidator=t}getChildElement(e,t,i){if(n(e,"cmi\\.objectives\\.\\d+"))return new Ft;if(i){if(n(e,"cmi\\.interactions\\.\\d+\\.correct_responses\\.\\d+"))return this.createCorrectResponsesObject(e,t);if(n(e,"cmi\\.interactions\\.\\d+\\.objectives\\.\\d+"))return new Rt}else if(n(e,"cmi\\.interactions\\.\\d+"))return new wt;return n(e,"cmi\\.comments_from_learner\\.\\d+")?new Pt:n(e,"cmi\\.comments_from_lms\\.\\d+")?new Pt(!0):n(e,"adl\\.data\\.\\d+")?new Xt:null}createCorrectResponsesObject(e,t){const i=e.split("."),s=this.context.cmi.interactions.childArray[+i[2]];if(this.context.isInitialized()){if(void 0===s||!s.type)return this.context.throwSCORMError(e,y.DEPENDENCY_NOT_ESTABLISHED,e),null;{const i=J[s.type];if(i&&void 0!==i.limit&&s.correct_responses._count>=i.limit)return this.context.throwSCORMError(e,y.GENERAL_SET_FAILURE,"Data Model Element Collection Limit Reached: "+e),null;if(this.responseValidator.checkDuplicateChoiceResponse(e,s,t),!i)return this.context.throwSCORMError(e,y.GENERAL_SET_FAILURE,"Incorrect Response Type: "+s.type),null;this.responseValidator.checkValidResponseType(e,i,t,s.type)}}return"0"===this.context.getLastErrorCode()?new qt(s?.type):null}evaluateCompletionStatus(){const e=this.context.cmi.completion_threshold,t=this.context.cmi.progress_measure,i=this.context.cmi.completion_status;if(""!==e&&null!=e){const i=parseFloat(e+"");if(!isNaN(i)){if(""!==t&&null!=t){const e=parseFloat(t+"");if(!isNaN(e))return i>e?T:O}return j}}return i||j}evaluateSuccessStatus(){const e=this.context.cmi.scaled_passing_score,t=this.context.cmi.score.scaled,i=this.context.cmi.success_status;if(""!==e&&null!=e){const i=parseFloat(e+"");if(!isNaN(i)){if(""!==t&&null!=t){const e=parseFloat(t+"");if(!isNaN(e))return i>e?w:M}return R}}return i||R}}class ni{applySequencingControlsSettings(e,t){void 0!==t.enabled&&(e.enabled=t.enabled),void 0!==t.choice&&(e.choice=t.choice),void 0!==t.choiceExit&&(e.choiceExit=t.choiceExit),void 0!==t.flow&&(e.flow=t.flow),void 0!==t.forwardOnly&&(e.forwardOnly=t.forwardOnly),void 0!==t.useCurrentAttemptObjectiveInfo&&(e.useCurrentAttemptObjectiveInfo=t.useCurrentAttemptObjectiveInfo),void 0!==t.useCurrentAttemptProgressInfo&&(e.useCurrentAttemptProgressInfo=t.useCurrentAttemptProgressInfo),void 0!==t.preventActivation&&(e.preventActivation=t.preventActivation),void 0!==t.constrainChoice&&(e.constrainChoice=t.constrainChoice),void 0!==t.stopForwardTraversal&&(e.stopForwardTraversal=t.stopForwardTraversal),void 0!==t.rollupObjectiveSatisfied&&(e.rollupObjectiveSatisfied=t.rollupObjectiveSatisfied),void 0!==t.rollupProgressCompletion&&(e.rollupProgressCompletion=t.rollupProgressCompletion),void 0!==t.objectiveMeasureWeight&&(e.objectiveMeasureWeight=t.objectiveMeasureWeight),void 0!==t.selectionTiming&&(e.selectionTiming=t.selectionTiming),void 0!==t.selectCount&&(e.selectCount=t.selectCount),void 0!==t.randomizeChildren&&(e.randomizeChildren=t.randomizeChildren),void 0!==t.randomizationTiming&&(e.randomizationTiming=t.randomizationTiming),void 0!==t.selectionCountStatus&&(e.selectionCountStatus=t.selectionCountStatus),void 0!==t.reorderChildren&&(e.reorderChildren=t.reorderChildren),void 0!==t.completionSetByContent&&(e.completionSetByContent=t.completionSetByContent),void 0!==t.objectiveSetByContent&&(e.objectiveSetByContent=t.objectiveSetByContent)}applySequencingRulesSettings(e,t){if(t){if(t.preConditionRules)for(const i of t.preConditionRules){const t=this.createSequencingRule(i);e.addPreConditionRule(t)}if(t.exitConditionRules)for(const i of t.exitConditionRules){const t=this.createSequencingRule(i);e.addExitConditionRule(t)}if(t.postConditionRules)for(const i of t.postConditionRules){const t=this.createSequencingRule(i);e.addPostConditionRule(t)}}}createSequencingRule(e){const t=new se(e.action,e.conditionCombination);for(const i of e.conditions){const e=new ie(i.condition,i.operator,new Map(Object.entries(i.parameters||{})));i.referencedObjective&&(e.referencedObjective=i.referencedObjective),t.addCondition(e)}return t}applyRollupRulesSettings(e,t){if(t?.rules)for(const i of t.rules){const t=this.createRollupRule(i);e.addRule(t)}}createRollupRule(e){const t=new Ve(e.action,e.consideration,e.minimumCount,e.minimumPercent);for(const i of e.conditions){const e=new ke(i.condition,new Map(Object.entries(i.parameters||{})));t.addCondition(e)}return t}sanitizeSequencingCollections(e){if(!e)return{};const t={};for(const[id,i]of Object.entries(e)){const e=id.trim();if(!e)continue;const s={};if(i.sequencingControls&&(s.sequencingControls={...i.sequencingControls}),i.sequencingRules){const e=e=>{const t={action:e.action,conditions:e.conditions.map(e=>{const t={condition:e.condition};return void 0!==e.operator&&(t.operator=e.operator),e.parameters&&(t.parameters={...e.parameters}),void 0!==e.referencedObjective&&(t.referencedObjective=e.referencedObjective),t})};return void 0!==e.conditionCombination&&(t.conditionCombination=e.conditionCombination),t};s.sequencingRules={},i.sequencingRules.preConditionRules&&(s.sequencingRules.preConditionRules=i.sequencingRules.preConditionRules.map(e)),i.sequencingRules.exitConditionRules&&(s.sequencingRules.exitConditionRules=i.sequencingRules.exitConditionRules.map(e)),i.sequencingRules.postConditionRules&&(s.sequencingRules.postConditionRules=i.sequencingRules.postConditionRules.map(e))}i.rollupRules&&(s.rollupRules={rules:i.rollupRules.rules?.map(e=>{const t={action:e.action,conditions:e.conditions.map(e=>{const t={condition:e.condition};return e.parameters&&(t.parameters={...e.parameters}),t})};return void 0!==e.consideration&&(t.consideration=e.consideration),void 0!==e.minimumCount&&(t.minimumCount=e.minimumCount),void 0!==e.minimumPercent&&(t.minimumPercent=e.minimumPercent),t})}),i.rollupConsiderations&&(s.rollupConsiderations={...i.rollupConsiderations}),i.selectionRandomizationState&&(s.selectionRandomizationState=this.cloneSelectionRandomizationState(i.selectionRandomizationState)),i.hideLmsUi&&(s.hideLmsUi=this.sanitizeHideLmsUi(i.hideLmsUi)),i.auxiliaryResources&&(s.auxiliaryResources=this.sanitizeAuxiliaryResources(i.auxiliaryResources)),t[e]=s}return t}normalizeCollectionRefs(e){if(!e)return[];const t=Array.isArray(e)?e:[e],i=new Set,result=[];for(const e of t){const t=e.trim();t&&!i.has(t)&&(i.add(t),result.push(t))}return result}applySequencingCollection(e,t,i){if(t){if(t.sequencingControls&&this.applySequencingControlsSettings(e.sequencingControls,t.sequencingControls),t.sequencingRules&&this.applySequencingRulesSettings(e.sequencingRules,t.sequencingRules),t.rollupRules&&this.applyRollupRulesSettings(e.rollupRules,t.rollupRules),t.rollupConsiderations&&e.applyRollupConsiderations(t.rollupConsiderations),t.hideLmsUi){const i=this.mergeHideLmsUi(e.hideLmsUi,t.hideLmsUi);i.length>0&&(e.hideLmsUi=i)}if(t.auxiliaryResources){const i=this.sanitizeAuxiliaryResources(t.auxiliaryResources);i.length>0&&(e.auxiliaryResources=this.mergeAuxiliaryResources(e.auxiliaryResources,i))}t.selectionRandomizationState&&i.push(this.cloneSelectionRandomizationState(t.selectionRandomizationState))}}sanitizeHideLmsUi(e){if(!e)return[];const t=new Set(Z),i=new Set,s=[];for(const r of e)t.has(r)&&!i.has(r)&&(i.add(r),s.push(r));return s}mergeHideLmsUi(e,t){return t&&0!==t.length?this.sanitizeHideLmsUi([...e,...t]):e}sanitizeAuxiliaryResources(e){if(!e)return[];const t=new Set,i=[];for(const s of e){if(!s)continue;if(!s.resourceId||"string"!=typeof s.resourceId)continue;if(!s.purpose||"string"!=typeof s.purpose)continue;const e=s.resourceId.trim(),r=s.purpose.trim();if(!e||!r)continue;const n=`${e}::${r}`;t.has(n)||(t.add(n),i.push({resourceId:e,purpose:r}))}return i}mergeAuxiliaryResources(e,t){const i=[],s=new Set;for(const r of[...e??[],...t??[]]){if(!r)continue;const e=r.resourceId;e&&!s.has(e)&&(s.add(e),i.push({resourceId:e,purpose:r.purpose}))}return i}cloneSelectionRandomizationState(e){const t={};return e.childOrder&&(t.childOrder=[...e.childOrder]),e.selectedChildIds&&(t.selectedChildIds=[...e.selectedChildIds]),e.hiddenFromChoiceChildIds&&(t.hiddenFromChoiceChildIds=[...e.hiddenFromChoiceChildIds]),void 0!==e.selectionCountStatus&&(t.selectionCountStatus=e.selectionCountStatus),void 0!==e.reorderChildren&&(t.reorderChildren=e.reorderChildren),t}applySelectionRandomizationState(e,t){const i=e.sequencingControls;void 0!==t.selectionCountStatus&&(i.selectionCountStatus=t.selectionCountStatus),void 0!==t.reorderChildren&&(i.reorderChildren=t.reorderChildren);const s=t.selectedChildIds?new Set(t.selectedChildIds):null,r=t.hiddenFromChoiceChildIds?new Set(t.hiddenFromChoiceChildIds):null;t.childOrder&&t.childOrder.length>0&&e.setChildOrder(t.childOrder);let n=!1;if(s||r)for(const t of e.children){if(s){const e=s.has(t.id);t.isAvailable=e,r||(t.isHiddenFromChoice=!e),n=!0}r&&(t.isHiddenFromChoice=r.has(t.id),n=!0)}(n||s||void 0!==t.selectionCountStatus||void 0!==t.reorderChildren||t.childOrder&&t.childOrder.length>0)&&e.setProcessedChildren(e.children.filter(e=>e.isAvailable))}}class oi{sequencingCollections;sequencingConfigBuilder;constructor(e,t){this.sequencingCollections=e||{},this.sequencingConfigBuilder=t||new ni}setSequencingCollections(e){this.sequencingCollections=e}createActivity(e){const t=new Ue(e.id,e.title),i=[],s=this.sequencingConfigBuilder.normalizeCollectionRefs(e.sequencingCollectionRefs);for(const e of s){const s=this.sequencingCollections[e];s&&this.sequencingConfigBuilder.applySequencingCollection(t,s,i)}if(void 0!==e.isVisible&&(t.isVisible=e.isVisible),void 0!==e.isActive&&(t.isActive=e.isActive),void 0!==e.isSuspended&&(t.isSuspended=e.isSuspended),void 0!==e.isCompleted&&(t.isCompleted=e.isCompleted),void 0!==e.isHiddenFromChoice&&(t.isHiddenFromChoice=e.isHiddenFromChoice),void 0!==e.isAvailable&&(t.isAvailable=e.isAvailable),void 0!==e.attemptLimit&&(t.attemptLimit=e.attemptLimit),void 0!==e.attemptAbsoluteDurationLimit&&(t.attemptAbsoluteDurationLimit=e.attemptAbsoluteDurationLimit),void 0!==e.activityAbsoluteDurationLimit&&(t.activityAbsoluteDurationLimit=e.activityAbsoluteDurationLimit),void 0!==e.timeLimitAction&&(t.timeLimitAction=e.timeLimitAction),void 0!==e.timeLimitDuration&&(t.timeLimitDuration=e.timeLimitDuration),void 0!==e.beginTimeLimit&&(t.beginTimeLimit=e.beginTimeLimit),void 0!==e.endTimeLimit&&(t.endTimeLimit=e.endTimeLimit),e.primaryObjective){const i=this.createActivityObjectiveFromSettings(e.primaryObjective,!0);t.primaryObjective=i,null!==i.minNormalizedMeasure&&(t.scaledPassingScore=i.minNormalizedMeasure)}if(e.objectives)for(const i of e.objectives){const e=!0===i.isPrimary,s=this.createActivityObjectiveFromSettings(i,e);e?t.primaryObjective=s:t.addObjective(s)}if(e.sequencingControls&&this.sequencingConfigBuilder.applySequencingControlsSettings(t.sequencingControls,e.sequencingControls),e.sequencingRules&&this.sequencingConfigBuilder.applySequencingRulesSettings(t.sequencingRules,e.sequencingRules),e.rollupRules&&this.sequencingConfigBuilder.applyRollupRulesSettings(t.rollupRules,e.rollupRules),e.rollupConsiderations&&t.applyRollupConsiderations(e.rollupConsiderations),e.hideLmsUi){const i=this.sequencingConfigBuilder.mergeHideLmsUi(t.hideLmsUi,e.hideLmsUi);i.length>0&&(t.hideLmsUi=i)}if(e.auxiliaryResources){const i=this.sequencingConfigBuilder.sanitizeAuxiliaryResources(e.auxiliaryResources);i.length>0&&(t.auxiliaryResources=this.sequencingConfigBuilder.mergeAuxiliaryResources(t.auxiliaryResources,i))}if(e.children)for(const i of e.children){const e=this.createActivity(i);t.addChild(e)}e.selectionRandomizationState&&i.push(this.sequencingConfigBuilder.cloneSelectionRandomizationState(e.selectionRandomizationState));for(const e of i)this.sequencingConfigBuilder.applySelectionRandomizationState(t,e);return t}extractActivityIds(e){const t=[e.id];for(const i of e.children)t.push(...this.extractActivityIds(i));return t}createActivityObjectiveFromSettings(e,t){const i=(e.mapInfo||[]).map(e=>({targetObjectiveID:e.targetObjectiveID,readSatisfiedStatus:e.readSatisfiedStatus??!1,readNormalizedMeasure:e.readNormalizedMeasure??!1,writeSatisfiedStatus:e.writeSatisfiedStatus??!1,writeNormalizedMeasure:e.writeNormalizedMeasure??!1,readCompletionStatus:e.readCompletionStatus??!1,writeCompletionStatus:e.writeCompletionStatus??!1,readProgressMeasure:e.readProgressMeasure??!1,writeProgressMeasure:e.writeProgressMeasure??!1,readRawScore:e.readRawScore??!1,writeRawScore:e.writeRawScore??!1,readMinScore:e.readMinScore??!1,writeMinScore:e.writeMinScore??!1,readMaxScore:e.readMaxScore??!1,writeMaxScore:e.writeMaxScore??!1,updateAttemptData:e.updateAttemptData??!1}));return new Be(e.objectiveID,{description:e.description??null,satisfiedByMeasure:e.satisfiedByMeasure??!1,minNormalizedMeasure:e.minNormalizedMeasure??null,mapInfo:i,isPrimary:t})}}class ai{_globalObjectives=[];context;constructor(e){this.context=e}get globalObjectives(){return this._globalObjectives}set globalObjectives(objectives){this._globalObjectives=objectives}updateSequencingService(e){this.context.sequencingService=e}syncGlobalObjectiveIdsFromSequencing(){if(!this.context.sequencingService)return;const e=this.context.sequencingService.getOverallSequencingProcess();if(!e)return;const t=e.getGlobalObjectiveMap();if(!t||0===t.size)return;const i=Array.from(t.keys()),s=this.context.getSettings(),r=Array.from(new Set((s.globalObjectiveIds||[]).concat(i)));s.globalObjectiveIds=r}restoreGlobalObjectivesToCMI(){if(0!==this._globalObjectives.length)for(let e=0;this._globalObjectives.length>e;e++){const t=this._globalObjectives[e];if(!t||!t.id)continue;if(this.context.cmi.objectives.findObjectiveById(t.id))continue;const i=this.context.cmi.objectives.childArray.length;this.context.commonSetCMIValue("RestoreGlobalObjective",!0,`cmi.objectives.${i}.id`,t.id),t.success_status&&"unknown"!==t.success_status&&this.context.commonSetCMIValue("RestoreGlobalObjective",!0,`cmi.objectives.${i}.success_status`,t.success_status),t.completion_status&&"unknown"!==t.completion_status&&this.context.commonSetCMIValue("RestoreGlobalObjective",!0,`cmi.objectives.${i}.completion_status`,t.completion_status),""!==t.score.scaled&&null!==t.score.scaled&&this.context.commonSetCMIValue("RestoreGlobalObjective",!0,`cmi.objectives.${i}.score.scaled`,t.score.scaled),""!==t.score.raw&&null!==t.score.raw&&this.context.commonSetCMIValue("RestoreGlobalObjective",!0,`cmi.objectives.${i}.score.raw`,t.score.raw),""!==t.score.min&&null!==t.score.min&&this.context.commonSetCMIValue("RestoreGlobalObjective",!0,`cmi.objectives.${i}.score.min`,t.score.min),""!==t.score.max&&null!==t.score.max&&this.context.commonSetCMIValue("RestoreGlobalObjective",!0,`cmi.objectives.${i}.score.max`,t.score.max),""!==t.progress_measure&&null!==t.progress_measure&&this.context.commonSetCMIValue("RestoreGlobalObjective",!0,`cmi.objectives.${i}.progress_measure`,t.progress_measure),""!==t.description&&this.context.commonSetCMIValue("RestoreGlobalObjective",!0,`cmi.objectives.${i}.description`,t.description)}}updateGlobalObjectiveFromCMI(e,t){if(!e||!this.context.sequencingService)return;const i=this.context.sequencingService.getOverallSequencingProcess();if(!i)return;if(!i.getGlobalObjectiveMap().has(e)){const s=this.buildObjectiveMapEntryFromCMI(t);return void i.updateGlobalObjective(e,s)}const s={};t.success_status&&t.success_status!==R&&(s.satisfiedStatus=t.success_status===M,s.satisfiedStatusKnown=!0);const r=this.parseObjectiveNumber(t.score?.scaled);null!==r&&(s.normalizedMeasure=r,s.normalizedMeasureKnown=!0);const n=this.parseObjectiveNumber(t.progress_measure);null!==n&&(s.progressMeasure=n,s.progressMeasureKnown=!0),t.completion_status&&t.completion_status!==j&&(s.completionStatus=t.completion_status,s.completionStatusKnown=!0),0!==Object.keys(s).length&&i.updateGlobalObjective(e,s)}buildObjectiveMapEntryFromCMI(e){const entry={id:e.id,satisfiedStatusKnown:!1,normalizedMeasureKnown:!1,progressMeasureKnown:!1,completionStatusKnown:!1,readSatisfiedStatus:!0,writeSatisfiedStatus:!0,readNormalizedMeasure:!0,writeNormalizedMeasure:!0,readCompletionStatus:!0,writeCompletionStatus:!0,readProgressMeasure:!0,writeProgressMeasure:!0};e.success_status&&e.success_status!==R&&(entry.satisfiedStatus=e.success_status===M,entry.satisfiedStatusKnown=!0);const t=this.parseObjectiveNumber(e.score?.scaled);null!==t&&(entry.normalizedMeasure=t,entry.normalizedMeasureKnown=!0);const i=this.parseObjectiveNumber(e.progress_measure);return null!==i&&(entry.progressMeasure=i,entry.progressMeasureKnown=!0),e.completion_status&&e.completion_status!==j&&(entry.completionStatus=e.completion_status,entry.completionStatusKnown=!0),entry}buildCMIObjectivesFromMap(e){const objectives=[];if(!e||"object"!=typeof e)return objectives;for(const[t,entry]of Object.entries(e)){if(!entry||"object"!=typeof entry)continue;const e=new Ft;e.id=entry.id??t,!0===entry.satisfiedStatusKnown&&(e.success_status=entry.satisfiedStatus?M:w);const i=this.parseObjectiveNumber(entry.normalizedMeasure);!0===entry.normalizedMeasureKnown&&null!==i&&(e.score.scaled=i+"");const s=this.parseObjectiveNumber(entry.progressMeasure);!0===entry.progressMeasureKnown&&null!==s&&(e.progress_measure=s+""),!0===entry.completionStatusKnown&&"string"==typeof entry.completionStatus&&(e.completion_status=entry.completionStatus),objectives.push(e)}return objectives}buildCMIObjectiveFromJSON(e){const t=new Ft;if(!e||"object"!=typeof e)return t;"string"==typeof e.id&&(t.id=e.id),"string"==typeof e.success_status&&(t.success_status=e.success_status),"string"==typeof e.completion_status&&(t.completion_status=e.completion_status),"string"==typeof e.progress_measure&&""!==e.progress_measure&&(t.progress_measure=e.progress_measure),"string"==typeof e.description&&(t.description=e.description);const score=e.score;return score&&"object"==typeof score&&("string"==typeof score.scaled&&""!==score.scaled?t.score.scaled=score.scaled:"number"==typeof score.scaled&&Number.isFinite(score.scaled)&&(t.score.scaled=score.scaled+""),"string"==typeof score.raw&&""!==score.raw?t.score.raw=score.raw:"number"==typeof score.raw&&Number.isFinite(score.raw)&&(t.score.raw=score.raw+""),"string"==typeof score.min&&""!==score.min?t.score.min=score.min:"number"==typeof score.min&&Number.isFinite(score.min)&&(t.score.min=score.min+""),"string"==typeof score.max&&""!==score.max?t.score.max=score.max:"number"==typeof score.max&&Number.isFinite(score.max)&&(t.score.max=score.max+"")),t}captureGlobalObjectiveSnapshot(e){const t={},i=e??this.context.sequencingService?.getOverallSequencingProcess()??null;if(i){const e=i.getGlobalObjectiveMapSnapshot();for(const[id,i]of Object.entries(e))t[id]={...i}}for(const e of this._globalObjectives)e.id&&!t[e.id]&&(t[e.id]=this.buildObjectiveMapEntryFromCMI(e));return t}parseObjectiveNumber(e){if(null==e)return null;if("number"==typeof e&&Number.isFinite(e))return e;const t=parseFloat(e+"");return Number.isFinite(t)?t:null}syncCmiToSequencingActivity(e,t,i){if(!this.context.sequencing)return;const s=this.context.sequencing.getCurrentActivity();if(!s||!s.primaryObjective)return;const r=s.primaryObjective;t!==R&&(r.satisfiedStatus=t===M,r.satisfiedStatusKnown=!0,r.measureStatus=!0,s.objectiveMeasureStatus=!0,s.objectiveSatisfiedStatus=t===M,s.objectiveSatisfiedStatusKnown=!0),e!==j&&(r.completionStatus=e),void 0!==i?.scaled&&null!==i.scaled&&(r.normalizedMeasure=i.scaled,r.measureStatus=!0)}findOrCreateGlobalObjective(e){let t=this._globalObjectives.findIndex(t=>t.id===e);if(-1===t){t=this._globalObjectives.length;const i=new Ft;i.id=e,this._globalObjectives.push(i)}return{index:t,objective:this._globalObjectives[t]}}}class ci{context;globalObjectiveManager;constructor(e,t){this.context=e,this.globalObjectiveManager=t}async saveSequencingState(e){const t=this.context.getSettings();if(!t.sequencingStatePersistence)return this.context.apiLog("saveSequencingState","No persistence configuration provided",I.WARN),!1;try{const i=this.serializeSequencingState(),s={learnerId:this.context.learnerId||"unknown",courseId:t.courseId||"unknown",attemptNumber:1,lastUpdated:(new Date).toISOString(),version:t.sequencingStatePersistence.stateVersion||"1.0",...e},r=t.sequencingStatePersistence;let n=i;if(!1!==r.compress&&(n=this.compressStateData(i)),r.maxStateSize&&n.length>r.maxStateSize)throw Error(`State size ${n.length} exceeds limit ${r.maxStateSize}`);const o=await r.persistence.saveState(n,s);return r.debugPersistence&&this.context.apiLog("saveSequencingState",`State save ${o?"succeeded":"failed"}: size=${n.length}`,o?I.INFO:I.WARN),o}catch(e){return this.context.apiLog("saveSequencingState","Error saving sequencing state: "+(e instanceof Error?e.message:e+""),I.ERROR),!1}}async loadSequencingState(e){const t=this.context.getSettings();if(!t.sequencingStatePersistence)return this.context.apiLog("loadSequencingState","No persistence configuration provided",I.WARN),!1;try{const i={learnerId:this.context.learnerId||"unknown",courseId:t.courseId||"unknown",attemptNumber:1,version:t.sequencingStatePersistence.stateVersion||"1.0",...e},s=t.sequencingStatePersistence,r=await s.persistence.loadState(i);if(!r)return s.debugPersistence&&this.context.apiLog("loadSequencingState","No sequencing state found to load",I.INFO),!1;let n=r;!1!==s.compress&&(n=this.decompressStateData(r));const o=this.deserializeSequencingState(n);return s.debugPersistence&&this.context.apiLog("loadSequencingState",`State load ${o?"succeeded":"failed"}: size=${r.length}`,o?I.INFO:I.WARN),o}catch(e){return this.context.apiLog("loadSequencingState","Error loading sequencing state: "+(e instanceof Error?e.message:e+""),I.ERROR),!1}}serializeSequencingState(){const e=this.context.getSettings(),t={version:e.sequencingStatePersistence?.stateVersion||"1.0",timestamp:(new Date).toISOString(),sequencing:null,currentActivityId:null,globalObjectives:this.globalObjectiveManager.globalObjectives.map(e=>e.toJSON()),globalObjectiveMap:{},adlNavState:{request:this.context.adl.nav.request,request_valid:this.context.adl.nav.request_valid},contentDelivered:!1};if(this.context.sequencingService){const e=this.context.sequencingService.getOverallSequencingProcess();if(e){const i=e.getSequencingState();t.sequencing=i,t.contentDelivered=e.hasContentBeenDelivered(),t.globalObjectiveMap=this.globalObjectiveManager.captureGlobalObjectiveSnapshot(e)}const i=this.context.sequencing.getCurrentActivity();i&&(t.currentActivityId=i.id)}return t.globalObjectiveMap&&0!==Object.keys(t.globalObjectiveMap).length||(t.globalObjectiveMap=this.globalObjectiveManager.captureGlobalObjectiveSnapshot()),JSON.stringify(t)}deserializeSequencingState(e){try{const t=JSON.parse(e),i=this.context.getSettings(),s=i.sequencingStatePersistence?.stateVersion||"1.0";if(t.version!==s&&this.context.apiLog("deserializeSequencingState",`State version mismatch: ${t.version} vs expected ${s}`,I.WARN),t.globalObjectiveMap&&t.sequencing&&!t.sequencing.globalObjectiveMap&&(t.sequencing.globalObjectiveMap=t.globalObjectiveMap),t.sequencing&&this.context.sequencingService){const e=this.context.sequencingService.getOverallSequencingProcess();e&&(e.restoreSequencingState(t.sequencing),t.contentDelivered&&e.setContentDelivered(!0))}const r=new Map;if(Array.isArray(t.globalObjectives))for(const e of t.globalObjectives){const t=this.globalObjectiveManager.buildCMIObjectiveFromJSON(e);t.id&&r.set(t.id,t)}if(t.globalObjectiveMap&&"object"==typeof t.globalObjectiveMap){const e=this.globalObjectiveManager.buildCMIObjectivesFromMap(t.globalObjectiveMap);for(const t of e)t.id&&(r.has(t.id)||r.set(t.id,t))}return r.size>0&&(this.globalObjectiveManager.globalObjectives=Array.from(r.values()),this.globalObjectiveManager.globalObjectives.forEach(e=>{e.id&&this.globalObjectiveManager.updateGlobalObjectiveFromCMI(e.id,e)})),t.adlNavState&&(this.context.adl.nav.request=t.adlNavState.request||"_none_",this.context.adl.nav.request_valid=t.adlNavState.request_valid||{}),!0}catch(e){return this.context.apiLog("deserializeSequencingState","Error deserializing sequencing state: "+(e instanceof Error?e.message:e+""),I.ERROR),!1}}compressStateData(e){return"undefined"!=typeof btoa?btoa(encodeURIComponent(e)):e}decompressStateData(e){if("undefined"!=typeof atob)try{return decodeURIComponent(atob(e))}catch{return e}return e}}class li{context;globalObjectiveManager;constructor(e,t){this.context=e,this.globalObjectiveManager=t||null}setGlobalObjectiveManager(e){this.globalObjectiveManager=e}updateSequencingService(e){this.context.sequencingService=e}renderCommitCMI(e,t=!1){const i=this.context.renderCMIToJSONObject();e||t?i.cmi.total_time=this.context.cmi.getCurrentTotalTime():delete i.cmi.total_time;const result=[],s=r(i);switch(this.context.getSettings().dataCommitFormat){case"flattened":return r(i);case"params":for(const e in s)({}).hasOwnProperty.call(s,e)&&result.push(`${e}=${s[e]}`);return result;default:return i}}renderCommitObject(e,t=!1){const s=this.renderCommitCMI(e,t),r=e||t?this.context.cmi.getCurrentTotalTime():"",n=i(r,k);let o=j,a=R;this.context.cmi.completion_status&&("completed"===this.context.cmi.completion_status?o=O:"incomplete"===this.context.cmi.completion_status&&(o=T)),this.context.cmi.success_status&&("passed"===this.context.cmi.success_status?a=M:"failed"===this.context.cmi.success_status&&(a=w));const c=this.context.cmi?.score?.getScoreObject()||{},l={completionStatus:o,successStatus:a,totalTimeSeconds:n,runtimeData:s};c&&(l.score=c);const u=this.context.getSettings();if(u.autoPopulateCommitMetadata){u.courseId&&(l.courseId=u.courseId),u.scoId&&(l.scoId=u.scoId),this.context.cmi.learner_id&&(l.learnerId=this.context.cmi.learner_id),this.context.cmi.learner_name&&(l.learnerName=this.context.cmi.learner_name);const e=this.context.sequencingService?.getSequencingState();e?.currentActivity?.id&&(l.activityId=e.currentActivity.id)}return this.globalObjectiveManager&&this.globalObjectiveManager.syncCmiToSequencingActivity(o,a,c),l}determineEntryValue(e,t){const i=e?.trim();return""===e||null==e||""===i?"ab-initio":"suspend"===e?"resume":"logout"===e||"normal"===e?"":"time-out"===e&&t?"resume":""}}class Scorm2004API extends At{_version="1.0";_sequencing;_sequencingService=null;_extractedScoItemIds=[];_sequencingCollections={};_responseValidator;_cmiHandler;_activityTreeBuilder;_sequencingConfigBuilder;_globalObjectiveManager;_statePersistence=null;_dataSerializer;constructor(e,t){const i=e?{...e}:void 0;i&&void 0===i.mastery_override&&(i.mastery_override=!1),super(y,i,t),this.cmi=new Yt,this.adl=new Wt,this._sequencing=new ii,this.adl.sequencing=this._sequencing,this._sequencingConfigBuilder=new ni,this._activityTreeBuilder=new oi({},this._sequencingConfigBuilder),this._responseValidator=new si({throwSCORMError:(e,t,i)=>this.throwSCORMError(e,t,i),getLastErrorCode:()=>this.lastErrorCode,checkCorrectResponseValue:(e,t,i,s)=>this._responseValidator.checkCorrectResponseValue(e,t,i,s)}),this._cmiHandler=new ri({cmi:this.cmi,isInitialized:()=>this.isInitialized(),throwSCORMError:(e,t,i)=>this.throwSCORMError(e,t,i),getLastErrorCode:()=>this.lastErrorCode},this._responseValidator);const s={getSettings:()=>this.settings,cmi:this.cmi,sequencing:this._sequencing,sequencingService:this._sequencingService,commonSetCMIValue:this._commonSetCMIValue.bind(this)};this._globalObjectiveManager=new ai(s);const r={getSettings:()=>this.settings,cmi:this.cmi,sequencingService:this._sequencingService,renderCMIToJSONObject:this.renderCMIToJSONObject.bind(this)};this._dataSerializer=new li(r,this._globalObjectiveManager),i?.sequencing&&this.configureSequencing(i.sequencing),this.initializeSequencingService(i),this.Initialize=this.lmsInitialize,this.Terminate=this.lmsFinish,this.GetValue=this.lmsGetValue,this.SetValue=this.lmsSetValue,this.Commit=this.lmsCommit,this.GetLastError=this.lmsGetLastError,this.GetErrorString=this.lmsGetErrorString,this.GetDiagnostic=this.lmsGetDiagnostic}cmi;adl;Initialize;Terminate;GetValue;SetValue;Commit;GetLastError;GetErrorString;GetDiagnostic;reset(e){this.commonReset(e),this.cmi?.reset(),this.adl?.reset()}get version(){return this._version}get globalObjectives(){return this._globalObjectiveManager.globalObjectives}set _globalObjectives(objectives){this._globalObjectiveManager.globalObjectives=objectives}get _globalObjectives(){return this._globalObjectiveManager.globalObjectives}compressStateData(e){return this._statePersistence?this._statePersistence.compressStateData(e):"undefined"!=typeof btoa?btoa(encodeURIComponent(e)):e}decompressStateData(e){if(this._statePersistence)return this._statePersistence.decompressStateData(e);if("undefined"!=typeof atob)try{return decodeURIComponent(atob(e))}catch{return e}return e}lmsInitialize(e=""){if(""!==e)return this.throwSCORMError("api",this._error_codes.ARGUMENT_ERROR),h;this.cmi.initialize();const result=this.initialize("Initialize","LMS was already initialized!","LMS is already finished!");return result===d&&this._sequencingService&&this._sequencingService.initialize(),result===d&&this._globalObjectiveManager.restoreGlobalObjectivesToCMI(),result===d&&this.settings.sequencingStatePersistence&&this.loadSequencingState().catch(()=>{this.apiLog("lmsInitialize","Failed to auto-load sequencing state",I.WARN)}),result}lmsFinish(e=""){if(""!==e)return this.throwSCORMError("api",this._error_codes.ARGUMENT_ERROR),h;const t=this.adl?.nav?.request||"_none_",i=this.cmi?.getExitValueInternal()||"",s=this.isTerminated(),r=this._sequencingService?.isDeliveryInProgress()??!1,result=this.terminate("Terminate",!0);if(result===d&&!s&&!r){let e=!1,s=null,r=t,n="";const o=RegExp(G);if("_none_"!==t){const e=t.match(o);e&&(e.groups?.choice_target?(n=e.groups?.choice_target,r="choice"):e.groups?.jump_target&&(n=e.groups?.jump_target,r="jump"))}if(this._sequencingService)try{let t,o=null;"_none_"!==r?(o=r,t=n||void 0):this._sequencing.getCurrentActivity()&&(o="exit"),o&&(e=this._sequencingService.processNavigationRequest(o,t,i),s=o)}catch(t){this.apiLog("lmsFinish","Sequencing navigation failed, falling back to event-based navigation: "+t,I.WARN),e=!1}if(!e)if("_none_"!==t){const e={continue:"SequenceNext",previous:"SequencePrevious",choice:"SequenceChoice",jump:"SequenceJump",exit:"SequenceExit",exitAll:"SequenceExitAll",abandon:"SequenceAbandon",abandonAll:"SequenceAbandonAll"}[r];e&&this.processListeners(e,"adl.nav.request",n)}else this.settings.autoProgress&&this.processListeners("SequenceNext",void 0,"next");this._sequencingService&&s&&["exitAll","abandonAll","suspendAll"].includes(s)&&this._sequencingService.terminate(),this.adl.nav.request="_none_"}return result}lmsGetValue(e){if(this.isTerminated())return this.lastErrorCode=y.RETRIEVE_AFTER_TERM+"","";if(!this.isInitialized())return this.lastErrorCode=y.RETRIEVE_BEFORE_INIT+"","";if("adl.nav.request"===e)return this.throwSCORMError(e,y.WRITE_ONLY_ELEMENT,"adl.nav.request is write-only"),"";const t="^adl\\.nav\\.request_valid\\.(choice|jump)\\.{target=([a-zA-Z0-9-_]+)}$";if(n(e,t)){const i=e.match(t);if(i){const request=i[1],e=i[2]?.replace(/{target=/g,"").replace(/}/g,"")||"";if("choice"===request||"jump"===request){const t=this._sequencing?.overallSequencingProcess;return this.settings.scoItemIdValidator?this.settings.scoItemIdValidator(e)+"":t?.predictChoiceEnabled&&"choice"===request?t.predictChoiceEnabled(e)?"true":"false":t?.predictJumpEnabled&&"jump"===request?t.predictJumpEnabled(e)?"true":"false":this._extractedScoItemIds.length>0?this._extractedScoItemIds.includes(e)+"":this.settings?.scoItemIds?.includes(e)+""}}}return"cmi.completion_status"===e?this._cmiHandler.evaluateCompletionStatus():"cmi.success_status"===e?this._cmiHandler.evaluateSuccessStatus():this.getValue("GetValue",!0,e)}lmsSetValue(e,t){const i=this._peekCMIValue(e),result=this.setValue("SetValue","Commit",!0,e,t);if(result===d&&this._sequencingService)try{this._sequencingService.triggerRollupOnCMIChange(e,i,t)}catch(t){console.warn(`Sequencing rollup failed for ${e}: ${t}`)}return result===d&&"setValue"===this.settings.sequencingStatePersistence?.autoSaveOn&&["cmi.completion_status","cmi.success_status","cmi.score.scaled","cmi.objectives","adl.nav.request"].some(t=>e.startsWith(t))&&this.saveSequencingState().catch(()=>{this.apiLog("lmsSetValue","Failed to auto-save sequencing state",I.WARN)}),result}lmsCommit(e=""){if(""!==e)return this.throwSCORMError("api",this._error_codes.ARGUMENT_ERROR),h;if(this.settings.throttleCommits)return this.scheduleCommit(500,"Commit"),d;{const result=this.commit("Commit",!0);return result===d&&"commit"===this.settings.sequencingStatePersistence?.autoSaveOn&&this.saveSequencingState().catch(()=>{this.apiLog("lmsCommit","Failed to auto-save sequencing state",I.WARN)}),result}}lmsGetLastError(){return this.getLastError("GetLastError")}lmsGetErrorString(e){return this.getErrorString("GetErrorString",e)}lmsGetDiagnostic(e){return this.getDiagnostic("GetDiagnostic",e)}setCMIValue(e,t){if(n(e,"cmi\\.objectives\\.\\d+")){const i=+e.split(".")[2],s="cmi.objectives."+i;let r;if(n(e,"cmi\\.objectives\\.\\d+\\.id"))r=t;else{const e=this.cmi.objectives.findObjectiveByIndex(i);r=e?e.id:void 0}if(r&&this.settings.globalObjectiveIds?.includes(r)){const{index:i}=this._globalObjectiveManager.findOrCreateGlobalObjective(r),n=e.replace(s,"_globalObjectives."+i);this._commonSetCMIValue("SetGlobalObjectiveValue",!0,n,t);const o=this._globalObjectiveManager.globalObjectives[i];r&&o&&this._globalObjectiveManager.updateGlobalObjectiveFromCMI(r,o)}}return this._commonSetCMIValue("SetValue",!0,e,t)}getChildElement(e,t,i){return this._cmiHandler.getChildElement(e,t,i)}validateCorrectResponse(e,t){const i=e.split("."),s=this.cmi.interactions.childArray[+i[2]];s?this._responseValidator.validateCorrectResponse(e,s,t):this.throwSCORMError(e,y.DEPENDENCY_NOT_ESTABLISHED,e)}_peekCMIValue(e){if(!e||"string"!=typeof e)return null;const t=e.split(".");let i=this;for(let e=0;t.length>e;e++){const s=t[e];if(null==i)return null;try{i=i[s]}catch{return null}if(i instanceof b){const s=e+1;if(s>=t.length)return i;const r=+t[s];if(!Number.isNaN(r)&&Number.isInteger(r)&&r>=0){if(r>=i.childArray.length)return null;i=i.childArray[r],e++}}}return i??null}getCMIValue(e){return this._commonGetCMIValue("GetValue",!0,e)}getLmsErrorMessageDetails(e,t){let i="",s="";const r=m.error_descriptions[e+=""];return r&&(i=r.basicMessage,s=r.detailMessage),t?s:i}replaceWithAnotherScormAPI(e){this.cmi=e.cmi,this.adl=e.adl}renderCommitCMI(e,t=!1){return this._dataSerializer.renderCommitCMI(e,t)}renderCommitObject(e,t=!1){return this._dataSerializer.renderCommitObject(e,t)}storeData(e){e&&"normal"===this.cmi.mode&&"credit"===this.cmi.credit&&(this.cmi.completion_threshold&&this.cmi.progress_measure&&(this.cmi.completion_status=this.cmi.completion_threshold>this.cmi.progress_measure?"incomplete":"completed"),this.cmi.scaled_passing_score&&this.cmi.score.scaled&&(this.cmi.success_status=this.cmi.scaled_passing_score>this.cmi.score.scaled?"failed":"passed"));let t=!1;this.adl.nav.request!==this.startingData?.adl?.nav?.request&&"_none_"!==this.adl.nav.request&&(t=!0);const i=this.getCommitObject(e),s=this.cmi?.score?.getScoreObject()||{};let r=j;"completed"===this.cmi.completion_status?r=O:"incomplete"===this.cmi.completion_status&&(r=T);let n=R;if("passed"===this.cmi.success_status?n=M:"failed"===this.cmi.success_status&&(n=w),this._globalObjectiveManager.syncCmiToSequencingActivity(r,n,s),"string"==typeof this.settings.lmsCommitUrl){const result=this.processHttpRequest(this.settings.lmsCommitUrl,i,e);if(t&&void 0!==result.navRequest&&""!==result.navRequest&&"string"==typeof result.navRequest){const e=function(e){const t=new Set(["start","resumeAll","continue","previous","choice","jump","exit","exitAll","abandon","abandonAll","suspendAll","_none_"]),i=e.trim();if(!i)return{command:"_none_",targetActivityId:null,valid:!1,error:"Empty navigation request"};if(t.has(i))return{command:i,targetActivityId:null,valid:!0};const s=i.indexOf(".");if(s>0){const e=i.substring(0,s),t=i.substring(s+1);if(("choice"===e||"jump"===e)&&t)return/^[a-zA-Z0-9._-]+$/.test(t)?{command:e,targetActivityId:t,valid:!0}:{command:"_none_",targetActivityId:null,valid:!1,error:"Invalid target activity ID: contains disallowed characters"}}return{command:"_none_",targetActivityId:null,valid:!1,error:`Unrecognized navigation command: "${i}"`}}(result.navRequest);if(e.valid){const t={start:"SequenceStart",resumeAll:"SequenceResumeAll",continue:"SequenceNext",previous:"SequencePrevious",choice:"SequenceChoice",jump:"SequenceJump",exit:"SequenceExit",exitAll:"SequenceExitAll",abandon:"SequenceAbandon",abandonAll:"SequenceAbandonAll",suspendAll:"SequenceSuspendAll"}[e.command];t&&this.processListeners(t,"adl.nav.request",e.targetActivityId)}else this.apiLog("storeData","Invalid navigation request from LMS: "+e.error,I.WARN)}else result?.navRequest&&!t&&"object"==typeof result.navRequest&&Object.hasOwnProperty.call(result.navRequest,"name")&&result.navRequest.name&&this.processListeners(result.navRequest.name,result.navRequest.data);return result}return{result:d,errorCode:0}}configureSequencing(e){this._sequencingCollections=this._sequencingConfigBuilder.sanitizeSequencingCollections(e.collections),this._activityTreeBuilder.setSequencingCollections(this._sequencingCollections),e.activityTree&&this.configureActivityTree(e.activityTree),e.sequencingRules&&this.configureSequencingRules(e.sequencingRules),e.sequencingControls&&this.configureSequencingControls(e.sequencingControls),e.rollupRules&&this.configureRollupRules(e.rollupRules),this._sequencing.hideLmsUi=e.hideLmsUi?this._sequencingConfigBuilder.sanitizeHideLmsUi(e.hideLmsUi):[],this._sequencing.auxiliaryResources=e.auxiliaryResources?this._sequencingConfigBuilder.sanitizeAuxiliaryResources(e.auxiliaryResources):[]}configureActivityTree(e){const t=this._activityTreeBuilder.createActivity(e);this._sequencing.activityTree.root=t,this._extractedScoItemIds=this._activityTreeBuilder.extractActivityIds(t)}configureSequencingRules(e){this._sequencingConfigBuilder.applySequencingRulesSettings(this._sequencing.sequencingRules,e)}configureSequencingControls(e){this._sequencingConfigBuilder.applySequencingControlsSettings(this._sequencing.sequencingControls,e)}configureRollupRules(e){this._sequencingConfigBuilder.applyRollupRulesSettings(this._sequencing.rollupRules,e)}initializeSequencingService(e){try{if(this._sequencingService=new _t(this._sequencing,this.cmi,this.adl,this.eventService||this,this.loggingService,{autoRollupOnCMIChange:e?.sequencing?.autoRollupOnCMIChange??!0,autoProgressOnCompletion:e?.sequencing?.autoProgressOnCompletion??!1,validateNavigationRequests:e?.sequencing?.validateNavigationRequests??!0,enableEventSystem:e?.sequencing?.enableEventSystem??!0,logLevel:e?.sequencing?.logLevel??"info"}),e?.sequencing?.eventListeners&&this._sequencingService.setEventListeners(e.sequencing.eventListeners),this._globalObjectiveManager.updateSequencingService(this._sequencingService),this._dataSerializer.updateSequencingService(this._sequencingService),e?.sequencingStatePersistence){const e={getSettings:()=>this.settings,apiLog:this.apiLog.bind(this),adl:this.adl,sequencing:this._sequencing,sequencingService:this._sequencingService,learnerId:this.cmi.learner_id};this._statePersistence=new ci(e,this._globalObjectiveManager)}this._globalObjectiveManager.syncGlobalObjectiveIdsFromSequencing()}catch(e){console.warn("Failed to initialize sequencing service:",e),this._sequencingService=null}}getSequencingService(){return this._sequencingService}setSequencingEventListeners(e){this._sequencingService&&this._sequencingService.setEventListeners(e)}updateSequencingConfiguration(e){this._sequencingService&&this._sequencingService.updateConfiguration(e)}getSequencingState(){return this._sequencingService?this._sequencingService.getSequencingState():{isInitialized:!1,isActive:!1,currentActivity:null,rootActivity:this._sequencing.getRootActivity(),lastSequencingResult:null}}processNavigationRequest(request,e){return!!this._sequencingService&&this._sequencingService.processNavigationRequest(request,e)}resetSequencingState(){this._sequencing?.reset(),this._sequencingService?.setEventListeners({})}getActivityTrackingData(e){if(!this._sequencing?.activityTree)return null;const t=this._sequencing.activityTree.getActivity(e);return t?{completionStatus:t.completionStatus||"unknown",successStatus:t.successStatus||"unknown",progressMeasure:t.progressMeasure??null,score:t.objectiveMeasureStatus?t.objectiveNormalizedMeasure:null}:null}async saveSequencingState(e){if(this._statePersistence)return this._statePersistence.saveSequencingState(e);if(!this.settings.sequencingStatePersistence)return this.apiLog("saveSequencingState","No persistence configuration provided",I.WARN),!1;const t={getSettings:()=>this.settings,apiLog:this.apiLog.bind(this),adl:this.adl,sequencing:this._sequencing,sequencingService:this._sequencingService,learnerId:this.cmi.learner_id};return new ci(t,this._globalObjectiveManager).saveSequencingState(e)}async loadSequencingState(e){if(this._statePersistence)return this._statePersistence.loadSequencingState(e);if(!this.settings.sequencingStatePersistence)return this.apiLog("loadSequencingState","No persistence configuration provided",I.WARN),!1;const t={getSettings:()=>this.settings,apiLog:this.apiLog.bind(this),adl:this.adl,sequencing:this._sequencing,sequencingService:this._sequencingService,learnerId:this.cmi.learner_id};return new ci(t,this._globalObjectiveManager).loadSequencingState(e)}serializeSequencingState(){if(this._statePersistence)return this._statePersistence.serializeSequencingState();const e={getSettings:()=>this.settings,apiLog:this.apiLog.bind(this),adl:this.adl,sequencing:this._sequencing,sequencingService:this._sequencingService,learnerId:this.cmi.learner_id};return new ci(e,this._globalObjectiveManager).serializeSequencingState()}deserializeSequencingState(e){if(this._statePersistence)return this._statePersistence.deserializeSequencingState(e);const t={getSettings:()=>this.settings,apiLog:this.apiLog.bind(this),adl:this.adl,sequencing:this._sequencing,sequencingService:this._sequencingService,learnerId:this.cmi.learner_id};return new ci(t,this._globalObjectiveManager).deserializeSequencingState(e)}determineEntryValue(e,t){return this._dataSerializer.determineEntryValue(e,t)}}export{Scorm2004API};
1
+ const e={D:86400,H:3600,M:60,S:1},t=t=>{if(!t||0>=t)return"PT0S";let i="P",s=t;return Object.entries(e).forEach(([e,t])=>{let r=Math.floor(s/t);s%=t,function(e){if(Math.floor(e)===e||0>(e+"")?.indexOf?.("."))return 0;const t=(""+e).split(".")?.[1];return t?.length??0}(s)>2&&(s=+(+s).toFixed(2)),"S"===e&&s>0&&(r+=s),r&&((i.indexOf("D")>0||["H","M","S"].includes(e))&&-1===i.indexOf("T")&&(i+="T"),i+=`${r}${e}`)}),i},i=o((e,t)=>{if("string"==typeof t&&(t=RegExp(t)),!e||!e?.match?.(t))return 0;const[,i,s,r,n,o,a,c]=RegExp(t).exec?.(e)??[];let result=0;return result+=+c||0,result+=60*+a||0,result+=3600*+o||0,result+=86400*+n||0,result+=604800*+r||0,result+=2592e3*+s||0,result+=31536e3*+i||0,result},(e,t)=>`${e??""}:${"string"==typeof t?t:t?.toString()??""}`),s=o((e,t)=>("string"==typeof t&&(t=RegExp(t)),!(!e||!e?.match?.(t))));function r(e){const result={};return function e(t,i){if(Object(t)!==t)result[i]=t;else if(Array.isArray(t))t.forEach((t,s)=>{e(t,`${i}[${s}]`)}),0===t.length&&(result[i]=[]);else{const s=Object.keys(t).filter(e=>({}.hasOwnProperty.call(t,e))),r=0===s.length;s.forEach(s=>{e(t[s],i?`${i}.${s}`:s)}),r&&i&&(result[i]={})}}(e,""),result}function n(e,t){return"string"==typeof e&&RegExp(t).test(e)}function o(e,t){const i=new Map;return(...s)=>{const r=t?t(...s):JSON.stringify(s);return i.has(r)?i.get(r):(()=>{const result=e(...s);return i.set(r,result),result})()}}class a{jsonString=!1;_cmi_element;_initialized=!1;constructor(e){this._cmi_element=e}get initialized(){return this._initialized}initialize(){this._initialized=!0}}class c extends a{_start_time;get start_time(){return this._start_time}setStartTime(){if(void 0!==this._start_time)throw Error("Start time has already been set.");this._start_time=(new Date).getTime()}}class l extends Error{constructor(e,t){super(`${e} : ${""+t}`),this._errorCode=t,Object.setPrototypeOf(this,l.prototype)}_errorCode;get errorCode(){return this._errorCode}}class u extends l{constructor(e,t,i,s){super(e,t),this.message=`${e} : ${i}`,this._errorMessage=i,s&&(this._detailedMessage=s),Object.setPrototypeOf(this,u.prototype)}_errorMessage;_detailedMessage="";get errorMessage(){return this._errorMessage}get detailedMessage(){return this._detailedMessage}}const d="true",h="false",m={cmi_children:"_version,comments_from_learner,comments_from_lms,completion_status,completion_threshold,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",comments_children:"comment,timestamp,location",score_children:"max,raw,scaled,min",objectives_children:"progress_measure,completion_status,success_status,description,score,id",correct_responses_children:"pattern",student_preference_children:"audio_level,audio_captioning,delivery_speed,language",interactions_children:"id,type,objectives,timestamp,correct_responses,weighting,learner_response,result,latency,description",adl_data_children:"id,store",error_descriptions:{0:{basicMessage:"No Error",detailMessage:"No error occurred, the previous API call was successful."},101:{basicMessage:"General Exception",detailMessage:"No specific error code exists to describe the error."},102:{basicMessage:"General Initialization Failure",detailMessage:"Call to Initialize failed for an unknown reason."},103:{basicMessage:"Already Initialized",detailMessage:"Call to Initialize failed because Initialize was already called."},104:{basicMessage:"Content Instance Terminated",detailMessage:"Call to Initialize failed because Terminate was already called."},111:{basicMessage:"General Termination Failure",detailMessage:"Call to Terminate failed for an unknown reason."},112:{basicMessage:"Termination Before Initialization",detailMessage:"Call to Terminate failed because it was made before the call to Initialize."},113:{basicMessage:"Termination After Termination",detailMessage:"Call to Terminate failed because Terminate was already called."},122:{basicMessage:"Retrieve Data Before Initialization",detailMessage:"Call to GetValue failed because it was made before the call to Initialize."},123:{basicMessage:"Retrieve Data After Termination",detailMessage:"Call to GetValue failed because it was made after the call to Terminate."},132:{basicMessage:"Store Data Before Initialization",detailMessage:"Call to SetValue failed because it was made before the call to Initialize."},133:{basicMessage:"Store Data After Termination",detailMessage:"Call to SetValue failed because it was made after the call to Terminate."},142:{basicMessage:"Commit Before Initialization",detailMessage:"Call to Commit failed because it was made before the call to Initialize."},143:{basicMessage:"Commit After Termination",detailMessage:"Call to Commit failed because it was made after the call to Terminate."},201:{basicMessage:"General Argument Error",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."},301:{basicMessage:"General Get Failure",detailMessage:"Indicates a failed GetValue call where no other specific error code is applicable. Use GetDiagnostic for more information."},351:{basicMessage:"General Set Failure",detailMessage:"Indicates a failed SetValue call where no other specific error code is applicable. Use GetDiagnostic for more information."},391:{basicMessage:"General Commit Failure",detailMessage:"Indicates a failed Commit call where no other specific error code is applicable. Use GetDiagnostic for more information."},401:{basicMessage:"Undefined Data Model Element",detailMessage:"The data model element name passed to GetValue or SetValue is not a valid SCORM data model element."},402:{basicMessage:"Unimplemented Data Model Element",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."},403:{basicMessage:"Data Model Element Value Not Initialized",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."},404:{basicMessage:"Data Model Element Is Read Only",detailMessage:"SetValue was called with a data model element that can only be read."},405:{basicMessage:"Data Model Element Is Write Only",detailMessage:"GetValue was called on a data model element that can only be written to."},406:{basicMessage:"Data Model Element Type Mismatch",detailMessage:"SetValue was called with a value that is not consistent with the data format of the supplied data model element."},407:{basicMessage:"Data Model Element Value Out Of Range",detailMessage:"The numeric value supplied to a SetValue call is outside of the numeric range allowed for the supplied data model element."},408:{basicMessage:"Data Model Dependency Not Established",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."}}},p={0:{basicMessage:"No Error",detailMessage:"No error occurred, the previous API call was successful."},101:{basicMessage:"General Exception",detailMessage:"No specific error code exists to describe the error."},201:{basicMessage:"Invalid argument error",detailMessage:"Indicates that an argument represents an invalid data model element or is otherwise incorrect."},202:{basicMessage:"Element cannot have children",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.'},203:{basicMessage:"Element not an array - cannot have count",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.'},301:{basicMessage:"Not initialized",detailMessage:"Indicates that an API call was made before the call to lmsInitialize."},401:{basicMessage:"Not implemented error",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."},402:{basicMessage:"Invalid set value, element is a keyword",detailMessage:'Indicates that LMSSetValue was called on a data model element that represents a keyword (elements that end in "_children" and "_count").'},403:{basicMessage:"Element is read only",detailMessage:"LMSSetValue was called with a data model element that can only be read."},404:{basicMessage:"Element is write only",detailMessage:"LMSGetValue was called on a data model element that can only be written to."},405:{basicMessage:"Incorrect Data Type",detailMessage:"LMSSetValue was called with a value that is not consistent with the data format of the supplied data model element."},407:{basicMessage:"Element Value Out Of Range",detailMessage:"The numeric value supplied to a LMSSetValue call is outside of the numeric range allowed for the supplied data model element."},408:{basicMessage:"Data Model Dependency Not Established",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."}};class v extends u{constructor(e,t){!{}.hasOwnProperty.call(p,t+"")?super(e,101,p[101]?.basicMessage,p[101]?.detailMessage):super(e,t,p[t+""]?.basicMessage||"Unknown error",p[t+""]?.detailMessage),Object.setPrototypeOf(this,v.prototype)}}const g=m.error_descriptions;class _ extends u{constructor(e,t){!{}.hasOwnProperty.call(g,t+"")?super(e,101,g[101]?.basicMessage,g[101]?.detailMessage):super(e,t,g[t+""]?.basicMessage||"Unknown error",g[t+""]?.detailMessage),Object.setPrototypeOf(this,_.prototype)}}const S={GENERAL:101,INITIALIZATION_FAILED:101,INITIALIZED:101,TERMINATED:101,TERMINATION_FAILURE:101,TERMINATION_BEFORE_INIT:101,MULTIPLE_TERMINATION:101,RETRIEVE_BEFORE_INIT:101,RETRIEVE_AFTER_TERM:101,STORE_BEFORE_INIT:101,STORE_AFTER_TERM:101,COMMIT_BEFORE_INIT:101,COMMIT_AFTER_TERM:101,ARGUMENT_ERROR:101,CHILDREN_ERROR:101,COUNT_ERROR:101,GENERAL_GET_FAILURE:101,GENERAL_SET_FAILURE:101,GENERAL_COMMIT_FAILURE:101,UNDEFINED_DATA_MODEL:101,UNIMPLEMENTED_ELEMENT:101,VALUE_NOT_INITIALIZED:101,INVALID_SET_VALUE:101,READ_ONLY_ELEMENT:101,WRITE_ONLY_ELEMENT:101,TYPE_MISMATCH:101,VALUE_OUT_OF_RANGE:101,DEPENDENCY_NOT_ESTABLISHED:101},f={...S,INVALID_SET_VALUE:402,READ_ONLY_ELEMENT:403,TYPE_MISMATCH:405,VALUE_OUT_OF_RANGE:407},y={...S,INITIALIZATION_FAILED:102,INITIALIZED:103,TERMINATED:104,TERMINATION_FAILURE:111,TERMINATION_BEFORE_INIT:112,MULTIPLE_TERMINATION:113,MULTIPLE_TERMINATIONS:113,RETRIEVE_BEFORE_INIT:122,RETRIEVE_AFTER_TERM:123,STORE_BEFORE_INIT:132,STORE_AFTER_TERM:133,COMMIT_BEFORE_INIT:142,COMMIT_AFTER_TERM:143,ARGUMENT_ERROR:201,GENERAL_GET_FAILURE:301,GENERAL_SET_FAILURE:351,GENERAL_COMMIT_FAILURE:391,UNDEFINED_DATA_MODEL:401,UNIMPLEMENTED_ELEMENT:402,VALUE_NOT_INITIALIZED:403,READ_ONLY_ELEMENT:404,WRITE_ONLY_ELEMENT:405,TYPE_MISMATCH:406,VALUE_OUT_OF_RANGE:407,DEPENDENCY_NOT_ESTABLISHED:408};class b extends a{_errorCode;_errorClass;__children;childArray;constructor(e){super(e.CMIElement),this.__children=e.children,this._errorCode=e.errorCode??f.GENERAL,this._errorClass=e.errorClass||l,this.childArray=[]}reset(e=!1){if(this._initialized=!1,e)this.childArray=[];else for(let e=0;this.childArray.length>e;e++)this.childArray[e]?.reset()}get _children(){return this.__children}set _children(_children){throw new this._errorClass(this._cmi_element+"._children",this._errorCode)}get _count(){return this.childArray.length}set _count(_count){throw new this._errorClass(this._cmi_element+"._count",this._errorCode)}toJSON(){this.jsonString=!0;const result={};for(let e=0;this.childArray.length>e;e++)result[e+""]=this.childArray[e];return this.jsonString=!1,result}}const C="unknown",A="true",E="false",M="passed",w="failed",R="unknown",O="completed",T="incomplete",j="unknown",I={_:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,NONE:5},q={autocommit:!1,autocommitSeconds:10,throttleCommits:!1,useAsynchronousCommits:!1,sendFullCommit:!0,lmsCommitUrl:!1,dataCommitFormat:"json",commitRequestDataType:"application/json;charset=UTF-8",autoProgress:!1,logLevel:I.ERROR,selfReportSessionTime:!1,alwaysSendTotalTime:!1,renderCommonCommitFields:!1,autoCompleteLessonStatus:!1,strict_errors:!0,xhrHeaders:{},xhrWithCredentials:!1,fetchMode:"cors",asyncModeBeaconBehavior:"never",responseHandler:async function(e){if(void 0!==e){let t=null;try{if("function"==typeof e.json)t=await e.json();else if("function"==typeof e.text){const i=await e.text();i&&(t=JSON.parse(i))}}catch(e){}return null!==t&&{}.hasOwnProperty.call(t,"result")?{result:t.result,errorCode:"number"==typeof t.errorCode?t.errorCode:!0===t.result||t.result===d?0:101}:200===e.status?{result:d,errorCode:0}:{result:h,errorCode:101}}return{result:h,errorCode:101}},xhrResponseHandler:function(e){if(void 0!==e){let t=null;if(200>e.status||e.status>299)return{result:h,errorCode:101};try{t=JSON.parse(e.responseText)}catch(e){}return null!==t&&{}.hasOwnProperty.call(t,"result")?{result:t.result,errorCode:"number"==typeof t.errorCode?t.errorCode:!0===t.result||t.result===d?0:101}:{result:d,errorCode:0}}return{result:h,errorCode:101}},requestHandler:function(e){return e},onLogMessage:N,mastery_override:!1,score_overrides_status:!1,completion_status_on_failed:"completed",scoItemIds:[],scoItemIdValidator:!1,globalObjectiveIds:[],enableOfflineSupport:!1,courseId:"",syncOnInitialize:!0,syncOnTerminate:!0,maxSyncAttempts:5,scoId:"",autoPopulateCommitMetadata:!1,httpService:null,globalStudentPreferences:!1};function N(e,t){switch(e){case"4":case 4:case"ERROR":case I.ERROR:console.error(t);break;case"3":case 3:case"WARN":case I.WARN:console.warn(t);break;case"2":case 2:case"INFO":case I.INFO:console.info(t);break;case"1":case 1:case"DEBUG":case I.DEBUG:console.debug?console.debug(t):console.log(t)}}const D="^-?([0-9]+)$",x="^[\\u0000-\\uFFFF]{0,4000}$",L="^[\\u0000-\\uFFFF]{0,64000}$",P="^({lang=([a-zA-Z]{1,8}|i|x)(-[a-zA-Z0-9-]{2,8})?})?((?!{.*$).{0,250}$)?$",z="^({lang=([a-zA-Z]{1,8}|i|x)(-[a-zA-Z0-9-]{2,8})?})?((?!{.*$).{0,4000}$)?$",F="^(19[7-9][0-9]|[2-9][0-9]{3})((-(0[1-9]|1[0-2]))((-(0[1-9]|[1-2][0-9]|3[0-1]))(T([0-1][0-9]|2[0-3])((:[0-5][0-9])((:[0-5][0-9])((\\.[0-9]{1,6})((Z|([+|-]([0-1][0-9]|2[0-3])))(:[0-5][0-9])?)?)?)?)?)?)?)?$",k="^P(?:([.,\\d]+)Y)?(?:([.,\\d]+)M)?(?:([.,\\d]+)W)?(?:([.,\\d]+)D)?(?:T?(?:([.,\\d]+)H)?(?:([.,\\d]+)M)?(?:(\\d+(?:\\.\\d{1,2})?)S)?)?$",V="^-?([0-9]{1,10})(\\.[0-9]{1,18})?$",H="^(?=.*\\w)[\\w\\-\\(\\)\\+\\.\\:\\=\\@\\;\\$\\_\\!\\*\\'\\%\\/\\#]{1,250}$",B="^(?:(?!urn:)\\S{1,4000}|urn:[A-Za-z0-9-]{1,31}:\\S{1,4000}|.{1,4000})$",U="^(completed|incomplete|not attempted|unknown)$",$="^(passed|failed|unknown)$",G="^(_?(start|resumeAll|previous|continue|exit|exitAll|abandon|abandonAll|suspendAll|retry|retryAll)|_none_|(\\{target=(?<choice_target>\\S{0,}[a-zA-Z0-9-_]+)})?choice|(\\{target=(?<jump_target>\\S{0,}[a-zA-Z0-9-_]+)})?jump)$",Y="^(unknown|true|false)$",W="^{target=\\S{0,}[a-zA-Z0-9-_]+}$",K={"true-false":{format:"^true$|^false$",max:1,delimiter:"",unique:!1},choice:{format:B,max:36,delimiter:"[,]",unique:!0},"fill-in":{format:P,max:10,delimiter:"[,]",unique:!1},"long-fill-in":{format:z,max:1,delimiter:"",unique:!1},matching:{format:H,format2:H,max:36,delimiter:"[,]",delimiter2:"[.]",unique:!1},performance:{format:"^$|"+H,format2:V+"|^$|"+H,max:250,delimiter:"[,]",delimiter2:"[.]",unique:!1},sequencing:{format:H,max:36,delimiter:"[,]",unique:!1},likert:{format:H,max:1,delimiter:"",unique:!1},numeric:{format:V,max:1,delimiter:"",unique:!1},other:{format:x,max:1,delimiter:"",unique:!1}},J={"true-false":{max:1,delimiter:"",unique:!1,duplicate:!1,format:"^true$|^false$",limit:1},choice:{max:36,delimiter:"[,]",unique:!0,duplicate:!1,format:B},"fill-in":{max:10,delimiter:"[,]",unique:!1,duplicate:!1,format:"^(({lang=([a-zA-Z]{1,8}|i|x)?(-[a-zA-Z0-9-]{2,8})?})?(.{0,250})?)?$"},"long-fill-in":{max:1,delimiter:"",unique:!1,duplicate:!0,format:z},matching:{max:36,delimiter:"[,]",delimiter2:"[.]",unique:!1,duplicate:!1,format:H,format2:H},performance:{max:250,delimiter:"[,]",delimiter2:"[.]",unique:!1,duplicate:!1,format:H,format2:`^(${H})$|^(?:\\d+(?:\\.\\d+)?(?::\\d+(?:\\.\\d+)?)?)$`},sequencing:{max:36,delimiter:"[,]",unique:!1,duplicate:!1,format:H},likert:{max:1,delimiter:"",unique:!1,duplicate:!1,format:H,limit:1},numeric:{max:2,delimiter:"[:]",unique:!1,duplicate:!1,format:V,limit:1},other:{max:1,delimiter:"",unique:!1,duplicate:!1,format:x,limit:1}},X=["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","id","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","nav","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"];class Q{_API;_cancelled=!1;_timeout;_callback;constructor(e,t,i){this._API=e,this._timeout=setTimeout(this.wrapper.bind(this),t),this._callback=i}cancel(){this._cancelled=!0,this._timeout&&clearTimeout(this._timeout)}wrapper(){this._cancelled||this._API.isInitialized()&&(async()=>{await this._API.commit(this._callback)})()}}const Z=["continue","previous","exit","exitAll","abandon","abandonAll","suspendAll"];var ee=(e=>(e.NOT="not",e.AND="and",e.OR="or",e))(ee||{}),te=(e=>(e.SKIP="skip",e.DISABLED="disabled",e.HIDE_FROM_CHOICE="hiddenFromChoice",e.STOP_FORWARD_TRAVERSAL="stopForwardTraversal",e.EXIT_PARENT="exitParent",e.EXIT_ALL="exitAll",e.RETRY="retry",e.RETRY_ALL="retryAll",e.CONTINUE="continue",e.PREVIOUS="previous",e.EXIT="exit",e))(te||{});class ie extends a{_condition="always";_operator=null;_parameters=new Map;_referencedObjective=null;static _now=()=>new Date;static _getElapsedSecondsHook=void 0;constructor(e="always",t=null,i=new Map){super("ruleCondition"),this._condition=e,this._operator=t,this._parameters=i}static setNowProvider(e){"function"==typeof e&&(ie._now=e)}static setElapsedSecondsHook(e){ie._getElapsedSecondsHook=e}reset(){this._initialized=!1,this._condition="always",this._operator=null,this._parameters=new Map}get condition(){return this._condition}set condition(e){this._condition=e}get operator(){return this._operator}set operator(e){this._operator=e}get parameters(){return this._parameters}set parameters(e){this._parameters=e}get referencedObjective(){return this._referencedObjective}set referencedObjective(e){this._referencedObjective=e}resolveReferencedObjective(e){return this._referencedObjective?e.primaryObjective?.id===this._referencedObjective?e.primaryObjective:(e.objectives||[]).find(e=>e.id===this._referencedObjective)||null:null}evaluate(e){let result;const t=this.resolveReferencedObjective(e);switch(this._condition){case"satisfied":case"objectiveSatisfied":result=t?!0===t.satisfiedStatus:e.successStatus===M||!0===e.objectiveSatisfiedStatus;break;case"objectiveStatusKnown":case"objectiveMeasureKnown":result=t?!!t.measureStatus:!!e.objectiveMeasureStatus;break;case"objectiveMeasureGreaterThan":{const i=this._parameters.get("threshold")||0;result=!!(t?t.measureStatus:e.objectiveMeasureStatus)&&(t?t.normalizedMeasure:e.objectiveNormalizedMeasure)>i;break}case"objectiveMeasureLessThan":{const i=this._parameters.get("threshold")||0;result=!!(t?t.measureStatus:e.objectiveMeasureStatus)&&i>(t?t.normalizedMeasure:e.objectiveNormalizedMeasure);break}case"completed":case"activityCompleted":result=t?t.completionStatus===O:e.isCompleted;break;case"progressKnown":case"activityProgressKnown":result=t?t.completionStatus!==j:"unknown"!==e.completionStatus;break;case"attempted":result=e.attemptCount>0;break;case"attemptLimitExceeded":result=e.hasAttemptLimitExceeded();break;case"timeLimitExceeded":result=this.evaluateTimeLimitExceeded(e);break;case"outsideAvailableTimeRange":result=this.evaluateOutsideAvailableTimeRange(e);break;case"always":result=!0;break;default:result=!1}return"not"===this._operator&&(result=!result),result}evaluateTimeLimitExceeded(e){let t=e.timeLimitDuration;if(!t&&e.attemptAbsoluteDurationLimit&&(t=e.attemptAbsoluteDurationLimit),!t)return!1;const s=i(t,k);if(0>=s)return!1;let r=0;if(ie._getElapsedSecondsHook)try{const t=ie._getElapsedSecondsHook(e);"number"!=typeof t||Number.isNaN(t)||0>t||(r=t)}catch{r=0}if(0===r&&e.attemptExperiencedDuration){const t=i(e.attemptExperiencedDuration,k);t>0&&(r=t)}if(0===r&&e.attemptAbsoluteStartTime)try{const t=new Date(e.attemptAbsoluteStartTime).getTime(),i=ie._now().getTime();Number.isNaN(t)||Number.isNaN(i)||t>i||(r=(i-t)/1e3)}catch{r=0}return r>s}evaluateOutsideAvailableTimeRange(e){const t=e.beginTimeLimit,i=e.endTimeLimit;if(!t&&!i)return!1;const s=ie._now();return!(!t||s>=new Date(t))||!(!i||new Date(i)>=s)}parseISO8601Duration(e){return 1e3*i(e,k)}toJSON(){this.jsonString=!0;const result={condition:this._condition,operator:this._operator,parameters:Object.fromEntries(this._parameters)};return this.jsonString=!1,result}}class se extends a{_conditions=[];_action="skip";_conditionCombination="and";constructor(e="skip",t="and"){super("sequencingRule"),this._action=e,this._conditionCombination=t}reset(){this._initialized=!1,this._conditions=[],this._action="skip",this._conditionCombination="and"}get conditions(){return this._conditions}addCondition(e){if(!(e instanceof ie))throw new _(this._cmi_element+".conditions",y.TYPE_MISMATCH);this._conditions.includes(e)||this._conditions.push(e)}removeCondition(e){if(!(e instanceof ie))throw new _(this._cmi_element+".conditions",y.TYPE_MISMATCH);const t=this._conditions.indexOf(e);return-1!==t&&(this._conditions.splice(t,1),!0)}get action(){return this._action}set action(e){this._action=e}get conditionCombination(){return this._conditionCombination}set conditionCombination(e){this._conditionCombination=e}evaluate(e){return 0===this._conditions.length||("all"===this._conditionCombination||"and"===this._conditionCombination?this._conditions.every(t=>t.evaluate(e)):("any"===this._conditionCombination||"or"===this._conditionCombination)&&this._conditions.some(t=>t.evaluate(e)))}toJSON(){this.jsonString=!0;const result={conditions:this._conditions,action:this._action,conditionCombination:this._conditionCombination};return this.jsonString=!1,result}}class re extends a{_preConditionRules=[];_exitConditionRules=[];_postConditionRules=[];constructor(){super("sequencingRules")}reset(){this._initialized=!1,this._preConditionRules=[],this._exitConditionRules=[],this._postConditionRules=[]}get preConditionRules(){return this._preConditionRules}addPreConditionRule(e){if(!(e instanceof se))throw new _(this._cmi_element+".preConditionRules",y.TYPE_MISMATCH);this._preConditionRules.push(e)}get exitConditionRules(){return this._exitConditionRules}addExitConditionRule(e){if(!(e instanceof se))throw new _(this._cmi_element+".exitConditionRules",y.TYPE_MISMATCH);this._exitConditionRules.push(e)}get postConditionRules(){return this._postConditionRules}addPostConditionRule(e){if(!(e instanceof se))throw new _(this._cmi_element+".postConditionRules",y.TYPE_MISMATCH);this._postConditionRules.push(e)}evaluatePreConditionRules(e){for(const t of this._preConditionRules)if(t.evaluate(e))return t.action;return null}evaluateExitConditionRules(e){for(const t of this._exitConditionRules)if(t.evaluate(e))return t.action;return null}evaluatePostConditionRules(e){for(const t of this._postConditionRules)if(t.evaluate(e))return t.action;return null}toJSON(){this.jsonString=!0;const result={preConditionRules:this._preConditionRules,exitConditionRules:this._exitConditionRules,postConditionRules:this._postConditionRules};return this.jsonString=!1,result}}class ne{constructor(e){this.activityTree=e}activityTree;isInTree(e){return this.activityTree.getAllActivities().includes(e)}isAncestorOf(e,t){let i=t;for(;i;){if(i===e)return!0;i=i.parent}return!1}findCommonAncestor(e,t){if(!e||!t)return null;const i=[];let s=e;for(;s;)i.push(s),s=s.parent;for(s=t;s;){if(i.includes(s))return s;s=s.parent}return null}findChildInPath(e,t){let i=t;for(;i&&i.parent;){if(i.parent===e)return i;i=i.parent}return null}isLastInTree(e){if(e.children.length>0)return!1;let t=e;for(;t;){if(this.activityTree.getNextSibling(t))return!1;t=t.parent}return!0}getCurrentInParent(e){if(e.children)for(const t of e.children)if(t.isActive)return t;return null}isMandatory(e){if(e.sequencingRules&&e.sequencingRules.preConditionRules)for(const t of e.sequencingRules.preConditionRules)if("skip"===t.action&&t.conditions&&0===t.conditions.length)return!1;return!0===e.mandatory}isCompleted(e){return"completed"===e.completionStatus||"passed"===e.completionStatus||"passed"===e.successStatus}isAvailableForChoice(e){return e.isVisible&&!e.isHiddenFromChoice&&e.isAvailable&&(!e.sequencingControls||e.sequencingControls.choice)}getAncestors(e){const t=[];let i=e.parent;for(;i;)t.push(i),i=i.parent;return t}getPathToRoot(e){const t=[e];let i=e.parent;for(;i;)t.push(i),i=i.parent;return t}isLeaf(e){return 0===e.children.length}isCluster(e){return e.children.length>0}getDepth(e){let t=0,i=e.parent;for(;i;)t++,i=i.parent;return t}}class oe{constructor(e,t){this.activityTree=e,this.treeQueries=t}activityTree;treeQueries;validateChoice(e,t,i={}){if(!this.treeQueries.isInTree(t))return{valid:!1,exception:"SB.2.9-2"};if(t===this.activityTree.root)return{valid:!1,exception:"SB.2.9-3"};const s=this.validatePathToRoot(t);if(!s.valid)return s;if(i.checkAvailability&&!t.isAvailable)return{valid:!1,exception:"SB.2.9-7"};if(!e)return{valid:!0,exception:null};const r=this.validateChoiceExit(e,t);if(!r.valid)return r;const n=this.validateAncestorConstraints(e,t);return n.valid?{valid:!0,exception:null}:n}validatePathToRoot(e){let t=e;for(;t;){if(t.isHiddenFromChoice)return{valid:!1,exception:"SB.2.9-4"};if(t.parent&&!t.parent.sequencingControls.choice)return{valid:!1,exception:"SB.2.9-5"};if(t.parent&&t.parent.sequencingControls.preventActivation&&0===e.attemptCount&&!e.isActive)return{valid:!1,exception:"SB.2.9-6"};t=t.parent}return{valid:!0,exception:null}}validateChoiceExit(e,t){let i=e.parent;for(;i;){if(i.isActive&&!i.sequencingControls.choiceExit){if(!this.treeQueries.isAncestorOf(i,t))return{valid:!1,exception:"SB.2.9-8"};break}i=i.parent}return{valid:!0,exception:null}}validateAncestorConstraints(e,t){let i=t.parent;for(;i;){const s=this.validateConstraintsAtLevel(i,e,t);if(!s.valid)return s;i=i.parent}return{valid:!0,exception:null}}validateConstraintsAtLevel(e,t,i){const s=this.treeQueries.findChildInPath(e,i),r=this.treeQueries.findChildInPath(e,t);if(!s||!r)return{valid:!0,exception:null};const n=e.children,o=n.indexOf(s),a=n.indexOf(r);if(-1===o||-1===a)return{valid:!0,exception:null};if(e.sequencingControls.forwardOnly&&a>o)return{valid:!1,exception:"SB.2.9-5"};if(o>a)for(let e=a+1;o>e;e++){const t=n[e];if(t&&this.treeQueries.isMandatory(t)&&!this.treeQueries.isCompleted(t))return{valid:!1,exception:"SB.2.9-6"}}if(e.sequencingControls.constrainChoice){if(o>a+1)return{valid:!1,exception:"SB.2.9-7"};if(a>o&&"completed"!==i.completionStatus&&"passed"!==i.completionStatus)return{valid:!1,exception:"SB.2.9-7"}}return e.sequencingControls.preventActivation&&0===i.attemptCount&&!i.isActive?{valid:!1,exception:"SB.2.9-6"}:{valid:!0,exception:null}}checkForwardOnlyViolation(e){let t=e.parent;for(;t;){if(t.sequencingControls.forwardOnly)return{valid:!1,exception:"SB.2.9-5"};t=t.parent}return{valid:!0,exception:null}}isAvailableForChoice(e){return this.treeQueries.isAvailableForChoice(e)}validateFlowConstraints(e,t){const i=[];for(const s of t)this.meetsFlowConstraints(s,e)&&i.push(s);return{valid:i.length>0,validChildren:i}}meetsFlowConstraints(e,t){return!(!e.isAvailable||e.isHiddenFromChoice)&&(!t.sequencingControls.constrainChoice||this.validateConstrainChoiceForFlow(e,t))}validateConstrainChoiceForFlow(e,t){if(!t.sequencingControls||!t.sequencingControls.constrainChoice)return!0;const i=t.children;if(!i||0===i.length)return!0;const s=i.indexOf(e);if(-1===s)return!1;const r=this.treeQueries.getCurrentInParent(t);if(!r)return this.isAvailableForChoice(e);const n=i.indexOf(r);return-1===n||(t.sequencingControls.flow?t.sequencingControls.forwardOnly&&n>s?"completed"===e.completionStatus||"passed"===e.completionStatus:n>s?n>s&&("completed"===e.completionStatus||"passed"===e.completionStatus)&&this.isAvailableForChoice(e):(s===n||s===n+1)&&this.isAvailableForChoice(e):this.isAvailableForChoice(e)&&("completed"===e.completionStatus||"unknown"===e.completionStatus||"incomplete"===e.completionStatus))}validateTraversalConstraints(e){let t=!0,i=!0;return e.parent?.sequencingControls.constrainChoice&&(t=this.evaluateConstrainChoiceForTraversal(e)),e.sequencingControls&&e.sequencingControls.stopForwardTraversal&&(i=!1),e.parent?.sequencingControls.forwardOnly&&(i=this.evaluateForwardOnlyForChoice(e)),{canTraverse:t,canTraverseInto:i}}evaluateConstrainChoiceForTraversal(e){if(!e.parent)return!0;let t=e.parent;for(;t;){if(t.sequencingControls&&t.sequencingControls.constrainChoice){const i=t.children,s=this.treeQueries.findChildInPath(t,e);if(s){const r=i.indexOf(s),n=this.treeQueries.getCurrentInParent(t);if(n){const s=i.indexOf(n);if(-1!==s&&-1!==r){if(r>s)for(let e=s+1;r>e;e++){const t=i[e];if(t&&this.treeQueries.isMandatory(t)&&!this.treeQueries.isCompleted(t))return!1}if(t.sequencingControls.forwardOnly&&s>r&&!this.treeQueries.isCompleted(e))return!1}}}}t=t.parent}return this.isAvailableForChoice(e)}evaluateForwardOnlyForChoice(e){if(!e.parent)return!0;const t=e.parent;if(!t.sequencingControls||!t.sequencingControls.forwardOnly)return!0;const i=t.children;if(!i||0===i.length)return!0;const s=i.indexOf(e);if(-1===s)return!1;const r=this.treeQueries.getCurrentInParent(t);if(!r)return this.isAvailableForChoice(e);const n=i.indexOf(r);return-1===n||(n>s?!("completed"!==e.completionStatus&&"passed"!==e.completionStatus||!e.sequencingControls||!e.sequencingControls.choice):this.isAvailableForChoice(e))}hasTimeBoundaryViolation(e,t){if(e.beginTimeLimit)try{if(new Date(e.beginTimeLimit)>t)return!0}catch{}if(e.endTimeLimit)try{if(t>new Date(e.endTimeLimit))return!0}catch{}return!1}hasAttemptLimitViolation(e){return!(!e.attemptLimit||e.attemptLimit>e.attemptCount)}}var ae=(e=>(e.START="start",e.RESUME_ALL="resumeAll",e.CONTINUE="continue",e.PREVIOUS="previous",e.CHOICE="choice",e.JUMP="jump",e.EXIT="exit",e.EXIT_PARENT="exitParent",e.EXIT_ALL="exitAll",e.ABANDON="abandon",e.ABANDON_ALL="abandonAll",e.SUSPEND_ALL="suspendAll",e.RETRY="retry",e.RETRY_ALL="retryAll",e))(ae||{}),ce=(e=>(e.DELIVER="deliver",e.DO_NOT_DELIVER="doNotDeliver",e))(ce||{});class le{deliveryRequest;targetActivity;exception;endSequencingSession;constructor(e="doNotDeliver",t=null,i=null,s=!1){this.deliveryRequest=e,this.targetActivity=t,this.exception=i,this.endSequencingSession=s}}class ue{identifiedActivity;deliverable;exception;endSequencingSession;constructor(e,t,i=null,s=!1){this.identifiedActivity=e,this.deliverable=t,this.exception=i,this.endSequencingSession=s}}class de{activity;exception;constructor(e,t=null){this.activity=e,this.exception=t}}var he=(e=>(e.FORWARD="forward",e.BACKWARD="backward",e))(he||{});class me{now;getAttemptElapsedSecondsHook;constructor(e={}){this.now=e.now||(()=>new Date),this.getAttemptElapsedSecondsHook=e.getAttemptElapsedSecondsHook||null}checkSequencingRules(e,t){for(const i of t)if(this.checkRuleSubprocess(e,i))return i.action;return null}checkRuleSubprocess(e,t){if(0===t.conditions.length)return!0;const i=t.conditionCombination;return"all"===i||i===ee.AND?t.conditions.every(t=>t.evaluate(e)):("any"===i||i===ee.OR)&&t.conditions.some(t=>t.evaluate(e))}evaluateExitRules(e){const t=this.checkSequencingRules(e,e.sequencingRules.exitConditionRules);return t===te.EXIT||t===te.EXIT_PARENT||t===te.EXIT_ALL?t:null}evaluatePostConditionAction(e){const t=this.checkSequencingRules(e,e.sequencingRules.postConditionRules);return t&&[te.EXIT_PARENT,te.EXIT_ALL,te.RETRY,te.RETRY_ALL,te.CONTINUE,te.PREVIOUS,te.STOP_FORWARD_TRAVERSAL].includes(t)?t:null}evaluatePostConditions(e){const t=this.evaluatePostConditionAction(e);if(!t)return{sequencingRequest:null,terminationRequest:null};switch(t){case te.EXIT_PARENT:return{sequencingRequest:null,terminationRequest:ae.EXIT_PARENT};case te.EXIT_ALL:return{sequencingRequest:null,terminationRequest:ae.EXIT_ALL};case te.RETRY:return{sequencingRequest:ae.RETRY,terminationRequest:null};case te.RETRY_ALL:return{sequencingRequest:ae.RETRY,terminationRequest:ae.EXIT_ALL};case te.CONTINUE:return{sequencingRequest:ae.CONTINUE,terminationRequest:null};case te.PREVIOUS:return{sequencingRequest:ae.PREVIOUS,terminationRequest:null};case te.STOP_FORWARD_TRAVERSAL:return e.sequencingControls.stopForwardTraversal=!0,{sequencingRequest:null,terminationRequest:null};default:return{sequencingRequest:null,terminationRequest:null}}}checkLimitConditions(e){if(null!==e.attemptLimit&&e.attemptCount>=e.attemptLimit)return!0;if(null!==e.attemptAbsoluteDurationLimit){const t=this.parseDuration(e.attemptAbsoluteDurationLimit);if(t>0&&this.parseDuration(e.attemptExperiencedDuration)>=t)return!0}if(null!==e.activityAbsoluteDurationLimit){const t=this.parseDuration(e.activityAbsoluteDurationLimit);if(t>0&&this.parseDuration(e.activityExperiencedDuration)>=t)return!0}return!1}parseDuration(e){if(!e||"string"!=typeof e)return 0;const t=e.match(/^P(?:(\d+(?:\.\d+)?)Y)?(?:(\d+(?:\.\d+)?)M)?(?:(\d+(?:\.\d+)?)W)?(?:(\d+(?:\.\d+)?)D)?(?:T(?:(\d+(?:\.\d+)?)H)?(?:(\d+(?:\.\d+)?)M)?(?:(\d+(?:\.\d+)?)S)?)?$/);if(!t||"P"===e||e.endsWith("T"))return 0;let i=0;return i+=315576e5*parseFloat(t[1]||"0"),i+=30.44*24*parseFloat(t[2]||"0")*36e5,i+=6048e5*parseFloat(t[3]||"0"),i+=864e5*parseFloat(t[4]||"0"),i+=36e5*parseFloat(t[5]||"0"),i+=6e4*parseFloat(t[6]||"0"),i+=1e3*parseFloat(t[7]||"0"),i}getElapsedSeconds(e){if(this.getAttemptElapsedSecondsHook)try{return this.getAttemptElapsedSecondsHook(e)||0}catch{return 0}if(e.attemptAbsoluteStartTime){const t=new Date(e.attemptAbsoluteStartTime).getTime(),i=this.now().getTime();if(!Number.isNaN(t)&&i>t)return Math.max(0,(i-t)/1e3)}return 0}isTimeLimitExceeded(e){let t=e.timeLimitDuration;if(!t&&e.attemptAbsoluteDurationLimit&&(t=e.attemptAbsoluteDurationLimit),!t)return!1;const s=i(t,k);return s>0&&this.getElapsedSeconds(e)>s}isOutsideAvailableTimeRange(e){const t=this.now();if(e.beginTimeLimit)try{const i=new Date(e.beginTimeLimit);if(!Number.isNaN(i.getTime())&&i>t)return!0}catch{}if(e.endTimeLimit)try{const i=new Date(e.endTimeLimit);if(!Number.isNaN(i.getTime())&&t>i)return!0}catch{}return!1}canDeliverActivity(e){if(this.checkLimitConditions(e))return{canDeliver:!1,wasSkipped:!1};const t=this.checkSequencingRules(e,e.sequencingRules.preConditionRules);return{canDeliver:t!==te.SKIP&&t!==te.DISABLED,wasSkipped:t===te.SKIP}}}var pe=(e=>(e.NEVER="never",e.ONCE="once",e.ON_EACH_NEW_ATTEMPT="onEachNewAttempt",e))(pe||{}),ve=(e=>(e.NEVER="never",e.ONCE="once",e.ON_EACH_NEW_ATTEMPT="onEachNewAttempt",e))(ve||{});class ge extends a{_enabled=!0;_choice=!0;_choiceExit=!0;_flow=!0;_forwardOnly=!1;_useCurrentAttemptObjectiveInfo=!0;_useCurrentAttemptProgressInfo=!0;_preventActivation=!1;_constrainChoice=!1;_stopForwardTraversal=!1;_rollupObjectiveSatisfied=!0;_rollupProgressCompletion=!0;_objectiveMeasureWeight=1;_selectionTiming="never";_selectCount=null;_selectionCountStatus=!1;_randomizeChildren=!1;_randomizationTiming="never";_reorderChildren=!1;_completionSetByContent=!1;_objectiveSetByContent=!1;_tracked=!0;constructor(){super("sequencingControls")}reset(){this._initialized=!1,this._enabled=!0,this._choice=!0,this._choiceExit=!0,this._flow=!0,this._forwardOnly=!1,this._useCurrentAttemptObjectiveInfo=!0,this._useCurrentAttemptProgressInfo=!0,this._preventActivation=!1,this._constrainChoice=!1,this._stopForwardTraversal=!1,this._rollupObjectiveSatisfied=!0,this._rollupProgressCompletion=!0,this._objectiveMeasureWeight=1,this._selectionTiming="never",this._selectCount=null,this._selectionCountStatus=!1,this._randomizeChildren=!1,this._randomizationTiming="never",this._reorderChildren=!1,this._completionSetByContent=!1,this._objectiveSetByContent=!1,this._tracked=!0}get enabled(){return this._enabled}set enabled(e){this._enabled=e}get choice(){return this._choice}set choice(e){this._choice=e}get choiceExit(){return this._choiceExit}set choiceExit(e){this._choiceExit=e}get flow(){return this._flow}set flow(e){this._flow=e}get forwardOnly(){return this._forwardOnly}set forwardOnly(e){this._forwardOnly=e}get useCurrentAttemptObjectiveInfo(){return this._useCurrentAttemptObjectiveInfo}set useCurrentAttemptObjectiveInfo(e){this._useCurrentAttemptObjectiveInfo=e}get useCurrentAttemptProgressInfo(){return this._useCurrentAttemptProgressInfo}set useCurrentAttemptProgressInfo(e){this._useCurrentAttemptProgressInfo=e}get preventActivation(){return this._preventActivation}set preventActivation(e){this._preventActivation=e}get constrainChoice(){return this._constrainChoice}set constrainChoice(e){this._constrainChoice=e}get stopForwardTraversal(){return this._stopForwardTraversal}set stopForwardTraversal(e){this._stopForwardTraversal=e}get rollupObjectiveSatisfied(){return this._rollupObjectiveSatisfied}set rollupObjectiveSatisfied(e){this._rollupObjectiveSatisfied=e}get rollupProgressCompletion(){return this._rollupProgressCompletion}set rollupProgressCompletion(e){this._rollupProgressCompletion=e}get objectiveMeasureWeight(){return this._objectiveMeasureWeight}set objectiveMeasureWeight(e){0>e||(this._objectiveMeasureWeight=e)}isChoiceNavigationAllowed(){return this._enabled&&!this._constrainChoice}isFlowNavigationAllowed(){return this._enabled&&this._flow}isForwardNavigationAllowed(){return this._enabled&&this._flow}isBackwardNavigationAllowed(){return this._enabled&&this._flow&&!this._forwardOnly}get selectionTiming(){return this._selectionTiming}set selectionTiming(e){this._selectionTiming=e}get selectCount(){return this._selectCount}set selectCount(e){(null===e||e>0)&&(this._selectCount=e)}get selectionCountStatus(){return this._selectionCountStatus}set selectionCountStatus(e){this._selectionCountStatus=e}get randomizeChildren(){return this._randomizeChildren}set randomizeChildren(e){this._randomizeChildren=e}get randomizationTiming(){return this._randomizationTiming}set randomizationTiming(e){this._randomizationTiming=e}get reorderChildren(){return this._reorderChildren}set reorderChildren(e){this._reorderChildren=e}get completionSetByContent(){return this._completionSetByContent}set completionSetByContent(e){this._completionSetByContent=e}get objectiveSetByContent(){return this._objectiveSetByContent}set objectiveSetByContent(e){this._objectiveSetByContent=e}get tracked(){return this._tracked}set tracked(e){this._tracked=e}toJSON(){this.jsonString=!0;const result={enabled:this._enabled,choice:this._choice,choiceExit:this._choiceExit,flow:this._flow,forwardOnly:this._forwardOnly,useCurrentAttemptObjectiveInfo:this._useCurrentAttemptObjectiveInfo,useCurrentAttemptProgressInfo:this._useCurrentAttemptProgressInfo,preventActivation:this._preventActivation,constrainChoice:this._constrainChoice,stopForwardTraversal:this._stopForwardTraversal,rollupObjectiveSatisfied:this._rollupObjectiveSatisfied,rollupProgressCompletion:this._rollupProgressCompletion,objectiveMeasureWeight:this._objectiveMeasureWeight,selectionTiming:this._selectionTiming,selectCount:this._selectCount,selectionCountStatus:this._selectionCountStatus,randomizeChildren:this._randomizeChildren,randomizationTiming:this._randomizationTiming,reorderChildren:this._reorderChildren,completionSetByContent:this._completionSetByContent,objectiveSetByContent:this._objectiveSetByContent,tracked:this._tracked};return this.jsonString=!1,result}}class _e{static selectChildrenProcess(e){const t=e.sequencingControls,i=[...e.children];if(t.selectionTiming===pe.NEVER)return i;if(t.selectionTiming===pe.ONCE&&t.selectionCountStatus)return i;if(t.selectionTiming!==pe.ONCE&&!t.selectionCountStatus)return i;const s=t.selectCount;if(null===s||s>=i.length)return t.selectionTiming===pe.ONCE&&(t.selectionCountStatus=!0),i;const r=[],n=i.map((e,t)=>t);for(let e=0;s>e&&0!==n.length;e++){const e=Math.floor(Math.random()*n.length),t=n[e];void 0!==t&&i[t]&&r.push(i[t]),n.splice(e,1)}t.selectionTiming===pe.ONCE&&(t.selectionCountStatus=!0);for(const e of i)r.includes(e)||(e.isHiddenFromChoice=!0,e.isAvailable=!1);return r}static randomizeChildrenProcess(e){const t=e.sequencingControls,i=[...e.children];if(t.randomizationTiming===ve.NEVER)return i;if(t.randomizationTiming===ve.ONCE&&t.reorderChildren)return i;if(!t.randomizeChildren)return i;const s=[...i];for(let e=s.length-1;e>0;e--){const t=Math.floor(Math.random()*(e+1)),i=s[e],r=s[t];i&&r&&(s[e]=r,s[t]=i)}return t.randomizationTiming===ve.ONCE&&(t.reorderChildren=!0),e.children.length=0,e.children.push(...s),s}static applySelectionAndRandomization(e,t=!1){const i=e.sequencingControls;if(!t&&(e.isActive||e.isSuspended))return e.children;let s=!1,r=!1;i.selectionTiming===pe.ON_EACH_NEW_ATTEMPT?(s=t,t&&(i.selectionCountStatus=!0)):i.selectionTiming===pe.ONCE&&(s=!i.selectionCountStatus),i.randomizationTiming===ve.ON_EACH_NEW_ATTEMPT?(r=t,t&&(i.reorderChildren=!1)):i.randomizationTiming===ve.ONCE&&(r=!i.reorderChildren),s&&this.selectChildrenProcess(e),r&&this.randomizeChildrenProcess(e);const n=e.children.filter(e=>e.isAvailable);return e.setProcessedChildren(n),n}static isSelectionNeeded(e){const t=e.sequencingControls;return t.selectionTiming!==pe.NEVER&&(t.selectionTiming!==pe.ONCE||!t.selectionCountStatus)&&null!==t.selectCount&&e.children.length>t.selectCount}static isRandomizationNeeded(e){const t=e.sequencingControls;return t.randomizationTiming!==ve.NEVER&&(t.randomizationTiming!==ve.ONCE||!t.reorderChildren)&&t.randomizeChildren}}class Se{constructor(e,t){this.activityTree=e,this.ruleEngine=t}activityTree;ruleEngine;flowSubprocess(e,t){let i=e,s=!0,r=!1;for(;i;){const e=this.flowTreeTraversalSubprocess(i,t,s);if(!e.activity){let s=null;return e.exception?s=e.exception:t===he.BACKWARD?s="SB.2.1-3":r&&(s="SB.2.1-2"),new ue(i,!1,s,e.endSequencingSession)}r=e.activity.children.length>0&&0===e.activity.getAvailableChildren().length;const n=this.flowActivityTraversalSubprocess(e.activity,t===he.FORWARD,!0,t);if(n)return new ue(n,!0,null,!1);i=e.activity,s=!1}return new ue(null,!1,null,!1)}flowTreeTraversalSubprocess(e,t,i=!1){return t===he.FORWARD?this.traverseForward(e,i):this.traverseBackward(e)}traverseForward(e,t){if(t&&this.isActivityLastOverall(e))return this.activityTree.root&&this.terminateDescendentAttempts(this.activityTree.root),{activity:null,endSequencingSession:!0};if(!t){this.ensureSelectionAndRandomization(e);const t=e.getAvailableChildren();if(t.length>0)return{activity:t[0]||null,endSequencingSession:!1}}let i=e;for(;i;){const e=this.activityTree.getNextSibling(i);if(e)return{activity:e,endSequencingSession:!1};i=i.parent}return this.activityTree.root&&this.terminateDescendentAttempts(this.activityTree.root),{activity:null,endSequencingSession:!0}}traverseBackward(e){if(e.parent&&e.parent.sequencingControls.forwardOnly)return{activity:null,endSequencingSession:!1,exception:"SB.2.1-4"};const t=this.activityTree.getPreviousSibling(e);if(t)return{activity:this.getLastDescendant(t),endSequencingSession:!1};let i=e,s=0;for(;i&&i.parent;){if(++s>1e4)throw Error("Infinite loop detected in backward traversal");const e=this.activityTree.getPreviousSibling(i.parent);if(e)return{activity:this.getLastDescendant(e),endSequencingSession:!1};i=i.parent}return{activity:null,endSequencingSession:!1}}getLastDescendant(e){let t=e,i=0;for(;;){if(++i>1e4)throw Error("Infinite loop detected while getting last descendant");this.ensureSelectionAndRandomization(t);const e=t.getAvailableChildren();if(0===e.length)break;const s=e[e.length-1];if(!s)break;t=s}return t}flowActivityTraversalSubprocess(e,t,i,mode){const s=e.parent;if(s&&!s.sequencingControls.flow)return null;if(!e.isAvailable)return null;if(mode===he.FORWARD&&e.sequencingControls.stopForwardTraversal)return null;if(i){this.ensureSelectionAndRandomization(e);const t=e.getAvailableChildren();for(const e of t){const t=this.flowActivityTraversalSubprocess(e,mode===he.FORWARD,!0,mode);if(t)return t}}return 0===e.children.length&&this.checkActivityProcess(e)?e:null}checkActivityProcess(e){if(!e.isAvailable)return!1;if(0===e.children.length&&!e.isVisible)return!1;if(this.ruleEngine.checkLimitConditions(e))return!1;const t=this.ruleEngine.canDeliverActivity(e);return e.wasSkipped=t.wasSkipped,t.canDeliver}ensureSelectionAndRandomization(e){e.getAvailableChildren()===e.children&&(_e.isSelectionNeeded(e)||_e.isRandomizationNeeded(e))&&_e.applySelectionAndRandomization(e,e.isNewAttempt)}isActivityLastOverall(e){if(e.children.length>0)return!1;let t=e;for(;t;){if(this.activityTree.getNextSibling(t))return!1;t=t.parent}return!0}terminateDescendentAttempts(e){e.isActive=!1;for(const t of e.children)this.terminateDescendentAttempts(t)}findFirstDeliverableActivity(e){if(0===e.children.length)return this.checkActivityProcess(e)?e:null;this.ensureSelectionAndRandomization(e);const t=e.getAvailableChildren();for(const e of t){const t=this.flowActivityTraversalSubprocess(e,!0,!0,he.FORWARD);if(t)return t}return null}canDeliver(e){return this.checkActivityProcess(e)}}class fe{constructor(e,t){this.activityTree=e,this.traversalService=t}activityTree;traversalService;handleStart(){const result=new le;if(!this.activityTree.root)return result.exception="SB.2.5-1",result;if(this.activityTree.currentActivity)return result.exception="SB.2.5-2",result;const e=this.traversalService.findFirstDeliverableActivity(this.activityTree.root);return e?(result.deliveryRequest=ce.DELIVER,result.targetActivity=e,result):(result.exception="SB.2.5-3",result)}handleResumeAll(){const result=new le;return this.activityTree.suspendedActivity?this.activityTree.currentActivity?(result.exception="SB.2.6-2",result):(result.deliveryRequest=ce.DELIVER,result.targetActivity=this.activityTree.suspendedActivity,result):(result.exception="SB.2.6-1",result)}handleContinue(e){const result=new le;if(e.isActive)return result.exception="SB.2.7-1",result;if(e.parent&&!e.parent.sequencingControls.flow)return result.exception="SB.2.7-2",result;const t=this.traversalService.flowSubprocess(e,he.FORWARD);return result.endSequencingSession=t.endSequencingSession,t.deliverable&&t.identifiedActivity?(result.deliveryRequest=ce.DELIVER,result.targetActivity=t.identifiedActivity,result):(result.exception=t.exception||"SB.2.7-2",result)}handlePrevious(e){const result=new le;if(e.isActive)return result.exception="SB.2.8-1",result;if(e.parent&&!e.parent.sequencingControls.flow)return result.exception="SB.2.8-2",result;const t=this.checkForwardOnlyViolation(e);if(t)return result.exception=t,result;const i=this.traversalService.flowSubprocess(e,he.BACKWARD);return i.deliverable&&i.identifiedActivity?(result.deliveryRequest=ce.DELIVER,result.targetActivity=i.identifiedActivity,result):(result.exception=i.exception||"SB.2.8-3",result)}checkForwardOnlyViolation(e){let t=e.parent;for(;t;){if(t.sequencingControls.forwardOnly)return"SB.2.9-5";t=t.parent}return null}}class ye{constructor(e,t,i,s){this.activityTree=e,this.constraintValidator=t,this.traversalService=i,this.treeQueries=s}activityTree;constraintValidator;traversalService;treeQueries;handleChoice(e,t){const result=new le,i=this.activityTree.getActivity(e);if(!i)return result.exception="SB.2.9-1",result;if(t&&t.isActive)return result.exception="SB.2.9-6",result;const s=this.constraintValidator.validateChoice(t,i,{checkAvailability:!0});if(!s.valid)return result.exception=s.exception,result;const r=this.treeQueries.findCommonAncestor(t,i);t&&this.terminateDescendentAttemptsProcess(r||this.activityTree.root);const n=this.buildActivityPath(i,r);for(const e of n)if(!this.traversalService.checkActivityProcess(e))return result;let o=i;if(i.children.length>0){const e=this.choiceFlowSubprocess(i);if(!e)return result.exception="SB.2.9-7",result;o=e}return result.deliveryRequest=ce.DELIVER,result.targetActivity=o,result}handleJump(e){const result=new le,t=this.activityTree.getActivity(e);return t?this.treeQueries.isInTree(t)?t.isAvailable?(result.deliveryRequest=ce.DELIVER,result.targetActivity=t,result):(result.exception="SB.2.13-3",result):(result.exception="SB.2.13-2",result):(result.exception="SB.2.13-1",result)}getAvailableChoices(){const e=this.activityTree.getAllActivities(),t=this.activityTree.currentActivity,i=[];for(const s of e)s!==this.activityTree.root&&!s.isHiddenFromChoice&&s.isAvailable&&s.isVisible&&(s.parent&&!s.parent.sequencingControls.choice||this.constraintValidator.validateChoice(t,s).valid&&i.push(s));return i}buildActivityPath(e,t){const i=[];let s=e;for(;s&&s!==t;)i.unshift(s),s=s.parent;return i}choiceFlowSubprocess(e){return 0===e.children.length?e:this.choiceFlowTreeTraversal(e)}choiceFlowTreeTraversal(e){this.traversalService.ensureSelectionAndRandomization(e);const t=e.getAvailableChildren(),i=this.constraintValidator.validateFlowConstraints(e,t);if(!i.valid)return null;for(const e of i.validChildren){const t=this.enhancedChoiceTraversal(e);if(t.activity)return t.activity}return null}enhancedChoiceTraversal(e,t=!1){if(t&&e===this.activityTree.root)return new de(null,"SB.2.4-3");if(!e.isAvailable)return new de(null,null);if(e.isHiddenFromChoice)return new de(null,null);if(e.sequencingControls&&e.sequencingControls.stopForwardTraversal)return new de(null,"SB.2.4-1");const i=this.constraintValidator.validateTraversalConstraints(e);if(!i.canTraverse)return new de(null,null);if(0===e.children.length)return this.traversalService.checkActivityProcess(e)?new de(e,null):new de(null,null);if(e.parent?.sequencingControls.constrainChoice&&!i.canTraverseInto)return new de(null,"SB.2.4-2");if(i.canTraverseInto){const t=this.choiceFlowTreeTraversal(e);return new de(t,null)}return new de(null,null)}terminateDescendentAttemptsProcess(e){e.isActive=!1;for(const t of e.children)this.terminateDescendentAttemptsProcess(t)}}class be{constructor(e,t){this.activityTree=e,this.ruleEngine=t}activityTree;ruleEngine;handleExit(e){const result=new le;return e.parent?e.parent.sequencingControls.choiceExit?(this.terminateDescendentAttempts(e),result):(result.exception="SB.2.11-2",result):(result.exception="SB.2.11-1",result)}handleExitAll(){const result=new le;return this.activityTree.root&&this.terminateDescendentAttempts(this.activityTree.root),result}handleAbandon(e){const result=new le;return e.isActive=!1,this.activityTree.currentActivity=e.parent,result}handleAbandonAll(){const result=new le;return this.activityTree.currentActivity=null,result}handleSuspendAll(e){const result=new le;return e===this.activityTree.root?(result.exception="SB.2.15-1",result):(e.isSuspended=!0,this.activityTree.suspendedActivity=e,this.activityTree.currentActivity=null,result)}terminateDescendentAttempts(e,t=!1){let i=null;t||(i=this.ruleEngine.evaluateExitRules(e)),e.isActive=!1;for(const i of e.children)this.terminateDescendentAttempts(i,t);i&&!t&&this.processDeferredExitAction(i,e)}processDeferredExitAction(e,t){switch(e){case te.EXIT:break;case te.EXIT_PARENT:t.parent&&t.parent.isActive&&this.terminateDescendentAttempts(t.parent,!0);break;case te.EXIT_ALL:this.activityTree.root&&this.activityTree.root!==t&&this.activityTree.getAllActivities().some(e=>e.isActive)&&this.terminateDescendentAttempts(this.activityTree.root,!0)}}}class Ce{constructor(e,t){this.activityTree=e,this.traversalService=t}activityTree;traversalService;handleRetry(e){const result=new le;if(e.isActive||e.isSuspended)return result.exception="SB.2.10-2",result;if(e.children.length>0){this.traversalService.ensureSelectionAndRandomization(e);const t=e.getAvailableChildren();let i=null;for(const e of t)if(i=this.traversalService.flowActivityTraversalSubprocess(e,!0,!0,he.FORWARD),i)break;return i?(result.deliveryRequest=ce.DELIVER,result.targetActivity=i,result):(result.exception="SB.2.10-3",result)}return this.terminateDescendentAttempts(e),result.deliveryRequest=ce.DELIVER,result.targetActivity=e,result}handleRetryAll(){if(this.activityTree.currentActivity=null,!this.activityTree.root){const e=new le;return e.exception="SB.2.10-1",e}const e=this.traversalService.findFirstDeliverableActivity(this.activityTree.root),result=new le;return e?(result.deliveryRequest=ce.DELIVER,result.targetActivity=e,result):(result.exception="SB.2.10-3",result)}terminateDescendentAttempts(e){e.isActive=!1;for(const t of e.children)this.terminateDescendentAttempts(t)}}class Ae{activityTree;treeQueries;constraintValidator;ruleEngine;traversalService;flowHandler;choiceHandler;exitHandler;retryHandler;_now;get now(){return this._now}set now(e){this._now=e,ie.setNowProvider(e),this.ruleEngine=new me({now:e,getAttemptElapsedSecondsHook:this._getAttemptElapsedSecondsHook}),this.traversalService=new Se(this.activityTree,this.ruleEngine),this.flowHandler=new fe(this.activityTree,this.traversalService),this.choiceHandler=new ye(this.activityTree,this.constraintValidator,this.traversalService,this.treeQueries),this.retryHandler=new Ce(this.activityTree,this.traversalService)}_getAttemptElapsedSecondsHook;get getAttemptElapsedSecondsHook(){return this._getAttemptElapsedSecondsHook}set getAttemptElapsedSecondsHook(e){this._getAttemptElapsedSecondsHook=e,ie.setElapsedSecondsHook(e),this.ruleEngine=new me({now:this._now,getAttemptElapsedSecondsHook:e}),this.traversalService=new Se(this.activityTree,this.ruleEngine),this.flowHandler=new fe(this.activityTree,this.traversalService),this.choiceHandler=new ye(this.activityTree,this.constraintValidator,this.traversalService,this.treeQueries),this.retryHandler=new Ce(this.activityTree,this.traversalService)}constructor(e,t,i,s=null,r){this.activityTree=e,this._now=r?.now||(()=>new Date),this._getAttemptElapsedSecondsHook=r?.getAttemptElapsedSeconds,this.treeQueries=new ne(e),this.ruleEngine=new me({now:this._now,getAttemptElapsedSecondsHook:this._getAttemptElapsedSecondsHook}),this.constraintValidator=new oe(e,this.treeQueries),this.traversalService=new Se(e,this.ruleEngine),this.flowHandler=new fe(e,this.traversalService),this.choiceHandler=new ye(e,this.constraintValidator,this.traversalService,this.treeQueries),this.exitHandler=new be(e,this.ruleEngine),this.retryHandler=new Ce(e,this.traversalService)}sequencingRequestProcess(request,e=null){const t=this.activityTree.currentActivity;switch(request){case ae.START:return this.flowHandler.handleStart();case ae.RESUME_ALL:return this.flowHandler.handleResumeAll();case ae.CONTINUE:return t?this.flowHandler.handleContinue(t):new le(ce.DO_NOT_DELIVER,null,"SB.2.12-1");case ae.PREVIOUS:return t?this.flowHandler.handlePrevious(t):new le(ce.DO_NOT_DELIVER,null,"SB.2.12-1");case ae.CHOICE:return e?this.choiceHandler.handleChoice(e,t):new le(ce.DO_NOT_DELIVER,null,"SB.2.12-5");case ae.JUMP:return e?this.choiceHandler.handleJump(e):new le(ce.DO_NOT_DELIVER,null,"SB.2.12-5");case ae.EXIT:return t?this.exitHandler.handleExit(t):new le(ce.DO_NOT_DELIVER,null,"SB.2.12-1");case ae.EXIT_ALL:return t?this.exitHandler.handleExitAll():new le(ce.DO_NOT_DELIVER,null,"SB.2.12-1");case ae.ABANDON:return t?this.exitHandler.handleAbandon(t):new le(ce.DO_NOT_DELIVER,null,"SB.2.12-1");case ae.ABANDON_ALL:return t?this.exitHandler.handleAbandonAll():new le(ce.DO_NOT_DELIVER,null,"SB.2.12-1");case ae.SUSPEND_ALL:return t?this.exitHandler.handleSuspendAll(t):new le(ce.DO_NOT_DELIVER,null,"SB.2.12-1");case ae.RETRY:return t?this.retryHandler.handleRetry(t):new le(ce.DO_NOT_DELIVER,null,"SB.2.12-1");case ae.RETRY_ALL:return this.retryHandler.handleRetryAll();default:return new le(ce.DO_NOT_DELIVER,null,"SB.2.12-6")}}evaluatePostConditionRules(e){return this.ruleEngine.evaluatePostConditions(e)}canActivityBeDelivered(e){return this.traversalService.canDeliver(e)}validateNavigationRequest(request,e=null,t=null){if(!Object.values(ae).includes(request))return{valid:!1,exception:"SB.2.12-6"};switch(request){case ae.CONTINUE:case ae.PREVIOUS:if(!t)return{valid:!1,exception:"SB.2.12-1"};if(t.isActive)return{valid:!1,exception:request===ae.CONTINUE?"SB.2.7-1":"SB.2.8-1"};if(t.parent&&!t.parent.sequencingControls.flow)return{valid:!1,exception:request===ae.CONTINUE?"SB.2.7-2":"SB.2.8-2"};if(request===ae.PREVIOUS){const e=this.constraintValidator.checkForwardOnlyViolation(t);if(!e.valid)return e}break;case ae.CHOICE:{if(!e)return{valid:!1,exception:"SB.2.12-5"};const i=this.activityTree.getActivity(e);if(!i)return{valid:!1,exception:"SB.2.9-1"};const s=this.constraintValidator.validateChoice(t,i,{checkAvailability:!0});if(!s.valid)return s;if(!this.traversalService.canDeliver(i))return{valid:!1,exception:"SB.2.9-6"};if(this.ruleEngine.checkSequencingRules(i,i.sequencingRules.preConditionRules)===te.HIDE_FROM_CHOICE)return{valid:!1,exception:"SB.2.9-4"};break}case ae.JUMP:if(!e)return{valid:!1,exception:"SB.2.12-5"};if(!this.activityTree.getActivity(e))return{valid:!1,exception:"SB.2.13-1"}}return{valid:!0,exception:null}}getAvailableChoices(){return this.choiceHandler.getAvailableChoices()}getTreeQueries(){return this.treeQueries}getConstraintValidator(){return this.constraintValidator}getRuleEngine(){return this.ruleEngine}getTraversalService(){return this.traversalService}}class Ee{eventService;loggingService;callbacks;currentDeliveredActivity=null;pendingDelivery=null;constructor(e,t,i={}){this.eventService=e,this.loggingService=t,this.callbacks=i}processSequencingResult(result){if(result.exception)return this.loggingService.error("Sequencing error: "+result.exception),void this.callbacks.onSequencingError?.(result.exception);result.deliveryRequest===ce.DELIVER&&result.targetActivity?this.deliverActivity(result.targetActivity):this.loggingService.info("Sequencing completed with no delivery request"),this.callbacks.onSequencingComplete?.(result)}deliverActivity(e){this.currentDeliveredActivity!==e?(this.currentDeliveredActivity&&this.unloadActivity(this.currentDeliveredActivity),this.pendingDelivery=e,this.loggingService.info(`Delivering activity: ${e.id} - ${e.title}`),this.eventService.processListeners("ActivityDelivery",e.id,e),this.callbacks.onDeliverActivity?.(e),this.currentDeliveredActivity=e,this.pendingDelivery=null,e.isActive=!0):this.loggingService.info("Skipping delivery - activity already delivered: "+e.id)}unloadActivity(e){this.loggingService.info(`Unloading activity: ${e.id} - ${e.title}`),this.eventService.processListeners("ActivityUnload",e.id,e),this.callbacks.onUnloadActivity?.(e),e.isActive=!1}getCurrentDeliveredActivity(){return this.currentDeliveredActivity}getPendingDelivery(){return this.pendingDelivery}updateCallbacks(e){this.callbacks={...this.callbacks,...e}}reset(){this.currentDeliveredActivity&&this.unloadActivity(this.currentDeliveredActivity),this.currentDeliveredActivity=null,this.pendingDelivery=null}}class Me{settings;error_codes;constructor(e,t){this.settings=e,this.error_codes=t}processHttpRequest(e,t,i=!1,s,r){return this._performAsyncRequest(e,t,i,s,r),{result:d,errorCode:0}}async _performAsyncRequest(e,t,i,s,r){try{const s=this.settings.requestHandler(t);let n;n=i&&"never"!==this.settings.asyncModeBeaconBehavior?await this.performBeacon(e,s):await this.performFetch(e,s);const result=await this.transformResponse(n,r);this._isSuccessResponse(n,result)?r("CommitSuccess"):r("CommitError",void 0,result.errorCode)}catch(e){s("processHttpRequest","Async request failed: "+(e instanceof Error?e.message:e+""),I.ERROR),r("CommitError")}}_prepareRequestBody(e){return{body:e instanceof Array?e.join("&"):JSON.stringify(e),contentType:e instanceof Array?"application/x-www-form-urlencoded":this.settings.commitRequestDataType}}async performFetch(e,t){if("always"===this.settings.asyncModeBeaconBehavior)return this.performBeacon(e,t);const{body:i,contentType:s}=this._prepareRequestBody(t),r={method:"POST",mode:this.settings.fetchMode,body:i,headers:{...this.settings.xhrHeaders,"Content-Type":s},keepalive:!0};return this.settings.xhrWithCredentials&&(r.credentials="include"),fetch(e,r)}async performBeacon(e,t){const{body:i,contentType:s}=this._prepareRequestBody(t),r=navigator.sendBeacon(e,new Blob([i],{type:s}));return Promise.resolve({status:r?200:0,ok:r,json:async()=>({result:r?"true":"false",errorCode:r?0:this.error_codes.GENERAL_COMMIT_FAILURE||391}),text:async()=>JSON.stringify({result:r?"true":"false",errorCode:r?0:this.error_codes.GENERAL_COMMIT_FAILURE||391})})}async transformResponse(e,t){let result;try{result="function"==typeof this.settings.responseHandler?await this.settings.responseHandler(e):await e.json()}catch(t){const i=await e.text().catch(()=>"Unable to read response text");return{result:h,errorCode:this.error_codes.GENERAL_COMMIT_FAILURE||391,errorMessage:"Failed to parse LMS response: "+(t instanceof Error?t.message:t+""),errorDetails:JSON.stringify({status:e.status,statusText:e.statusText,url:e.url,responseText:i.substring(0,500),parseError:t instanceof Error?t.message:t+""})}}return Object.hasOwnProperty.call(result,"errorCode")||(result.errorCode=this._isSuccessResponse(e,result)?0:this.error_codes.GENERAL_COMMIT_FAILURE||391),this._isSuccessResponse(e,result)||(result.errorDetails={status:e.status,statusText:e.statusText,url:e.url,...result.errorDetails}),result}_isSuccessResponse(e,result){const t=result.result;return!(200>e.status||e.status>299||!0!==t&&"true"!==t&&t!==d)}updateSettings(e){this.settings=e}}const we="{target=";function Re(e,t){const i=e[t];return void 0===i?(void 0!==console&&console.warn&&console.warn("CMIValueAccessService: Unknown error code key: "+t),e.GENERAL??0):i}class Oe{context;constructor(e){this.context=e}getUndefinedDataModelErrorCode(e){return Re(this.context.errorCodes,e?"UNDEFINED_DATA_MODEL":"GENERAL")}setCMIValue(e,t,i,s){if(!i||""===i)return t&&this.context.throwSCORMError(i,Re(this.context.errorCodes,"GENERAL_SET_FAILURE"),"The data model element was not specified"),h;this.context.setLastErrorCode("0");const r=i.split(".");let n=this.context.getDataModel(),o=h,a=!1;const c=`The data model element passed to ${e} (${i}) is not a valid SCORM data model element.`,l=this.getUndefinedDataModelErrorCode(t);for(let e=0;r.length>e;e++){if(e===r.length-1){o=this.setFinalAttribute(n,r[e],s,i,t,l,c);break}{const o=this.traverseToNextLevel(n,r,e,s,i,t,a,l,c);if(o.error)break;n=o.refObject,e=o.idx,a=o.foundFirstIndex}}return o===h&&this.context.apiLog(e,`There was an error setting the value for: ${i}, value of: ${s}`,I.WARN),o}getCMIValue(e,t,i){if(!i||""===i)return t&&this.context.throwSCORMError(i,Re(this.context.errorCodes,"GENERAL_GET_FAILURE"),"The data model element was not specified"),"";if(t&&i.endsWith("._version")&&"cmi._version"!==i)return this.context.throwSCORMError(i,Re(this.context.errorCodes,"GENERAL_GET_FAILURE"),"The _version keyword was used incorrectly"),"";const s=i.split(".");let r=this.context.getDataModel(),n=null;const o=`The data model element passed to ${e} (${i}) has not been initialized.`,a=`The data model element passed to ${e} (${i}) is not a valid SCORM data model element.`,c=this.getUndefinedDataModelErrorCode(t);for(let e=0;s.length>e;e++){n=s[e];const l=this.validateGetAttribute(r,n,i,t,c,a,e===s.length-1);if(void 0!==l.returnValue)return l.returnValue;if(l.error)return"";if(null==n){this.context.throwSCORMError(i,c,a);break}if(r=r[n],void 0===r){this.context.throwSCORMError(i,c,a);break}if(r instanceof b){const t=this.handleGetArrayAccess(r,s,e,i,o);if(t.error)return"";r=t.refObject,e=t.idx}}return null==r?(t||("_children"===n?this.context.throwSCORMError(i,Re(this.context.errorCodes,"CHILDREN_ERROR"),void 0):"_count"===n&&this.context.throwSCORMError(i,Re(this.context.errorCodes,"COUNT_ERROR"),void 0)),""):r}setFinalAttribute(e,t,i,s,r,o,a){return r&&t?.startsWith(we)?this.context.isInitialized()?(this.context.throwSCORMError(s,Re(this.context.errorCodes,"READ_ONLY_ELEMENT")),h):d:void 0!==t&&this.context.checkObjectHasProperty(e,t)?n(s,"\\.correct_responses\\.\\d+$")&&this.context.isInitialized()&&"pattern"!==t&&(this.context.validateCorrectResponse(s,i),"0"!==this.context.getLastErrorCode())?(this.context.throwSCORMError(s,Re(this.context.errorCodes,"TYPE_MISMATCH")),h):r&&"0"!==this.context.getLastErrorCode()?h:void 0===t||"__proto__"===t||"constructor"===t?(this.context.throwSCORMError(s,o,a),h):r&&"id"===t&&this.context.isInitialized()&&this.context.checkForDuplicateId(s,i)?(this.context.throwSCORMError(s,Re(this.context.errorCodes,"GENERAL_SET_FAILURE")),h):(e[t]=i,d):(this.context.throwSCORMError(s,o,a),h)}traverseToNextLevel(e,t,i,s,r,n,o,a,c){const l=t[i];if(void 0===l||!this.context.checkObjectHasProperty(e,l))return this.context.throwSCORMError(r,a,c),{refObject:e,idx:i,foundFirstIndex:o,error:!0};if(!(e=e[l]))return this.context.throwSCORMError(r,a,c),{refObject:e,idx:i,foundFirstIndex:o,error:!0};if(e instanceof b){const l=this.handleSetArrayAccess(e,t,i,s,r,n,o,a,c);return l.error?{refObject:e,idx:i,foundFirstIndex:o,error:!0}:l}return{refObject:e,idx:i,foundFirstIndex:o,error:!1}}handleSetArrayAccess(e,t,i,s,r,n,o,a,c){const l=parseInt(t[i+1]||"0",10);if(!isNaN(l)){const t=e.childArray[l];if(t)return{refObject:t,idx:i+1,foundFirstIndex:!0,error:!1};{if(l>e.childArray.length){const t=n?Re(this.context.errorCodes,"GENERAL_SET_FAILURE"):Re(this.context.errorCodes,"INVALID_SET_VALUE")||Re(this.context.errorCodes,"GENERAL_SET_FAILURE");return this.context.throwSCORMError(r,t,`Cannot set array element at index ${l}. Array indices must be sequential. Current array length is ${e.childArray.length}, expected index ${e.childArray.length}.`),{refObject:e,idx:i,foundFirstIndex:o,error:!0}}const t=this.context.getChildElement(r,s,o);return t?(e.initialized&&t.initialize(),e.childArray[l]=t,{refObject:t,idx:i+1,foundFirstIndex:!0,error:!1}):("0"===this.context.getLastErrorCode()&&this.context.throwSCORMError(r,a,c),{refObject:e,idx:i,foundFirstIndex:o,error:!0})}}return{refObject:e,idx:i,foundFirstIndex:o,error:!1}}validateGetAttribute(e,t,i,s,r,n,o){if(s){const s=t+"";if(s.startsWith(we)&&"function"==typeof e._isTargetValid){const t=s.substring(8,s.length-1);return{error:!1,returnValue:e._isTargetValid(t)}}if(void 0===t||!this.context.checkObjectHasProperty(e,t))return"_children"===t?(this.context.throwSCORMError(i,Re(this.context.errorCodes,"GENERAL_GET_FAILURE"),"The data model element does not have children"),{error:!0}):"_count"===t?(this.context.throwSCORMError(i,Re(this.context.errorCodes,"GENERAL_GET_FAILURE"),"The data model element is not a collection and therefore does not have a count"),{error:!0}):(this.context.throwSCORMError(i,r,n),{error:!0})}else if(o&&(void 0===t||!this.context.checkObjectHasProperty(e,t)))return this.context.throwSCORMError(i,r,n),{error:!0};return{error:!1}}handleGetArrayAccess(e,t,i,s,r){const n=parseInt(t[i+1]||"",10);if(!isNaN(n)){const t=e.childArray[n];return t?{refObject:t,idx:i+1,error:!1}:(this.context.throwSCORMError(s,Re(this.context.errorCodes,"VALUE_NOT_INITIALIZED"),r),{refObject:e,idx:i,error:!0})}return{refObject:e,idx:i,error:!1}}}class Te{static _instance;_logLevel=I.ERROR;_logHandler;constructor(){this._logHandler=N}static getInstance(){return Te._instance||(Te._instance=new Te),Te._instance}setLogLevel(e){this._logLevel=e}getLogLevel(){return this._logLevel}setLogHandler(e){this._logHandler=e}log(e,t){this.shouldLog(e)&&this._logHandler(e,t)}error(e){this.log(I.ERROR,e)}warn(e){this.log(I.WARN,e)}info(e){this.log(I.INFO,e)}debug(e){this.log(I.DEBUG,e)}shouldLog(e){return this.getNumericLevel(e)>=this.getNumericLevel(this._logLevel)}getNumericLevel(e){if(void 0===e)return I.NONE;if("number"==typeof e)return e;switch("string"==typeof e?e.toUpperCase():e){case"1":case"DEBUG":return I.DEBUG;case"2":case"INFO":return I.INFO;case"3":case"WARN":return I.WARN;case"4":case"ERROR":default:return I.ERROR;case"5":case"NONE":return I.NONE}}}function je(){return Te.getInstance()}class Ie{_lastErrorCode="0";_lastDiagnostic="";_errorCodes;_apiLog;_getLmsErrorMessageDetails;_loggingService;constructor(e,t,i,s){this._errorCodes=e,this._apiLog=t,this._getLmsErrorMessageDetails=i,this._loggingService=s||je()}get lastErrorCode(){return this._lastErrorCode}set lastErrorCode(e){this._lastErrorCode=e}get lastDiagnostic(){return this._lastDiagnostic}throwSCORMError(e,t,i){this._lastDiagnostic=i||"",i||(i=this._getLmsErrorMessageDetails(t,!0));const s=`SCORM Error ${t}: ${i}${e?` [Element: ${e}]`:""}`;this._apiLog("throwSCORMError",t+": "+i,I.ERROR,e),this._loggingService.error(s),this._lastErrorCode=t+""}clearSCORMError(e){void 0!==e&&e!==h&&(this._lastErrorCode="0")}handleValueAccessException(e,t,i){if(t instanceof u){const s=t;this._lastErrorCode=s.errorCode+"",this._lastDiagnostic="",this._loggingService.warn(`Validation Error ${s.errorCode}: ${s.message} [Element: ${e}]`),i=h}else if(t instanceof Error){const s=t.constructor.name;this._loggingService.error(`${s}: ${t.message} [Element: ${e}]\n${t.stack||""}`),this.throwSCORMError(e,this._errorCodes.GENERAL,`${s}: ${t.message}`),i=h}else{this._loggingService.error(`Unknown error occurred while accessing [Element: ${e}]`);try{const e=JSON.stringify(t);this._loggingService.error("Error details: "+e)}catch(e){this._loggingService.error("Could not stringify error object for details")}this.throwSCORMError(e,this._errorCodes.GENERAL,"Unknown error"),i=h}return i}get errorCodes(){return this._errorCodes}}class qe{listenerMap=new Map;listenerCount=0;apiLog;constructor(e){this.apiLog=e}parseListenerName(e){if(!e)return null;const t=e.split("."),i=t[0];let s=null;return t.length>1&&(s=e.replace(i+".","")),{functionName:i??e,CMIElement:s}}on(e,t){if(!t)return;const i=e.split(" ");for(const e of i){const i=this.parseListenerName(e);if(!i)continue;const{functionName:s,CMIElement:r}=i,n=this.listenerMap.get(s)??[];n.push({functionName:s,CMIElement:r,callback:t}),this.listenerMap.set(s,n),this.listenerCount++,this.apiLog("on","Added event listener: "+this.listenerCount,I.INFO,s)}}off(e,t){if(!t)return;const i=e.split(" ");for(const e of i){const i=this.parseListenerName(e);if(!i)continue;const{functionName:s,CMIElement:r}=i,n=this.listenerMap.get(s);if(!n)continue;const o=n.findIndex(e=>e.CMIElement===r&&e.callback===t);-1!==o&&(n.splice(o,1),this.listenerCount--,0===n.length&&this.listenerMap.delete(s),this.apiLog("off","Removed event listener: "+this.listenerCount,I.INFO,s))}}clear(e){const t=e.split(" ");for(const e of t){const t=this.parseListenerName(e);if(!t)continue;const{functionName:i,CMIElement:s}=t;if(this.listenerMap.has(i)){const e=this.listenerMap.get(i),t=null===s?[]:e.filter(e=>e.CMIElement!==s);this.listenerCount-=e.length-t.length,0===t.length?this.listenerMap.delete(i):this.listenerMap.set(i,t)}}}processListeners(e,t,i){this.apiLog(e,i,I.INFO,t);const s=this.listenerMap.get(e);if(s)for(const r of s){const s=!!r.CMIElement;let n=!1;if(t&&r.CMIElement)if(r.CMIElement.endsWith("*")){const e=r.CMIElement.slice(0,-1);n=t.startsWith(e)}else n=r.CMIElement===t;s&&!n||(this.apiLog("processListeners","Processing listener: "+r.functionName,I.DEBUG,t),e.startsWith("Sequence")||"CommitError"===e?r.callback(i):"CommitSuccess"===e?r.callback():r.callback(t,i))}}reset(){this.listenerMap.clear(),this.listenerCount=0}}class Ne{constructor(e,t,i){this.apiLog=i,this.settings=e,this.error_codes=t,this.boundOnlineStatusChangeHandler=this.handleOnlineStatusChange.bind(this),this.boundCustomNetworkStatusHandler=this.handleCustomNetworkStatus.bind(this),window.addEventListener("online",this.boundOnlineStatusChangeHandler),window.addEventListener("offline",this.boundOnlineStatusChangeHandler),window.addEventListener("scorm-again:network-status",this.boundCustomNetworkStatusHandler)}apiLog;settings;error_codes;storeName="scorm_again_offline_data";syncQueue="scorm_again_sync_queue";isOnline=navigator.onLine;syncInProgress=!1;boundOnlineStatusChangeHandler;boundCustomNetworkStatusHandler;handleOnlineStatusChange(){const e=this.isOnline;this.isOnline=navigator.onLine,!e&&this.isOnline?(this.apiLog("OfflineStorageService","Device is back online, attempting to sync...",I.INFO),this.syncOfflineData().then(e=>{e?this.apiLog("OfflineStorageService","Sync completed successfully",I.INFO):this.apiLog("OfflineStorageService","Sync failed",I.ERROR)},e=>{this.apiLog("OfflineStorageService","Error during sync: "+e,I.ERROR)})):e&&!this.isOnline&&this.apiLog("OfflineStorageService","Device is offline, data will be stored locally",I.INFO)}handleCustomNetworkStatus(e){if(!(e instanceof CustomEvent))return void this.apiLog("OfflineStorageService","Invalid network status event received",I.WARN);const{online:t}=e.detail;if("boolean"!=typeof t)return void this.apiLog("OfflineStorageService","Invalid online status value in custom event",I.WARN);const i=this.isOnline;this.isOnline=t,this.apiLog("OfflineStorageService","Network status updated via custom event: "+(t?"online":"offline"),I.INFO),!i&&this.isOnline?(this.apiLog("OfflineStorageService","Device is back online, attempting to sync...",I.INFO),this.syncOfflineData().then(e=>{e?this.apiLog("OfflineStorageService","Sync completed successfully",I.INFO):this.apiLog("OfflineStorageService","Sync failed",I.ERROR)},e=>{this.apiLog("OfflineStorageService","Error during sync: "+e,I.ERROR)})):i&&!this.isOnline&&this.apiLog("OfflineStorageService","Device is offline, data will be stored locally",I.INFO)}storeOffline(e,t){try{const i={id:`${e}_${Date.now()}_${Math.random().toString(36).substring(2,9)}`,courseId:e,timestamp:Date.now(),data:t,syncAttempts:0},s=this.getFromStorage(this.syncQueue)||[];return s.push(i),this.saveToStorage(this.syncQueue,s),this.saveToStorage(`${this.storeName}_${e}`,t),this.apiLog("OfflineStorageService","Stored data offline for course "+e,I.INFO),{result:d,errorCode:0}}catch(t){const i=(t instanceof Error?t.message:t+"").includes("storage quota");return this.apiLog("OfflineStorageService",i?"storage quota exceeded - cannot store offline data for course "+e:"Error storing offline data: "+t,I.ERROR),{result:h,errorCode:this.error_codes.GENERAL??0}}}async getOfflineData(e){try{return this.getFromStorage(`${this.storeName}_${e}`)||null}catch(e){return this.apiLog("OfflineStorageService","Error retrieving offline data: "+e,I.ERROR),null}}async syncOfflineData(){if(this.syncInProgress||!this.isOnline)return!1;this.syncInProgress=!0;try{const e=this.getFromStorage(this.syncQueue)||[];if(0===e.length)return this.syncInProgress=!1,!0;this.apiLog("OfflineStorageService",`Found ${e.length} items to sync`,I.INFO);const t=[];for(const i of e){const e=this.settings.maxSyncAttempts??5;if(e>i.syncAttempts)try{const e=await this.sendDataToLMS(i.data);!0===e.result||e.result===d?this.apiLog("OfflineStorageService","Successfully synced item "+i.id,I.INFO):(i.syncAttempts++,t.push(i),this.apiLog("OfflineStorageService",`Failed to sync item ${i.id}, attempt #${i.syncAttempts}`,I.WARN))}catch(e){i.syncAttempts++,t.push(i),this.apiLog("OfflineStorageService",`Error syncing item ${i.id}: ${e}`,I.ERROR)}else this.apiLog("OfflineStorageService",`Removing abandoned item ${i.id} after ${e} failed sync attempts`,I.WARN)}return this.saveToStorage(this.syncQueue,t),this.apiLog("OfflineStorageService",`Sync completed. ${e.length-t.length} items synced, ${t.length} items remaining`,I.INFO),this.syncInProgress=!1,!0}catch(e){return this.apiLog("OfflineStorageService","Error during sync process: "+e,I.ERROR),this.syncInProgress=!1,!1}}async sendDataToLMS(e){if(!this.settings.lmsCommitUrl)return{result:h,errorCode:this.error_codes.GENERAL||101};try{const t=this.settings.requestHandler(e),i={method:"POST",mode:this.settings.fetchMode,body:JSON.stringify(t),headers:{...this.settings.xhrHeaders,"Content-Type":this.settings.commitRequestDataType}};this.settings.xhrWithCredentials&&(i.credentials="include");const s=await fetch(this.settings.lmsCommitUrl,i),result="function"==typeof this.settings.responseHandler?await this.settings.responseHandler(s):await s.json();return 200>s.status||s.status>299||!0!==result.result&&result.result!==d?(Object.hasOwnProperty.call(result,"errorCode")||(result.errorCode=this.error_codes.GENERAL),result):(Object.hasOwnProperty.call(result,"errorCode")||(result.errorCode=0),result)}catch(e){return this.apiLog("OfflineStorageService","Error sending data to LMS: "+e,I.ERROR),{result:h,errorCode:this.error_codes.GENERAL||101}}}isDeviceOnline(){return this.isOnline}getFromStorage(e){const t=localStorage.getItem(e);if(t)try{return JSON.parse(t)}catch(e){return null}return null}saveToStorage(e,t){try{localStorage.setItem(e,JSON.stringify(t))}catch(e){if(e instanceof DOMException&&"QuotaExceededError"===e.name)throw Error("storage quota exceeded - localStorage is full",{cause:e});throw e}}async hasPendingOfflineData(e){return(this.getFromStorage(this.syncQueue)||[]).some(t=>t.courseId===e)}updateSettings(e){this.settings=e}destroy(){window.removeEventListener("online",this.boundOnlineStatusChangeHandler),window.removeEventListener("offline",this.boundOnlineStatusChangeHandler),window.removeEventListener("scorm-again:network-status",this.boundCustomNetworkStatusHandler)}}const De=o((e,t,i,s,r,n)=>{if("string"!=typeof t)return!1;const o=RegExp(i),a=t.match(o);if(n&&""===t)return!0;if(!a||""===a[0])throw new r(e,s);return!0},(e,t,i,s,r,n)=>`${e}:${"string"==typeof t?t:`[${typeof t}]`}:${i}:${s}:${n||!1}`),xe=o((e,t,i,s,r)=>{const n=i.split("#");if(isNaN(t=+t))throw new r(e,s);const o=n[0],a=n[1],c=void 0!==a&&""!==a&&"*"!==a;if(void 0!==o&&""!==o&&+o>t)throw new r(e,s);if(c&&t>+a)throw new r(e,s);return!0},(e,t,i,s,r)=>`${e}:${t}:${i}:${s}`);function Le(e,t,i,s){return De(e,t,i,y.TYPE_MISMATCH,_,s)}function Pe(e,t,i){return xe(e,t,i,y.VALUE_OUT_OF_RANGE,_)}var ze=(e=>(e.SATISFIED="satisfied",e.NOT_SATISFIED="notSatisfied",e.COMPLETED="completed",e.INCOMPLETE="incomplete",e))(ze||{}),Fe=(e=>(e.ALL="all",e.ANY="any",e.NONE="none",e.AT_LEAST_COUNT="atLeastCount",e.AT_LEAST_PERCENT="atLeastPercent",e))(Fe||{});class ke extends a{_condition="always";_parameters=new Map;constructor(e="always",t=new Map){super("rollupCondition"),this._condition=e,this._parameters=t}reset(){this._initialized=!1}get condition(){return this._condition}set condition(e){this._condition=e}get parameters(){return this._parameters}set parameters(e){this._parameters=e}evaluate(e){switch(this._condition){case"satisfied":return!0===e.objectiveSatisfiedStatus||e.successStatus===M;case"objectiveStatusKnown":return e.objectiveSatisfiedStatusKnown;case"objectiveMeasureKnown":return e.objectiveMeasureStatus;case"objectiveMeasureGreaterThan":{const t=this._parameters.get("threshold")||0;return e.objectiveMeasureStatus&&e.objectiveNormalizedMeasure>t}case"objectiveMeasureLessThan":{const t=this._parameters.get("threshold")||0;return e.objectiveMeasureStatus&&t>e.objectiveNormalizedMeasure}case"completed":return e.isCompleted;case"progressKnown":return e.completionStatus!==j;case"attempted":return e.attemptCount>0;case"notAttempted":return 0===e.attemptCount;case"always":return!0;default:return!1}}toJSON(){this.jsonString=!0;const result={condition:this._condition,parameters:Object.fromEntries(this._parameters)};return this.jsonString=!1,result}}class Ve extends a{_conditions=[];_action="satisfied";_consideration="all";_minimumCount=0;_minimumPercent=0;constructor(e="satisfied",t="all",i=0,s=0){super("rollupRule"),this._action=e,this._consideration=t,this._minimumCount=i,this._minimumPercent=s}reset(){this._initialized=!1,this._conditions=[]}get conditions(){return this._conditions}addCondition(e){if(!(e instanceof ke))throw new _(this._cmi_element+".conditions",y.TYPE_MISMATCH);this._conditions.push(e)}removeCondition(e){const t=this._conditions.indexOf(e);return-1!==t&&(this._conditions.splice(t,1),!0)}get action(){return this._action}set action(e){this._action=e}get consideration(){return this._consideration}set consideration(e){this._consideration=e}get minimumCount(){return this._minimumCount}set minimumCount(e){0>e||(this._minimumCount=e)}get minimumPercent(){return this._minimumPercent}set minimumPercent(e){0>e||e>100||(this._minimumPercent=e)}evaluate(e){if(0===e.length)return!1;const t=e.filter(e=>this._conditions.every(t=>t.evaluate(e)));switch(this._consideration){case"all":return t.length===e.length;case"any":return t.length>0;case"none":return 0===t.length;case"atLeastCount":return t.length>=this._minimumCount;case"atLeastPercent":return t.length/e.length*100>=this._minimumPercent;default:return!1}}toJSON(){this.jsonString=!0;const result={conditions:this._conditions,action:this._action,consideration:this._consideration,minimumCount:this._minimumCount,minimumPercent:this._minimumPercent};return this.jsonString=!1,result}}class He extends a{_rules=[];constructor(){super("rollupRules")}reset(){this._initialized=!1,this._rules=[]}get rules(){return this._rules}addRule(e){if(!(e instanceof Ve))throw new _(this._cmi_element+".rules",y.TYPE_MISMATCH);this._rules.push(e)}removeRule(e){const t=this._rules.indexOf(e);return-1!==t&&(this._rules.splice(t,1),!0)}processRollup(e){if(!e||0===e.children.length)return;const t=e.getAvailableChildren();let i=!1,s=!1;if(e.sequencingControls.rollupObjectiveSatisfied&&null!==this._objectiveRollupUsingMeasure(e,t)&&(s=!0),!s)for(const r of this._rules)if(r.evaluate(t))switch(r.action){case"satisfied":e.successStatus=M,s=!0;break;case"notSatisfied":e.successStatus=w,s=!0;break;case"completed":e.completionStatus=O,e.isCompleted=!0,i=!0;break;case"incomplete":e.completionStatus=T,e.isCompleted=!1,i=!0}i||this._defaultCompletionRollup(e,t),s||this._defaultSuccessRollup(e,t)}_defaultCompletionRollup(e,t){t.every(e=>e.isCompleted)?(e.completionStatus=O,e.isCompleted=!0):t.some(e=>e.completionStatus===T)&&(e.completionStatus=T,e.isCompleted=!1)}_objectiveRollupUsingMeasure(e,t){if(0>=e.sequencingControls.objectiveMeasureWeight)return null;let i=0,s=0,r=!1;for(const e of t)if(e.sequencingControls.rollupObjectiveSatisfied&&e.objectiveMeasureStatus&&!0===e.objectiveMeasureStatus){const t=e.sequencingControls.objectiveMeasureWeight;t>0&&(s+=e.objectiveNormalizedMeasure*t,i+=t,r=!0)}if(!r||0===i)return null;const n=s/i;return e.objectiveNormalizedMeasure=n,e.objectiveMeasureStatus=!0,e.scaledPassingScore>n?(e.successStatus=w,e.objectiveSatisfiedStatus=!1,!1):(e.successStatus=M,e.objectiveSatisfiedStatus=!0,!0)}_defaultSuccessRollup(e,t){t.every(e=>e.successStatus===M)?e.successStatus=M:t.some(e=>e.successStatus===w)&&(e.successStatus=w)}toJSON(){this.jsonString=!0;const result={rules:this._rules};return this.jsonString=!1,result}}class Be{_id;_description;_satisfiedByMeasure;_minNormalizedMeasure;_mapInfo;_isPrimary;_satisfiedStatus=!1;_satisfiedStatusKnown=!1;_measureStatus=!1;_normalizedMeasure=0;_progressMeasure=0;_progressMeasureStatus=!1;_completionStatus=j;_progressStatus=!1;_satisfiedStatusDirty=!1;_normalizedMeasureDirty=!1;_completionStatusDirty=!1;_progressMeasureDirty=!1;constructor(id,e={}){this._id=id,this._description=e.description??null,this._satisfiedByMeasure=e.satisfiedByMeasure??!1,this._minNormalizedMeasure=e.minNormalizedMeasure??null,this._mapInfo=e.mapInfo?[...e.mapInfo]:[],this._isPrimary=e.isPrimary??!1}get id(){return this._id}get description(){return this._description}get satisfiedByMeasure(){return this._satisfiedByMeasure}set satisfiedByMeasure(e){this._satisfiedByMeasure=e}get minNormalizedMeasure(){return this._minNormalizedMeasure}set minNormalizedMeasure(e){this._minNormalizedMeasure=e}get mapInfo(){return this._mapInfo}set mapInfo(e){this._mapInfo=[...e]}get isPrimary(){return this._isPrimary}set isPrimary(e){this._isPrimary=e}get satisfiedStatus(){return this._satisfiedStatus}set satisfiedStatus(e){this._satisfiedStatus!==e&&(this._satisfiedStatus=e,this._satisfiedStatusDirty=!0)}get satisfiedStatusKnown(){return this._satisfiedStatusKnown}set satisfiedStatusKnown(e){this._satisfiedStatusKnown=e}get measureStatus(){return this._measureStatus}set measureStatus(e){this._measureStatus=e}get normalizedMeasure(){return this._normalizedMeasure}set normalizedMeasure(e){this._normalizedMeasure!==e&&(this._normalizedMeasure=e,this._normalizedMeasureDirty=!0)}get progressMeasure(){return this._progressMeasure}set progressMeasure(e){this._progressMeasure!==e&&(this._progressMeasure=e,this._progressMeasureDirty=!0)}get progressMeasureStatus(){return this._progressMeasureStatus}set progressMeasureStatus(e){this._progressMeasureStatus=e}get completionStatus(){return this._completionStatus}set completionStatus(e){this._completionStatus!==e&&(this._completionStatus=e,this._completionStatusDirty=!0)}get progressStatus(){return this._progressStatus}set progressStatus(e){this._progressStatus=e}isDirty(e){switch(e){case"satisfiedStatus":return this._satisfiedStatusDirty;case"normalizedMeasure":return this._normalizedMeasureDirty;case"completionStatus":return this._completionStatusDirty;case"progressMeasure":return this._progressMeasureDirty}}clearDirty(e){switch(e){case"satisfiedStatus":this._satisfiedStatusDirty=!1;break;case"normalizedMeasure":this._normalizedMeasureDirty=!1;break;case"completionStatus":this._completionStatusDirty=!1;break;case"progressMeasure":this._progressMeasureDirty=!1}}clearAllDirty(){this._satisfiedStatusDirty=!1,this._normalizedMeasureDirty=!1,this._completionStatusDirty=!1,this._progressMeasureDirty=!1}initializeFromCMI(e,t,i){this._satisfiedStatus=e,this._satisfiedStatusDirty=!0,this._normalizedMeasure=t,this._normalizedMeasureDirty=!0,this._measureStatus=i}resetState(){this._satisfiedStatus=!1,this._satisfiedStatusKnown=!1,this._measureStatus=!1,this._normalizedMeasure=0,this._progressMeasure=0,this._progressMeasureStatus=!1,this._completionStatus=j,this._progressStatus=!1,this.clearAllDirty()}updateFromActivity(e){this._satisfiedStatus!==e.objectiveSatisfiedStatus&&(this._satisfiedStatus=e.objectiveSatisfiedStatus,this._satisfiedStatusDirty=!0),this._satisfiedStatusKnown=e.objectiveSatisfiedStatusKnown,this._measureStatus=e.objectiveMeasureStatus,this._normalizedMeasure!==e.objectiveNormalizedMeasure&&(this._normalizedMeasure=e.objectiveNormalizedMeasure,this._normalizedMeasureDirty=!0),this._progressMeasure!==e.progressMeasure&&(this._progressMeasure=e.progressMeasure,this._progressMeasureDirty=!0),this._progressMeasureStatus=e.progressMeasureStatus,this._completionStatus!==e.completionStatus&&(this._completionStatus=e.completionStatus,this._completionStatusDirty=!0)}applyToActivity(e){this._isPrimary&&e.setPrimaryObjectiveState(this._satisfiedStatus,this._measureStatus,this._normalizedMeasure,this._progressMeasure,this._progressMeasureStatus,this._completionStatus)}}class Ue extends a{_id="";_title="";_children=[];_parent=null;_isVisible=!0;_isActive=!1;_isSuspended=!1;_isCompleted=!1;_completionStatus=j;_successStatus=R;_attemptCount=0;_attemptCompletionAmount=0;_attemptAbsoluteDuration="PT0H0M0S";_attemptExperiencedDuration="PT0H0M0S";_activityAbsoluteDuration="PT0H0M0S";_activityExperiencedDuration="PT0H0M0S";_attemptAbsoluteDurationValue="PT0H0M0S";_attemptExperiencedDurationValue="PT0H0M0S";_activityAbsoluteDurationValue="PT0H0M0S";_activityExperiencedDurationValue="PT0H0M0S";_activityStartTimestampUtc=null;_attemptStartTimestampUtc=null;_activityEndedDate=null;_objectiveSatisfiedStatus=!1;_objectiveSatisfiedStatusKnown=!1;_objectiveMeasureStatus=!1;_objectiveNormalizedMeasure=0;_scaledPassingScore=.7;_objectiveSatisfiedStatusDirty=!1;_objectiveNormalizedMeasureDirty=!1;_objectiveMeasureStatusDirty=!1;_progressMeasure=0;_progressMeasureStatus=!1;_location="";_attemptAbsoluteStartTime="";_learnerPrefs=null;_activityAttemptActive=!1;_isHiddenFromChoice=!1;_isAvailable=!0;_hideLmsUi=[];_auxiliaryResources=[];_attemptLimit=null;_attemptAbsoluteDurationLimit=null;_activityAbsoluteDurationLimit=null;_timeLimitAction=null;_timeLimitDuration=null;_beginTimeLimit=null;_endTimeLimit=null;_launchData="";_credit="credit";_maxTimeAllowed="";_completionThreshold="";_sequencingControls;_sequencingRules;_rollupRules;_processedChildren=null;_isNewAttempt=!1;_primaryObjective=null;_objectives=[];_rollupConsiderations={requiredForSatisfied:"always",requiredForNotSatisfied:"always",requiredForCompleted:"always",requiredForIncomplete:"always",measureSatisfactionIfActive:!0};_requiredForSatisfied="always";_requiredForNotSatisfied="always";_requiredForCompleted="always";_requiredForIncomplete="always";_wasSkipped=!1;_attemptProgressStatus=!1;_wasAutoCompleted=!1;_wasAutoSatisfied=!1;_completedByMeasure=!1;_minProgressMeasure=1;_progressWeight=1;_attemptCompletionAmountStatus=!1;constructor(id="",e=""){super("activity"),this._id=id,this._title=e,this._sequencingControls=new ge,this._sequencingRules=new re,this._rollupRules=new He,this._primaryObjective=null,this._objectives=[]}initialize(){super.initialize();for(const e of this._children)e.initialize()}reset(){this._initialized=!1,this._isActive=!1,this._isSuspended=!1,this._isCompleted=!1,this._completionStatus=j,this._successStatus=R,this._attemptCount=0,this._attemptCompletionAmount=0,this._attemptAbsoluteDuration="PT0H0M0S",this._attemptExperiencedDuration="PT0H0M0S",this._activityAbsoluteDuration="PT0H0M0S",this._activityExperiencedDuration="PT0H0M0S",this._attemptAbsoluteDurationValue="PT0H0M0S",this._attemptExperiencedDurationValue="PT0H0M0S",this._activityAbsoluteDurationValue="PT0H0M0S",this._activityExperiencedDurationValue="PT0H0M0S",this._activityStartTimestampUtc=null,this._attemptStartTimestampUtc=null,this._activityEndedDate=null,this._objectiveSatisfiedStatus=!1,this._objectiveSatisfiedStatusKnown=!1,this._objectiveMeasureStatus=!1,this._objectiveNormalizedMeasure=0,this._progressMeasure=0,this._progressMeasureStatus=!1,this._location="",this._attemptAbsoluteStartTime="",this._learnerPrefs=null,this._activityAttemptActive=!1,this._primaryObjective&&(this._primaryObjective.resetState(),this._primaryObjective.updateFromActivity(this));for(const e of this._objectives)e.resetState();for(const e of this._children)e.reset();this._wasSkipped=!1,this._attemptProgressStatus=!1,this._wasAutoCompleted=!1,this._wasAutoSatisfied=!1,this._completedByMeasure=!1,this._minProgressMeasure=1,this._progressWeight=1,this._attemptCompletionAmountStatus=!1,this.clearAllObjectiveDirty()}get id(){return this._id}set id(id){Le(this._cmi_element+".id",id,B)&&(this._id=id)}get title(){return this._title}set title(e){Le(this._cmi_element+".title",e,P)&&(this._title=e)}get children(){return this._children}addChild(e){if(!(e instanceof Ue))throw new _(this._cmi_element+".children",y.TYPE_MISMATCH);e._parent=this,this._children.push(e)}setChildOrder(e){if(0===e.length)return;const t=new Map(this._children.map(e=>[e.id,e])),i=[];for(const id of e){const e=t.get(id);e&&(i.push(e),t.delete(id))}if(t.size>0)for(const e of this._children)t.has(e.id)&&(i.push(e),t.delete(e.id));i.length===this._children.length&&this._children.splice(0,this._children.length,...i)}removeChild(e){const t=this._children.indexOf(e);return-1!==t&&(this._children.splice(t,1),e._parent=null,!0)}get parent(){return this._parent}get isVisible(){return this._isVisible}set isVisible(e){this._isVisible=e}get isActive(){return this._isActive}set isActive(e){this._isActive=e}get isSuspended(){return this._isSuspended}set isSuspended(e){this._isSuspended=e}get isCompleted(){return this._isCompleted}set isCompleted(e){this._isCompleted=e,this._completionStatus=e?O:T}get completionStatus(){return this._completionStatus}set completionStatus(e){this._completionStatus=e,this._isCompleted=e===O,this.updatePrimaryObjectiveFromActivity()}get successStatus(){return this._successStatus}set successStatus(e){this._successStatus=e}get attemptCount(){return this._attemptCount}set attemptCount(e){this._attemptCount=e}get attemptCompletionAmount(){return this._attemptCompletionAmount}set attemptCompletionAmount(e){this._attemptCompletionAmount=e}incrementAttemptCount(){this._attemptCount++,this._isNewAttempt=!0;const e=this._sequencingControls;"onEachNewAttempt"!==e.selectionTiming&&"onEachNewAttempt"!==e.randomizationTiming||(this._processedChildren=null)}get objectiveSatisfiedStatus(){return this._objectiveSatisfiedStatus}set objectiveSatisfiedStatus(e){this._objectiveSatisfiedStatus!==e&&(this._objectiveSatisfiedStatus=e,this._objectiveSatisfiedStatusDirty=!0),this._objectiveSatisfiedStatusKnown=!0,this._successStatus=e?M:w,this.updatePrimaryObjectiveFromActivity()}get objectiveSatisfiedStatusKnown(){return this._objectiveSatisfiedStatusKnown}set objectiveSatisfiedStatusKnown(e){this._objectiveSatisfiedStatusKnown=e}get objectiveMeasureStatus(){return this._objectiveMeasureStatus}set objectiveMeasureStatus(e){this._objectiveMeasureStatus!==e&&(this._objectiveMeasureStatus=e,this._objectiveMeasureStatusDirty=!0),this.updatePrimaryObjectiveFromActivity()}get objectiveNormalizedMeasure(){return this._objectiveNormalizedMeasure}set objectiveNormalizedMeasure(e){this._objectiveNormalizedMeasure!==e&&(this._objectiveNormalizedMeasure=e,this._objectiveNormalizedMeasureDirty=!0),this.updatePrimaryObjectiveFromActivity()}get scaledPassingScore(){return this._scaledPassingScore}set scaledPassingScore(e){-1>e||e>1||(this._scaledPassingScore=e)}get progressMeasure(){return this._progressMeasure}set progressMeasure(e){this._progressMeasure=e,this.updatePrimaryObjectiveFromActivity()}get progressMeasureStatus(){return this._progressMeasureStatus}set progressMeasureStatus(e){this._progressMeasureStatus=e,this.updatePrimaryObjectiveFromActivity()}get location(){return this._location}set location(location){this._location=location}get attemptAbsoluteStartTime(){return this._attemptAbsoluteStartTime}set attemptAbsoluteStartTime(e){this._attemptAbsoluteStartTime=e}get learnerPrefs(){return this._learnerPrefs}set learnerPrefs(e){this._learnerPrefs=e}get activityAttemptActive(){return this._activityAttemptActive}set activityAttemptActive(e){this._activityAttemptActive=e}get isHiddenFromChoice(){return this._isHiddenFromChoice}set isHiddenFromChoice(e){this._isHiddenFromChoice=e}get isAvailable(){return this._isAvailable}set isAvailable(e){this._isAvailable=e}get attemptLimit(){return this._attemptLimit}set attemptLimit(e){this._attemptLimit=e}hasAttemptLimitExceeded(){return null!==this._attemptLimit&&this._attemptCount>=this._attemptLimit}get timeLimitDuration(){return this._timeLimitDuration}set timeLimitDuration(e){this._timeLimitDuration=e}get timeLimitAction(){return this._timeLimitAction}set timeLimitAction(e){this._timeLimitAction=e}get beginTimeLimit(){return this._beginTimeLimit}set beginTimeLimit(e){this._beginTimeLimit=e}get endTimeLimit(){return this._endTimeLimit}set endTimeLimit(e){this._endTimeLimit=e}get attemptAbsoluteDurationLimit(){return this._attemptAbsoluteDurationLimit}set attemptAbsoluteDurationLimit(e){if(null!==e&&!s(e,k))throw new _(this._cmi_element+".attemptAbsoluteDurationLimit",y.TYPE_MISMATCH);this._attemptAbsoluteDurationLimit=e}get attemptExperiencedDuration(){return this._attemptExperiencedDuration}set attemptExperiencedDuration(e){if(!s(e,k))throw new _(this._cmi_element+".attemptExperiencedDuration",y.TYPE_MISMATCH);this._attemptExperiencedDuration=e}get activityAbsoluteDurationLimit(){return this._activityAbsoluteDurationLimit}set activityAbsoluteDurationLimit(e){if(null!==e&&!s(e,k))throw new _(this._cmi_element+".activityAbsoluteDurationLimit",y.TYPE_MISMATCH);this._activityAbsoluteDurationLimit=e}get activityExperiencedDuration(){return this._activityExperiencedDuration}set activityExperiencedDuration(e){if(!s(e,k))throw new _(this._cmi_element+".activityExperiencedDuration",y.TYPE_MISMATCH);this._activityExperiencedDuration=e}get attemptAbsoluteDuration(){return this._attemptAbsoluteDurationLimit||"PT0H0M0S"}set attemptAbsoluteDuration(e){this._attemptAbsoluteDurationLimit=e}get activityAbsoluteDuration(){return this._activityAbsoluteDurationLimit||"PT0H0M0S"}set activityAbsoluteDuration(e){this._activityAbsoluteDurationLimit=e}get attemptAbsoluteDurationValue(){return this._attemptAbsoluteDurationValue}set attemptAbsoluteDurationValue(e){if(!s(e,k))throw new _(this._cmi_element+".attemptAbsoluteDurationValue",y.TYPE_MISMATCH);this._attemptAbsoluteDurationValue=e}get attemptExperiencedDurationValue(){return this._attemptExperiencedDurationValue}set attemptExperiencedDurationValue(e){if(!s(e,k))throw new _(this._cmi_element+".attemptExperiencedDurationValue",y.TYPE_MISMATCH);this._attemptExperiencedDurationValue=e}get activityAbsoluteDurationValue(){return this._activityAbsoluteDurationValue}set activityAbsoluteDurationValue(e){if(!s(e,k))throw new _(this._cmi_element+".activityAbsoluteDurationValue",y.TYPE_MISMATCH);this._activityAbsoluteDurationValue=e}get activityExperiencedDurationValue(){return this._activityExperiencedDurationValue}set activityExperiencedDurationValue(e){if(!s(e,k))throw new _(this._cmi_element+".activityExperiencedDurationValue",y.TYPE_MISMATCH);this._activityExperiencedDurationValue=e}get activityStartTimestampUtc(){return this._activityStartTimestampUtc}set activityStartTimestampUtc(timestamp){this._activityStartTimestampUtc=timestamp}get attemptStartTimestampUtc(){return this._attemptStartTimestampUtc}set attemptStartTimestampUtc(timestamp){this._attemptStartTimestampUtc=timestamp}get activityEndedDate(){return this._activityEndedDate}set activityEndedDate(e){this._activityEndedDate=e}get sequencingControls(){return this._sequencingControls}set sequencingControls(e){this._sequencingControls=e}get sequencingRules(){return this._sequencingRules}set sequencingRules(e){this._sequencingRules=e}get rollupRules(){return this._rollupRules}set rollupRules(e){this._rollupRules=e}get rollupConsiderations(){return{...this._rollupConsiderations}}set rollupConsiderations(e){this._rollupConsiderations={...e}}applyRollupConsiderations(e){this._rollupConsiderations={...this._rollupConsiderations,...e}}get requiredForSatisfied(){return this._requiredForSatisfied}set requiredForSatisfied(e){this._requiredForSatisfied=e}get requiredForNotSatisfied(){return this._requiredForNotSatisfied}set requiredForNotSatisfied(e){this._requiredForNotSatisfied=e}get requiredForCompleted(){return this._requiredForCompleted}set requiredForCompleted(e){this._requiredForCompleted=e}get requiredForIncomplete(){return this._requiredForIncomplete}set requiredForIncomplete(e){this._requiredForIncomplete=e}get wasSkipped(){return this._wasSkipped}set wasSkipped(e){this._wasSkipped=e}get attemptProgressStatus(){return this._attemptProgressStatus}set attemptProgressStatus(e){this._attemptProgressStatus=e}get wasAutoCompleted(){return this._wasAutoCompleted}set wasAutoCompleted(e){this._wasAutoCompleted=e}get wasAutoSatisfied(){return this._wasAutoSatisfied}set wasAutoSatisfied(e){this._wasAutoSatisfied=e}get completedByMeasure(){return this._completedByMeasure}set completedByMeasure(e){this._completedByMeasure=e}get minProgressMeasure(){return this._minProgressMeasure}set minProgressMeasure(e){if(0>e||e>1)throw new _(this._cmi_element+".minProgressMeasure",y.TYPE_MISMATCH);this._minProgressMeasure=e}get progressWeight(){return this._progressWeight}set progressWeight(e){if(0>e)throw new _(this._cmi_element+".progressWeight",y.TYPE_MISMATCH);this._progressWeight=e}get attemptCompletionAmountStatus(){return this._attemptCompletionAmountStatus}set attemptCompletionAmountStatus(e){this._attemptCompletionAmountStatus=e}get primaryObjective(){return this._primaryObjective}set primaryObjective(e){this._primaryObjective=e,this._primaryObjective&&(this._primaryObjective.isPrimary=!0,null!==this._primaryObjective.minNormalizedMeasure&&(this._scaledPassingScore=this._primaryObjective.minNormalizedMeasure??this._scaledPassingScore),this._primaryObjective.updateFromActivity(this)),this.syncPrimaryObjectiveCollection()}get objectives(){return this._objectives.filter(e=>e.id!==this._primaryObjective?.id)}set objectives(objectives){this._objectives=[...objectives],this.syncPrimaryObjectiveCollection()}addObjective(e){this._objectives.find(t=>t.id===e.id)||this._objectives.push(e)}syncPrimaryObjectiveCollection(){if(!this._primaryObjective)return void(this._objectives=this._objectives.filter(e=>!e.isPrimary));const e=this._objectives.findIndex(e=>e.id===this._primaryObjective?.id);0>e?this._objectives=[this._primaryObjective,...this._objectives]:this._objectives[e]=this._primaryObjective}getObjectiveById(e){if(this._primaryObjective?.id===e)return{objective:this._primaryObjective,isPrimary:!0};const t=this._objectives.find(t=>t.id===e);return t?{objective:t,isPrimary:!1}:null}getAllObjectives(){const objectives=[];this._primaryObjective&&objectives.push(this._primaryObjective);const e=this._objectives.filter(e=>e!==this._primaryObjective&&e.id!==this._primaryObjective?.id);return objectives.concat(e)}updatePrimaryObjectiveFromActivity(){this._primaryObjective&&this._primaryObjective.updateFromActivity(this)}isObjectiveDirty(e){switch(e){case"satisfiedStatus":return this._objectiveSatisfiedStatusDirty;case"normalizedMeasure":return this._objectiveNormalizedMeasureDirty;case"measureStatus":return this._objectiveMeasureStatusDirty}}clearObjectiveDirty(e){switch(e){case"satisfiedStatus":this._objectiveSatisfiedStatusDirty=!1;break;case"normalizedMeasure":this._objectiveNormalizedMeasureDirty=!1;break;case"measureStatus":this._objectiveMeasureStatusDirty=!1}}clearAllObjectiveDirty(){this._objectiveSatisfiedStatusDirty=!1,this._objectiveNormalizedMeasureDirty=!1,this._objectiveMeasureStatusDirty=!1}setPrimaryObjectiveState(e,t,i,s,r,n){this._objectiveSatisfiedStatus!==e&&(this._objectiveSatisfiedStatus=e,this._objectiveSatisfiedStatusDirty=!0),this._objectiveSatisfiedStatusKnown=!0,this._objectiveMeasureStatus!==t&&(this._objectiveMeasureStatus=t,this._objectiveMeasureStatusDirty=!0),this._objectiveNormalizedMeasure!==i&&(this._objectiveNormalizedMeasure=i,this._objectiveNormalizedMeasureDirty=!0),this._progressMeasure=s,this._progressMeasureStatus=r,this._completionStatus=n,this._primaryObjective&&(this._primaryObjective.satisfiedStatus=e,this._primaryObjective.measureStatus=t,this._primaryObjective.normalizedMeasure=i,this._primaryObjective.progressMeasure=s,this._primaryObjective.progressMeasureStatus=r,this._primaryObjective.completionStatus=n)}getObjectiveStateSnapshot(){return{primary:this._primaryObjective?{id:this._primaryObjective.id,satisfiedStatus:this.objectiveSatisfiedStatus,measureStatus:this.objectiveMeasureStatus,normalizedMeasure:this.objectiveNormalizedMeasure,progressMeasure:this.progressMeasure??0,progressMeasureStatus:this.progressMeasureStatus,progressStatus:this._primaryObjective.progressStatus,completionStatus:this.completionStatus,satisfiedByMeasure:this._primaryObjective.satisfiedByMeasure,minNormalizedMeasure:this._primaryObjective.minNormalizedMeasure}:null,objectives:this._objectives.map(e=>({id:e.id,satisfiedStatus:e.satisfiedStatus,measureStatus:e.measureStatus,normalizedMeasure:e.normalizedMeasure,progressMeasure:e.progressMeasure,progressMeasureStatus:e.progressMeasureStatus,progressStatus:e.progressStatus,completionStatus:e.completionStatus,satisfiedByMeasure:e.satisfiedByMeasure,minNormalizedMeasure:e.minNormalizedMeasure}))}}applyObjectiveStateSnapshot(e){if(e.primary){const t=this.getObjectiveById(e.primary.id);if(t&&t.isPrimary){const i=e.primary;t.objective.satisfiedByMeasure=i.satisfiedByMeasure??t.objective.satisfiedByMeasure,t.objective.minNormalizedMeasure=void 0!==i.minNormalizedMeasure?i.minNormalizedMeasure:t.objective.minNormalizedMeasure,this.setPrimaryObjectiveState(i.satisfiedStatus,i.measureStatus,i.normalizedMeasure,i.progressMeasure,i.progressMeasureStatus,i.completionStatus)}}for(const t of e.objectives){const e=this.getObjectiveById(t.id);if(e&&!e.isPrimary){const i=e.objective;i.satisfiedStatus=t.satisfiedStatus,i.measureStatus=t.measureStatus,i.normalizedMeasure=t.normalizedMeasure,i.progressMeasure=t.progressMeasure,i.progressMeasureStatus=t.progressMeasureStatus,i.completionStatus=t.completionStatus,i.satisfiedByMeasure=t.satisfiedByMeasure??i.satisfiedByMeasure,i.minNormalizedMeasure=void 0!==t.minNormalizedMeasure?t.minNormalizedMeasure:i.minNormalizedMeasure}}}getAvailableChildren(){return 0===this._children.length?[]:null!==this._processedChildren?this._processedChildren:this._children}setProcessedChildren(e){this._processedChildren=e}resetProcessedChildren(){this._processedChildren=null}get isNewAttempt(){return this._isNewAttempt}set isNewAttempt(e){this._isNewAttempt=e}get launchData(){return this._launchData}set launchData(e){this._launchData=e}get credit(){return this._credit}set credit(credit){this._credit=credit}get maxTimeAllowed(){return this._maxTimeAllowed}set maxTimeAllowed(e){this._maxTimeAllowed=e}get completionThreshold(){return this._completionThreshold}set completionThreshold(e){this._completionThreshold=e}getSuspensionState(){return{id:this._id,title:this._title,isVisible:this._isVisible,isActive:this._isActive,isSuspended:this._isSuspended,isCompleted:this._isCompleted,completionStatus:this._completionStatus,successStatus:this._successStatus,attemptCount:this._attemptCount,attemptCompletionAmount:this._attemptCompletionAmount,attemptAbsoluteDuration:this._attemptAbsoluteDuration,attemptExperiencedDuration:this._attemptExperiencedDuration,activityAbsoluteDuration:this._activityAbsoluteDuration,activityExperiencedDuration:this._activityExperiencedDuration,attemptAbsoluteDurationValue:this._attemptAbsoluteDurationValue,attemptExperiencedDurationValue:this._attemptExperiencedDurationValue,activityAbsoluteDurationValue:this._activityAbsoluteDurationValue,activityExperiencedDurationValue:this._activityExperiencedDurationValue,activityStartTimestampUtc:this._activityStartTimestampUtc,attemptStartTimestampUtc:this._attemptStartTimestampUtc,objectiveSatisfiedStatus:this._objectiveSatisfiedStatus,objectiveSatisfiedStatusKnown:this._objectiveSatisfiedStatusKnown,objectiveMeasureStatus:this._objectiveMeasureStatus,objectiveNormalizedMeasure:this._objectiveNormalizedMeasure,scaledPassingScore:this._scaledPassingScore,progressMeasure:this._progressMeasure,progressMeasureStatus:this._progressMeasureStatus,location:this._location,attemptAbsoluteStartTime:this._attemptAbsoluteStartTime,activityAttemptActive:this._activityAttemptActive,isHiddenFromChoice:this._isHiddenFromChoice,isAvailable:this._isAvailable,rollupConsiderations:{...this._rollupConsiderations},wasSkipped:this._wasSkipped,attemptProgressStatus:this._attemptProgressStatus,wasAutoCompleted:this._wasAutoCompleted,wasAutoSatisfied:this._wasAutoSatisfied,completedByMeasure:this._completedByMeasure,minProgressMeasure:this._minProgressMeasure,progressWeight:this._progressWeight,attemptCompletionAmountStatus:this._attemptCompletionAmountStatus,processedChildren:this._processedChildren?this._processedChildren.map(e=>e.id):null,isNewAttempt:this._isNewAttempt,selectionCountStatus:this._sequencingControls.selectionCountStatus,reorderChildren:this._sequencingControls.reorderChildren,primaryObjective:this._primaryObjective?{id:this._primaryObjective.id,satisfiedStatus:this._primaryObjective.satisfiedStatus,measureStatus:this._primaryObjective.measureStatus,normalizedMeasure:this._primaryObjective.normalizedMeasure,progressMeasure:this._primaryObjective.progressMeasure,progressMeasureStatus:this._primaryObjective.progressMeasureStatus,completionStatus:this._primaryObjective.completionStatus,satisfiedByMeasure:this._primaryObjective.satisfiedByMeasure,minNormalizedMeasure:this._primaryObjective.minNormalizedMeasure,progressStatus:this._primaryObjective.progressStatus,mapInfo:this._primaryObjective.mapInfo}:null,objectives:this._objectives.map(e=>({id:e.id,satisfiedStatus:e.satisfiedStatus,measureStatus:e.measureStatus,normalizedMeasure:e.normalizedMeasure,progressMeasure:e.progressMeasure,progressMeasureStatus:e.progressMeasureStatus,completionStatus:e.completionStatus,satisfiedByMeasure:e.satisfiedByMeasure,minNormalizedMeasure:e.minNormalizedMeasure,progressStatus:e.progressStatus,mapInfo:e.mapInfo})),children:this._children.map(e=>e.getSuspensionState())}}restoreSuspensionState(e){if(e){if(this._isVisible=e.isVisible??this._isVisible,this._isActive=e.isActive??this._isActive,this._isSuspended=e.isSuspended??this._isSuspended,this._isCompleted=e.isCompleted??this._isCompleted,this._completionStatus=e.completionStatus??this._completionStatus,this._successStatus=e.successStatus??this._successStatus,this._attemptCount=e.attemptCount??this._attemptCount,this._attemptCompletionAmount=e.attemptCompletionAmount??this._attemptCompletionAmount,this._attemptAbsoluteDuration=e.attemptAbsoluteDuration??this._attemptAbsoluteDuration,this._attemptExperiencedDuration=e.attemptExperiencedDuration??this._attemptExperiencedDuration,this._activityAbsoluteDuration=e.activityAbsoluteDuration??this._activityAbsoluteDuration,this._activityExperiencedDuration=e.activityExperiencedDuration??this._activityExperiencedDuration,this._attemptAbsoluteDurationValue=e.attemptAbsoluteDurationValue??this._attemptAbsoluteDurationValue,this._attemptExperiencedDurationValue=e.attemptExperiencedDurationValue??this._attemptExperiencedDurationValue,this._activityAbsoluteDurationValue=e.activityAbsoluteDurationValue??this._activityAbsoluteDurationValue,this._activityExperiencedDurationValue=e.activityExperiencedDurationValue??this._activityExperiencedDurationValue,this._activityStartTimestampUtc=e.activityStartTimestampUtc??this._activityStartTimestampUtc,this._attemptStartTimestampUtc=e.attemptStartTimestampUtc??this._attemptStartTimestampUtc,this._objectiveSatisfiedStatus=e.objectiveSatisfiedStatus??this._objectiveSatisfiedStatus,this._objectiveSatisfiedStatusKnown=e.objectiveSatisfiedStatusKnown??this._objectiveSatisfiedStatusKnown,this._objectiveMeasureStatus=e.objectiveMeasureStatus??this._objectiveMeasureStatus,this._objectiveNormalizedMeasure=e.objectiveNormalizedMeasure??this._objectiveNormalizedMeasure,this._scaledPassingScore=e.scaledPassingScore??this._scaledPassingScore,this._progressMeasure=e.progressMeasure??this._progressMeasure,this._progressMeasureStatus=e.progressMeasureStatus??this._progressMeasureStatus,this._location=e.location??this._location,this._attemptAbsoluteStartTime=e.attemptAbsoluteStartTime??this._attemptAbsoluteStartTime,this._activityAttemptActive=e.activityAttemptActive??this._activityAttemptActive,this._isHiddenFromChoice=e.isHiddenFromChoice??this._isHiddenFromChoice,this._isAvailable=e.isAvailable??this._isAvailable,e.rollupConsiderations&&(this._rollupConsiderations={...e.rollupConsiderations}),this._wasSkipped=e.wasSkipped??this._wasSkipped,this._attemptProgressStatus=e.attemptProgressStatus??this._attemptProgressStatus,this._wasAutoCompleted=e.wasAutoCompleted??this._wasAutoCompleted,this._wasAutoSatisfied=e.wasAutoSatisfied??this._wasAutoSatisfied,this._completedByMeasure=e.completedByMeasure??this._completedByMeasure,this._minProgressMeasure=e.minProgressMeasure??this._minProgressMeasure,this._progressWeight=e.progressWeight??this._progressWeight,this._attemptCompletionAmountStatus=e.attemptCompletionAmountStatus??this._attemptCompletionAmountStatus,this._isNewAttempt=e.isNewAttempt??this._isNewAttempt,void 0!==e.selectionCountStatus&&(this._sequencingControls.selectionCountStatus=e.selectionCountStatus),void 0!==e.reorderChildren&&(this._sequencingControls.reorderChildren=e.reorderChildren),e.processedChildren){const t=new Map(this._children.map(e=>[e.id,e]));this._processedChildren=e.processedChildren.map(id=>t.get(id)).filter(e=>void 0!==e)}else this._processedChildren=null;if(e.primaryObjective&&this._primaryObjective&&(this._primaryObjective.satisfiedStatus=e.primaryObjective.satisfiedStatus??this._primaryObjective.satisfiedStatus,this._primaryObjective.measureStatus=e.primaryObjective.measureStatus??this._primaryObjective.measureStatus,this._primaryObjective.normalizedMeasure=e.primaryObjective.normalizedMeasure??this._primaryObjective.normalizedMeasure,this._primaryObjective.progressMeasure=e.primaryObjective.progressMeasure??this._primaryObjective.progressMeasure,this._primaryObjective.progressMeasureStatus=e.primaryObjective.progressMeasureStatus??this._primaryObjective.progressMeasureStatus,this._primaryObjective.completionStatus=e.primaryObjective.completionStatus??this._primaryObjective.completionStatus,this._primaryObjective.progressStatus=e.primaryObjective.progressStatus??this._primaryObjective.progressStatus),e.objectives)for(const t of e.objectives){const e=this._objectives.find(e=>e.id===t.id);e&&(e.satisfiedStatus=t.satisfiedStatus??e.satisfiedStatus,e.measureStatus=t.measureStatus??e.measureStatus,e.normalizedMeasure=t.normalizedMeasure??e.normalizedMeasure,e.progressMeasure=t.progressMeasure??e.progressMeasure,e.progressMeasureStatus=t.progressMeasureStatus??e.progressMeasureStatus,e.completionStatus=t.completionStatus??e.completionStatus,e.progressStatus=t.progressStatus??e.progressStatus)}if(e.children&&Array.isArray(e.children))for(let t=0;e.children.length>t&&this._children.length>t;t++){const i=e.children[t],s=this._children.find(e=>e.id===i.id);s&&s.restoreSuspensionState(i)}}}toJSON(){this.jsonString=!0;const result={id:this._id,title:this._title,isVisible:this._isVisible,isActive:this._isActive,isSuspended:this._isSuspended,isCompleted:this._isCompleted,completionStatus:this._completionStatus,successStatus:this._successStatus,attemptCount:this._attemptCount,attemptCompletionAmount:this._attemptCompletionAmount,attemptAbsoluteDuration:this._attemptAbsoluteDuration,attemptExperiencedDuration:this._attemptExperiencedDuration,activityAbsoluteDuration:this._activityAbsoluteDuration,activityExperiencedDuration:this._activityExperiencedDuration,objectiveSatisfiedStatus:this._objectiveSatisfiedStatus,objectiveSatisfiedStatusKnown:this._objectiveSatisfiedStatusKnown,objectiveMeasureStatus:this._objectiveMeasureStatus,objectiveNormalizedMeasure:this._objectiveNormalizedMeasure,rollupConsiderations:{...this._rollupConsiderations},wasSkipped:this._wasSkipped,completedByMeasure:this._completedByMeasure,minProgressMeasure:this._minProgressMeasure,progressWeight:this._progressWeight,attemptCompletionAmountStatus:this._attemptCompletionAmountStatus,hideLmsUi:[...this._hideLmsUi],auxiliaryResources:this._auxiliaryResources.map(e=>({...e})),children:this._children.map(e=>e.toJSON())};return this.jsonString=!1,result}get auxiliaryResources(){return this._auxiliaryResources.map(e=>({...e}))}set auxiliaryResources(e){const t=[],i=new Set;for(const s of e||[]){if(!s)continue;const e="string"==typeof s.resourceId?s.resourceId.trim():"",r="string"==typeof s.purpose?s.purpose.trim():"";e&&!i.has(e)&&(i.add(e),t.push({resourceId:e,purpose:r}))}this._auxiliaryResources=t}addAuxiliaryResource(e){this.auxiliaryResources=[...this._auxiliaryResources,e]}captureRollupStatus(){return{measureStatus:this._objectiveMeasureStatus,normalizedMeasure:this._objectiveNormalizedMeasure,objectiveProgressStatus:null!=this._objectiveSatisfiedStatus,objectiveSatisfiedStatus:this._objectiveSatisfiedStatus,attemptProgressStatus:this._completionStatus!==j,attemptCompletionStatus:this._completionStatus===O}}static compareRollupStatus(e,t){return e.measureStatus===t.measureStatus&&1e-4>Math.abs(e.normalizedMeasure-t.normalizedMeasure)&&e.objectiveProgressStatus===t.objectiveProgressStatus&&e.objectiveSatisfiedStatus===t.objectiveSatisfiedStatus&&e.attemptProgressStatus===t.attemptProgressStatus&&e.attemptCompletionStatus===t.attemptCompletionStatus}get hideLmsUi(){return[...this._hideLmsUi]}set hideLmsUi(e){const t=new Set(Z),i=new Set,s=[];for(const r of e)t.has(r)&&!i.has(r)&&(i.add(r),s.push(r));this._hideLmsUi=s}}class $e{checkChildForRollupSubprocess(e,t,i){if(!1===e.sequencingControls.tracked)return!1;let s=!1;if("measure"===t||"objective"===t){if(!e.sequencingControls.rollupObjectiveSatisfied)return!1;s=!0;const t=e.requiredForSatisfied,r=e.requiredForNotSatisfied;"satisfied"===i&&"ifNotSuspended"===t||"notSatisfied"===i&&"ifNotSuspended"===r?(!e.attemptProgressStatus||e.attemptCount>0&&e.isSuspended)&&(s=!1):"satisfied"===i&&"ifAttempted"===t||"notSatisfied"===i&&"ifAttempted"===r?e.attemptProgressStatus&&0!==e.attemptCount||(s=!1):("satisfied"===i&&"ifNotSkipped"===t||"notSatisfied"===i&&"ifNotSkipped"===r)&&e.wasSkipped&&(s=!1)}if("progress"===t){if(!e.sequencingControls.rollupProgressCompletion)return!1;s=!0;const t=e.requiredForCompleted,r=e.requiredForIncomplete;"completed"===i&&"ifNotSuspended"===t||"incomplete"===i&&"ifNotSuspended"===r?(!e.attemptProgressStatus||e.attemptCount>0&&e.isSuspended)&&(s=!1):"completed"===i&&"ifAttempted"===t||"incomplete"===i&&"ifAttempted"===r?e.attemptProgressStatus&&0!==e.attemptCount||(s=!1):("completed"===i&&"ifNotSkipped"===t||"incomplete"===i&&"ifNotSkipped"===r)&&e.wasSkipped&&(s=!1)}return!(s&&!e.isAvailable)&&s}filterChildrenForRequirement(e,t,mode,i){return e.filter(e=>this.shouldIncludeChildForRollup(e,t,mode,i))}shouldIncludeChildForRollup(e,t,mode,i){return!(!this.checkChildForRollupSubprocess(e,t,mode)||"objective"===t&&!i.measureSatisfactionIfActive&&(e.activityAttemptActive||e.isActive))}isChildSatisfiedForRollup(e){return!0===e.objectiveSatisfiedStatus||!1!==e.objectiveSatisfiedStatus&&e.successStatus===M}isChildCompletedForRollup(e){return!("completed"!==e.completionStatus&&!e.isCompleted)}getTrackableChildren(e){return e.children.filter(e=>!1!==e.sequencingControls.tracked)}}class Ge{childFilter;constructor(e){this.childFilter=e}evaluateRollupRule(e,t){const i=e.getAvailableChildren();let s=0,r=0;for(const e of i){let i=!1;switch(t.action){case ze.SATISFIED:i=this.childFilter.checkChildForRollupSubprocess(e,"objective","satisfied");break;case ze.NOT_SATISFIED:i=this.childFilter.checkChildForRollupSubprocess(e,"objective","notSatisfied");break;case ze.COMPLETED:i=this.childFilter.checkChildForRollupSubprocess(e,"progress","completed");break;case ze.INCOMPLETE:i=this.childFilter.checkChildForRollupSubprocess(e,"progress","incomplete")}i&&(s++,this.evaluateRollupConditionsSubprocess(e,t)&&r++)}return t.consideration===Fe.ALL?s>0&&r===s:null!==t.minimumCount?r>=t.minimumCount:null!==t.minimumPercent?(s>0?r/s:0)>=t.minimumPercent:s>0&&r===s}evaluateRollupConditionsSubprocess(e,t){if(0===t.conditions.length)return!0;switch(t.consideration){case Fe.ALL:return t.conditions.every(t=>t.evaluate(e));case Fe.ANY:return t.conditions.some(t=>t.evaluate(e));case Fe.NONE:return!t.conditions.some(t=>t.evaluate(e));case Fe.AT_LEAST_COUNT:case Fe.AT_LEAST_PERCENT:return t.conditions.every(t=>t.evaluate(e));default:return!1}}evaluateRulesForAction(e,t,i){const s=t.filter(e=>e.action===i);if(0===s.length)return null;for(const t of s)if(this.evaluateRollupRule(e,t))return!0;return!1}}class Ye{childFilter;eventCallback;constructor(e,t){this.childFilter=e,this.eventCallback=t||null}measureRollupProcess(e){if(!e.sequencingControls.rollupObjectiveSatisfied)return[];const t=e.getAvailableChildren();if(0===t.length)return[];const i=e.rollupConsiderations,s=t.filter(e=>!(!this.childFilter.checkChildForRollupSubprocess(e,"measure")||!e.objectiveMeasureStatus||null===e.objectiveNormalizedMeasure||!i.measureSatisfactionIfActive&&(e.activityAttemptActive||e.isActive)));if(0===s.length)return e.objectiveMeasureStatus=!1,[];const r=this.calculateComplexWeightedMeasure(e,s,{enableThresholdBias:!1});return e.objectiveNormalizedMeasure=r,e.objectiveMeasureStatus=!0,this.identifyActivityClusters(s)}completionMeasureRollupProcess(e){const t=e.getAvailableChildren();if(0===t.length)return;const i=t.filter(e=>e.attemptCompletionAmountStatus);if(0===i.length)return void(e.attemptCompletionAmountStatus=!1);let s=0,r=0;for(const e of i)s+=e.attemptCompletionAmount*e.progressWeight,r+=e.progressWeight;r>0&&(e.attemptCompletionAmount=s/r,e.attemptCompletionAmountStatus=!0)}calculateComplexWeightedMeasure(e,t,i){let s=0,r=0;const n=[],o=i?.enableThresholdBias??!0;for(const e of t)if(this.childFilter.checkChildForRollupSubprocess(e,"measure")&&e.objectiveMeasureStatus&&null!==e.objectiveNormalizedMeasure){const t=this.calculateAdjustedWeight(e,e.sequencingControls.objectiveMeasureWeight,o);s+=e.objectiveNormalizedMeasure*t,r+=t,n.push({childId:e.id,measure:e.objectiveNormalizedMeasure,weight:t})}return this.eventCallback?.("complex_weighting_calculated",{activityId:e.id,weightingDetails:n,totalWeight:r,totalWeightedMeasure:s,result:r>0?s/r:0}),r>0?s/r:0}calculateAdjustedWeight(e,t,i=!0){let s=t;return"completed"!==e.completionStatus&&(s*=.8),e.attemptCount>1&&(s*=Math.max(.5,1-.1*(e.attemptCount-1))),e.hasAttemptLimitExceeded()&&(s*=.6),i&&e.objectiveMeasureStatus&&(s*=(e.scaledPassingScore??.7)>e.objectiveNormalizedMeasure?.95:1.05),Math.max(0,s)}identifyActivityClusters(e){const t=[];for(const i of e)i.children.length>0&&i.sequencingControls.flow&&t.push(i);return t}}class We{childFilter;ruleEvaluator;eventCallback;constructor(e,t,i){this.childFilter=e,this.ruleEvaluator=t,this.eventCallback=i||null}objectiveRollupProcess(e){const t=this.objectiveRollupUsingRules(e,e.rollupRules.rules);if(null!==t)return e.objectiveSatisfiedStatus=t,void this.syncPrimaryObjectiveFromActivity(e);const i=this.objectiveRollupUsingMeasure(e);if(null!==i)return e.objectiveSatisfiedStatus=i,void this.syncPrimaryObjectiveFromActivity(e);e.objectiveSatisfiedStatus=this.objectiveRollupUsingDefault(e),this.syncPrimaryObjectiveFromActivity(e)}objectiveRollupUsingRules(e,t){const i=t.filter(e=>e.action===ze.SATISFIED),s=t.filter(e=>e.action===ze.NOT_SATISFIED);for(const t of i)if(this.ruleEvaluator.evaluateRollupRule(e,t))return!0;for(const t of s)if(this.ruleEvaluator.evaluateRollupRule(e,t))return!1;return null}objectiveRollupUsingMeasure(e){return e.objectiveMeasureStatus&&null!==e.scaledPassingScore?e.objectiveNormalizedMeasure>=e.scaledPassingScore:null}objectiveRollupUsingDefault(e){const t=e.getAvailableChildren();if(0===t.length)return!1;const i=e.rollupConsiderations,s=t.filter(e=>!(!this.childFilter.checkChildForRollupSubprocess(e,"objective","satisfied")||!this.childFilter.checkChildForRollupSubprocess(e,"objective","notSatisfied")||!i.measureSatisfactionIfActive&&(e.activityAttemptActive||e.isActive)));return 0!==s.length&&!s.some(e=>!this.childFilter.isChildSatisfiedForRollup(e))&&s.every(e=>this.childFilter.isChildSatisfiedForRollup(e))}syncPrimaryObjectiveFromActivity(e){e.primaryObjective&&(e.primaryObjective.satisfiedStatus=e.objectiveSatisfiedStatus,e.primaryObjective.satisfiedStatusKnown=e.objectiveSatisfiedStatusKnown,e.primaryObjective.measureStatus=e.objectiveMeasureStatus,e.primaryObjective.normalizedMeasure=e.objectiveNormalizedMeasure,e.primaryObjective.progressMeasure=e.progressMeasure,e.primaryObjective.progressMeasureStatus=e.progressMeasureStatus,e.primaryObjective.completionStatus=e.completionStatus)}}class Ke{childFilter;ruleEvaluator;objectiveProcessor;eventCallback;constructor(e,t,i,s){this.childFilter=e,this.ruleEvaluator=t,this.objectiveProcessor=i,this.eventCallback=s||null}activityProgressRollupProcess(e){if(this.activityProgressRollupUsingMeasure(e))return;const t=e.rollupRules,i=t.rules.filter(e=>e.action===ze.COMPLETED),s=t.rules.filter(e=>e.action===ze.INCOMPLETE);for(const t of i)if(this.ruleEvaluator.evaluateRollupRule(e,t))return e.completionStatus=O,void this.objectiveProcessor.syncPrimaryObjectiveFromActivity(e);for(const t of s)if(this.ruleEvaluator.evaluateRollupRule(e,t))return e.completionStatus=T,void this.objectiveProcessor.syncPrimaryObjectiveFromActivity(e);const r=e.getAvailableChildren().filter(e=>this.childFilter.checkChildForRollupSubprocess(e,"progress","completed")&&this.childFilter.checkChildForRollupSubprocess(e,"progress","incomplete"));return 0===r.length||r.some(e=>!this.childFilter.isChildCompletedForRollup(e))?(e.completionStatus=T,void this.objectiveProcessor.syncPrimaryObjectiveFromActivity(e)):(e.completionStatus=O,void this.objectiveProcessor.syncPrimaryObjectiveFromActivity(e))}activityProgressRollupUsingMeasure(e){return!!e.completedByMeasure&&(e.attemptCompletionAmountStatus?(e.completionStatus=e.minProgressMeasure>e.attemptCompletionAmount?T:O,this.objectiveProcessor.syncPrimaryObjectiveFromActivity(e),!0):(e.completionStatus=j,this.objectiveProcessor.syncPrimaryObjectiveFromActivity(e),!0))}}class Je{eventCallback;constructor(e){this.eventCallback=e||null}durationRollupProcess(e){if(0===e.children.length)return;const s=e.getAvailableChildren();if(0===s.length)return;let r=null,n=null,o=null,a=null,c=0,l=0;for(const t of s){t.activityStartTimestampUtc&&(r&&t.activityStartTimestampUtc>=r||(r=t.activityStartTimestampUtc)),t.activityEndedDate&&(o&&o>=t.activityEndedDate||(o=t.activityEndedDate));const s="PT0H0M0S"!==t.activityExperiencedDurationValue?t.activityExperiencedDurationValue:t.activityExperiencedDuration;if(s&&"PT0H0M0S"!==s&&(c+=i(s,k)),!e.attemptStartTimestampUtc||t.attemptStartTimestampUtc&&t.attemptStartTimestampUtc>=e.attemptStartTimestampUtc){t.attemptStartTimestampUtc&&(n&&t.attemptStartTimestampUtc>=n||(n=t.attemptStartTimestampUtc)),t.activityEndedDate&&(a&&a>=t.activityEndedDate||(a=t.activityEndedDate));const e="PT0H0M0S"!==t.attemptExperiencedDurationValue?t.attemptExperiencedDurationValue:t.attemptExperiencedDuration;e&&"PT0H0M0S"!==e&&(l+=i(e,k))}}if(null!==r){if(e.activityStartTimestampUtc=r,!e.attemptStartTimestampUtc&&n&&(e.attemptStartTimestampUtc=n),e.activityEndedDate=o,o&&e.activityStartTimestampUtc){const i=new Date(e.activityStartTimestampUtc),s=o.getTime()-i.getTime();e.activityAbsoluteDurationValue=t(Math.max(0,s/1e3))}if(a&&e.attemptStartTimestampUtc){const i=new Date(e.attemptStartTimestampUtc),s=a.getTime()-i.getTime();e.attemptAbsoluteDurationValue=t(Math.max(0,s/1e3))}e.activityExperiencedDurationValue=t(c),e.attemptExperiencedDurationValue=t(l),this.eventCallback?.("duration_rollup_completed",{activityId:e.id,activityAbsoluteDuration:e.activityAbsoluteDurationValue,attemptAbsoluteDuration:e.attemptAbsoluteDurationValue,activityExperiencedDuration:e.activityExperiencedDurationValue,attemptExperiencedDuration:e.attemptExperiencedDurationValue,childCount:s.length})}}}class Xe{measureProcessor;objectiveProcessor;progressProcessor;eventCallback;processingClusters=new Set;constructor(e,t,i,s){this.measureProcessor=e,this.objectiveProcessor=t,this.progressProcessor=i,this.eventCallback=s||null}processCrossClusterDependencies(e,t,i=0){if(10>i)if(this.processingClusters.has(e.id))this.eventCallback?.("cross_cluster_skip_reentrant",{activityId:e.id});else try{this.processingClusters.add(e.id),this.eventCallback?.("cross_cluster_processing_started",{activityId:e.id,clusterCount:t.length,depth:i});const s=new Map;for(const e of t)this.analyzeCrossClusterDependencies(e,s);const r=this.resolveDependencyOrder(s);for(const e of r){const s=t.find(t=>t.id===e);s&&this.processClusterRollup(s,i)}this.eventCallback?.("cross_cluster_processing_completed",{activityId:e.id,processedClusters:r.length,dependencyMap:Array.from(s.entries())})}catch(t){this.eventCallback?.("cross_cluster_processing_error",{activityId:e.id,error:t instanceof Error?t.message:t+""})}finally{this.processingClusters.delete(e.id)}else this.eventCallback?.("cross_cluster_max_depth_reached",{activityId:e.id,depth:i,maxDepth:10})}identifyActivityClusters(e){const t=[];for(const i of e)i.children.length>0&&i.sequencingControls.flow&&t.push(i);return t}analyzeCrossClusterDependencies(e,t){t.set(e.id,[])}resolveDependencyOrder(e){const t=[],i=new Set,s=id=>{if(t.includes(id))return;if(i.has(id))return void this.eventCallback?.("circular_dependency_detected",{activityId:id});i.add(id);const r=e.get(id)||[];for(const e of r)s(e);i.delete(id),t.push(id)};for(const id of Array.from(e.keys()))s(id);return t}processClusterRollup(e,t=0){const i=this.measureProcessor.measureRollupProcess(e);e.sequencingControls.rollupObjectiveSatisfied&&this.objectiveProcessor.objectiveRollupProcess(e),e.sequencingControls.rollupProgressCompletion&&this.progressProcessor.activityProgressRollupProcess(e),i.length>1&&this.processCrossClusterDependencies(e,i,t+1)}}class Qe{eventCallback;constructor(e){this.eventCallback=e||null}processGlobalObjectiveMapping(e,t){try{this.eventCallback?.("global_objective_processing_started",{activityId:e.id,globalObjectiveCount:t.size});const i=[];this.collectActivitiesRecursive(e,i);for(const e of i)this.syncGlobalObjectivesWritePhase(e,t);for(const e of i)this.syncGlobalObjectivesReadPhase(e,t);this.eventCallback?.("global_objective_processing_completed",{activityId:e.id,processedObjectives:t.size})}catch(t){this.eventCallback?.("global_objective_processing_error",{activityId:e.id,error:t instanceof Error?t.message:t+""})}}collectActivitiesRecursive(e,result){result.push(e);for(const t of e.children)this.collectActivitiesRecursive(t,result)}syncGlobalObjectivesWritePhase(e,t){const objectives=e.getAllObjectives();for(const i of objectives){const s=i.mapInfo.length>0?i.mapInfo:[this.createDefaultMapInfo(i)];for(const r of s){const s=this.ensureGlobalObjectiveEntry(t,r.targetObjectiveID||i.id,i);r.writeSatisfiedStatus&&i.measureStatus&&i.isDirty("satisfiedStatus")&&(s.satisfiedStatus=i.satisfiedStatus,s.satisfiedStatusKnown=!0,i.clearDirty("satisfiedStatus")),r.writeNormalizedMeasure&&i.measureStatus&&i.isDirty("normalizedMeasure")&&(s.normalizedMeasure=i.normalizedMeasure,s.normalizedMeasureKnown=!0,i.clearDirty("normalizedMeasure"),s.satisfiedByMeasure||i.satisfiedByMeasure)&&(s.satisfiedStatus=i.normalizedMeasure>=(i.minNormalizedMeasure??e.scaledPassingScore??.7),s.satisfiedStatusKnown=!0,i.clearDirty("satisfiedStatus")),r.writeCompletionStatus&&i.completionStatus!==j&&i.isDirty("completionStatus")&&(s.completionStatus=i.completionStatus,s.completionStatusKnown=!0,i.clearDirty("completionStatus")),r.writeProgressMeasure&&i.progressMeasureStatus&&i.isDirty("progressMeasure")&&(s.progressMeasure=i.progressMeasure,s.progressMeasureKnown=!0,i.clearDirty("progressMeasure")),r.updateAttemptData&&this.updateActivityAttemptData(e,s,i)}}}syncGlobalObjectivesReadPhase(e,t){const objectives=e.getAllObjectives();for(const i of objectives){const s=i.mapInfo.length>0?i.mapInfo:[this.createDefaultMapInfo(i)];for(const r of s){const s=t.get(r.targetObjectiveID||i.id);if(!s)continue;const n=i.isPrimary;r.readSatisfiedStatus&&s.satisfiedStatusKnown&&(i.satisfiedStatus=s.satisfiedStatus,i.measureStatus=!0),r.readNormalizedMeasure&&s.normalizedMeasureKnown&&(i.normalizedMeasure=s.normalizedMeasure,i.measureStatus=!0,s.satisfiedByMeasure||i.satisfiedByMeasure)&&(i.satisfiedStatus=s.normalizedMeasure>=(i.minNormalizedMeasure??e.scaledPassingScore??.7)),r.readProgressMeasure&&s.progressMeasureKnown&&(i.progressMeasure=s.progressMeasure,i.progressMeasureStatus=!0),r.readCompletionStatus&&s.completionStatusKnown&&(i.completionStatus=s.completionStatus),n&&i.applyToActivity(e),this.eventCallback?.("objective_synchronized",{activityId:e.id,objectiveId:i.id,globalState:s,synchronizationTime:(new Date).toISOString()})}}}synchronizeGlobalObjectives(e,t){const objectives=e.getAllObjectives();for(const i of objectives){const s=i.mapInfo.length>0?i.mapInfo:[this.createDefaultMapInfo(i)];for(const r of s){const s=this.ensureGlobalObjectiveEntry(t,r.targetObjectiveID||i.id,i);this.syncObjectiveState(e,i,r,s)}}}syncObjectiveState(e,t,i,s){try{const r=this.getLocalObjectiveState(e,t,t.isPrimary);i.readSatisfiedStatus&&s.satisfiedStatusKnown&&(t.satisfiedStatus=s.satisfiedStatus,t.measureStatus=!0),i.readNormalizedMeasure&&s.normalizedMeasureKnown&&(t.normalizedMeasure=s.normalizedMeasure,t.measureStatus=!0,s.satisfiedByMeasure||t.satisfiedByMeasure)&&(t.satisfiedStatus=s.normalizedMeasure>=(t.minNormalizedMeasure??e.scaledPassingScore??.7)),i.readProgressMeasure&&s.progressMeasureKnown&&(t.progressMeasure=s.progressMeasure,t.progressMeasureStatus=!0),i.readCompletionStatus&&s.completionStatusKnown&&(t.completionStatus=s.completionStatus),t.isPrimary&&t.applyToActivity(e),i.writeSatisfiedStatus&&t.measureStatus&&(s.satisfiedStatus=t.satisfiedStatus,s.satisfiedStatusKnown=!0),i.writeNormalizedMeasure&&t.measureStatus&&(s.normalizedMeasure=t.normalizedMeasure,s.normalizedMeasureKnown=!0,s.satisfiedByMeasure||t.satisfiedByMeasure)&&(s.satisfiedStatus=t.normalizedMeasure>=(t.minNormalizedMeasure??e.scaledPassingScore??.7),s.satisfiedStatusKnown=!0),i.writeCompletionStatus&&t.completionStatus!==j&&(s.completionStatus=t.completionStatus,s.completionStatusKnown=!0),i.writeProgressMeasure&&t.progressMeasureStatus&&(s.progressMeasure=t.progressMeasure,s.progressMeasureKnown=!0),i.updateAttemptData&&this.updateActivityAttemptData(e,s,t),this.eventCallback?.("objective_synchronized",{activityId:e.id,objectiveId:t.id,localState:r,globalState:s,synchronizationTime:(new Date).toISOString()})}catch(i){this.eventCallback?.("objective_sync_error",{activityId:e.id,objectiveId:t.id,error:i instanceof Error?i.message:i+"",timestamp:(new Date).toISOString()})}}ensureGlobalObjectiveEntry(e,t,i){return e.has(t)||e.set(t,{id:t,satisfiedStatus:i.satisfiedStatus,satisfiedStatusKnown:i.satisfiedStatusKnown,normalizedMeasure:i.normalizedMeasure,normalizedMeasureKnown:i.measureStatus,progressMeasure:i.progressMeasure,progressMeasureKnown:i.progressMeasureStatus,completionStatus:i.completionStatus,completionStatusKnown:i.completionStatus!==j,satisfiedByMeasure:i.satisfiedByMeasure,minNormalizedMeasure:i.minNormalizedMeasure}),e.get(t)}createDefaultMapInfo(e){return{targetObjectiveID:e.id,readSatisfiedStatus:!1,writeSatisfiedStatus:!0,readNormalizedMeasure:!1,writeNormalizedMeasure:!0,readCompletionStatus:!1,writeCompletionStatus:!0,readProgressMeasure:!1,writeProgressMeasure:!0,updateAttemptData:e.isPrimary}}getLocalObjectiveState(e,t,i){return i?{id:t.id,satisfiedStatus:e.objectiveSatisfiedStatus,measureStatus:e.objectiveMeasureStatus,normalizedMeasure:e.objectiveNormalizedMeasure,progressMeasure:e.progressMeasure,progressMeasureStatus:e.progressMeasureStatus,completionStatus:e.completionStatus,scaledPassingScore:e.scaledPassingScore}:{id:t.id,satisfiedStatus:t.satisfiedStatus,measureStatus:t.measureStatus,normalizedMeasure:t.normalizedMeasure,progressMeasure:t.progressMeasure,progressMeasureStatus:t.progressMeasureStatus,completionStatus:t.completionStatus,scaledPassingScore:t.minNormalizedMeasure}}updateActivityAttemptData(e,t,i){try{if(!i.isPrimary&&!t.updateAttemptData)return;const s=e.rollupRules.rules.some(e=>"completed"===e.action||"incomplete"===e.action);t.satisfiedStatusKnown&&t.satisfiedStatus&&(s||e.completionStatus!==j&&e.completionStatus!==T||(e.completionStatus=O),"unknown"===e.successStatus&&(e.successStatus="passed")),t.attemptCount&&t.attemptCount>e.attemptCount&&(e.attemptCount=t.attemptCount),t.progressMeasureKnown&&void 0!==t.progressMeasure&&(e.attemptCompletionAmount=t.progressMeasure),t.attemptAbsoluteDuration&&(e.attemptAbsoluteDuration=t.attemptAbsoluteDuration),t.attemptExperiencedDuration&&(e.attemptExperiencedDuration=t.attemptExperiencedDuration),t.activityAbsoluteDuration&&(e.activityAbsoluteDuration=t.activityAbsoluteDuration),t.activityExperiencedDuration&&(e.activityExperiencedDuration=t.activityExperiencedDuration),void 0!==t.location&&(e.location=t.location),void 0!==t.suspendData&&(e.isSuspended=t.suspendData.length>0)}catch(t){this.eventCallback?.("attempt_data_update_error",{activityId:e.id,error:t instanceof Error?t.message:t+"",timestamp:(new Date).toISOString()})}}}class Ze{rollupStateLog=[];childFilter;eventCallback;constructor(e,t){this.childFilter=e,this.eventCallback=t||null}validateRollupStateConsistency(e){try{this.eventCallback?.("rollup_validation_started",{activityId:e.id,timestamp:(new Date).toISOString()});const t=[];return this.validateActivityRollupState(e,t),t.length>0?(this.eventCallback?.("rollup_state_inconsistencies",{activityId:e.id,inconsistencies:t,count:t.length}),!1):(this.eventCallback?.("rollup_validation_completed",{activityId:e.id,result:"consistent"}),!0)}catch(t){return this.eventCallback?.("rollup_validation_error",{activityId:e.id,error:t instanceof Error?t.message:t+""}),!1}}validateActivityRollupState(e,t){const i=e.id;e.objectiveMeasureStatus&&null===e.objectiveNormalizedMeasure&&t.push(`Activity ${i}: measure status true but normalized measure is null`),e.objectiveMeasureStatus&&null!==e.scaledPassingScore&&"unknown"!==e.successStatus&&e.objectiveSatisfiedStatus!==e.objectiveNormalizedMeasure>=e.scaledPassingScore&&t.push(`Activity ${i}: satisfaction status inconsistent with measure`);const s=e.sequencingControls,r=e.getAvailableChildren();if(r.length>0&&s.rollupObjectiveSatisfied){const s=r.filter(e=>this.childFilter.checkChildForRollupSubprocess(e,"objective","satisfied")&&this.childFilter.isChildSatisfiedForRollup(e)),n=r.filter(e=>this.childFilter.checkChildForRollupSubprocess(e,"objective","notSatisfied")&&!this.childFilter.isChildSatisfiedForRollup(e));s.length>0&&0===n.length&&!1===e.objectiveSatisfiedStatus&&0===e.rollupRules.rules.length&&t.push(`Activity ${i}: all children satisfied but parent is not satisfied (no rollup rules to override)`)}if(r.length>0&&s.rollupProgressCompletion){const s=r.filter(e=>this.childFilter.checkChildForRollupSubprocess(e,"progress","completed")&&this.childFilter.isChildCompletedForRollup(e)),n=r.filter(e=>this.childFilter.checkChildForRollupSubprocess(e,"progress","incomplete")&&!this.childFilter.isChildCompletedForRollup(e));s.length>0&&0===n.length&&"completed"!==e.completionStatus&&0===e.rollupRules.rules.length&&t.push(`Activity ${i}: all children completed but parent is incomplete (no rollup rules to override)`)}for(const e of r)this.validateActivityRollupState(e,t);this.rollupStateLog.push({activity:i,timestamp:(new Date).toISOString(),state:{measureStatus:e.objectiveMeasureStatus,measure:e.objectiveNormalizedMeasure,satisfiedStatus:e.objectiveSatisfiedStatus,completionStatus:e.completionStatus}})}getRollupStateLog(){return[...this.rollupStateLog]}clearRollupStateLog(){this.rollupStateLog=[]}}class et{childFilter;ruleEvaluator;measureProcessor;objectiveProcessor;progressProcessor;durationProcessor;globalObjectiveSynchronizer;stateValidator;crossClusterProcessor;eventCallback;constructor(e){this.eventCallback=e||null,this.childFilter=new $e,this.ruleEvaluator=new Ge(this.childFilter),this.measureProcessor=new Ye(this.childFilter,e),this.objectiveProcessor=new We(this.childFilter,this.ruleEvaluator,e),this.progressProcessor=new Ke(this.childFilter,this.ruleEvaluator,this.objectiveProcessor,e),this.durationProcessor=new Je(e),this.globalObjectiveSynchronizer=new Qe(e),this.stateValidator=new Ze(this.childFilter,e),this.crossClusterProcessor=new Xe(this.measureProcessor,this.objectiveProcessor,this.progressProcessor,e)}overallRollupProcess(e){const t=[];let i=e.parent,s=!1,r=!0;for(;i;){if(i.children.length>0&&this.durationProcessor.durationRollupProcess(i),!s){const e=i.captureRollupStatus();if(i.sequencingControls.rollupObjectiveSatisfied||i.sequencingControls.rollupProgressCompletion){if(i.children.length>0){const e=this.measureProcessor.measureRollupProcess(i);this.measureProcessor.completionMeasureRollupProcess(i),e.length>1&&this.crossClusterProcessor.processCrossClusterDependencies(i,e)}i.sequencingControls.rollupObjectiveSatisfied&&this.objectiveProcessor.objectiveRollupProcess(i),i.sequencingControls.rollupProgressCompletion&&this.progressProcessor.activityProgressRollupProcess(i)}const n=i.captureRollupStatus();r||!Ue.compareRollupStatus(e,n)||(this.eventCallback?.("rollup_optimization_activated",{activityId:i.id,depth:t.length}),s=!0),!r&&Ue.compareRollupStatus(e,n)||t.push(i)}i=i.parent,r=!1}return t}validateRollupStateConsistency(e){return this.stateValidator.validateRollupStateConsistency(e)}processGlobalObjectiveMapping(e,t){this.globalObjectiveSynchronizer.processGlobalObjectiveMapping(e,t)}calculateComplexWeightedMeasure(e,t,i){return this.measureProcessor.calculateComplexWeightedMeasure(e,t,i)}processCrossClusterDependencies(e,t){this.crossClusterProcessor.processCrossClusterDependencies(e,t)}getChildFilter(){return this.childFilter}getRuleEvaluator(){return this.ruleEvaluator}getMeasureProcessor(){return this.measureProcessor}getObjectiveProcessor(){return this.objectiveProcessor}getProgressProcessor(){return this.progressProcessor}getDurationProcessor(){return this.durationProcessor}getGlobalObjectiveSynchronizer(){return this.globalObjectiveSynchronizer}getStateValidator(){return this.stateValidator}getCrossClusterProcessor(){return this.crossClusterProcessor}}const tt=[O,T,j],it=[M,w,R];function st(e){return e&&tt.includes(e)?e:null}function rt(e){return e&&it.includes(e)?e:null}class nt{context;constructor(e){this.context=e}transferRteData(e){if(!this.context.getCMIData)return;const t=this.context.getCMIData();t&&(this.transferPrimaryObjective(e,t),this.transferNonPrimaryObjectives(e,t),this.context.fireEvent("onRteDataTransfer",{activityId:e.id,timestamp:(new Date).toISOString()}))}transferPrimaryObjective(e,t){const i=st(t.completion_status);i&&i!==j&&(e.completionStatus=i,e.attemptProgressStatus=!0);let s=!1,r=!1,n=!1,o=0;const a=rt(t.success_status);if(a&&a!==R&&(r=a===M,s=!0,e.objectiveSatisfiedStatus=r,e.objectiveSatisfiedStatusKnown=!0,e.successStatus=a,e.objectiveMeasureStatus=!0),t.score){const i=this.normalizeScore(t.score);null!==i&&(o=i,n=!0,e.objectiveNormalizedMeasure=o,e.objectiveMeasureStatus=!0)}if(e.primaryObjective&&(s||n)&&(e.primaryObjective.initializeFromCMI(s?r:e.primaryObjective.satisfiedStatus,n?o:e.primaryObjective.normalizedMeasure,s||n),s&&(e.primaryObjective.satisfiedStatusKnown=!0,e.primaryObjective.progressStatus=!0)),t.progress_measure&&""!==t.progress_measure){const i=parseFloat(t.progress_measure);isNaN(i)||(e.progressMeasure=i,e.progressMeasureStatus=!0,e.primaryObjective&&(e.primaryObjective.progressMeasure=i,e.primaryObjective.progressMeasureStatus=!0))}}transferNonPrimaryObjectives(e,t){if(t.objectives&&0!==t.objectives.length)for(const i of t.objectives){if(!i.id)continue;const t=e.getObjectiveById(i.id);if(!t||t.isPrimary)continue;const s=t.objective;let r=!1,n=!1,o=!1,a=0;const c=rt(i.success_status);c&&c!==R&&(n=c===M,r=!0,s.progressStatus=!0);const l=st(i.completion_status);if(l&&l!==j&&(s.completionStatus=l),i.score){const e=this.normalizeScore(i.score);null!==e&&(a=e,o=!0)}if((r||o)&&s.initializeFromCMI(r?n:s.satisfiedStatus,o?a:s.normalizedMeasure,o),i.progress_measure&&""!==i.progress_measure){const e=parseFloat(i.progress_measure);isNaN(e)||(s.progressMeasure=e,s.progressMeasureStatus=!0)}}}normalizeScore(score){if(score.scaled&&""!==score.scaled){const e=parseFloat(score.scaled);if(!isNaN(e))return e}if(score.raw&&""!==score.raw&&score.min&&""!==score.min&&score.max&&""!==score.max){const e=parseFloat(score.raw),t=parseFloat(score.min),i=parseFloat(score.max);if(!isNaN(e)&&!isNaN(t)&&!isNaN(i)&&i>t)return Math.max(-1,Math.min(1,(e-t)/(i-t)))}return null}}class ot{activityTree;sequencingProcess;rollupProcess;globalObjectiveMap;eventCallback;getCMIData;is4thEdition;invalidateCacheCallback=null;_rteDataTransferService;constructor(e,t,i,s,r=null,n){this.activityTree=e,this.sequencingProcess=t,this.rollupProcess=i,this.globalObjectiveMap=s,this.eventCallback=r,this.getCMIData=n?.getCMIData||null,this.is4thEdition=n?.is4thEdition||!1,this._rteDataTransferService=new nt({getCMIData:this.getCMIData,fireEvent:(e,t)=>this.fireEvent(e,t)})}setInvalidateCacheCallback(e){this.invalidateCacheCallback=e}processTerminationRequest(request,e=!1,t){const i=this.activityTree.currentActivity;if(!i)return{terminationRequest:request,sequencingRequest:null,exception:"TB.2.3-1",valid:!1};if((request===ae.EXIT||request===ae.ABANDON)&&!i.isActive)return{terminationRequest:request,sequencingRequest:null,exception:"TB.2.3-2",valid:!1};if(this.fireEvent("onTerminationRequestProcessing",{request:request,hasSequencingRequest:e,currentActivity:i.id,exitType:t}),"logout"===t)return this.fireEvent("onSequencingDebug",{message:"cmi.exit='logout' detected, treating as EXIT_ALL",activityId:i.id}),this.handleExitAll(i);switch(request){case ae.EXIT:return this.handleExit(i,e);case ae.EXIT_ALL:return this.handleExitAll(i);case ae.ABANDON:return this.handleAbandon(i,e);case ae.ABANDON_ALL:return this.handleAbandonAll(i);case ae.SUSPEND_ALL:return this.handleSuspendAll(i);default:return{terminationRequest:request,sequencingRequest:null,exception:"TB.2.3-7",valid:!1}}}handleExitTermination(e,t){return this.handleExit(e,t)}handleExit(e,t){e.children.length>0&&this.terminateDescendants(e),this.endAttempt(e);const i=this.evaluateExitRules(e);if("EXIT_ALL"===i.action)return this.handleExitAll(e);let s,r;"EXIT_PARENT"===i.action&&e.parent&&(this.activityTree.currentActivity=e.parent,this.endAttempt(this.activityTree.currentActivity));do{if(s=!1,r=this.evaluatePostConditions(this.activityTree.currentActivity||e),r.terminationRequest===ae.EXIT_ALL)return this.fireEvent("onPostConditionExitAll",{activity:(this.activityTree.currentActivity||e).id}),this.handleExitAll(this.activityTree.root);if(r.terminationRequest===ae.EXIT_PARENT){const t=this.activityTree.currentActivity||e;if(!t.parent)return{terminationRequest:ae.EXIT_PARENT,sequencingRequest:null,exception:"TB.2.3-4",valid:!1};this.activityTree.currentActivity=t.parent,this.endAttempt(this.activityTree.currentActivity),s=!0,this.fireEvent("onPostConditionExitParent",{fromActivity:t.id,toActivity:this.activityTree.currentActivity.id})}if(!s&&(this.activityTree.currentActivity||e)===this.activityTree.root&&r.sequencingRequest!==ae.RETRY)return{terminationRequest:ae.EXIT,sequencingRequest:ae.EXIT,exception:null,valid:!0}}while(s);if(!t&&!r.sequencingRequest){const t=this.activityTree.currentActivity||e;t.parent&&this.activityTree.setCurrentActivityWithoutActivation(t.parent)}return{terminationRequest:ae.EXIT,sequencingRequest:r.sequencingRequest,exception:null,valid:!0}}handleExitAll(e){return this.activityTree.root&&this.handleMultiLevelExit(this.activityTree.root),this.activityTree.root&&this.endAttempt(this.activityTree.root),this.activityTree.currentActivity=null,this.cleanupSuspendedActivity(),{terminationRequest:ae.EXIT_ALL,sequencingRequest:ae.EXIT,exception:null,valid:!0}}handleAbandon(e,t){return e.isActive=!1,t||(this.activityTree.currentActivity=e.parent),{terminationRequest:ae.ABANDON,sequencingRequest:null,exception:null,valid:!0}}handleAbandonAll(e){const t=[];let i=e;for(;null!==i;)t.push(i),i=i.parent;if(0===t.length)return{terminationRequest:ae.ABANDON_ALL,sequencingRequest:null,exception:"TB.2.3-6",valid:!1};for(const e of t)e.isActive=!1;return this.activityTree.currentActivity=null,this.cleanupSuspendedActivity(),{terminationRequest:ae.ABANDON_ALL,sequencingRequest:null,exception:null,valid:!0}}handleSuspendAll(e){const t=this.processSuspendAllRequest(e);return t.valid?{terminationRequest:ae.SUSPEND_ALL,sequencingRequest:ae.EXIT,exception:null,valid:!0}:t}processSuspendAllRequest(e){const t=this.activityTree.root;if(!e||!t)return this.fireEvent("onSuspendError",{exception:"TB.2.3-1",message:"No current activity to suspend",activity:e?.id}),{terminationRequest:ae.SUSPEND_ALL,sequencingRequest:null,exception:"TB.2.3-1",valid:!1};if(e===t&&!e.isActive&&!e.isSuspended)return this.fireEvent("onSuspendError",{exception:"TB.2.3-3",message:"Nothing to suspend (root activity)",activity:e.id}),{terminationRequest:ae.SUSPEND_ALL,sequencingRequest:null,exception:"TB.2.3-3",valid:!1};this.activityTree.suspendedActivity=e;const i=e,s=[];let r=i;for(;null!==r;)s.push(r),r=r.parent;if(0===s.length)return this.fireEvent("onSuspendError",{exception:"TB.2.3-5",message:"Activity path is empty",activity:i?.id}),{terminationRequest:ae.SUSPEND_ALL,sequencingRequest:null,exception:"TB.2.3-5",valid:!1};for(const e of s)e.isActive=!1,e.isSuspended=!0;return this.activityTree.currentActivity=t,t.isActive=!1,this.fireEvent("onActivitySuspended",{activity:i?.id,suspendedPath:s.map(e=>e.id),pathLength:s.length,timestamp:(new Date).toISOString()}),{terminationRequest:ae.SUSPEND_ALL,sequencingRequest:null,exception:null,valid:!0}}evaluateExitRules(e,t=0){t++;const i=e.sequencingRules.exitConditionRules;for(const s of i){let i;if(i="all"===s.conditionCombination?s.conditions.every(t=>t.evaluate(e)):s.conditions.some(t=>t.evaluate(e)),i){if(s.action===te.EXIT_PARENT)return{action:"EXIT_PARENT",recursionDepth:t};if(s.action===te.EXIT_ALL)return{action:"EXIT_ALL",recursionDepth:t}}}return{action:null,recursionDepth:t}}evaluatePostConditions(e){const t=this.sequencingProcess.evaluatePostConditionRules(e);return(t.sequencingRequest||t.terminationRequest)&&this.fireEvent("onPostConditionEvaluated",{activity:e.id,sequencingRequest:t.sequencingRequest,terminationRequest:t.terminationRequest,timestamp:(new Date).toISOString()}),t}handleMultiLevelExit(e){this.processExitAtLevel(e,0),this.terminateAll(e)}processExitAtLevel(e,t){const i=this.evaluateExitRules(e,0);i.action&&this.fireEvent("onMultiLevelExitAction",{activity:e.id,level:t,action:i.action});for(const i of e.children)this.processExitAtLevel(i,t+1)}cleanupSuspendedActivity(){const e=this.activityTree.suspendedActivity;if(e){let t=e;const i=[];for(;t;)t.isSuspended&&(t.isSuspended=!1,i.push(t.id)),t=t.parent;this.activityTree.suspendedActivity=null,this.fireEvent("onSuspendedActivityCleanup",{cleanedActivities:i,originalSuspendedActivity:e.id})}}terminateAll(e){for(const t of e.children)this.terminateAll(t);e.isActive&&this.endAttempt(e)}terminateDescendants(e){for(const t of e.children){t.children.length>0&&this.terminateDescendants(t);const e=this.exitActionRulesSubprocess(t);t.isActive&&("EXIT_ALL"===e&&this.terminateDescendants(t),this.endAttempt(t))}}exitActionRulesSubprocess(e){const t=e.sequencingRules.exitConditionRules;for(const i of t){let t;if(t="all"===i.conditionCombination?i.conditions.every(t=>t.evaluate(e)):i.conditions.some(t=>t.evaluate(e)),t){if(i.action===te.EXIT_PARENT)return"EXIT_PARENT";if(i.action===te.EXIT_ALL)return"EXIT_ALL"}}return null}clearSuspendedActivity(){if(this.activityTree.suspendedActivity){let e=this.activityTree.suspendedActivity;for(;e;)e.isSuspended=!1,e=e.parent;this.activityTree.suspendedActivity=null}}endAttempt(e){if(e.isActive){if(this._rteDataTransferService.transferRteData(e),e.isActive=!1,e.activityAttemptActive=!1,0===e.children.length){if(!e.isSuspended&&(e.sequencingControls.completionSetByContent||e.attemptProgressStatus||(e.attemptProgressStatus=!0,e.completionStatus="completed",e.wasAutoCompleted=!0,this.fireEvent("onAutoCompletion",{activityId:e.id,timestamp:(new Date).toISOString()})),!e.sequencingControls.objectiveSetByContent)){const t=e.primaryObjective;t&&(t.progressStatus||(t.progressStatus=!0,t.satisfiedStatus=!0,e.objectiveSatisfiedStatus=!0,e.successStatus="passed",e.wasAutoSatisfied=!0,this.fireEvent("onAutoSatisfaction",{activityId:e.id,timestamp:(new Date).toISOString()})))}}else{const t=e.children.some(e=>e.isSuspended);e.isSuspended=t}"unknown"===e.completionStatus&&(e.completionStatus="incomplete"),"unknown"===e.successStatus&&e.objectiveSatisfiedStatus&&(e.successStatus=e.objectiveSatisfiedStatus?"passed":"failed"),this.rollupProcess.processGlobalObjectiveMapping(this.activityTree.root||e,this.globalObjectiveMap),this.rollupProcess.overallRollupProcess(e),this.invalidateCacheCallback&&this.invalidateCacheCallback(),this.activityTree.root&&this.rollupProcess.validateRollupStateConsistency(this.activityTree.root),_e.applySelectionAndRandomization(e,!1)}}fireEvent(e,t){try{this.eventCallback&&this.eventCallback(e,t)}catch(t){console.warn(`Failed to fire sequencing event ${e}: ${t}`)}}}class at{valid;targetActivity;exception;constructor(e=!1,t=null,i=null){this.valid=e,this.targetActivity=t,this.exception=i}}class ct{static HIDE_LMS_UI_ORDER=[...Z];activityTree;rollupProcess;globalObjectiveMap;adlNav;eventCallback;now;defaultHideLmsUi;defaultAuxiliaryResources;_deliveryInProgress=!1;contentDelivered=!1;checkActivityCallback=null;invalidateCacheCallback=null;updateNavigationValidityCallback=null;clearSuspendedActivityCallback=null;constructor(e,t,i,s=null,r=null,n){this.activityTree=e,this.rollupProcess=t,this.globalObjectiveMap=i,this.adlNav=s,this.eventCallback=r,this.now=n?.now||(()=>new Date),this.defaultHideLmsUi=n?.defaultHideLmsUi?[...n.defaultHideLmsUi]:[],this.defaultAuxiliaryResources=n?.defaultAuxiliaryResources?n.defaultAuxiliaryResources.map(e=>({...e})):[]}setCheckActivityCallback(e){this.checkActivityCallback=e}setInvalidateCacheCallback(e){this.invalidateCacheCallback=e}setUpdateNavigationValidityCallback(e){this.updateNavigationValidityCallback=e}setClearSuspendedActivityCallback(e){this.clearSuspendedActivityCallback=e}isDeliveryInProgress(){return this._deliveryInProgress}hasContentBeenDelivered(){return this.contentDelivered}resetContentDelivered(){this.contentDelivered=!1}setContentDelivered(e){this.contentDelivered=e}processDeliveryRequest(e){if(this.fireEvent("onDeliveryRequestProcessing",{activity:e.id,timestamp:(new Date).toISOString()}),e.children.length>0)return new at(!1,null,"DB.1.1-1");const t=this.getActivityPath(e,!0);if(0===t.length)return new at(!1,null,"DB.1.1-2");for(const e of t)if(this.checkActivityCallback&&!this.checkActivityCallback(e))return new at(!1,null,"DB.1.1-3");return new at(!0,e)}contentDeliveryEnvironmentProcess(e){this._deliveryInProgress=!0;try{const t=e.isSuspended;this.activityTree.suspendedActivity&&this.clearSuspendedActivityCallback&&this.clearSuspendedActivityCallback();const i=this.getActivityPath(e,!0);for(const e of i)e.isActive||(t||e.isSuspended?e.isSuspended=!1:e.incrementAttemptCount(),e.isActive=!0,_e.applySelectionAndRandomization(e,1>=e.attemptCount));this.activityTree.currentActivity=e,this.initializeForDelivery(e),this.setupAttemptTracking(e),this.contentDelivered=!0,this.adlNav&&this.updateNavigationValidityCallback&&this.updateNavigationValidityCallback(),this.fireDeliveryEvent(e)}finally{this._deliveryInProgress=!1}}initializeForDelivery(e){"unknown"===e.completionStatus&&0===e.children.length&&(e.completionStatus="not attempted"),null===e.objectiveSatisfiedStatus&&(e.objectiveSatisfiedStatus=!1),null===e.progressMeasure&&(e.progressMeasure=0,e.progressMeasureStatus=!1),null===e.objectiveNormalizedMeasure&&(e.objectiveNormalizedMeasure=0,e.objectiveMeasureStatus=!1),e.attemptAbsoluteDuration="PT0H0M0S",e.attemptExperiencedDuration="PT0H0M0S",e.isAvailable=!0}setupAttemptTracking(e){e.wasSkipped=!1,e.attemptAbsoluteStartTime=this.now().toISOString(),e.location||(e.location=""),e.activityAttemptActive=!0,e.learnerPrefs||(e.learnerPrefs={audioCaptioning:"0",audioLevel:"1",deliverySpeed:"1",language:""})}fireDeliveryEvent(e){try{this.eventCallback&&this.eventCallback("onActivityDelivery",e),console.debug(`Activity delivered: ${e.id} - ${e.title}`)}catch(e){console.warn("Failed to fire activity delivery event: "+e)}}getEffectiveHideLmsUi(e){const t=new Set;for(const e of this.defaultHideLmsUi)t.add(e);let i=e;for(;i;){for(const e of i.hideLmsUi)t.add(e);i=i.parent}return ct.HIDE_LMS_UI_ORDER.filter(e=>t.has(e))}getEffectiveAuxiliaryResources(e){const t=new Map;for(const e of this.defaultAuxiliaryResources)e.resourceId&&t.set(e.resourceId,{...e});const i=[];let s=e;for(;s;)i.push(s),s=s.parent;for(const e of i.reverse())for(const i of e.auxiliaryResources)i.resourceId&&t.set(i.resourceId,{...i});return Array.from(t.values())}getContentActivityData(e){return{hideLmsUi:this.getEffectiveHideLmsUi(e),auxiliaryResources:this.getEffectiveAuxiliaryResources(e),location:e.location||"",credit:e.credit||"credit",launchData:e.launchData||"",maxTimeAllowed:e.attemptAbsoluteDurationLimit||"",completionThreshold:e.completionThreshold?.toString()||"",timeLimitAction:e.timeLimitAction||"continue,no message"}}getActivityPath(e,t=!0){const i=[];let s=e;for(;null!==s;)i.unshift(s),s=s.parent;return!t&&i.length>0&&i.pop(),i}fireEvent(e,t){try{this.eventCallback&&this.eventCallback(e,t)}catch(t){console.warn(`Failed to fire sequencing event ${e}: ${t}`)}}}class lt{activityTree;sequencingProcess;cache=null;isDirty=!0;constructor(e,t){this.activityTree=e,this.sequencingProcess=t}predictContinueEnabled(){return this.ensureCacheValid(),this.cache?.continueEnabled??!1}predictPreviousEnabled(){return this.ensureCacheValid(),this.cache?.previousEnabled??!1}predictChoiceEnabled(e){return this.ensureCacheValid(),this.cache?.choiceEnabledMap.get(e)??!1}getAvailableChoices(){return this.ensureCacheValid(),Array.from(this.cache?.availableChoices??[])}getAllPredictions(){return this.ensureCacheValid(),{continueEnabled:this.cache?.continueEnabled??!1,previousEnabled:this.cache?.previousEnabled??!1,availableChoices:Array.from(this.cache?.availableChoices??[])}}invalidateCache(){this.isDirty=!0}updateCache(){this.isDirty=!0,this.ensureCacheValid()}ensureCacheValid(){const e=this.calculateTreeStateHash();!this.isDirty&&this.cache&&this.cache.treeStateHash===e||(this.recalculateCache(e),this.isDirty=!1)}recalculateCache(e){const t=this.activityTree.currentActivity;this.cache={continueEnabled:!1,previousEnabled:!1,availableChoices:new Set,choiceEnabledMap:new Map,treeStateHash:e},t?(this.cache.continueEnabled=this.predictContinueInternal(t),this.cache.previousEnabled=this.predictPreviousInternal(t),this.calculateAvailableChoices()):this.calculateAvailableChoicesFromRoot()}predictContinueInternal(e){return!!e.parent&&!!e.parent.sequencingControls.flow&&this.hasAvailableNextActivity(e)}hasAvailableNextActivity(e){const t=e.parent;if(!t)return!1;const i=t.children,s=i.indexOf(e);if(-1===s)return!1;if(i.length-1>s)for(let e=s+1;i.length>e;e++){const t=i[e];if(t&&this.isActivityPotentiallyDeliverableForward(t))return!0}return!(!t.parent||!t.sequencingControls.flow)&&this.hasAvailableNextActivity(t)}predictPreviousInternal(e){return!!e.parent&&!!e.parent.sequencingControls.flow&&!e.parent.sequencingControls.forwardOnly&&this.hasAvailablePreviousActivity(e)}hasAvailablePreviousActivity(e){const t=e.parent;if(!t)return!1;const i=t.children,s=i.indexOf(e);if(-1===s)return!1;if(s>0)for(let e=s-1;e>=0;e--){const t=i[e];if(t&&this.isActivityPotentiallyDeliverableBackward(t))return!0}return!(!t.parent||!t.sequencingControls.flow||t.sequencingControls.forwardOnly)&&this.hasAvailablePreviousActivity(t)}calculateAvailableChoicesFromRoot(){}calculateAvailableChoices(){this.cache&&this.activityTree.root&&this.recursivelyCheckChoiceAvailability(this.activityTree.root)}recursivelyCheckChoiceAvailability(e){if(!this.cache)return;const t=this.sequencingProcess.validateNavigationRequest(ae.CHOICE,e.id,this.activityTree.currentActivity).valid;if(this.cache.choiceEnabledMap.set(e.id,t),t&&this.cache.availableChoices.add(e.id),e.children)for(const t of e.children)this.recursivelyCheckChoiceAvailability(t)}isActivityPotentiallyDeliverableForward(e){if(e.isHiddenFromChoice||!e.isAvailable)return!1;if(0===e.children.length)return!!e.isVisible&&this.sequencingProcess.canActivityBeDelivered(e);for(const t of e.children)if(this.isActivityPotentiallyDeliverableForward(t))return!0;return!1}isActivityPotentiallyDeliverableBackward(e){if(e.isHiddenFromChoice||!e.isAvailable)return!1;if(0===e.children.length)return e.isVisible;for(const t of e.children)if(this.isActivityPotentiallyDeliverableBackward(t))return!0;return!1}calculateTreeStateHash(){const e=this.activityTree.currentActivity,t=this.activityTree.suspendedActivity;return[e?.id??"none",t?.id??"none",this.getActivityTreeStateSignature()].join("|")}getActivityTreeStateSignature(){if(!this.activityTree.root)return"empty";const e=[];return this.collectActivitySignatures(this.activityTree.root,e),e.join(":")}collectActivitySignatures(e,t){if(t.push(e.id+(e.isActive?"A":"-")+(e.isSuspended?"S":"-")+e.completionStatus+e.successStatus+e.attemptCount),e.children)for(const i of e.children)this.collectActivitySignatures(i,t)}}var ut=(e=>(e.START="start",e.RESUME_ALL="resumeAll",e.CONTINUE="continue",e.PREVIOUS="previous",e.CHOICE="choice",e.JUMP="jump",e.EXIT="exit",e.EXIT_ALL="exitAll",e.ABANDON="abandon",e.ABANDON_ALL="abandonAll",e.SUSPEND_ALL="suspendAll",e.NOT_VALID="_none_",e))(ut||{});class dt{valid;terminationRequest;sequencingRequest;targetActivityId;exception;constructor(e=!1,t=null,i=null,s=null,r=null){this.valid=e,this.terminationRequest=t,this.sequencingRequest=i,this.targetActivityId=s,this.exception=r}}class ht{activityTree;sequencingProcess;adlNav;eventCallback;navigationLookAhead;getEffectiveHideLmsUiCallback=null;constructor(e,t,i=null,s=null){this.activityTree=e,this.sequencingProcess=t,this.adlNav=i,this.eventCallback=s,this.navigationLookAhead=new lt(e,t)}setGetEffectiveHideLmsUiCallback(e){this.getEffectiveHideLmsUiCallback=e}getNavigationLookAhead(){return this.navigationLookAhead}validateRequest(request,e=null){this.fireEvent("onNavigationRequestProcessing",{request:request,targetActivityId:e});const t=this.activityTree.currentActivity;switch(request){case"start":return this.validateStartRequest(t);case"resumeAll":return this.validateResumeRequest(t);case"continue":return this.validateContinueRequest(t);case"previous":return this.validatePreviousRequest(t);case"choice":return this.validateChoiceRequest(t,e);case"jump":return this.validateJumpRequest(e);case"exit":return this.validateExitRequest(t);case"exitAll":return this.validateExitAllRequest(t);case"abandon":return this.validateAbandonRequest(t);case"abandonAll":return this.validateAbandonAllRequest(t);case"suspendAll":return this.validateSuspendAllRequest(t);default:return new dt(!1,null,null,null,"NB.2.1-18")}}validateStartRequest(e){return null!==e?new dt(!1,null,null,null,"NB.2.1-1"):new dt(!0,null,ae.START,null)}validateResumeRequest(e){return null!==e?new dt(!1,null,null,null,"NB.2.1-2"):null===this.activityTree.suspendedActivity?new dt(!1,null,null,null,"NB.2.1-3"):new dt(!0,null,ae.RESUME_ALL,null)}validateContinueRequest(e){return e?e.parent&&e.parent.sequencingControls.flow?new dt(!0,e.isActive?ae.EXIT:null,ae.CONTINUE,null):new dt(!1,null,null,null,"NB.2.1-5"):new dt(!1,null,null,null,"NB.2.1-4")}validatePreviousRequest(e){if(!e)return new dt(!1,null,null,null,"NB.2.1-6");if(!e.parent||!e.parent.sequencingControls.flow)return new dt(!1,null,null,null,"NB.2.1-7");const t=this.validateForwardOnlyConstraints(e);return t.valid?new dt(!0,e.isActive?ae.EXIT:null,ae.PREVIOUS,null):new dt(!1,null,null,null,t.exception)}validateChoiceRequest(e,t){if(!t)return new dt(!1,null,null,null,"NB.2.1-9");const i=this.activityTree.getActivity(t);if(!i)return new dt(!1,null,null,null,"NB.2.1-10");const s=this.validateChoicePath(e,i);return s.valid?new dt(!0,e?.isActive?ae.EXIT:null,ae.CHOICE,t):new dt(!1,null,null,null,s.exception)}validateJumpRequest(e){return e?new dt(!0,null,ae.JUMP,e):new dt(!1,null,null,null,"NB.2.1-12")}validateExitRequest(e){return e?new dt(!0,e===this.activityTree.root?ae.EXIT_ALL:ae.EXIT,null,null):new dt(!1,null,null,null,"NB.2.1-13")}validateExitAllRequest(e){return e?new dt(!0,ae.EXIT_ALL,null,null):new dt(!1,null,null,null,"NB.2.1-14")}validateAbandonRequest(e){return e?new dt(!0,ae.ABANDON,null,null):new dt(!1,null,null,null,"NB.2.1-15")}validateAbandonAllRequest(e){return e?new dt(!0,ae.ABANDON_ALL,null,null):new dt(!1,null,null,null,"NB.2.1-16")}validateSuspendAllRequest(e){return e?new dt(!0,ae.SUSPEND_ALL,null,null):new dt(!1,null,null,null,"NB.2.1-17")}validateChoicePath(e,t){if(t.isHiddenFromChoice)return{valid:!1,exception:"NB.2.1-11"};if(!t.isAvailable)return{valid:!1,exception:"NB.2.1-11"};if(this.isActivityDisabled(t))return{valid:!1,exception:"NB.2.1-11"};if(e){const i=this.findCommonAncestor(e,t);if(!i)return{valid:!1,exception:"NB.2.1-11"};let s=e;for(;s&&s!==i;){if(!0===s.isActive&&s.sequencingControls&&!1===s.sequencingControls.choiceExit&&t!==s&&!this.activityContains(s,t))return{valid:!1,exception:"NB.2.1-11"};s=s.parent}const r=this.validateConstrainChoice(e,t,i);if(!r.valid)return r;const n=this.validateChoiceSet(e,t,i);if(!n.valid)return n}let i=t;for(;i;){if(i.parent&&!i.parent.sequencingControls.choice)return{valid:!1,exception:"NB.2.1-11"};i=i.parent}return{valid:!0,exception:null}}validateForwardOnlyConstraints(e){if(e.parent?.sequencingControls.forwardOnly)return{valid:!1,exception:"NB.2.1-8"};let t=e.parent?.parent;for(;t;){if(t.sequencingControls.forwardOnly)return{valid:!1,exception:"NB.2.1-8"};t=t.parent}return{valid:!0,exception:null}}validateConstrainChoice(e,t,i){let s=i;for(;s;){if(s.sequencingControls?.constrainChoice||s.sequencingControls?.preventActivation){const i=this.findChildContaining(s,e);if(!i)return{valid:!1,exception:"NB.2.1-11"};if(t===s)return{valid:!1,exception:"NB.2.1-11"};const r=this.findChildContaining(s,t);if(!r)return{valid:!1,exception:"NB.2.1-11"};if(s.sequencingControls?.constrainChoice&&r!==i)return{valid:!1,exception:"NB.2.1-11"};if(s.sequencingControls?.preventActivation&&r!==i&&this.requiresNewActivation(r,t))return{valid:!1,exception:"NB.2.1-11"}}s=s.parent}return this.validateAncestors(i,e,t)}validateChoiceSet(e,t,i){if(!this.activityContains(i,t)&&t!==i)return{valid:!1,exception:"NB.2.1-11"};let s=t;for(;s&&s!==i;){if(!s.isAvailable||s.isHiddenFromChoice||this.isActivityDisabled(s))return{valid:!1,exception:"NB.2.1-11"};s=s.parent}return{valid:!0,exception:null}}isActivityDisabled(e){if(!e.isAvailable)return!0;if(e.isHiddenFromChoice)return!0;const t=this.evaluatePreConditionRulesForChoice(e);return!!t&&(t===te.DISABLED||t===te.HIDE_FROM_CHOICE||t===te.STOP_FORWARD_TRAVERSAL)}findChildContaining(e,t){for(const i of e.children){if(i===t)return i;if(this.activityContains(i,t))return i}return null}activityContains(e,t){let i=t;for(;i;){if(i===e)return!0;i=i.parent}return!1}findCommonAncestor(e,t){const i=[];let s=e;for(;s;)i.push(s),s=s.parent;for(s=t;s;){if(i.includes(s))return s;s=s.parent}return null}validateAncestors(e,t,i){const s=e.children;if(!s||0===s.length)return{valid:!0,exception:null};const r=this.findChildContaining(e,t),n=this.findChildContaining(e,i);if(!r||!n)return{valid:!1,exception:"NB.2.1-11"};const o=s.indexOf(r),a=s.indexOf(n);if(e.sequencingControls.forwardOnly&&o>a)return{valid:!1,exception:"NB.2.1-8"};const c=s.findIndex(e=>e?.sequencingControls.stopForwardTraversal);if(r.sequencingControls.stopForwardTraversal&&a>o)return{valid:!1,exception:"NB.2.1-11"};if(-1!==c&&a>c)return{valid:!1,exception:"NB.2.1-11"};if(a>o&&e.sequencingControls.forwardOnly)for(let e=o+1;a>e;e++){const t=s[e];if(t){if(t.sequencingControls.stopForwardTraversal)return{valid:!1,exception:"NB.2.1-11"};if(this.isActivityMandatory(t)&&!this.isActivityCompleted(t))return{valid:!1,exception:"NB.2.1-11"}}}return{valid:!0,exception:null}}requiresNewActivation(e,t){return!this.branchHasActiveAttempt(e)&&!t.activityAttemptActive&&!t.isActive}branchHasActiveAttempt(e){if(e.activityAttemptActive||e.isActive)return!0;for(const t of e.children)if(this.branchHasActiveAttempt(t))return!0;return!1}isActivityMandatory(e){if(!e.isAvailable||e.isHiddenFromChoice)return!1;const t=this.evaluatePreConditionRulesForChoice(e);return t!==te.SKIP&&t!==te.DISABLED&&t!==te.HIDE_FROM_CHOICE&&t!==te.STOP_FORWARD_TRAVERSAL&&!this.isActivityDisabled(e)&&!1!==e.mandatory}isActivityCompleted(e){if(!e.isAvailable||e.isHiddenFromChoice)return!0;const t=this.evaluatePreConditionRulesForChoice(e);return t===te.SKIP||t===te.DISABLED||t===te.HIDE_FROM_CHOICE||t===te.STOP_FORWARD_TRAVERSAL||!!this.isActivityDisabled(e)||"completed"===e.completionStatus||"passed"===e.successStatus||"passed"===e.successStatus}evaluatePreConditionRulesForChoice(e){if(!e.sequencingRules)return null;return e.sequencingRules.evaluatePreConditionRules(e)||null}updateNavigationValidity(){if(!this.adlNav||!this.activityTree.currentActivity)return;this.navigationLookAhead.invalidateCache();const e=this.navigationLookAhead.predictContinueEnabled();try{this.adlNav.request_valid.continue=e?"true":"false"}catch(e){}const t=this.navigationLookAhead.predictPreviousEnabled();try{this.adlNav.request_valid.previous=t?"true":"false"}catch(e){}const i=this.activityTree.getAllActivities(),s={},r={};for(const e of i){const t=this.validateRequest("choice",e.id);s[e.id]=t.valid?"true":"false";const i=this.validateRequest("jump",e.id);r[e.id]=i.valid?"true":"false"}try{this.adlNav.request_valid.choice=s}catch(e){}try{this.adlNav.request_valid.jump=r}catch(e){}const n=this.getEffectiveHideLmsUiCallback?this.getEffectiveHideLmsUiCallback(this.activityTree.currentActivity):[];this.fireEvent("onNavigationValidityUpdate",{continue:e,previous:t,choice:s,jump:r,hideLmsUi:n})}getAllPredictions(){return this.navigationLookAhead.getAllPredictions()}predictContinueEnabled(){return this.navigationLookAhead.predictContinueEnabled()}predictPreviousEnabled(){return this.navigationLookAhead.predictPreviousEnabled()}predictChoiceEnabled(e){return this.navigationLookAhead.predictChoiceEnabled(e)}getAvailableChoices(){return this.navigationLookAhead.getAvailableChoices()}invalidateCache(){this.navigationLookAhead.invalidateCache()}fireEvent(e,t){try{this.eventCallback&&this.eventCallback(e,t)}catch(t){console.warn(`Failed to fire sequencing event ${e}: ${t}`)}}}class mt{globalObjectiveMap=new Map;eventCallback=null;constructor(e){this.eventCallback=e||null}initialize(e){try{this.globalObjectiveMap.clear(),e&&this.collectObjectives(e),this.fireEvent("onGlobalObjectiveMapInitialized",{objectiveCount:this.globalObjectiveMap.size,timestamp:(new Date).toISOString()})}catch(e){this.fireEvent("onGlobalObjectiveMapError",{error:e instanceof Error?e.message:e+"",timestamp:(new Date).toISOString()})}}collectObjectives(e){const objectives=e.getAllObjectives();if(0===objectives.length){const t=e.id+"_default_objective";this.globalObjectiveMap.has(t)||this.globalObjectiveMap.set(t,{id:t,satisfiedStatus:e.objectiveSatisfiedStatus,satisfiedStatusKnown:e.objectiveMeasureStatus,normalizedMeasure:e.objectiveNormalizedMeasure,normalizedMeasureKnown:e.objectiveMeasureStatus,progressMeasure:e.progressMeasure,progressMeasureKnown:e.progressMeasureStatus,completionStatus:e.completionStatus,completionStatusKnown:e.completionStatus!==j,readSatisfiedStatus:!0,writeSatisfiedStatus:!0,readNormalizedMeasure:!0,writeNormalizedMeasure:!0,readCompletionStatus:!0,writeCompletionStatus:!0,readProgressMeasure:!0,writeProgressMeasure:!0,satisfiedByMeasure:null!==e.scaledPassingScore,minNormalizedMeasure:e.scaledPassingScore,updateAttemptData:!0})}for(const e of objectives){const t=e.mapInfo.length>0?e.mapInfo:[{targetObjectiveID:e.id,readSatisfiedStatus:!0,writeSatisfiedStatus:!0,readNormalizedMeasure:!0,writeNormalizedMeasure:!0,readProgressMeasure:!0,writeProgressMeasure:!0,readCompletionStatus:!0,writeCompletionStatus:!0,updateAttemptData:e.isPrimary}];for(const i of t){const t=i.targetObjectiveID||e.id;this.globalObjectiveMap.has(t)||this.globalObjectiveMap.set(t,{id:t,satisfiedStatus:e.satisfiedStatus,satisfiedStatusKnown:e.measureStatus,normalizedMeasure:e.normalizedMeasure,normalizedMeasureKnown:e.measureStatus,progressMeasure:e.progressMeasure,progressMeasureKnown:e.progressMeasureStatus,completionStatus:e.completionStatus,completionStatusKnown:e.completionStatus!==j,readSatisfiedStatus:i.readSatisfiedStatus??!1,writeSatisfiedStatus:i.writeSatisfiedStatus??!1,readNormalizedMeasure:i.readNormalizedMeasure??!1,writeNormalizedMeasure:i.writeNormalizedMeasure??!1,readProgressMeasure:i.readProgressMeasure??!1,writeProgressMeasure:i.writeProgressMeasure??!1,readCompletionStatus:i.readCompletionStatus??!1,writeCompletionStatus:i.writeCompletionStatus??!1,readRawScore:i.readRawScore??!1,writeRawScore:i.writeRawScore??!1,readMinScore:i.readMinScore??!1,writeMinScore:i.writeMinScore??!1,readMaxScore:i.readMaxScore??!1,writeMaxScore:i.writeMaxScore??!1,satisfiedByMeasure:e.satisfiedByMeasure,minNormalizedMeasure:e.minNormalizedMeasure,updateAttemptData:i.updateAttemptData??e.isPrimary})}}for(const t of e.children)this.collectObjectives(t)}getMap(){return this.globalObjectiveMap}getSnapshot(){return this.serialize()}restoreSnapshot(e){this.restore(e)}updateObjective(e,t){try{this.globalObjectiveMap.set(e,{...this.globalObjectiveMap.get(e),...t,lastUpdated:(new Date).toISOString()}),this.fireEvent("onGlobalObjectiveUpdated",{objectiveId:e,data:t,timestamp:(new Date).toISOString()})}catch(t){this.fireEvent("onGlobalObjectiveUpdateError",{objectiveId:e,error:t instanceof Error?t.message:t+"",timestamp:(new Date).toISOString()})}}synchronize(e,t){e&&t.processGlobalObjectiveMapping(e,this.globalObjectiveMap)}getObjective(e){return this.globalObjectiveMap.get(e)}hasObjective(e){return this.globalObjectiveMap.has(e)}getObjectiveIds(){return Array.from(this.globalObjectiveMap.keys())}getObjectiveCount(){return this.globalObjectiveMap.size}clear(){this.globalObjectiveMap.clear(),this.fireEvent("onGlobalObjectiveMapCleared",{timestamp:(new Date).toISOString()})}serialize(){const e={};return this.globalObjectiveMap.forEach((t,id)=>{e[id]={...t}}),e}restore(e){if(this.globalObjectiveMap.clear(),e){for(const[id,t]of Object.entries(e))this.globalObjectiveMap.set(id,{...t});this.fireEvent("onGlobalObjectiveMapRestored",{objectiveCount:this.globalObjectiveMap.size,timestamp:(new Date).toISOString()})}}fireEvent(e,t){try{this.eventCallback&&this.eventCallback(e,t)}catch(t){console.warn(`Failed to fire global objective event ${e}: ${t}`)}}}class pt{activityTree;globalObjectiveService;rollupProcess;adlNav;eventCallback;getEffectiveHideLmsUiCallback=null;getEffectiveAuxiliaryResourcesCallback=null;contentDeliveredGetter=null;contentDeliveredSetter=null;constructor(e,t,i,s=null,r=null){this.activityTree=e,this.globalObjectiveService=t,this.rollupProcess=i,this.adlNav=s,this.eventCallback=r}setGetEffectiveHideLmsUiCallback(e){this.getEffectiveHideLmsUiCallback=e}setGetEffectiveAuxiliaryResourcesCallback(e){this.getEffectiveAuxiliaryResourcesCallback=e}setContentDeliveredAccessors(e,t){this.contentDeliveredGetter=e,this.contentDeliveredSetter=t}getState(){return{version:"1.0",timestamp:(new Date).toISOString(),contentDelivered:!!this.contentDeliveredGetter&&this.contentDeliveredGetter(),currentActivity:this.activityTree.currentActivity?.id||null,suspendedActivity:this.activityTree.suspendedActivity?.id||null,activityStates:this.serializeActivities(),navigationState:this.getNavigationState(),globalObjectiveMap:this.globalObjectiveService.getSnapshot()}}restoreState(e){try{if(!e||"1.0"!==e.version)return console.warn("Incompatible sequencing state version"),!1;if(this.contentDeliveredSetter&&this.contentDeliveredSetter(e.contentDelivered||!1),e.globalObjectiveMap&&this.globalObjectiveService.restoreSnapshot(e.globalObjectiveMap),e.activityStates&&this.deserializeActivities(e.activityStates),e.currentActivity){const t=this.activityTree.getActivity(e.currentActivity);t&&(this.activityTree.currentActivity=t,t.isActive=!0)}if(e.suspendedActivity){const t=this.activityTree.getActivity(e.suspendedActivity);t&&(this.activityTree.suspendedActivity=t,t.isSuspended=!0)}return e.navigationState&&this.restoreNavigationState(e.navigationState),this.activityTree.root&&this.globalObjectiveService.synchronize(this.activityTree.root,this.rollupProcess),console.debug("Sequencing state restored successfully"),!0}catch(e){return console.error("Failed to restore sequencing state: "+e),!1}}serializeActivities(){const e={},t=i=>{e[i.id]={id:i.id,title:i.title,isActive:i.isActive,isSuspended:i.isSuspended,isCompleted:i.isCompleted,completionStatus:i.completionStatus,successStatus:i.successStatus,attemptCount:i.attemptCount,attemptCompletionAmount:i.attemptCompletionAmount,attemptAbsoluteDuration:i.attemptAbsoluteDuration,attemptExperiencedDuration:i.attemptExperiencedDuration,activityAbsoluteDuration:i.activityAbsoluteDuration,activityExperiencedDuration:i.activityExperiencedDuration,objectiveSatisfiedStatus:i.objectiveSatisfiedStatus,objectiveMeasureStatus:i.objectiveMeasureStatus,objectiveNormalizedMeasure:i.objectiveNormalizedMeasure,progressMeasure:i.progressMeasure,progressMeasureStatus:i.progressMeasureStatus,isAvailable:i.isAvailable,isHiddenFromChoice:i.isHiddenFromChoice,location:i.location,attemptAbsoluteStartTime:i.attemptAbsoluteStartTime,objectives:i.getObjectiveStateSnapshot(),auxiliaryResources:i.auxiliaryResources,selectionRandomizationState:{selectionCountStatus:i.sequencingControls.selectionCountStatus,reorderChildren:i.sequencingControls.reorderChildren,childOrder:i.children.map(e=>e.id),selectedChildIds:i.children.filter(e=>e.isAvailable).map(e=>e.id),hiddenFromChoiceChildIds:i.children.filter(e=>e.isHiddenFromChoice).map(e=>e.id)}};for(const e of i.children)t(e)};return this.activityTree.root&&t(this.activityTree.root),e}deserializeActivities(e){const t=i=>{const s=e[i.id];s&&(i.isActive=s.isActive||!1,i.isSuspended=s.isSuspended||!1,i.isCompleted=s.isCompleted||!1,i.completionStatus=s.completionStatus||"unknown",i.successStatus=s.successStatus||"unknown",i.attemptCount=s.attemptCount||0,i.attemptCompletionAmount=s.attemptCompletionAmount||0,i.attemptAbsoluteDuration=s.attemptAbsoluteDuration||"PT0H0M0S",i.attemptExperiencedDuration=s.attemptExperiencedDuration||"PT0H0M0S",i.activityAbsoluteDuration=s.activityAbsoluteDuration||"PT0H0M0S",i.activityExperiencedDuration=s.activityExperiencedDuration||"PT0H0M0S",i.objectiveSatisfiedStatus=s.objectiveSatisfiedStatus||!1,i.objectiveMeasureStatus=s.objectiveMeasureStatus||!1,i.objectiveNormalizedMeasure=s.objectiveNormalizedMeasure||0,i.progressMeasure=s.progressMeasure??0,i.progressMeasureStatus=s.progressMeasureStatus||!1,i.isAvailable=!1!==s.isAvailable,i.isHiddenFromChoice=!0===s.isHiddenFromChoice,i.location=s.location||"",i.attemptAbsoluteStartTime=s.attemptAbsoluteStartTime||"",Array.isArray(s.auxiliaryResources)&&(i.auxiliaryResources=s.auxiliaryResources),s.objectives&&i.applyObjectiveStateSnapshot(s.objectives));for(const e of i.children)t(e);if(s?.selectionRandomizationState){const e=s.selectionRandomizationState,t=i.sequencingControls;void 0!==e.selectionCountStatus&&(t.selectionCountStatus=e.selectionCountStatus),void 0!==e.reorderChildren&&(t.reorderChildren=e.reorderChildren),e.childOrder&&e.childOrder.length>0&&i.setChildOrder(e.childOrder);const r=Array.isArray(e.selectedChildIds)?new Set(e.selectedChildIds):null,n=Array.isArray(e.hiddenFromChoiceChildIds)?new Set(e.hiddenFromChoiceChildIds):null;if(r||n)for(const e of i.children){if(r){const t=r.has(e.id);e.isAvailable=t,n||(e.isHiddenFromChoice=!t)}n&&(e.isHiddenFromChoice=n.has(e.id))}i.setProcessedChildren(i.children.filter(e=>e.isAvailable))}else i.resetProcessedChildren()};this.activityTree.root&&t(this.activityTree.root)}getNavigationState(){if(!this.adlNav)return null;const e=this.getEffectiveHideLmsUiCallback?this.getEffectiveHideLmsUiCallback(this.activityTree.currentActivity):[],t=this.getEffectiveAuxiliaryResourcesCallback?this.getEffectiveAuxiliaryResourcesCallback(this.activityTree.currentActivity):[];return{request:this.adlNav.request||"_none_",requestValid:{continue:this.adlNav.request_valid?.continue||"false",previous:this.adlNav.request_valid?.previous||"false",choice:"unknown",jump:"unknown",exit:this.adlNav.request_valid?.exit||"false",exitAll:this.adlNav.request_valid?.exitAll||"false",abandon:this.adlNav.request_valid?.abandon||"false",abandonAll:this.adlNav.request_valid?.abandonAll||"false",suspendAll:this.adlNav.request_valid?.suspendAll||"false"},hideLmsUi:e,auxiliaryResources:t}}restoreNavigationState(e){if(this.adlNav&&e)try{if(e.requestValid){const t=e.requestValid;this.adlNav.request_valid.continue=t.continue||"false",this.adlNav.request_valid.previous=t.previous||"false",this.adlNav.request_valid.exit=t.exit||"false",this.adlNav.request_valid.exitAll=t.exitAll||"false",this.adlNav.request_valid.abandon=t.abandon||"false",this.adlNav.request_valid.abandonAll=t.abandonAll||"false",this.adlNav.request_valid.suspendAll=t.suspendAll||"false"}}catch(e){console.warn("Could not fully restore navigation state: "+e)}}getSuspensionState(){const e={activityTree:this.activityTree.root?this.activityTree.root.getSuspensionState():null,currentActivityId:this.activityTree.currentActivity?.id||null,suspendedActivityId:this.activityTree.suspendedActivity?.id||null,globalObjectives:this.globalObjectiveService.getSnapshot(),timestamp:(new Date).toISOString()};return this.fireEvent("onSuspensionStateCaptured",{hasActivityTree:!!e.activityTree,currentActivityId:e.currentActivityId,suspendedActivityId:e.suspendedActivityId,globalObjectiveCount:Object.keys(e.globalObjectives).length,timestamp:e.timestamp}),e}restoreSuspensionState(e){if(e)try{if(e.globalObjectives&&this.globalObjectiveService.restoreSnapshot(e.globalObjectives),e.activityTree&&this.activityTree.root&&this.activityTree.root.restoreSuspensionState(e.activityTree),e.currentActivityId){const t=this.activityTree.getActivity(e.currentActivityId);t&&(this.activityTree.currentActivity=t)}if(e.suspendedActivityId){const t=this.activityTree.getActivity(e.suspendedActivityId);t&&(this.activityTree.suspendedActivity=t)}this.fireEvent("onSuspensionStateRestored",{currentActivityId:e.currentActivityId,suspendedActivityId:e.suspendedActivityId,globalObjectiveCount:e.globalObjectives?Object.keys(e.globalObjectives).length:0,originalTimestamp:e.timestamp,restoreTimestamp:(new Date).toISOString()})}catch(e){throw this.fireEvent("onSuspensionStateRestoreError",{error:e instanceof Error?e.message:e+"",timestamp:(new Date).toISOString()}),e}else this.fireEvent("onSuspensionStateRestoreError",{error:"No suspension state provided",timestamp:(new Date).toISOString()})}fireEvent(e,t){try{this.eventCallback&&this.eventCallback(e,t)}catch(t){console.warn(`Failed to fire state manager event ${e}: ${t}`)}}}class vt{activityTree;eventCallback;now;contentDeliveredGetter=null;constructor(e,t=null,i){this.activityTree=e,this.eventCallback=t,this.now=i?.now||(()=>new Date)}setContentDeliveredGetter(e){this.contentDeliveredGetter=e}validateTreeConsistency(e){if(!this.activityTree.root)return{consistent:!1,exception:"DB.1.1-4"};if(!this.isActivityPartOfTree(e,this.activityTree.root))return{consistent:!1,exception:"DB.1.1-5"};const t=this.getActiveActivities();if(t.length>1)return this.fireEvent("onStateInconsistency",{activeActivities:t.map(e=>e.id),targetActivity:e.id}),{consistent:!1,exception:"DB.1.1-6"};let i=e;for(;i?.parent;){if(!i.parent.children.includes(i))return{consistent:!1,exception:"DB.1.1-7"};i=i.parent}return{consistent:!0,exception:null}}validateResources(e){const t=this.getRequiredResources(e);for(const e of t)if(!this.isResourceAvailable(e))return{available:!1,exception:"DB.1.1-8"};return this.checkSystemLimits().adequate?{available:!0,exception:null}:{available:!1,exception:"DB.1.1-9"}}validateConcurrentDelivery(e){return this.contentDeliveredGetter&&this.contentDeliveredGetter()&&this.activityTree.currentActivity&&this.activityTree.currentActivity!==e?{allowed:!1,exception:"DB.1.1-10"}:this.hasPendingDeliveryRequests()?{allowed:!1,exception:"DB.1.1-11"}:this.isDeliveryLocked()?{allowed:!1,exception:"DB.1.1-12"}:{allowed:!0,exception:null}}validateDependencies(e){const t=this.getPrerequisites(e);for(const i of t)if(!this.isPrerequisiteSatisfied(i,e))return{satisfied:!1,exception:"DB.1.1-13"};const i=this.getObjectiveDependencies(e);for(const e of i)if(!this.isObjectiveDependencySatisfied(e))return{satisfied:!1,exception:"DB.1.1-14"};return this.getSequencingRuleDependencies(e).satisfied?{satisfied:!0,exception:null}:{satisfied:!1,exception:"DB.1.1-15"}}checkActivity(e){return!!e.isAvailable&&!!this.checkLimitConditions(e)}checkLimitConditions(e){let result=!0,t="";if(null!==e.attemptLimit&&e.attemptLimit>0&&(e.attemptLimit>e.attemptCount||(result=!1,t="Attempt limit exceeded")),result&&e.attemptAbsoluteDurationLimit){const s=i(e.attemptAbsoluteDurationLimit,k);s>0&&(s>i(e.attemptAbsoluteDuration||"PT0H0M0S",k)||(result=!1,t="Attempt duration limit exceeded"))}if(result&&e.activityAbsoluteDurationLimit){const s=i(e.activityAbsoluteDurationLimit,k);s>0&&(s>i(e.activityAbsoluteDuration||"PT0H0M0S",k)||(result=!1,t="Activity duration limit exceeded"))}if(result&&e.beginTimeLimit){const i=this.now();new Date(e.beginTimeLimit)>i&&(result=!1,t="Not yet time to begin")}return result&&e.endTimeLimit&&this.now()>new Date(e.endTimeLimit)&&(result=!1,t="Time limit expired"),this.fireEvent("onLimitConditionCheck",{activity:e,result:result,failureReason:t,checks:{attemptLimit:e.attemptLimit,attemptCount:e.attemptCount,attemptDurationLimit:e.attemptAbsoluteDurationLimit,activityDurationLimit:e.activityAbsoluteDurationLimit,beginTimeLimit:e.beginTimeLimit,endTimeLimit:e.endTimeLimit}}),result}isActivityPartOfTree(e,t){if(e===t)return!0;for(const i of t.children)if(this.isActivityPartOfTree(e,i))return!0;return!1}getActiveActivities(){const e=[];return this.activityTree.root&&this.collectActiveActivities(this.activityTree.root,e),e}collectActiveActivities(e,t){e.isActive&&t.push(e);for(const i of e.children)this.collectActiveActivities(i,t)}getRequiredResources(e){const t=[],i=(e.title+" "+e.location).toLowerCase();return(i.includes("video")||i.includes("multimedia"))&&t.push("video-codec"),(i.includes("audio")||i.includes("sound"))&&t.push("audio-codec"),(i.includes("flash")||i.includes(".swf"))&&t.push("flash-plugin"),(i.includes("java")||i.includes("applet"))&&t.push("java-runtime"),e.children&&e.children.length>0&&t.push("high-bandwidth"),e.attemptAbsoluteDurationLimit&&this.parseDurationToMinutes(e.attemptAbsoluteDurationLimit)>60&&t.push("extended-storage"),e.attemptLimit&&e.attemptLimit>1&&t.push("persistent-storage"),t}isResourceAvailable(e){try{switch(e){case"video-codec":return!!document.createElement("video").canPlayType;case"audio-codec":return!!document.createElement("audio").canPlayType;case"flash-plugin":return navigator.plugins&&Array.from(navigator.plugins).some(e=>"Shockwave Flash"===e.name);case"java-runtime":return navigator.plugins&&Array.from(navigator.plugins).some(e=>"Java"===e.name);case"high-bandwidth":if("connection"in navigator){const e=navigator.connection;return"4g"===e.effectiveType||e.downlink>5}return!0;case"extended-storage":default:return!0;case"persistent-storage":return"localStorage"in window&&"sessionStorage"in window}}catch(e){return!1}}checkSystemLimits(){try{let e=!0;if("memory"in performance){const t=performance.memory;t.usedJSHeapSize/t.jsHeapSizeLimit>.8&&(e=!1)}if("deviceMemory"in navigator&&2>navigator.deviceMemory&&(e=!1),"hardwareConcurrency"in navigator&&2>navigator.hardwareConcurrency&&(e=!1),"connection"in navigator){const t=navigator.connection;(t.saveData||"slow-2g"===t.effectiveType)&&(e=!1)}return{adequate:e}}catch(e){return{adequate:!0}}}hasPendingDeliveryRequests(){return this.activityTree&&this.activityTree.pendingRequests?this.activityTree.pendingRequests.length>0:!("undefined"==typeof window||!window.pendingScormRequests)&&window.pendingScormRequests>0}isDeliveryLocked(){return!(!this.activityTree||!this.activityTree.navigationLocked)||(!(!this.activityTree||!this.activityTree.terminationInProgress)||(!this.checkSystemLimits().adequate||!("undefined"==typeof window||!window.scormMaintenanceMode)))}getPrerequisites(e){const t=[];if(e.sequencingRules&&e.sequencingRules.preConditionRules)for(const i of e.sequencingRules.preConditionRules)if(i.conditions&&i.conditions.length>0)for(const s of i.conditions)s.referencedObjectiveID&&s.referencedObjectiveID!==e.id&&t.push(s.referencedObjectiveID);if(e.parent&&e.sequencingControls&&!e.sequencingControls.choiceExit){const i=e.parent.children;if(i){const s=i.indexOf(e);for(let e=0;s>e;e++){const s=i[e];s&&t.push(s.id)}}}return e.prerequisiteActivities&&t.push(...e.prerequisiteActivities),Array.from(new Set(t))}isPrerequisiteSatisfied(e,t){const i=this.activityTree.getActivity(e);return!!i&&"completed"===i.completionStatus}getObjectiveDependencies(e){const t=[],objectives=e.objectives;if(objectives&&objectives.length>0)for(const e of objectives)e.globalObjectiveID&&t.push(e.globalObjectiveID),!e.satisfiedByMeasure&&e.readNormalizedMeasure&&t.push(e.id+"_measure");if(e.sequencingRules){const i=[...e.sequencingRules.preConditionRules||[],...e.sequencingRules.exitConditionRules||[],...e.sequencingRules.postConditionRules||[]];for(const s of i)if(s.conditions&&s.conditions.length>0)for(const i of s.conditions)i.objectiveReference&&i.objectiveReference!==e.id&&t.push(i.objectiveReference)}return Array.from(new Set(t))}isObjectiveDependencySatisfied(e){if(this.activityTree&&this.activityTree.globalObjectives){const t=this.activityTree.globalObjectives[e];if(t)return!0===t.satisfied&&!0===t.statusKnown}if(e.endsWith("_measure")){const t=e.replace("_measure","");if(this.activityTree&&this.activityTree.globalObjectives){const e=this.activityTree.globalObjectives[t];if(e)return!0===e.measureKnown&&e.normalizedMeasure>=0}}const t=this.activityTree.getActivity(e);return!!t&&t.objectiveSatisfiedStatus&&t.objectiveMeasureStatus}getSequencingRuleDependencies(e){let t=!0;try{if(e.sequencingRules&&e.sequencingRules.preConditionRules)for(const i of e.sequencingRules.preConditionRules)if(i.conditions&&i.conditions.length>0)for(const s of i.conditions)switch(s.conditionType||s.condition){case"activityProgressKnown":e.progressMeasureStatus||(t=!1);break;case"objectiveStatusKnown":case"objectiveSatisfied":this.isObjectiveDependencySatisfied(s.referencedObjectiveID||e.id)||(t=!1);break;case"attemptLimitExceeded":null===e.attemptLimit&&(t=!1);break;case"timeLimitExceeded":e.attemptAbsoluteDurationLimit||e.activityAbsoluteDurationLimit||(t=!1);break;case"always":case"never":break;default:t=!1}if(e.sequencingRules&&e.sequencingRules.exitConditionRules)for(const i of e.sequencingRules.exitConditionRules)if(i.conditions&&i.conditions.length>0)for(const s of i.conditions)["objectiveStatusKnown","objectiveSatisfied"].includes(s.conditionType||s.condition)&&(this.isObjectiveDependencySatisfied(s.referencedObjectiveID||e.id)||(t=!1));if(e.rollupRules&&e.rollupRules.rules)for(const i of e.rollupRules.rules)if(i.conditions&&i.conditions.length>0&&e.children&&e.children.length>0)for(const i of e.children)if(!i.isCompleted){t=!1;break}}catch(e){t=!1}return{satisfied:t}}parseDurationToMinutes(e){return i(e,k)/60}fireEvent(e,t){try{this.eventCallback&&this.eventCallback(e,t)}catch(t){console.warn(`Failed to fire delivery validator event ${e}: ${t}`)}}}class gt{activityTree;sequencingProcess;rollupProcess;adlNav;eventCallback=null;terminationHandler;deliveryHandler;navigationValidityService;globalObjectiveService;stateManager;deliveryValidator;navigationLookAhead;enhancedDeliveryValidation;is4thEdition;constructor(e,t,i,s=null,r=null,n){this.activityTree=e,this.sequencingProcess=t,this.rollupProcess=i,this.adlNav=s,this.eventCallback=r,this.enhancedDeliveryValidation=!0===n?.enhancedDeliveryValidation,this.is4thEdition=n?.is4thEdition||!1,this.globalObjectiveService=new mt(r||void 0),this.globalObjectiveService.initialize(e.root);const o={};n?.now&&(o.now=n.now),this.deliveryValidator=new vt(e,r,o);const a={};n?.getCMIData&&(a.getCMIData=n.getCMIData),void 0!==n?.is4thEdition&&(a.is4thEdition=n.is4thEdition),this.terminationHandler=new ot(e,t,i,this.globalObjectiveService.getMap(),r,a);const c={};n?.now&&(c.now=n.now),n?.defaultHideLmsUi&&(c.defaultHideLmsUi=n.defaultHideLmsUi),n?.defaultAuxiliaryResources&&(c.defaultAuxiliaryResources=n.defaultAuxiliaryResources),this.deliveryHandler=new ct(e,i,this.globalObjectiveService.getMap(),s,r,c),this.navigationValidityService=new ht(e,t,s,r),this.stateManager=new pt(e,this.globalObjectiveService,i,s,r),this.navigationLookAhead=this.navigationValidityService.getNavigationLookAhead(),this.setupCallbacks()}setupCallbacks(){this.terminationHandler.setInvalidateCacheCallback(()=>{this.navigationLookAhead.invalidateCache()}),this.deliveryHandler.setCheckActivityCallback(e=>this.deliveryValidator.checkActivity(e)),this.deliveryHandler.setInvalidateCacheCallback(()=>{this.navigationLookAhead.invalidateCache()}),this.deliveryHandler.setUpdateNavigationValidityCallback(()=>{this.navigationValidityService.updateNavigationValidity()}),this.deliveryHandler.setClearSuspendedActivityCallback(()=>{this.terminationHandler.clearSuspendedActivity()}),this.deliveryValidator.setContentDeliveredGetter(()=>this.deliveryHandler.hasContentBeenDelivered()),this.navigationValidityService.setGetEffectiveHideLmsUiCallback(e=>this.deliveryHandler.getEffectiveHideLmsUi(e)),this.stateManager.setGetEffectiveHideLmsUiCallback(e=>this.deliveryHandler.getEffectiveHideLmsUi(e)),this.stateManager.setGetEffectiveAuxiliaryResourcesCallback(e=>this.deliveryHandler.getEffectiveAuxiliaryResources(e)),this.stateManager.setContentDeliveredAccessors(()=>this.deliveryHandler.hasContentBeenDelivered(),e=>this.deliveryHandler.setContentDelivered(e))}processNavigationRequest(e,t=null,i){const s=this.navigationValidityService.validateRequest(e,t);if(!s.valid)return new at(!1,null,s.exception);if(s.terminationRequest){const t=!!s.sequencingRequest,r=this.terminationHandler.processTerminationRequest(s.terminationRequest,t,i);if(!r.valid)return new at(!1,null,r.exception||"TB.2.3-1");if(null!==r.sequencingRequest&&(t||r.sequencingRequest!==ae.EXIT)&&(s.sequencingRequest=r.sequencingRequest),!s.sequencingRequest)return s.terminationRequest!==ae.EXIT_ALL&&s.terminationRequest!==ae.ABANDON_ALL||this.fireEvent("onSequencingSessionEnd",{reason:s.terminationRequest===ae.EXIT_ALL?"exit_all":"abandon_all",navigationRequest:e}),new at(!0,null)}if(s.sequencingRequest){const t=this.sequencingProcess.sequencingRequestProcess(s.sequencingRequest,s.targetActivityId);if(t.endSequencingSession)return this.fireEvent("onSequencingSessionEnd",{reason:"end_of_content",exception:t.exception,navigationRequest:e}),new at(!1,null,t.exception||"SESSION_ENDED");if(t.exception)return new at(!1,null,t.exception);if(t.deliveryRequest===ce.DELIVER&&t.targetActivity)return this.activityTree.root&&(this.rollupProcess.validateRollupStateConsistency(this.activityTree.root)||this.fireEvent("onSequencingDebug",{message:"Rollup state inconsistency detected before delivery",activityId:this.activityTree.root.id})),this.rollupProcess.processGlobalObjectiveMapping(t.targetActivity,this.globalObjectiveService.getMap()),this.processDelivery(t.targetActivity)}return new at(!1,null,"OP.1-1")}processDelivery(e){if(this.enhancedDeliveryValidation){const t=this.deliveryValidator.validateTreeConsistency(e);if(!t.consistent)return new at(!1,null,t.exception);const i=this.deliveryValidator.validateResources(e);if(!i.available)return new at(!1,null,i.exception);const s=this.deliveryValidator.validateConcurrentDelivery(e);if(!s.allowed)return new at(!1,null,s.exception);const r=this.deliveryValidator.validateDependencies(e);if(!r.satisfied)return new at(!1,null,r.exception)}const t=this.deliveryHandler.processDeliveryRequest(e);return t.valid&&(this.deliveryHandler.contentDeliveryEnvironmentProcess(t.targetActivity),this.navigationLookAhead.invalidateCache(),this.activityTree.root&&this.rollupProcess.validateRollupStateConsistency(this.activityTree.root)),t}hasContentBeenDelivered(){return this.deliveryHandler.hasContentBeenDelivered()}isDeliveryInProgress(){return this.deliveryHandler.isDeliveryInProgress()}resetContentDelivered(){this.deliveryHandler.resetContentDelivered()}setContentDelivered(e){this.deliveryHandler.setContentDelivered(e)}updateNavigationValidity(){this.navigationValidityService.updateNavigationValidity()}synchronizeGlobalObjectives(){this.globalObjectiveService.synchronize(this.activityTree.root,this.rollupProcess)}getGlobalObjectiveMap(){return this.globalObjectiveService.getMap()}getGlobalObjectiveMapSnapshot(){return this.globalObjectiveService.getSnapshot()}restoreGlobalObjectiveMapSnapshot(e){this.globalObjectiveService.restoreSnapshot(e)}updateGlobalObjective(e,t){this.globalObjectiveService.updateObjective(e,t)}getSequencingState(){return this.stateManager.getState()}restoreSequencingState(e){return this.stateManager.restoreState(e)}getSuspensionState(){return this.stateManager.getSuspensionState()}restoreSuspensionState(e){this.stateManager.restoreSuspensionState(e)}getNavigationLookAhead(){return this.navigationValidityService.getAllPredictions()}predictContinueEnabled(){return this.navigationValidityService.predictContinueEnabled()}predictPreviousEnabled(){return this.navigationValidityService.predictPreviousEnabled()}predictChoiceEnabled(e){return this.navigationValidityService.predictChoiceEnabled(e)}getAvailableChoices(){return this.navigationValidityService.getAvailableChoices()}invalidateNavigationCache(){this.navigationValidityService.invalidateCache()}applyDeliveryControls(e){e.sequencingControls.completionSetByContent||e.completionStatus===j&&(e.completionStatus=O,e.wasAutoCompleted=!0),e.sequencingControls.objectiveSetByContent||e.successStatus===R&&(e.successStatus=M,e.wasAutoSatisfied=!0)}getEffectiveHideLmsUi(e){return this.deliveryHandler.getEffectiveHideLmsUi(e)}getEffectiveAuxiliaryResources(e){return this.deliveryHandler.getEffectiveAuxiliaryResources(e)}getContentActivityData(e){return this.deliveryHandler.getContentActivityData(e)}terminationRequestProcess(request,e,t){return this.terminationHandler.processTerminationRequest(request,e,t)}contentDeliveryEnvironmentProcess(e){this.deliveryHandler.contentDeliveryEnvironmentProcess(e)}endAttemptProcess(e){this.terminationHandler.endAttempt(e)}handleExitTermination(e,t){return this.terminationHandler.handleExitTermination(e,t)}fireEvent(e,t){try{this.eventCallback&&this.eventCallback(e,t)}catch(t){console.warn(`Failed to fire sequencing event ${e}: ${t}`)}}}class _t{sequencing;cmi;adl;eventService;loggingService;activityDeliveryService;rollupProcess;overallSequencingProcess=null;sequencingProcess=null;eventListeners={};configuration;isInitialized=!1;isSequencingActive=!1;lastCMIValues=new Map;lastSequencingResult=null;constructor(e,cmi,adl,t,i,s={}){this.sequencing=e,this.cmi=cmi,this.adl=adl,this.eventService=t,this.loggingService=i,this.configuration={autoRollupOnCMIChange:!0,autoProgressOnCompletion:!1,validateNavigationRequests:!0,enableEventSystem:!0,logLevel:"info",now:()=>new Date,...s},this.activityDeliveryService=new Ee(t,i,{onDeliverActivity:e=>this.handleActivityDelivery(e),onUnloadActivity:e=>this.handleActivityUnload(e),onSequencingComplete:result=>this.handleSequencingComplete(result),onSequencingError:e=>this.handleSequencingError(e)}),this.rollupProcess=new et,this.configuration.now&&ie.setNowProvider(this.configuration.now),this.setupCMIChangeWatchers(),this.createSequencingProcesses()}createSequencingProcesses(){try{if(this.sequencing.initialized||this.sequencing.initialize(),this.sequencing.adlNav=this.adl.nav,this.sequencing.activityTree.root){const e={};this.configuration.now&&(e.now=this.configuration.now),this.configuration.getAttemptElapsedSeconds&&(e.getAttemptElapsedSeconds=this.configuration.getAttemptElapsedSeconds),this.configuration.getActivityElapsedSeconds&&(e.getActivityElapsedSeconds=this.configuration.getActivityElapsedSeconds),this.sequencingProcess=new Ae(this.sequencing.activityTree,this.sequencing.sequencingRules,this.sequencing.sequencingControls,this.adl.nav,e);const t={};this.configuration.now&&(t.now=this.configuration.now),t.defaultHideLmsUi=[...this.sequencing.hideLmsUi],this.sequencing.auxiliaryResources.length>0&&(t.defaultAuxiliaryResources=this.sequencing.auxiliaryResources.map(e=>({resourceId:e.resourceId,purpose:e.purpose}))),t.getCMIData=()=>this.getCMIDataForTransfer(),this.overallSequencingProcess=new gt(this.sequencing.activityTree,this.sequencingProcess,this.rollupProcess,this.adl.nav,(e,t)=>this.handleSequencingProcessEvent(e,t),t),this.sequencing.overallSequencingProcess=this.overallSequencingProcess,this.isInitialized=!0,this.log("info","Sequencing processes created and ready for navigation")}}catch(e){this.log("error","Failed to create sequencing processes: "+e)}}initialize(){try{return this.log("info","Initializing sequencing service for SCO session"),this.isInitialized||this.createSequencingProcesses(),this.shouldAutoStartSequencing()&&!this.isSequencingActive&&this.startSequencing(),this.initializeCMITracking(),this.fireEvent("onSequencingStart",this.sequencing.getCurrentActivity()),this.log("info","Sequencing service initialized successfully"),d}catch(e){const t="Failed to initialize sequencing service: "+e;return this.log("error",t),this.fireEvent("onSequencingError",t,"initialization"),h}}terminate(){try{return this.log("info","Terminating sequencing service"),this.triggerFinalRollup(),this.endSequencing(),this.isInitialized=!1,this.fireEvent("onSequencingEnd"),this.log("info","Sequencing service terminated successfully"),d}catch(e){const t="Failed to terminate sequencing service: "+e;return this.log("error",t),this.fireEvent("onSequencingError",t,"termination"),h}}processNavigationRequest(request,e,t){if(!this.isInitialized||!this.overallSequencingProcess)return this.log("warn",`Navigation request '${request}' ignored - sequencing not initialized`),!1;try{this.log("info",`Processing navigation request: ${request}${e?` (target: ${e})`:""}${t?` (exit: ${t})`:""}`),this.fireEvent("onNavigationRequest",request,e);const i=this.parseNavigationRequest(request);if(null===i)return this.log("warn","Invalid navigation request: "+request),!1;const s=this.overallSequencingProcess.processNavigationRequest(i,e||null,t),r={deliveryRequest:s.valid?ce.DELIVER:ce.DO_NOT_DELIVER,targetActivity:s.targetActivity,exception:s.exception||null,endSequencingSession:!1};return this.lastSequencingResult=r,s.valid&&s.targetActivity?(this.activityDeliveryService.processSequencingResult(r),this.overallSequencingProcess.updateNavigationValidity(),this.log("info",`Navigation request '${request}' resulted in activity delivery: ${s.targetActivity.id}`),!0):(s.exception?(this.log("warn",`Navigation request '${request}' failed: ${s.exception}`),this.fireEvent("onSequencingError",s.exception,"navigation")):this.log("info",`Navigation request '${request}' completed with no activity delivery`),s.valid)}catch(e){const t=`Error processing navigation request '${request}': ${e}`;return this.log("error",t),this.fireEvent("onSequencingError",t,"navigation"),!1}}triggerRollupOnCMIChange(e,t,i){if(this.configuration.autoRollupOnCMIChange&&this.isInitialized&&["cmi.completion_status","cmi.success_status","cmi.score.scaled","cmi.score.raw","cmi.score.min","cmi.score.max","cmi.progress_measure","cmi.objectives.n.success_status","cmi.objectives.n.completion_status","cmi.objectives.n.score.scaled"].some(t=>e.startsWith(t)))try{this.log("debug",`Triggering rollup due to CMI change: ${e} = ${i} (was ${t})`);const s=this.sequencing.getCurrentActivity();if(!s)return void this.log("debug","No current activity for rollup");this.updateActivityFromCMI(s),this.rollupProcess.overallRollupProcess(s),this.overallSequencingProcess&&this.overallSequencingProcess.synchronizeGlobalObjectives(),this.overallSequencingProcess&&this.overallSequencingProcess.updateNavigationValidity(),this.fireEvent("onRollupComplete",s),this.log("debug","Rollup completed for activity: "+s.id)}catch(e){const t="Error during rollup on CMI change: "+e;this.log("error",t),this.fireEvent("onSequencingError",t,"rollup")}}setEventListeners(e){this.eventListeners={...this.eventListeners,...e},this.log("debug","Sequencing event listeners updated")}updateConfiguration(e){this.configuration={...this.configuration,...e},this.log("debug","Sequencing configuration updated")}getSequencingState(){return{isInitialized:this.isInitialized,isActive:this.isSequencingActive,currentActivity:this.sequencing.getCurrentActivity(),rootActivity:this.sequencing.getRootActivity(),lastSequencingResult:this.lastSequencingResult}}getOverallSequencingProcess(){return this.overallSequencingProcess}isDeliveryInProgress(){return this.overallSequencingProcess?.isDeliveryInProgress()??!1}setupCMIChangeWatchers(){}initializeCMITracking(){this.lastCMIValues.set("cmi.completion_status",this.cmi.completion_status),this.lastCMIValues.set("cmi.success_status",this.cmi.success_status),this.lastCMIValues.set("cmi.progress_measure",this.cmi.progress_measure),this.cmi.score&&(this.lastCMIValues.set("cmi.score.scaled",this.cmi.score.scaled),this.lastCMIValues.set("cmi.score.raw",this.cmi.score.raw))}shouldAutoStartSequencing(){return!(!this.sequencing.activityTree.root||this.sequencing.getCurrentActivity())}startSequencing(){if(this.overallSequencingProcess)try{this.processNavigationRequest("start")&&(this.isSequencingActive=!0,this.log("info","Automatic sequencing started"))}catch(e){this.log("error","Failed to start automatic sequencing: "+e)}}endSequencing(){this.isSequencingActive=!1,this.activityDeliveryService.reset()}triggerFinalRollup(){try{const e=this.sequencing.getCurrentActivity();e&&(this.updateActivityFromCMI(e),this.rollupProcess.overallRollupProcess(e),this.overallSequencingProcess&&this.overallSequencingProcess.synchronizeGlobalObjectives(),this.log("info","Final rollup completed"))}catch(e){this.log("error","Error during final rollup: "+e)}}updateActivityFromCMI(e){if("unknown"!==this.cmi.completion_status&&(e.completionStatus=this.cmi.completion_status,e.attemptProgressStatus=!0),"unknown"!==this.cmi.success_status&&(e.successStatus=this.cmi.success_status,e.objectiveSatisfiedStatus="passed"===this.cmi.success_status,e.objectiveMeasureStatus=!0,e.primaryObjective&&(e.primaryObjective.progressStatus=!0)),""!==this.cmi.progress_measure){const t=parseFloat(this.cmi.progress_measure);isNaN(t)||(e.progressMeasure=t,e.progressMeasureStatus=!0)}if(this.cmi.score&&""!==this.cmi.score.scaled){const t=parseFloat(this.cmi.score.scaled);isNaN(t)||(e.objectiveNormalizedMeasure=t,e.objectiveMeasureStatus=!0,e.primaryObjective&&(e.primaryObjective.progressStatus=!0))}e.primaryObjective&&e.primaryObjective.updateFromActivity(e)}getCMIDataForTransfer(){const e={completion_status:this.cmi.completion_status,success_status:this.cmi.success_status,progress_measure:this.cmi.progress_measure,score:{scaled:this.cmi.score?.scaled||"",raw:this.cmi.score?.raw||"",min:this.cmi.score?.min||"",max:this.cmi.score?.max||""},objectives:[]};if(this.cmi.objectives&&this.cmi.objectives.childArray)for(const t of this.cmi.objectives.childArray){const i=t;i.id&&e.objectives.push({id:i.id,success_status:i.success_status,completion_status:i.completion_status,progress_measure:i.progress_measure,score:{scaled:i.score?.scaled||"",raw:i.score?.raw||"",min:i.score?.min||"",max:i.score?.max||""}})}return e}parseNavigationRequest(request){let e=request;if(e.startsWith("_")&&"_none_"!==e&&(e=e.substring(1)),request.includes("choice"))return ut.CHOICE;if(request.includes("jump"))return ut.JUMP;switch(e){case"start":return ut.START;case"resumeAll":return ut.RESUME_ALL;case"continue":return ut.CONTINUE;case"previous":return ut.PREVIOUS;case"exit":return ut.EXIT;case"exitAll":return ut.EXIT_ALL;case"abandon":return ut.ABANDON;case"abandonAll":return ut.ABANDON_ALL;case"suspendAll":return ut.SUSPEND_ALL;case"_none_":return ut.NOT_VALID;default:return null}}handleActivityDelivery(e){this.log("info",`Activity delivered: ${e.id} - ${e.title}`),this.fireEvent("onActivityDelivery",e)}handleActivityUnload(e){this.log("info",`Activity unloaded: ${e.id} - ${e.title}`),this.fireEvent("onActivityUnload",e)}handleSequencingComplete(result){this.log("debug","Sequencing completed",result)}handleSequencingError(e){this.log("error","Sequencing error: "+e),this.fireEvent("onSequencingError",e,"sequencing")}fireEvent(e,...t){if(this.configuration.enableEventSystem){"onSequencingDebug"!==e&&this.fireDebugEvent(e+" fired",{eventType:e,argsLength:t.length});try{const i=this.eventListeners[e];if(i&&"function"==typeof i)try{i(...t),this.log("debug",`Internal listener for ${e} executed successfully`)}catch(t){this.log("error",`Internal listener for ${e} failed: ${t}`)}try{this.eventService.processListeners("Sequencing."+e,t[0],...t.slice(1)),this.log("debug",`Event service listeners for ${e} processed`)}catch(t){this.log("warn",`Event service failed for ${e}: ${t}`)}try{if("undefined"!=typeof window&&window.scormSequencingEvents){const i=window.scormSequencingEvents;i[e]&&"function"==typeof i[e]&&(i[e](...t),this.log("debug",`Global listener for ${e} executed`))}}catch(t){this.log("warn",`Global listener for ${e} failed: ${t}`)}}catch(t){this.log("error",`Critical error firing event ${e}: ${t}`)}}}fireDebugEvent(e,t){try{const i=this.eventListeners.onSequencingDebug;i&&"function"==typeof i&&i(e,{timestamp:(new Date).toISOString(),...t});try{this.eventService.processListeners("Sequencing.onSequencingDebug",e,{timestamp:(new Date).toISOString(),...t})}catch(e){}}catch(e){console.debug("Debug event failed: "+e)}}fireActivityAttemptStart(e){this.fireEvent("onActivityAttemptStart",e),this.fireDebugEvent("Activity attempt started",{activityId:e.id,title:e.title,attemptCount:e.attemptCount})}fireActivityAttemptEnd(e){this.fireEvent("onActivityAttemptEnd",e),this.fireDebugEvent("Activity attempt ended",{activityId:e.id,title:e.title,completionStatus:e.completionStatus,successStatus:e.successStatus})}fireLimitConditionCheck(e,result){this.fireEvent("onLimitConditionCheck",e,result),this.fireDebugEvent("Limit condition check",{activityId:e.id,result:result,attemptCount:e.attemptCount,attemptLimit:e.attemptLimit})}fireNavigationValidityUpdate(e){this.fireEvent("onNavigationValidityUpdate",e),this.fireDebugEvent("Navigation validity updated",{validity:e})}fireSequencingStateChange(e){this.fireEvent("onSequencingStateChange",e),this.fireDebugEvent("Sequencing state changed",{stateKeys:Object.keys(e)})}handleSequencingProcessEvent(e,t){try{switch(e){case"onActivityDelivery":this.fireEvent("onActivityDelivery",t);break;case"onLimitConditionCheck":this.fireLimitConditionCheck(t.activity,t.result);break;case"onActivityAttemptStart":this.fireActivityAttemptStart(t);break;case"onActivityAttemptEnd":this.fireActivityAttemptEnd(t);break;case"onNavigationValidityUpdate":this.fireNavigationValidityUpdate(t);break;case"onSequencingSessionEnd":this.fireEvent("onSequencingSessionEnd",t);break;default:this.fireDebugEvent("Sequencing process event: "+e,t)}}catch(t){this.log("error",`Error handling sequencing process event ${e}: ${t}`)}}log(e,t,i){const s=["debug","info","warn","error"],r=this.configuration.logLevel||"info";if(s.indexOf(e)>=s.indexOf(r))switch(e){case"debug":this.loggingService.debug(`[Sequencing] ${t}${i?" - "+JSON.stringify(i):""}`);break;case"info":this.loggingService.info(`[Sequencing] ${t}${i?" - "+JSON.stringify(i):""}`);break;case"warn":this.loggingService.warn(`[Sequencing] ${t}${i?" - "+JSON.stringify(i):""}`);break;case"error":this.loggingService.error(`[Sequencing] ${t}${i?" - "+JSON.stringify(i):""}`)}}}class St{loadFromFlattenedJSON(e,t="",i,s,r){if(!s())return void console.error("loadFromFlattenedJSON can only be called before the call to lmsInitialize.");const n=/^(cmi\.interactions\.)(\d+)\.(.*)$/,o=/^(cmi\.objectives\.)(\d+)\.(.*)$/,interactions=[],objectives=[],a=[];for(const t in e)if({}.hasOwnProperty.call(e,t)){const i=t.match(n);if(i){interactions.push({key:t,value:e[t],index:+i[2],field:i[3]||""});continue}const s=t.match(o);if(s){objectives.push({key:t,value:e[t],index:+s[2],field:s[3]||""});continue}a.push({key:t,value:e[t]})}interactions.sort((e,t)=>e.index!==t.index?e.index-t.index:"id"===e.field?-1:"id"===t.field?1:"type"===e.field?-1:"type"===t.field?1:e.field.localeCompare(t.field)),objectives.sort((e,t)=>e.index!==t.index?e.index-t.index:"id"===e.field?-1:"id"===t.field?1:e.field.localeCompare(t.field)),a.sort((e,t)=>e.key.localeCompare(t.key));const c=e=>{e.forEach(e=>{const n={};n[e.key]=e.value,this.loadFromJSON(function(e){if(Object(e)!==e||Array.isArray(e))return e;const result={},pattern=/\.?([^.[\]]+)|\[(\d+)]/g;return Object.keys(e).filter(t=>({}.hasOwnProperty.call(e,t))).forEach(t=>{let i=result,s="";const r=RegExp(pattern);Array.from({length:t.match(RegExp(pattern,"g"))?.length??0},()=>r.exec(t)).forEach(e=>{e&&(i=i[s]??(i[s]=e[2]?[]:{}),s=e[2]||e[1]||"")}),i[s]=e[t]}),result[""]??result}(n),t,i,s,r)})};c(interactions),c(objectives),c(a)}loadFromJSON(e,t="",i,s,r){if(s()){t=void 0!==t?t:"cmi",r(e);for(const n in e)if({}.hasOwnProperty.call(e,n)&&e[n]){const o=(t?t+".":"")+n,a=e[n];if(a.constructor===Array){for(let e=0;a.length>e;e++)if(a[e]){const t=a[e],n=`${o}.${e}`;t.constructor===Object?this.loadFromJSON(t,n,i,s,r):i(n,t)}}else a.constructor===Object?this.loadFromJSON(a,o,i,s,r):i(o,a)}}else console.error("loadFromJSON can only be called before the call to lmsInitialize.")}renderCMIToJSONString(cmi,e){return e?JSON.stringify({cmi:cmi}):JSON.stringify({cmi:cmi},(e,t)=>void 0===t?null:t,2)}renderCMIToJSONObject(cmi,e){return JSON.parse(this.renderCMIToJSONString(cmi,e))}getCommitObject(e,t,i,s,r,n){const o=t||e,a=i?s(e,o):r(e,o);return[I.DEBUG,"1",1,"DEBUG"].includes(n)&&(console.debug("Commit (terminated: "+(e?"yes":"no")+"): "),console.debug(a)),a}}class ft{settings;error_codes;constructor(e,t){this.settings=e,this.error_codes=t}processHttpRequest(e,t,i=!1,s,r){return i?this._handleImmediateRequest(e,t):this._performSyncXHR(e,t)}_handleImmediateRequest(e,t){const i=this.settings.requestHandler(t)??t,{body:s}=this._prepareRequestBody(i),r=navigator.sendBeacon(e,new Blob([s],{type:"text/plain;charset=UTF-8"}));return{result:r?"true":"false",errorCode:r?0:this.error_codes.GENERAL_COMMIT_FAILURE||391}}_performSyncXHR(e,t){const i=this.settings.requestHandler(t)??t,{body:s,contentType:r}=this._prepareRequestBody(i),n=new XMLHttpRequest;n.open("POST",e,!1),n.setRequestHeader("Content-Type",r),Object.entries(this.settings.xhrHeaders).forEach(([e,t])=>{n.setRequestHeader(e,t+"")}),this.settings.xhrWithCredentials&&(n.withCredentials=!0);try{return n.send(s),this.settings.xhrResponseHandler(n)}catch(e){return{result:h,errorCode:this.error_codes.GENERAL_COMMIT_FAILURE||391,errorMessage:e instanceof Error?e.message:e+""}}}_prepareRequestBody(e){return{body:e instanceof Array?e.join("&"):JSON.stringify(e),contentType:e instanceof Array?"application/x-www-form-urlencoded":this.settings.commitRequestDataType}}updateSettings(e){this.settings=e}}function yt(e,t,i,s){return De(e,t,i,f.TYPE_MISMATCH,v,s)}function bt(e,t,i,s){if(""===t)throw new v(e,f.VALUE_OUT_OF_RANGE);return xe(e,t,i,f.VALUE_OUT_OF_RANGE,v)}const Ct=new class{validateScore(e,t,i,s,r,n,o){return De(e,t,i,r,o)&&(!s||xe(e,t,s,n,o))}validateScorm12Audio(e,t){return yt(e,t,D)&&bt(e,t,"-1#100")}validateScorm12Language(e,t){return yt(e,t,"^[\\s\\S]{0,255}$")}validateScorm12Speed(e,t){return yt(e,t,D)&&bt(e,t,"-100#100")}validateScorm12Text(e,t){return yt(e,t,D)&&bt(e,t,"-1#1")}validateReadOnly(e,t){if(t)throw new v(e,f.READ_ONLY_ELEMENT)}};class At{_timeout;_error_codes;_settings=q;_httpService;_eventService;_serializationService;_errorHandlingService;_loggingService;_offlineStorageService;_cmiValueAccessService;_courseId="";constructor(e,t,i,s,r,n,o,a,c){if(new.target===At)throw new TypeError("Cannot construct BaseAPI instances directly");this.currentState=0,this._error_codes=e,t&&(this.settings={...q,...t}),void 0!==t?.asyncCommit&&void 0===t.useAsynchronousCommits&&void 0===t.throttleCommits&&(console.warn("DEPRECATED: 'asyncCommit' setting is deprecated and will be removed in a future version. Use 'useAsynchronousCommits: true' and 'throttleCommits: true' instead."),t.asyncCommit&&(this.settings.useAsynchronousCommits=!0,this.settings.throttleCommits=!0)),!this.settings.useAsynchronousCommits&&this.settings.throttleCommits&&(console.warn("throttleCommits cannot be used with synchronous commits. Setting throttleCommits to false."),this.settings.throttleCommits=!1),this._loggingService=a||je(),this._loggingService.setLogLevel(this.settings.logLevel),this._loggingService.setLogHandler(this.settings.onLogMessage?this.settings.onLogMessage:N),i?this._httpService=i:this.settings.httpService?this._httpService=this.settings.httpService:this.settings.useAsynchronousCommits?(console.warn("WARNING: useAsynchronousCommits=true is not SCORM compliant. Commit failures will not be reported to the SCO, which may cause data loss. This setting should only be used for specific legacy compatibility cases."),this._httpService=new Me(this.settings,this._error_codes)):this._httpService=new ft(this.settings,this._error_codes),this._eventService=s||new qe((e,t,i,s)=>this.apiLog(e,t,i,s)),this._serializationService=r||new St,this._errorHandlingService=o||new Ie(this._error_codes,(e,t,i,s)=>this.apiLog(e,t,i||I.ERROR,s),(e,t)=>this.getLmsErrorMessageDetails(e,t),void 0),this.settings.enableOfflineSupport&&(this._offlineStorageService=c||new Ne(this.settings,this._error_codes,(e,t,i,s)=>this.apiLog(e,t,i,s)),this.settings.courseId&&(this._courseId=this.settings.courseId),this.settings.syncOnTerminate&&this._eventService.on("BeforeTerminate",()=>{this._offlineStorageService?.isDeviceOnline()&&this._courseId&&this._offlineStorageService.hasPendingOfflineData(this._courseId).then(e=>{if(e)return this.apiLog("BeforeTerminate","Syncing pending offline data before termination",I.INFO),this._offlineStorageService?.syncOfflineData()}).then(e=>{e?this.processListeners("OfflineDataSynced"):!1===e&&this.processListeners("OfflineDataSyncFailed")}).catch(e=>{this.apiLog("BeforeTerminate","Error syncing offline data: "+e,I.ERROR),this.processListeners("OfflineDataSyncFailed")})}),this._offlineStorageService&&this._courseId&&this._offlineStorageService.getOfflineData(this._courseId).then(e=>{e&&(this.apiLog("constructor","Found offline data to restore",I.INFO),this.loadFromJSON(e.runtimeData))}).catch(e=>{this.apiLog("constructor","Error retrieving offline data: "+e,I.ERROR)})),this._cmiValueAccessService=new Oe({errorCodes:this._error_codes,getLastErrorCode:()=>this.lastErrorCode,setLastErrorCode:e=>{this.lastErrorCode=e},throwSCORMError:(e,t,i)=>this.throwSCORMError(e,t,i),isInitialized:()=>this.isInitialized(),validateCorrectResponse:(e,t)=>this.validateCorrectResponse(e,t),checkForDuplicateId:(e,t)=>this._checkForDuplicateId(e,t),getChildElement:(e,t,i)=>this.getChildElement(e,t,i),apiLog:(e,t,i)=>this.apiLog(e,t,i),checkObjectHasProperty:(e,t)=>this._checkObjectHasProperty(e,t),getDataModel:()=>this})}startingData;currentState;get lastErrorCode(){return this._errorHandlingService?.lastErrorCode??"0"}set lastErrorCode(e){this._errorHandlingService&&(this._errorHandlingService.lastErrorCode=e)}get eventService(){return this._eventService}get loggingService(){return this._loggingService}commonReset(e){this.apiLog("reset","Called",I.INFO),this.settings={...this.settings,...e},this.clearScheduledCommit(),this.currentState=0,this.lastErrorCode="0",this._eventService.reset(),this.startingData={},this._offlineStorageService&&(this._offlineStorageService.updateSettings(this.settings),e?.courseId&&(this._courseId=e.courseId))}initialize(e,t,i){let s=h;return this.isInitialized()?this.throwSCORMError("api",this._error_codes.INITIALIZED,t):this.isTerminated()?this.throwSCORMError("api",this._error_codes.TERMINATED,i):(this.settings.selfReportSessionTime&&this.cmi.setStartTime(),this.currentState=1,this.lastErrorCode="0",s=d,this.processListeners(e),this.settings.enableOfflineSupport&&this._offlineStorageService&&this._courseId&&this.settings.syncOnInitialize&&this._offlineStorageService.isDeviceOnline()&&this._offlineStorageService.hasPendingOfflineData(this._courseId).then(t=>{t&&(this.apiLog(e,"Syncing pending offline data on initialization",I.INFO),this._offlineStorageService?.syncOfflineData().then(t=>{t&&(this.apiLog(e,"Successfully synced offline data",I.INFO),this.processListeners("OfflineDataSynced"))}))})),this.apiLog(e,"returned: "+s,I.INFO),this.clearSCORMError(s),s}apiLog(e,t,i,s){t=function(e,t,i){let s=e?(e+"").padEnd(20)+": ":"";return i&&(s+=i,s=s.padEnd(70)),s+=t??"",s}(e,t,s),this._loggingService.log(i,t)}get settings(){return this._settings}set settings(e){const t=this._settings;this._settings={...this._settings,...e},this._httpService?.updateSettings(this._settings),void 0!==e.logLevel&&e.logLevel!==t.logLevel&&this._loggingService?.setLogLevel(e.logLevel),void 0!==e.onLogMessage&&e.onLogMessage!==t.onLogMessage&&this._loggingService?.setLogHandler(e.onLogMessage)}terminate(e,t){let i=d,s=!1;if(this.isNotInitialized()){const e=this._error_codes.TERMINATION_BEFORE_INIT??0;this.throwSCORMError("api",e),112===e&&(i=h)}else if(t&&this.isTerminated()){const e=this._error_codes.MULTIPLE_TERMINATION??0;this.throwSCORMError("api",e),113===e&&(i=h)}else{s=!0,this.processListeners("BeforeTerminate");const result=this.storeData(!0);if((result.errorCode??0)>0)result.errorMessage&&this.apiLog("terminate","Terminate failed with error: "+result.errorMessage,I.ERROR),result.errorDetails&&this.apiLog("terminate","Error details: "+JSON.stringify(result.errorDetails),I.DEBUG),this.throwSCORMError("api",result.errorCode??0),i=h;else{this.currentState=2,t&&(this.lastErrorCode="0");const e=result?.result??d;i="boolean"==typeof e?e+"":e}this.processListeners(e)}return this.apiLog(e,"returned: "+i,I.INFO),s&&this.clearSCORMError(i),i}getValue(e,t,i){let s="";if(this.checkState(t,this._error_codes.RETRIEVE_BEFORE_INIT??0,this._error_codes.RETRIEVE_AFTER_TERM??0)){try{s=this.getCMIValue(i)}catch(e){s=this.handleValueAccessException(i,e,s)}this.processListeners(e,i)}return this.apiLog(e,": returned: "+s,I.INFO,i),void 0===s?"":("0"===this.lastErrorCode&&this.clearSCORMError(s),s)}setValue(e,t,i,s,r){void 0!==r&&(r+="");let n=h;if(this.checkState(i,this._error_codes.STORE_BEFORE_INIT??0,this._error_codes.STORE_AFTER_TERM??0)){try{n=this.setCMIValue(s,r)}catch(e){n=this.handleValueAccessException(s,e,n)}this.processListeners(e,s,r)}return void 0===n&&(n=h),this.lastErrorCode+""=="0"&&this.settings.autocommit&&this.scheduleCommit(1e3*this.settings.autocommitSeconds,t),this.apiLog(e,": "+r+": result: "+n,I.INFO,s),"0"===this.lastErrorCode&&this.clearSCORMError(n),n}commit(e,t=!1){this.clearScheduledCommit();let i=d;if(this.isNotInitialized()){const e=this._error_codes.COMMIT_BEFORE_INIT??0;this.throwSCORMError("api",e),142===e&&(i=h)}else if(t&&this.isTerminated()){const e=this._error_codes.COMMIT_AFTER_TERM??0;this.throwSCORMError("api",e),143===e&&(i=h)}else{const result=this.storeData(!1);(result.errorCode??0)>0&&(result.errorMessage&&this.apiLog("commit","Commit failed with error: "+result.errorMessage,I.ERROR),result.errorDetails&&this.apiLog("commit","Error details: "+JSON.stringify(result.errorDetails),I.DEBUG),this.throwSCORMError("api",result.errorCode));const s=result?.result??h;i="boolean"==typeof s?s+"":s,this.apiLog(e," Result: "+i,I.DEBUG,"HttpRequest"),t&&(this.lastErrorCode="0"),this.processListeners(e),this.settings.enableOfflineSupport&&this._offlineStorageService&&this._offlineStorageService.isDeviceOnline()&&this._courseId&&this._offlineStorageService.hasPendingOfflineData(this._courseId).then(t=>{t&&(this.apiLog(e,"Syncing pending offline data",I.INFO),this._offlineStorageService?.syncOfflineData().then(t=>{t?(this.apiLog(e,"Successfully synced offline data",I.INFO),this.processListeners("OfflineDataSynced")):this.apiLog(e,"Failed to sync some offline data",I.WARN)}))})}return this.apiLog(e,"returned: "+i,I.INFO),this.isNotInitialized()||t&&this.isTerminated()||this.clearSCORMError(i),i}getLastError(e){const t=this.lastErrorCode+"";return this.processListeners(e),this.apiLog(e,"returned: "+t,I.INFO),t}getErrorString(e,t){let i="";return null!==t&&""!==t&&(i=this.getLmsErrorMessageDetails(t),this.processListeners(e)),i.length>255&&(i=i.substring(0,255)),this.apiLog(e,"returned: "+i,I.INFO),i}getDiagnostic(e,t){let i="";const s=""===t?this.lastErrorCode+"":t;if(null!==s&&""!==s){const t=this._errorHandlingService.lastDiagnostic;i=t&&s+""==this.lastErrorCode+""?t:this.getLmsErrorMessageDetails(s,!0),this.processListeners(e)}return i.length>255&&(i=i.substring(0,255)),this.apiLog(e,"returned: "+i,I.INFO),i}checkState(e,t,i){return this.isNotInitialized()?(this.throwSCORMError("api",t),!1):!e||!this.isTerminated()||(this.throwSCORMError("api",i),!1)}_checkForDuplicateId(e,t){const i=(e,t)=>{if(e&&"object"==typeof e&&t in e){const i=e[t];return i instanceof b?i:void 0}},s=(e,t,i)=>{for(let s=0;e.childArray.length>s;s++)if(s!==t){const t=e.childArray[s];if(t&&"object"==typeof t&&"id"in t&&t.id===i)return!0}return!1},r=e.match(/^cmi\.objectives\.(\d+)\.id$/);if(r&&r[1]){const e=parseInt(r[1],10),objectives=i(this.cmi,"objectives");return!!objectives&&s(objectives,e,t)}const n=e.match(/^cmi\.interactions\.(\d+)\.id$/);if(n&&n[1]){const e=parseInt(n[1],10),interactions=i(this.cmi,"interactions");return!!interactions&&s(interactions,e,t)}const o=e.match(/^cmi\.interactions\.(\d+)\.objectives\.(\d+)\.id$/);if(o&&o[1]&&o[2]){const e=parseInt(o[1],10),r=parseInt(o[2],10),interactions=i(this.cmi,"interactions");if(interactions){const n=interactions.childArray[e];if(n){const objectives=i(n,"objectives");if(objectives)return s(objectives,r,t)}}return!1}return!1}getLmsErrorMessageDetails(e,t=!1){throw Error("The getLmsErrorMessageDetails method has not been implemented")}getCMIValue(e){throw Error("The getCMIValue method has not been implemented")}setCMIValue(e,t){throw Error("The setCMIValue method has not been implemented")}_commonSetCMIValue(e,t,i,s){return this._cmiValueAccessService.setCMIValue(e,t,i,s)}_commonGetCMIValue(e,t,i){return this._cmiValueAccessService.getCMIValue(e,t,i)}isInitialized(){return 1===this.currentState}isNotInitialized(){return 0===this.currentState}isTerminated(){return 2===this.currentState}on(e,t){this._eventService.on(e,t)}off(e,t){this._eventService.off(e,t)}clear(e){this._eventService.clear(e)}processListeners(e,t,i){this._eventService.processListeners(e,t,i)}throwSCORMError(e,t,i){this._errorHandlingService.throwSCORMError(e,t??0,i)}clearSCORMError(e){this._errorHandlingService.clearSCORMError(e)}loadFromFlattenedJSON(e,t){t||(t=""),this._serializationService.loadFromFlattenedJSON(e,t,(e,t)=>this.setCMIValue(e,t),()=>this.isNotInitialized(),e=>{this.startingData=e})}getFlattenedCMI(){return r(this.renderCMIToJSONObject())}loadFromJSON(e,t=""){t&&""!==t||Object.hasOwnProperty.call(e,"cmi")||Object.hasOwnProperty.call(e,"adl")||(t="cmi"),this._serializationService.loadFromJSON(e,t,(e,t)=>this.setCMIValue(e,t),()=>this.isNotInitialized(),e=>{this.startingData=e})}renderCMIToJSONString(){return this._serializationService.renderCMIToJSONString(this.cmi,this.settings.sendFullCommit)}renderCMIToJSONObject(){return this._serializationService.renderCMIToJSONObject(this.cmi,this.settings.sendFullCommit)}processHttpRequest(e,t,i=!1){return this.settings.enableOfflineSupport&&this._offlineStorageService&&!this._offlineStorageService.isDeviceOnline()&&this._courseId?(this.apiLog("processHttpRequest","Device is offline, storing data locally",I.INFO),t&&"object"==typeof t&&"cmi"in t?this._offlineStorageService.storeOffline(this._courseId,t):(this.apiLog("processHttpRequest","Invalid commit data format for offline storage",I.ERROR),{result:h,errorCode:this._error_codes.GENERAL??101})):this._httpService.processHttpRequest(e,t,i,(e,t,i,s)=>this.apiLog(e,t,i,s),(e,t,i)=>this.processListeners(e,t,i))}scheduleCommit(e,t){this._timeout||(this._timeout=new Q(this,e,t),this.apiLog("scheduleCommit","scheduled",I.DEBUG,""))}clearScheduledCommit(){this._timeout&&(this._timeout.cancel(),this._timeout=void 0,this.apiLog("clearScheduledCommit","cleared",I.DEBUG,""))}_checkObjectHasProperty(e,t){return null!=e&&"object"==typeof e&&(Object.hasOwnProperty.call(e,t)||null!=Object.getOwnPropertyDescriptor(Object.getPrototypeOf(e),t)||t in e)}handleValueAccessException(e,t,i){return t instanceof u?(this.lastErrorCode=t.errorCode+"",""!==i&&(i=h),this.throwSCORMError(e,t.errorCode,t.errorMessage)):this.throwSCORMError(e,this._error_codes.GENERAL,t instanceof Error&&t.message?t.message:"Unknown error"),i}getCommitObject(e){return this._serializationService.getCommitObject(e,this.settings.alwaysSendTotalTime,this.settings.renderCommonCommitFields,(e,t)=>this.renderCommitObject(e,t),(e,t)=>this.renderCommitCMI(e,t),this.settings.logLevel)}}class Et extends a{__children=m.student_preference_children;_audio_level="1";_language="";_delivery_speed="1";_audio_captioning="0";constructor(){super("cmi.learner_preference")}reset(){this._initialized=!1}get _children(){return this.__children}set _children(_children){throw new _(this._cmi_element+"._children",y.READ_ONLY_ELEMENT)}get audio_level(){return this._audio_level}set audio_level(audio_level){Le(this._cmi_element+".audio_level",audio_level,V)&&Pe(this._cmi_element+".audio_level",audio_level,"0#999.9999999")&&(this._audio_level=audio_level)}get language(){return this._language}set language(language){Le(this._cmi_element+".language",language,"^([a-zA-Z]{1,8}|i|x)(-[a-zA-Z0-9-]{2,8})?$|^$")&&(this._language=language)}get delivery_speed(){return this._delivery_speed}set delivery_speed(delivery_speed){if(Le(this._cmi_element+".delivery_speed",delivery_speed,V)&&Pe(this._cmi_element+".delivery_speed",delivery_speed,"0#999.9999999")){if(0===parseFloat(delivery_speed))throw new _(this._cmi_element+".delivery_speed",y.VALUE_OUT_OF_RANGE);this._delivery_speed=delivery_speed}}get audio_captioning(){return this._audio_captioning}set audio_captioning(audio_captioning){Le(this._cmi_element+".audio_captioning",audio_captioning,"^-?([0-9]+)$")&&Pe(this._cmi_element+".audio_captioning",audio_captioning,"-1#1")&&(this._audio_captioning=audio_captioning)}toJSON(){this.jsonString=!0;const result={audio_level:this.audio_level,language:this.language,delivery_speed:this.delivery_speed,audio_captioning:this.audio_captioning};return this.jsonString=!1,result}}class Mt extends b{constructor(){super({CMIElement:"cmi.interactions",children:m.interactions_children,errorCode:y.READ_ONLY_ELEMENT,errorClass:_})}}class wt extends a{_id="";_idIsSet=!1;_type="";_timestamp="";_weighting="";_learner_response="";_result="";_latency="";_description="";constructor(){super("cmi.interactions.n"),this.objectives=new b({CMIElement:"cmi.interactions.n.objectives",errorCode:y.READ_ONLY_ELEMENT,errorClass:_,children:m.objectives_children}),this.correct_responses=new b({CMIElement:"cmi.interactions.n.correct_responses",errorCode:y.READ_ONLY_ELEMENT,errorClass:_,children:m.correct_responses_children})}objectives;correct_responses;initialize(){super.initialize(),this.objectives?.initialize(),this.correct_responses?.initialize()}reset(){this._initialized=!1,this._id="",this._idIsSet=!1,this._type="",this._timestamp="",this._weighting="",this._learner_response="",this._result="",this._latency="",this._description="",this.objectives=new b({CMIElement:"cmi.interactions.n.objectives",errorCode:y.READ_ONLY_ELEMENT,errorClass:_,children:m.objectives_children}),this.correct_responses=new b({CMIElement:"cmi.interactions.n.correct_responses",errorCode:y.READ_ONLY_ELEMENT,errorClass:_,children:m.correct_responses_children})}get id(){return this._id}set id(id){if(""===id||""===id.trim())throw new _(this._cmi_element+".id",y.TYPE_MISMATCH);if(this._idIsSet&&this._id!==id)throw new _(this._cmi_element+".id",y.GENERAL_SET_FAILURE);Le(this._cmi_element+".id",id,B)&&(this._id=id,this._idIsSet=!0)}get type(){return this._type}set type(type){if(this.initialized&&""===this._id)throw new _(this._cmi_element+".type",y.DEPENDENCY_NOT_ESTABLISHED);Le(this._cmi_element+".type",type,"^(true-false|choice|fill-in|long-fill-in|matching|performance|sequencing|likert|numeric|other)$")&&(this._type=type)}get timestamp(){return this._timestamp}set timestamp(timestamp){if(this.initialized&&""===this._id)throw new _(this._cmi_element+".timestamp",y.DEPENDENCY_NOT_ESTABLISHED);Le(this._cmi_element+".timestamp",timestamp,F)&&(this._timestamp=timestamp)}get weighting(){return this._weighting}set weighting(weighting){if(this.initialized&&""===this._id)throw new _(this._cmi_element+".weighting",y.DEPENDENCY_NOT_ESTABLISHED);Le(this._cmi_element+".weighting",weighting,V)&&(this._weighting=weighting)}get learner_response(){return this._learner_response}set learner_response(learner_response){if(this.initialized&&(""===this._type||""===this._id))throw new _(this._cmi_element+".learner_response",y.DEPENDENCY_NOT_ESTABLISHED);{let e=[];const t=K[this.type];if(!t)throw new _(this._cmi_element+".learner_response",y.TYPE_MISMATCH);if(t?.delimiter?e=learner_response.split("[,]"===t.delimiter?",":t.delimiter):e[0]=learner_response,0>=e.length||e.length>t.max)throw new _(this._cmi_element+".learner_response",y.GENERAL_SET_FAILURE);{const i=RegExp(t.format);for(let s=0;e.length>s;s++)if(t?.delimiter2){const r="[.]"===t.delimiter2?".":t.delimiter2,n=e[s]?.split(r);if(2!==n?.length)throw new _(this._cmi_element+".learner_response",y.TYPE_MISMATCH);if("performance"===this.type&&(""===n[0]||""===n[1]))throw new _(this._cmi_element+".learner_response",y.TYPE_MISMATCH);if(!n[0]?.match(i))throw new _(this._cmi_element+".learner_response",y.TYPE_MISMATCH);if(!t.format2||!n[1]?.match(RegExp(t.format2)))throw new _(this._cmi_element+".learner_response",y.TYPE_MISMATCH)}else{if(!e[s]?.match(i))throw new _(this._cmi_element+".learner_response",y.TYPE_MISMATCH);if(""!==e[s]&&t.unique)for(let t=0;s>t;t++)if(e[s]===e[t])throw new _(this._cmi_element+".learner_response",y.TYPE_MISMATCH)}}this._learner_response=learner_response}}get result(){return this._result}set result(result){Le(this._cmi_element+".result",result,"^(correct|incorrect|unanticipated|neutral|-?([0-9]{1,4})(\\.[0-9]{1,18})?)$")&&(this._result=result)}get latency(){return this._latency}set latency(latency){if(this.initialized&&""===this._id)throw new _(this._cmi_element+".latency",y.DEPENDENCY_NOT_ESTABLISHED);Le(this._cmi_element+".latency",latency,k)&&(this._latency=latency)}get description(){return this._description}set description(description){if(this.initialized&&""===this._id)throw new _(this._cmi_element+".description",y.DEPENDENCY_NOT_ESTABLISHED);Le(this._cmi_element+".description",description,P,!0)&&(this._description=description)}toJSON(){this.jsonString=!0;const result={id:this.id,type:this.type,objectives:this.objectives,timestamp:this.timestamp,weighting:this.weighting,learner_response:this.learner_response,result:this.result,latency:this.latency,description:this.description,correct_responses:this.correct_responses};return this.jsonString=!1,result}}class Rt extends a{_id="";constructor(){super("cmi.interactions.n.objectives.n")}reset(){this._initialized=!1,this._id=""}get id(){return this._id}set id(id){if(""===id||""===id.trim())throw new _(this._cmi_element+".id",y.TYPE_MISMATCH);Le(this._cmi_element+".id",id,B)&&(this._id=id)}toJSON(){this.jsonString=!0;const result={id:this.id};return this.jsonString=!1,result}}function Ot(e){return e.replace(/[[\]]/g,"")}function Tt(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function jt(text,e){const t=Tt(e),i=RegExp("(?<!\\\\)"+t,"g"),s=RegExp("\\\\"+t,"g");return text.split(i).map(t=>t.replace(s,e))}function It(text,e){const t=Tt(e),i=RegExp("(?<!\\\\)"+t),s=RegExp("\\\\"+t,"g"),r=text.split(i),n=r[0]??"";return 1===r.length?[n.replace(s,e)]:[n.replace(s,e),r.slice(1).join(e).replace(s,e)]}class qt extends a{_pattern="";_interactionType;constructor(e){super("cmi.interactions.n.correct_responses.n"),this._interactionType=e}reset(){this._initialized=!1,this._pattern=""}get pattern(){return this._pattern}set pattern(pattern){if("fill-in"!==this._interactionType||""!==pattern){if(Le(this._cmi_element+".pattern",pattern,"^.*$")){if(this._interactionType){const e=J[this._interactionType];e&&("matching"===this._interactionType&&/\\[.,]/.test(pattern)||function(type,pattern,e){if(pattern.trim()!==pattern)throw new _("cmi.interactions.n.correct_responses.n.pattern",y.TYPE_MISMATCH);const t=e.delimiter?Ot(e.delimiter):null,i=t?jt(pattern,t):[pattern];for(const e of i)if(e.trim()!==e)throw new _("cmi.interactions.n.correct_responses.n.pattern",y.TYPE_MISMATCH);if("fill-in"===type&&""===pattern)return;const s=e.delimiter?Ot(e.delimiter):null;let r;if(r=s?jt(pattern,s):[pattern],!e.delimiter&&pattern.includes(","))throw new _("cmi.interactions.n.correct_responses.n.pattern",y.TYPE_MISMATCH);if((e.unique||!1===e.duplicate)&&new Set(r).size!==r.length)throw new _("cmi.interactions.n.correct_responses.n.pattern",y.TYPE_MISMATCH);if(0===r.length||r.length>e.max)throw new _("cmi.interactions.n.correct_responses.n.pattern",y.GENERAL_SET_FAILURE);const n=RegExp(e.format),o=e.format2?RegExp(e.format2):null,a=e=>{if(!n.test(e))throw new _("cmi.interactions.n.correct_responses.n.pattern",y.TYPE_MISMATCH)},c=(e,t)=>{if(!t)throw new _("cmi.interactions.n.correct_responses.n.pattern",y.TYPE_MISMATCH);const i=Ot(t),s=e.split(RegExp("(?<!\\\\)"+Tt(i),"g")).map(e=>e.replace(RegExp("\\\\"+Tt(i),"g"),i));if(2!==s.length||""===s[0]||""===s[1])throw new _("cmi.interactions.n.correct_responses.n.pattern",y.TYPE_MISMATCH);if(void 0!==s[0]&&!n.test(s[0])||o&&void 0!==s[1]&&!o.test(s[1]))throw new _("cmi.interactions.n.correct_responses.n.pattern",y.TYPE_MISMATCH)};for(const t of r)switch(type){case"numeric":{const i=e.delimiter?Ot(e.delimiter):":",s=t.split(i);if(1>s.length||s.length>2)throw new _("cmi.interactions.n.correct_responses.n.pattern",y.TYPE_MISMATCH);s.forEach(a);break}case"performance":{const i=e.delimiter2;if(!i)throw new _("cmi.interactions.n.correct_responses.n.pattern",y.TYPE_MISMATCH);const s=It(t,Ot(i));if(2!==s.length)throw new _("cmi.interactions.n.correct_responses.n.pattern",y.TYPE_MISMATCH);const[r,a]=s;if(""===r||""===a||r===a)throw new _("cmi.interactions.n.correct_responses.n.pattern",y.TYPE_MISMATCH);if(void 0===r||!n.test(r))throw new _("cmi.interactions.n.correct_responses.n.pattern",y.TYPE_MISMATCH);if(o&&void 0!==a&&!o.test(a))throw new _("cmi.interactions.n.correct_responses.n.pattern",y.TYPE_MISMATCH);break}default:e.delimiter2?c(t,e.delimiter2):a(t)}}(this._interactionType,pattern,e))}this._pattern=pattern}}else this._pattern=""}toJSON(){this.jsonString=!0;const result={pattern:this.pattern};return this.jsonString=!1,result}}class Nt extends a{__children;__score_range;__invalid_error_code;__invalid_type_code;__invalid_range_code;__decimal_regex;__error_class;_raw="";_min="";_max;constructor(e){super(e.CMIElement),this.__children=e.score_children||"raw,min,max",this.__score_range=!!e.score_range&&"0#100",this._max=e.max||""===e.max?e.max:"100",this.__invalid_error_code=e.invalidErrorCode||f.INVALID_SET_VALUE,this.__invalid_type_code=e.invalidTypeCode||f.TYPE_MISMATCH,this.__invalid_range_code=e.invalidRangeCode||f.VALUE_OUT_OF_RANGE,this.__decimal_regex=e.decimalRegex||"^-?([0-9]{0,10})(\\.[0-9]*)?$",this.__error_class=e.errorClass}reset(){this._initialized=!1,this._raw="",this._min=""}get _children(){return this.__children}set _children(_children){throw new this.__error_class(this._cmi_element+"._children",this.__invalid_error_code)}get raw(){return this._raw}set raw(e){Ct.validateScore(this._cmi_element+".raw",e,this.__decimal_regex,this.__score_range,this.__invalid_type_code,this.__invalid_range_code,this.__error_class)&&(this._raw=e)}get min(){return this._min}set min(e){Ct.validateScore(this._cmi_element+".min",e,this.__decimal_regex,this.__score_range,this.__invalid_type_code,this.__invalid_range_code,this.__error_class)&&(this._min=e)}get max(){return this._max}set max(e){Ct.validateScore(this._cmi_element+".max",e,this.__decimal_regex,this.__score_range,this.__invalid_type_code,this.__invalid_range_code,this.__error_class)&&(this._max=e)}getScoreObject(){const e={};return Number.isNaN(Number.parseFloat(this.raw))||(e.raw=Number.parseFloat(this.raw)),Number.isNaN(Number.parseFloat(this.min))||(e.min=Number.parseFloat(this.min)),Number.isNaN(Number.parseFloat(this.max))||(e.max=Number.parseFloat(this.max)),e}toJSON(){this.jsonString=!0;const result={raw:this.raw,min:this.min,max:this.max};return this.jsonString=!1,result}}class Dt extends Nt{_scaled="";constructor(){super({CMIElement:"cmi.score",score_children:m.score_children,max:"",invalidErrorCode:y.READ_ONLY_ELEMENT,invalidTypeCode:y.TYPE_MISMATCH,invalidRangeCode:y.VALUE_OUT_OF_RANGE,decimalRegex:V,errorClass:_})}reset(){this._initialized=!1,this._scaled="",this._raw="",this._min="",this._max=""}get scaled(){return this._scaled}set scaled(e){Le(this._cmi_element+".scaled",e,V)&&Pe(this._cmi_element+".scaled",e,"-1#1")&&(this._scaled=e)}getScoreObject(){const e=super.getScoreObject();return Number.isNaN(Number.parseFloat(this.scaled))||(e.scaled=Number.parseFloat(this.scaled)),e}toJSON(){this.jsonString=!0;const result={scaled:this.scaled,raw:this.raw,min:this.min,max:this.max};return this.jsonString=!1,result}}class xt extends b{constructor(){super({CMIElement:"cmi.comments_from_lms",children:m.comments_children,errorCode:y.READ_ONLY_ELEMENT,errorClass:_})}}class Lt extends b{constructor(){super({CMIElement:"cmi.comments_from_learner",children:m.comments_children,errorCode:y.READ_ONLY_ELEMENT,errorClass:_})}}class Pt extends a{_comment="";_location="";_timestamp="";_readOnlyAfterInit;constructor(e=!1){super("cmi.comments_from_learner.n"),this._comment="",this._location="",this._timestamp="",this._readOnlyAfterInit=e}reset(){this._initialized=!1}get comment(){return this._comment}set comment(comment){if(this.initialized&&this._readOnlyAfterInit)throw new _(this._cmi_element+".comment",y.READ_ONLY_ELEMENT);Le(this._cmi_element+".comment",comment,z,!0)&&(this._comment=comment)}get location(){return this._location}set location(location){if(this.initialized&&this._readOnlyAfterInit)throw new _(this._cmi_element+".location",y.READ_ONLY_ELEMENT);Le(this._cmi_element+".location",location,"^[\\u0000-\\uFFFF]{0,250}$")&&(this._location=location)}get timestamp(){return this._timestamp}set timestamp(timestamp){if(this.initialized&&this._readOnlyAfterInit)throw new _(this._cmi_element+".timestamp",y.READ_ONLY_ELEMENT);Le(this._cmi_element+".timestamp",timestamp,F)&&(this._timestamp=timestamp)}toJSON(){this.jsonString=!0;const result={comment:this.comment,location:this.location,timestamp:this.timestamp};return this.jsonString=!1,result}}class zt extends b{constructor(){super({CMIElement:"cmi.objectives",children:m.objectives_children,errorCode:y.READ_ONLY_ELEMENT,errorClass:_})}findObjectiveById(id){return this.childArray.find(e=>e.id===id)}findObjectiveByIndex(e){return this.childArray[e]}setObjectiveByIndex(e,t){this.childArray[e]=t}}class Ft extends a{_id="";_idIsSet=!1;_success_status="unknown";_completion_status="unknown";_progress_measure="";_description="";constructor(){super("cmi.objectives.n"),this.score=new Dt}reset(){this._initialized=!1,this._id="",this._idIsSet=!1,this._success_status="unknown",this._completion_status="unknown",this._progress_measure="",this._description="",this.score?.reset()}score;initialize(){super.initialize(),this.score?.initialize()}get id(){return this._id}set id(id){if(""===id||""===id.trim())throw new _(this._cmi_element+".id",y.TYPE_MISMATCH);if(this._idIsSet&&this._id!==id)throw new _(this._cmi_element+".id",y.GENERAL_SET_FAILURE);Le(this._cmi_element+".id",id,B)&&(this._id=id,this._idIsSet=!0)}get success_status(){return this._success_status}set success_status(success_status){if(this.initialized&&""===this._id)throw new _(this._cmi_element+".success_status",y.DEPENDENCY_NOT_ESTABLISHED);Le(this._cmi_element+".success_status",success_status,$)&&(this._success_status=success_status)}get completion_status(){return this._completion_status}set completion_status(completion_status){if(this.initialized&&""===this._id)throw new _(this._cmi_element+".completion_status",y.DEPENDENCY_NOT_ESTABLISHED);Le(this._cmi_element+".completion_status",completion_status,U)&&(this._completion_status=completion_status)}get progress_measure(){return this._progress_measure}set progress_measure(progress_measure){if(this.initialized&&""===this._id)throw new _(this._cmi_element+".progress_measure",y.DEPENDENCY_NOT_ESTABLISHED);Le(this._cmi_element+".progress_measure",progress_measure,V)&&Pe(this._cmi_element+".progress_measure",progress_measure,"0#1")&&(this._progress_measure=progress_measure)}get description(){return this._description}set description(description){if(this.initialized&&""===this._id)throw new _(this._cmi_element+".description",y.DEPENDENCY_NOT_ESTABLISHED);Le(this._cmi_element+".description",description,P,!0)&&(this._description=description)}toJSON(){this.jsonString=!0;const result={id:this.id,success_status:this.success_status,completion_status:this.completion_status,progress_measure:this.progress_measure,description:this.description,score:this.score};return this.jsonString=!1,result}fromJSON(e){e&&"object"==typeof e&&("string"==typeof e.id&&(this.id=e.id),"string"==typeof e.success_status&&(this.success_status=e.success_status),"string"==typeof e.completion_status&&(this.completion_status=e.completion_status),void 0!==e.progress_measure&&(this.progress_measure=e.progress_measure+""),"string"==typeof e.description&&(this.description=e.description),e.score&&"object"==typeof e.score&&(void 0!==e.score.scaled&&(this.score.scaled=e.score.scaled+""),void 0!==e.score.raw&&(this.score.raw=e.score.raw+""),void 0!==e.score.min&&(this.score.min=e.score.min+""),void 0!==e.score.max&&(this.score.max=e.score.max+"")))}}class kt extends a{__version="1.0";__children=m.cmi_children;constructor(){super("cmi")}get _version(){return this.__version}set _version(_version){throw new _(this._cmi_element+"._version",y.READ_ONLY_ELEMENT)}get _children(){return this.__children}set _children(_children){throw new _(this._cmi_element+"._children",y.READ_ONLY_ELEMENT)}reset(){this._initialized=!1}}class Vt extends a{_learner_id="";_learner_name="";constructor(){super("cmi")}get learner_id(){return this._learner_id}set learner_id(learner_id){if(this.initialized)throw new _(this._cmi_element+".learner_id",y.READ_ONLY_ELEMENT);this._learner_id=learner_id}get learner_name(){return this._learner_name}set learner_name(learner_name){if(this.initialized)throw new _(this._cmi_element+".learner_name",y.READ_ONLY_ELEMENT);this._learner_name=learner_name}reset(){this._initialized=!1}}class Ht extends a{_completion_status="unknown";_success_status="unknown";_progress_measure="";constructor(){super("cmi")}get completion_status(){return this._completion_status}set completion_status(completion_status){Le(this._cmi_element+".completion_status",completion_status,U)&&(this._completion_status=completion_status)}get success_status(){return this._success_status}set success_status(success_status){Le(this._cmi_element+".success_status",success_status,$)&&(this._success_status=success_status)}get progress_measure(){return this._progress_measure}set progress_measure(progress_measure){Le(this._cmi_element+".progress_measure",progress_measure,V)&&Pe(this._cmi_element+".progress_measure",progress_measure,"0#1")&&(this._progress_measure=progress_measure)}reset(){this._initialized=!1,this._completion_status="unknown",this._success_status="unknown",this._progress_measure=""}}class Bt extends a{_entry="";_exit="";_session_time="PT0H0M0S";_total_time="PT0S";constructor(){super("cmi")}get entry(){return this._entry}set entry(entry){if(this.initialized)throw new _(this._cmi_element+".entry",y.READ_ONLY_ELEMENT);this._entry=entry}get exit(){if(!this.jsonString)throw new _(this._cmi_element+".exit",y.WRITE_ONLY_ELEMENT);return this._exit}getExitValueInternal(){return this._exit}set exit(exit){"logout"===exit&&console.warn('SCORM 2004: cmi.exit value "logout" is deprecated per 4th Edition. Consider using "normal" or "suspend" instead.'),Le(this._cmi_element+".exit",exit,"^(time-out|suspend|logout|normal)$",!0)&&(this._exit=exit)}get session_time(){if(!this.jsonString)throw new _(this._cmi_element+".session_time",y.WRITE_ONLY_ELEMENT);return this._session_time}set session_time(session_time){Le(this._cmi_element+".session_time",session_time,k)&&(this._session_time=session_time)}get total_time(){return this._total_time}set total_time(total_time){if(this.initialized)throw new _(this._cmi_element+".total_time",y.READ_ONLY_ELEMENT);this._total_time=total_time}getCurrentTotalTime(e){let s=this._session_time;if(void 0!==e){const i=(new Date).getTime()-e;s=t(i/1e3)}return function(e,s){const r=RegExp(k);return t(i(e,r)+i(s,r))}(this._total_time,s)}reset(){this._initialized=!1,this._entry="ab-initio",this._exit="",this._session_time="PT0H0M0S"}}class Ut extends a{_location="";_launch_data="";_suspend_data="";constructor(){super("cmi")}get location(){return this._location}set location(location){Le(this._cmi_element+".location",location,"^[\\u0000-\\uFFFF]{0,1000}$")&&(this._location=location)}get launch_data(){return this._launch_data}set launch_data(launch_data){if(this.initialized)throw new _(this._cmi_element+".launch_data",y.READ_ONLY_ELEMENT);this._launch_data=launch_data}get suspend_data(){return this._suspend_data}set suspend_data(suspend_data){Le(this._cmi_element+".suspend_data",suspend_data,L,!0)&&(this._suspend_data=suspend_data)}reset(){this._initialized=!1,this._location="",this._suspend_data=""}}class $t extends a{_credit="credit";_mode="normal";_time_limit_action="continue,no message";_max_time_allowed="";constructor(){super("cmi")}get credit(){return this._credit}set credit(credit){if(this.initialized)throw new _(this._cmi_element+".credit",y.READ_ONLY_ELEMENT);if(!/^(credit|no-credit)$/.test(credit))throw new _(this._cmi_element+".credit",y.TYPE_MISMATCH);this._credit=credit}get mode(){return this._mode}set mode(mode){if(this.initialized)throw new _(this._cmi_element+".mode",y.READ_ONLY_ELEMENT);if(!/^(browse|normal|review)$/.test(mode))throw new _(this._cmi_element+".mode",y.TYPE_MISMATCH);this._mode=mode}get time_limit_action(){return this._time_limit_action}set time_limit_action(time_limit_action){if(this.initialized)throw new _(this._cmi_element+".time_limit_action",y.READ_ONLY_ELEMENT);if(!/^(exit,message|exit,no message|continue,message|continue,no message)$/.test(time_limit_action))throw new _(this._cmi_element+".time_limit_action",y.TYPE_MISMATCH);this._time_limit_action=time_limit_action}get max_time_allowed(){return this._max_time_allowed}set max_time_allowed(max_time_allowed){if(this.initialized)throw new _(this._cmi_element+".max_time_allowed",y.READ_ONLY_ELEMENT);if(""!==max_time_allowed){if(!RegExp(k).test(max_time_allowed))throw new _(this._cmi_element+".max_time_allowed",y.TYPE_MISMATCH);this._max_time_allowed=max_time_allowed}else this._max_time_allowed=max_time_allowed}reset(){this._initialized=!1}}class Gt extends a{_scaled_passing_score="";_completion_threshold="";constructor(){super("cmi")}get scaled_passing_score(){return this._scaled_passing_score}set scaled_passing_score(scaled_passing_score){if(this.initialized)throw new _(this._cmi_element+".scaled_passing_score",y.READ_ONLY_ELEMENT??404);if(""===scaled_passing_score)return void(this._scaled_passing_score=scaled_passing_score);if(!RegExp(V).test(scaled_passing_score))throw new _(this._cmi_element+".scaled_passing_score",y.TYPE_MISMATCH??406);const e=parseFloat(scaled_passing_score);if(-1>e||e>1)throw new _(this._cmi_element+".scaled_passing_score",y.VALUE_OUT_OF_RANGE??407);this._scaled_passing_score=scaled_passing_score}get completion_threshold(){return this._completion_threshold}set completion_threshold(e){if(this.initialized)throw new _(this._cmi_element+".completion_threshold",y.READ_ONLY_ELEMENT??404);if(""===e)return void(this._completion_threshold=e);if(!RegExp(V).test(e))throw new _(this._cmi_element+".completion_threshold",y.TYPE_MISMATCH??406);const t=parseFloat(e);if(0>t||t>1)throw new _(this._cmi_element+".completion_threshold",y.VALUE_OUT_OF_RANGE??407);this._completion_threshold=e}reset(){this._initialized=!1}}class Yt extends c{constructor(e=!1){super("cmi"),this.metadata=new kt,this.learner=new Vt,this.status=new Ht,this.session=new Bt,this.content=new Ut,this.settings=new $t,this.thresholds=new Gt,this.learner_preference=new Et,this.score=new Dt,this.comments_from_learner=new Lt,this.comments_from_lms=new xt,this.interactions=new Mt,this.objectives=new zt,e&&this.initialize()}metadata;learner;status;session;content;settings;thresholds;learner_preference;score;comments_from_learner;comments_from_lms;interactions;objectives;initialize(){super.initialize(),this.metadata?.initialize(),this.learner?.initialize(),this.status?.initialize(),this.session?.initialize(),this.content?.initialize(),this.settings?.initialize(),this.thresholds?.initialize(),this.learner_preference?.initialize(),this.score?.initialize(),this.comments_from_learner?.initialize(),this.comments_from_lms?.initialize(),this.interactions?.initialize(),this.objectives?.initialize()}reset(){this._initialized=!1,this.metadata?.reset(),this.learner?.reset(),this.status?.reset(),this.session?.reset(),this.content?.reset(),this.settings?.reset(),this.thresholds?.reset(),this.objectives?.reset(!0),this.interactions?.reset(!0),this.score?.reset(),this.comments_from_learner?.reset(),this.comments_from_lms?.reset(),this.learner_preference?.reset()}get _version(){return this.metadata._version}set _version(_version){this.metadata._version=_version}get _children(){return this.metadata._children}set _children(_children){this.metadata._children=_children}get completion_status(){return this.status.completion_status}set completion_status(completion_status){this.status.completion_status=completion_status}get completion_threshold(){return this.thresholds.completion_threshold}set completion_threshold(e){this.thresholds.completion_threshold=e}get credit(){return this.settings.credit}set credit(credit){this.settings.credit=credit}get entry(){return this.session.entry}set entry(entry){this.session.entry=entry}get exit(){return this.session.jsonString=this.jsonString,this.session.exit}set exit(exit){this.session.exit=exit}getExitValueInternal(){return this.session.getExitValueInternal()}get launch_data(){return this.content.launch_data}set launch_data(launch_data){this.content.launch_data=launch_data}get learner_id(){return this.learner.learner_id}set learner_id(learner_id){this.learner.learner_id=learner_id}get learner_name(){return this.learner.learner_name}set learner_name(learner_name){this.learner.learner_name=learner_name}get location(){return this.content.location}set location(location){this.content.location=location}get max_time_allowed(){return this.settings.max_time_allowed}set max_time_allowed(max_time_allowed){this.settings.max_time_allowed=max_time_allowed}get mode(){return this.settings.mode}set mode(mode){this.settings.mode=mode}get progress_measure(){return this.status.progress_measure}set progress_measure(progress_measure){this.status.progress_measure=progress_measure}get scaled_passing_score(){return this.thresholds.scaled_passing_score}set scaled_passing_score(scaled_passing_score){this.thresholds.scaled_passing_score=scaled_passing_score}get session_time(){return this.session.jsonString=this.jsonString,this.session.session_time}set session_time(session_time){this.session.session_time=session_time}get success_status(){return this.status.success_status}set success_status(success_status){this.status.success_status=success_status}get suspend_data(){return this.content.suspend_data}set suspend_data(suspend_data){this.content.suspend_data=suspend_data}get time_limit_action(){return this.settings.time_limit_action}set time_limit_action(time_limit_action){this.settings.time_limit_action=time_limit_action}get total_time(){return this.session.total_time}set total_time(total_time){this.session.total_time=total_time}getCurrentTotalTime(){return this.session.getCurrentTotalTime(this.start_time)}toJSON(){this.jsonString=!0,this.session.jsonString=!0;const result={comments_from_learner:this.comments_from_learner,comments_from_lms:this.comments_from_lms,completion_status:this.completion_status,completion_threshold:this.completion_threshold,credit:this.credit,entry:this.entry,exit:this.exit,interactions:this.interactions,launch_data:this.launch_data,learner_id:this.learner_id,learner_name:this.learner_name,learner_preference:this.learner_preference,location:this.location,max_time_allowed:this.max_time_allowed,mode:this.mode,objectives:this.objectives,progress_measure:this.progress_measure,scaled_passing_score:this.scaled_passing_score,score:this.score,session_time:this.session_time,success_status:this.success_status,suspend_data:this.suspend_data,time_limit_action:this.time_limit_action,total_time:this.total_time};return this.jsonString=!1,this.session.jsonString=!1,result}}class Wt extends a{constructor(){super("adl"),this.nav=new Kt,this.data=new Jt}nav;data=new Jt;_sequencing=null;initialize(){super.initialize(),this.nav?.initialize()}reset(){this._initialized=!1,this.nav?.reset()}get sequencing(){return this._sequencing}set sequencing(e){this._sequencing=e,e&&(e.adlNav=this.nav,this.nav.sequencing=e)}toJSON(){this.jsonString=!0;const result={nav:this.nav,data:this.data};return this.jsonString=!1,result}}class Kt extends a{_request="_none_";_sequencing=null;constructor(){super("adl.nav"),this.request_valid=new ei,this.request_valid.setParentNav(this)}request_valid;get sequencing(){return this._sequencing}set sequencing(e){this._sequencing=e}initialize(){super.initialize(),this.request_valid?.initialize()}reset(){this._initialized=!1,this._request="_none_",this._sequencing&&(this._sequencing.adlNav=null),this._sequencing=null,this.request_valid?.reset()}get request(){return this._request}set request(request){Le(this._cmi_element+".request",request,G)&&(this._request=request)}toJSON(){this.jsonString=!0;const result={request:this.request};return this.jsonString=!1,result}}class Jt extends b{constructor(){super({CMIElement:"adl.data",children:m.adl_data_children,errorCode:y.READ_ONLY_ELEMENT,errorClass:_})}}class Xt extends a{_id="";_store="";_idIsSet=!1;_storeIsSet=!1;constructor(){super("adl.data.n")}reset(){this._initialized=!1,this._idIsSet=!1,this._storeIsSet=!1}get id(){return this._id}set id(id){if(this.initialized)throw new _(this._cmi_element+".id",y.READ_ONLY_ELEMENT);Le(this._cmi_element+".id",id,B)&&(this._id=id,this._idIsSet=!0)}get store(){if(this.initialized&&!this._storeIsSet)throw new _(this._cmi_element+".store",y.VALUE_NOT_INITIALIZED);return this._store}set store(e){if(this.initialized&&!this._idIsSet)throw new _(this._cmi_element+".store",y.DEPENDENCY_NOT_ESTABLISHED);Le(this._cmi_element+".store",e,L)&&(this._store=e,this._storeIsSet=!0)}toJSON(){this.jsonString=!0;const result={id:this._id,store:this._store};return this.jsonString=!1,result}}class Qt{_parentNav=null;_staticValues={};setParentNav(nav){this._parentNav=nav}_isTargetValid(e){if(this._parentNav?.sequencing?.overallSequencingProcess){const t=this._parentNav.sequencing.overallSequencingProcess;if(t.predictChoiceEnabled)return t.predictChoiceEnabled(e)?"true":"false"}const t=this._staticValues[e];return t===A?"true":t===E?"false":"unknown"}getAll(){return{...this._staticValues}}setAll(e){this._staticValues={...e}}}class Zt{_parentNav=null;_staticValues={};setParentNav(nav){this._parentNav=nav}_isTargetValid(e){if(this._parentNav?.sequencing?.activityTree)return this._parentNav.sequencing.activityTree.getActivity(e)?"true":"false";const t=this._staticValues[e];return t===A?"true":t===E?"false":"unknown"}getAll(){return{...this._staticValues}}setAll(e){this._staticValues={...e}}}class ei extends a{_continue="unknown";_previous="unknown";_choice;_jump;_exit="unknown";_exitAll="unknown";_abandon="unknown";_abandonAll="unknown";_suspendAll="unknown";_parentNav=null;constructor(){super("adl.nav.request_valid"),this._choice=new Qt,this._jump=new Zt}setParentNav(nav){this._parentNav=nav,this._choice.setParentNav(nav),this._jump.setParentNav(nav)}reset(){this._initialized=!1,this._continue="unknown",this._previous="unknown",this._choice.setAll({}),this._jump.setAll({}),this._exit="unknown",this._exitAll="unknown",this._abandon="unknown",this._abandonAll="unknown",this._suspendAll="unknown"}get continue(){if(this._parentNav?.sequencing?.overallSequencingProcess){const e=this._parentNav.sequencing.overallSequencingProcess;if(e.predictContinueEnabled)return e.predictContinueEnabled()?"true":"false"}return this._continue}set continue(e){if(this.initialized)throw new _(this._cmi_element+".continue",y.READ_ONLY_ELEMENT);Le(this._cmi_element+".continue",e,Y)&&(this._continue=e)}get previous(){if(this._parentNav?.sequencing?.overallSequencingProcess){const e=this._parentNav.sequencing.overallSequencingProcess;if(e.predictPreviousEnabled)return e.predictPreviousEnabled()?"true":"false"}return this._previous}set previous(e){if(this.initialized)throw new _(this._cmi_element+".previous",y.READ_ONLY_ELEMENT);Le(this._cmi_element+".previous",e,Y)&&(this._previous=e)}get choice(){return this._choice}set choice(e){if(this.initialized)throw new _(this._cmi_element+".choice",y.READ_ONLY_ELEMENT);if("object"!=typeof e)throw new _(this._cmi_element+".choice",y.TYPE_MISMATCH);const t={};for(const i in e)if({}.hasOwnProperty.call(e,i)&&Le(this._cmi_element+".choice."+i,e[i]||"",Y)&&Le(this._cmi_element+".choice."+i,i,W)){const s=e[i];"true"===s?t[i]=A:"false"===s?t[i]=E:"unknown"===s&&(t[i]=C)}this._choice.setAll(t)}get jump(){return this._jump}set jump(e){if(this.initialized)throw new _(this._cmi_element+".jump",y.READ_ONLY_ELEMENT);if("object"!=typeof e)throw new _(this._cmi_element+".jump",y.TYPE_MISMATCH);const t={};for(const i in e)if({}.hasOwnProperty.call(e,i)&&Le(this._cmi_element+".jump."+i,e[i]||"",Y)&&Le(this._cmi_element+".jump."+i,i,W)){const s=e[i];"true"===s?t[i]=A:"false"===s?t[i]=E:"unknown"===s&&(t[i]=C)}this._jump.setAll(t)}get exit(){return this._exit}set exit(e){if(this.initialized)throw new _(this._cmi_element+".exit",y.READ_ONLY_ELEMENT);Le(this._cmi_element+".exit",e,Y)&&(this._exit=e)}get exitAll(){return this._exitAll}set exitAll(e){if(this.initialized)throw new _(this._cmi_element+".exitAll",y.READ_ONLY_ELEMENT);Le(this._cmi_element+".exitAll",e,Y)&&(this._exitAll=e)}get abandon(){return this._abandon}set abandon(e){if(this.initialized)throw new _(this._cmi_element+".abandon",y.READ_ONLY_ELEMENT);Le(this._cmi_element+".abandon",e,Y)&&(this._abandon=e)}get abandonAll(){return this._abandonAll}set abandonAll(e){if(this.initialized)throw new _(this._cmi_element+".abandonAll",y.READ_ONLY_ELEMENT);Le(this._cmi_element+".abandonAll",e,Y)&&(this._abandonAll=e)}get suspendAll(){return this._suspendAll}set suspendAll(e){if(this.initialized)throw new _(this._cmi_element+".suspendAll",y.READ_ONLY_ELEMENT);Le(this._cmi_element+".suspendAll",e,Y)&&(this._suspendAll=e)}toJSON(){this.jsonString=!0;const result={previous:this.previous,continue:this.continue,choice:this._choice.getAll(),jump:this._jump.getAll(),exit:this.exit,exitAll:this.exitAll,abandon:this.abandon,abandonAll:this.abandonAll,suspendAll:this.suspendAll};return this.jsonString=!1,result}}class ti extends a{_root=null;_currentActivity=null;_suspendedActivity=null;_activities=new Map;constructor(e){super("activityTree"),e&&(this.root=e)}initialize(){super.initialize(),this._root&&this._root.initialize()}reset(){this._initialized=!1,this._currentActivity=null,this._suspendedActivity=null,this._activities.clear(),this._root&&(this._root.reset(),this._activities.set(this._root.id,this._root),this._addActivitiesToMap(this._root))}get root(){return this._root}set root(e){if(null!==e&&!(e instanceof Ue))throw new _(this._cmi_element+".root",y.TYPE_MISMATCH);this._activities.clear(),this._root=e,e&&(this._activities.set(e.id,e),this._addActivitiesToMap(e))}_addActivitiesToMap(e){for(const t of e.children)this._activities.set(t.id,t),this._addActivitiesToMap(t)}get currentActivity(){return this._currentActivity}set currentActivity(e){if(null!==e&&!(e instanceof Ue))throw new _(this._cmi_element+".currentActivity",y.TYPE_MISMATCH);if(this._currentActivity){this._currentActivity.isActive=!1;let e=this._currentActivity.parent;for(;e;)e.isActive=!1,e=e.parent}if(this._currentActivity=e,e){e.isActive=!0;let t=e.parent;for(;t;)t.isActive=!0,t=t.parent}}setCurrentActivityWithoutActivation(e){if(null!==e&&!(e instanceof Ue))throw new _(this._cmi_element+".currentActivity",y.TYPE_MISMATCH);if(this._currentActivity){const t=new Set;if(e){t.add(e);let i=e.parent;for(;i;)t.add(i),i=i.parent}this._currentActivity.isActive=!1;let i=this._currentActivity.parent;for(;i;)t.has(i)||(i.isActive=!1),i=i.parent}this._currentActivity=e}get suspendedActivity(){return this._suspendedActivity}set suspendedActivity(e){if(null!==e&&!(e instanceof Ue))throw new _(this._cmi_element+".suspendedActivity",y.TYPE_MISMATCH);if(this._suspendedActivity){this._suspendedActivity.isSuspended=!1;let e=this._suspendedActivity.parent;for(;e;)e.isSuspended=!1,e=e.parent}if(this._suspendedActivity=e,e){e.isSuspended=!0;let t=e.parent;for(;t;)t.isSuspended=!0,t=t.parent}}getActivity(id){return this._activities.get(id)||null}getAllActivities(){return Array.from(this._activities.values())}getParent(e){return e.parent}getChildren(e,t=!0){return t?e.getAvailableChildren():e.children}getSiblings(e){return e.parent?e.parent.children.filter(t=>t!==e):[]}getNextSibling(e,t=!0){if(!e.parent)return null;let i=t?e.parent.getAvailableChildren():e.parent.children,s=i.indexOf(e);return-1===s&&t&&(i=e.parent.children,s=i.indexOf(e)),-1===s||s===i.length-1?null:i[s+1]??null}getPreviousSibling(e,t=!0){if(!e.parent)return null;let i=t?e.parent.getAvailableChildren():e.parent.children,s=i.indexOf(e);return-1===s&&t&&(i=e.parent.children,s=i.indexOf(e)),s>0?i[s-1]??null:null}getFirstChild(e,t=!0){const i=t?e.getAvailableChildren():e.children;return 0===i.length?null:i[0]??null}getLastChild(e,t=!0){const i=t?e.getAvailableChildren():e.children;return 0===i.length?null:i[i.length-1]??null}getCommonAncestor(e,t){const i=[];let s=e;for(;s;)i.unshift(s),s=s.parent;for(s=t;s;){if(i.includes(s))return s;s=s.parent}return null}toJSON(){this.jsonString=!0;const result={root:this._root,currentActivity:this._currentActivity?this._currentActivity.id:null,suspendedActivity:this._suspendedActivity?this._suspendedActivity.id:null};return this.jsonString=!1,result}}class ii extends a{_activityTree;_sequencingRules;_sequencingControls;_rollupRules;_adlNav=null;_hideLmsUi=[];_auxiliaryResources=[];_overallSequencingProcess=null;constructor(){super("sequencing"),this._activityTree=new ti,this._sequencingRules=new re,this._sequencingControls=new ge,this._rollupRules=new He}initialize(){super.initialize(),this._activityTree.initialize(),this._sequencingRules.initialize(),this._sequencingControls.initialize(),this._rollupRules.initialize()}reset(){this._initialized=!1,this._activityTree.reset(),this._sequencingRules.reset(),this._sequencingControls.reset(),this._rollupRules.reset(),this._hideLmsUi=[],this._auxiliaryResources=[]}get activityTree(){return this._activityTree}set activityTree(e){if(!(e instanceof ti))throw new _(this._cmi_element+".activityTree",y.TYPE_MISMATCH);this._activityTree=e}get sequencingRules(){return this._sequencingRules}set sequencingRules(e){if(!(e instanceof re))throw new _(this._cmi_element+".sequencingRules",y.TYPE_MISMATCH);this._sequencingRules=e}get sequencingControls(){return this._sequencingControls}set sequencingControls(e){if(!(e instanceof ge))throw new _(this._cmi_element+".sequencingControls",y.TYPE_MISMATCH);this._sequencingControls=e}get hideLmsUi(){return[...this._hideLmsUi]}set hideLmsUi(e){this._hideLmsUi=[...e]}get auxiliaryResources(){return this._auxiliaryResources.map(e=>({...e}))}set auxiliaryResources(e){this._auxiliaryResources=e.map(e=>({...e}))}get rollupRules(){return this._rollupRules}set rollupRules(e){if(!(e instanceof He))throw new _(this._cmi_element+".rollupRules",y.TYPE_MISMATCH);this._rollupRules=e}get adlNav(){return this._adlNav}set adlNav(e){this._adlNav=e}get overallSequencingProcess(){return this._overallSequencingProcess}set overallSequencingProcess(e){this._overallSequencingProcess=e}processRollup(){const e=this._activityTree.root;e&&this._processRollupRecursive(e)}_processRollupRecursive(e){for(const t of e.children)this._processRollupRecursive(t);this._rollupRules.processRollup(e)}getCurrentActivity(){return this._activityTree.currentActivity}getRootActivity(){return this._activityTree.root}toJSON(){this.jsonString=!0;const result={activityTree:this._activityTree,sequencingRules:this._sequencingRules,sequencingControls:this._sequencingControls,rollupRules:this._rollupRules,adlNav:this._adlNav};return this.jsonString=!1,result}}class si{context;constructor(e){this.context=e}checkValidResponseType(e,t,i,s){let r=[];t?.delimiter?r=(i+"").split(t.delimiter):r[0]=i,r.length>0&&t.max>=r.length?this.context.checkCorrectResponseValue?this.context.checkCorrectResponseValue(e,s,r,i):this.checkCorrectResponseValue(e,s,r,i):r.length>t.max&&this.context.throwSCORMError(e,y.GENERAL_SET_FAILURE,"Data Model Element Pattern Too Long: "+i)}checkDuplicateChoiceResponse(e,t,i){const s=t.correct_responses._count;if("choice"===t.type)for(let r=0;s>r&&"0"===this.context.getLastErrorCode();r++){const s=t.correct_responses.childArray[r];s?.pattern===i&&this.context.throwSCORMError(e,y.GENERAL_SET_FAILURE,""+i)}}validateCorrectResponse(e,t,i){const s=+e.split(".")[4];if(!t)return void this.context.throwSCORMError(e,y.DEPENDENCY_NOT_ESTABLISHED,e);const r=t.correct_responses._count;this.checkDuplicateChoiceResponse(e,t,i);const n=J[t.type];n&&(void 0===n.limit||n.limit>r)?(this.checkValidResponseType(e,n,i,t.type),"0"===this.context.getLastErrorCode()&&(!n.duplicate||!this.checkDuplicatedPattern(t.correct_responses,s,i))||"0"===this.context.getLastErrorCode()&&""===i||"0"===this.context.getLastErrorCode()&&this.context.throwSCORMError(e,y.GENERAL_SET_FAILURE,`Data Model Element Pattern Already Exists: ${e} - ${i}`)):this.context.throwSCORMError(e,y.GENERAL_SET_FAILURE,`Data Model Element Collection Limit Reached: ${e} - ${i}`)}checkDuplicatedPattern(e,t,i){let s=!1;const r=e._count;for(let n=0;r>n&&!s;n++)if(n!==t){const t=e.childArray[n],r=t?.pattern;r===i&&(s=!0)}return s}checkCorrectResponseValue(e,t,i,s){const r=J[t];if(!r)return void this.context.throwSCORMError(e,y.TYPE_MISMATCH,"Incorrect Response Type: "+t);const n=RegExp(r.format);for(let o=0;i.length>o&&"0"===this.context.getLastErrorCode();o++)if(t.match("^(fill-in|long-fill-in|matching|performance|sequencing)$")&&(i[o]=this.removeCorrectResponsePrefixes(e,i[o])),r?.delimiter2){const a=i[o].split(r.delimiter2);2===a.length&&a[0].match(n)&&r.format2&&a[1].match(RegExp(r.format2))||this.context.throwSCORMError(e,y.TYPE_MISMATCH,`${t}: ${s}`)}else{const a=i[o].match(n);if(!a&&""!==s||!a&&"true-false"===t)this.context.throwSCORMError(e,y.TYPE_MISMATCH,`${t}: ${s}`);else if("numeric"===t&&i.length>1)+i[0]>+i[1]&&this.context.throwSCORMError(e,y.TYPE_MISMATCH,`${t}: ${s}`);else if(""!==i[o]&&r.unique)for(let r=0;o>r&&"0"===this.context.getLastErrorCode();r++)i[o]===i[r]&&this.context.throwSCORMError(e,y.TYPE_MISMATCH,`${t}: ${s}`)}}removeCorrectResponsePrefixes(e,t){let i=!1,s=!1,r=!1;const n=RegExp("^({(lang|case_matters|order_matters)=([^}]+)})");let o,a=t.match(n);for(;a;){switch(a[2]){case"lang":if(o=t.match("^(({lang=([a-zA-Z]{1,8}|i|x)?(-[a-zA-Z0-9-]{2,8})?}))(.*?)$"),o){const i=o[3];void 0!==i&&i.length>0&&(X.includes(i.toLowerCase())||this.context.throwSCORMError(e,y.TYPE_MISMATCH,""+t))}r=!0;break;case"case_matters":r||i||s||"true"!==a[3]&&"false"!==a[3]&&this.context.throwSCORMError(e,y.TYPE_MISMATCH,""+t),s=!0;break;case"order_matters":s||r||i||"true"!==a[3]&&"false"!==a[3]&&this.context.throwSCORMError(e,y.TYPE_MISMATCH,""+t),i=!0}a=(t=t.substring(a[1]?.length||0)).match(n)}return t}}class ri{context;responseValidator;constructor(e,t){this.context=e,this.responseValidator=t}getChildElement(e,t,i){if(n(e,"cmi\\.objectives\\.\\d+"))return new Ft;if(i){if(n(e,"cmi\\.interactions\\.\\d+\\.correct_responses\\.\\d+"))return this.createCorrectResponsesObject(e,t);if(n(e,"cmi\\.interactions\\.\\d+\\.objectives\\.\\d+"))return new Rt}else if(n(e,"cmi\\.interactions\\.\\d+"))return new wt;return n(e,"cmi\\.comments_from_learner\\.\\d+")?new Pt:n(e,"cmi\\.comments_from_lms\\.\\d+")?new Pt(!0):n(e,"adl\\.data\\.\\d+")?new Xt:null}createCorrectResponsesObject(e,t){const i=e.split("."),s=this.context.cmi.interactions.childArray[+i[2]];if(this.context.isInitialized()){if(void 0===s||!s.type)return this.context.throwSCORMError(e,y.DEPENDENCY_NOT_ESTABLISHED,e),null;{const i=J[s.type];if(i&&void 0!==i.limit&&s.correct_responses._count>=i.limit)return this.context.throwSCORMError(e,y.GENERAL_SET_FAILURE,"Data Model Element Collection Limit Reached: "+e),null;if(this.responseValidator.checkDuplicateChoiceResponse(e,s,t),!i)return this.context.throwSCORMError(e,y.GENERAL_SET_FAILURE,"Incorrect Response Type: "+s.type),null;this.responseValidator.checkValidResponseType(e,i,t,s.type)}}return"0"===this.context.getLastErrorCode()?new qt(s?.type):null}evaluateCompletionStatus(){const e=this.context.cmi.completion_threshold,t=this.context.cmi.progress_measure,i=this.context.cmi.completion_status;if(""!==e&&null!=e){const i=parseFloat(e+"");if(!isNaN(i)){if(""!==t&&null!=t){const e=parseFloat(t+"");if(!isNaN(e))return i>e?T:O}return j}}return i||j}evaluateSuccessStatus(){const e=this.context.cmi.scaled_passing_score,t=this.context.cmi.score.scaled,i=this.context.cmi.success_status;if(""!==e&&null!=e){const i=parseFloat(e+"");if(!isNaN(i)){if(""!==t&&null!=t){const e=parseFloat(t+"");if(!isNaN(e))return i>e?w:M}return R}}return i||R}}class ni{applySequencingControlsSettings(e,t){void 0!==t.enabled&&(e.enabled=t.enabled),void 0!==t.choice&&(e.choice=t.choice),void 0!==t.choiceExit&&(e.choiceExit=t.choiceExit),void 0!==t.flow&&(e.flow=t.flow),void 0!==t.forwardOnly&&(e.forwardOnly=t.forwardOnly),void 0!==t.useCurrentAttemptObjectiveInfo&&(e.useCurrentAttemptObjectiveInfo=t.useCurrentAttemptObjectiveInfo),void 0!==t.useCurrentAttemptProgressInfo&&(e.useCurrentAttemptProgressInfo=t.useCurrentAttemptProgressInfo),void 0!==t.preventActivation&&(e.preventActivation=t.preventActivation),void 0!==t.constrainChoice&&(e.constrainChoice=t.constrainChoice),void 0!==t.stopForwardTraversal&&(e.stopForwardTraversal=t.stopForwardTraversal),void 0!==t.rollupObjectiveSatisfied&&(e.rollupObjectiveSatisfied=t.rollupObjectiveSatisfied),void 0!==t.rollupProgressCompletion&&(e.rollupProgressCompletion=t.rollupProgressCompletion),void 0!==t.objectiveMeasureWeight&&(e.objectiveMeasureWeight=t.objectiveMeasureWeight),void 0!==t.selectionTiming&&(e.selectionTiming=t.selectionTiming),void 0!==t.selectCount&&(e.selectCount=t.selectCount),void 0!==t.randomizeChildren&&(e.randomizeChildren=t.randomizeChildren),void 0!==t.randomizationTiming&&(e.randomizationTiming=t.randomizationTiming),void 0!==t.selectionCountStatus&&(e.selectionCountStatus=t.selectionCountStatus),void 0!==t.reorderChildren&&(e.reorderChildren=t.reorderChildren),void 0!==t.completionSetByContent&&(e.completionSetByContent=t.completionSetByContent),void 0!==t.objectiveSetByContent&&(e.objectiveSetByContent=t.objectiveSetByContent)}applySequencingRulesSettings(e,t){if(t){if(t.preConditionRules)for(const i of t.preConditionRules){const t=this.createSequencingRule(i);e.addPreConditionRule(t)}if(t.exitConditionRules)for(const i of t.exitConditionRules){const t=this.createSequencingRule(i);e.addExitConditionRule(t)}if(t.postConditionRules)for(const i of t.postConditionRules){const t=this.createSequencingRule(i);e.addPostConditionRule(t)}}}createSequencingRule(e){const t=new se(e.action,e.conditionCombination);for(const i of e.conditions){const e=new ie(i.condition,i.operator,new Map(Object.entries(i.parameters||{})));i.referencedObjective&&(e.referencedObjective=i.referencedObjective),t.addCondition(e)}return t}applyRollupRulesSettings(e,t){if(t?.rules)for(const i of t.rules){const t=this.createRollupRule(i);e.addRule(t)}}createRollupRule(e){const t=new Ve(e.action,e.consideration,e.minimumCount,e.minimumPercent);for(const i of e.conditions){const e=new ke(i.condition,new Map(Object.entries(i.parameters||{})));t.addCondition(e)}return t}sanitizeSequencingCollections(e){if(!e)return{};const t={};for(const[id,i]of Object.entries(e)){const e=id.trim();if(!e)continue;const s={};if(i.sequencingControls&&(s.sequencingControls={...i.sequencingControls}),i.sequencingRules){const e=e=>{const t={action:e.action,conditions:e.conditions.map(e=>{const t={condition:e.condition};return void 0!==e.operator&&(t.operator=e.operator),e.parameters&&(t.parameters={...e.parameters}),void 0!==e.referencedObjective&&(t.referencedObjective=e.referencedObjective),t})};return void 0!==e.conditionCombination&&(t.conditionCombination=e.conditionCombination),t};s.sequencingRules={},i.sequencingRules.preConditionRules&&(s.sequencingRules.preConditionRules=i.sequencingRules.preConditionRules.map(e)),i.sequencingRules.exitConditionRules&&(s.sequencingRules.exitConditionRules=i.sequencingRules.exitConditionRules.map(e)),i.sequencingRules.postConditionRules&&(s.sequencingRules.postConditionRules=i.sequencingRules.postConditionRules.map(e))}i.rollupRules&&(s.rollupRules={rules:i.rollupRules.rules?.map(e=>{const t={action:e.action,conditions:e.conditions.map(e=>{const t={condition:e.condition};return e.parameters&&(t.parameters={...e.parameters}),t})};return void 0!==e.consideration&&(t.consideration=e.consideration),void 0!==e.minimumCount&&(t.minimumCount=e.minimumCount),void 0!==e.minimumPercent&&(t.minimumPercent=e.minimumPercent),t})}),i.rollupConsiderations&&(s.rollupConsiderations={...i.rollupConsiderations}),i.selectionRandomizationState&&(s.selectionRandomizationState=this.cloneSelectionRandomizationState(i.selectionRandomizationState)),i.hideLmsUi&&(s.hideLmsUi=this.sanitizeHideLmsUi(i.hideLmsUi)),i.auxiliaryResources&&(s.auxiliaryResources=this.sanitizeAuxiliaryResources(i.auxiliaryResources)),t[e]=s}return t}normalizeCollectionRefs(e){if(!e)return[];const t=Array.isArray(e)?e:[e],i=new Set,result=[];for(const e of t){const t=e.trim();t&&!i.has(t)&&(i.add(t),result.push(t))}return result}applySequencingCollection(e,t,i){if(t){if(t.sequencingControls&&this.applySequencingControlsSettings(e.sequencingControls,t.sequencingControls),t.sequencingRules&&this.applySequencingRulesSettings(e.sequencingRules,t.sequencingRules),t.rollupRules&&this.applyRollupRulesSettings(e.rollupRules,t.rollupRules),t.rollupConsiderations&&e.applyRollupConsiderations(t.rollupConsiderations),t.hideLmsUi){const i=this.mergeHideLmsUi(e.hideLmsUi,t.hideLmsUi);i.length>0&&(e.hideLmsUi=i)}if(t.auxiliaryResources){const i=this.sanitizeAuxiliaryResources(t.auxiliaryResources);i.length>0&&(e.auxiliaryResources=this.mergeAuxiliaryResources(e.auxiliaryResources,i))}t.selectionRandomizationState&&i.push(this.cloneSelectionRandomizationState(t.selectionRandomizationState))}}sanitizeHideLmsUi(e){if(!e)return[];const t=new Set(Z),i=new Set,s=[];for(const r of e)t.has(r)&&!i.has(r)&&(i.add(r),s.push(r));return s}mergeHideLmsUi(e,t){return t&&0!==t.length?this.sanitizeHideLmsUi([...e,...t]):e}sanitizeAuxiliaryResources(e){if(!e)return[];const t=new Set,i=[];for(const s of e){if(!s)continue;if(!s.resourceId||"string"!=typeof s.resourceId)continue;if(!s.purpose||"string"!=typeof s.purpose)continue;const e=s.resourceId.trim(),r=s.purpose.trim();if(!e||!r)continue;const n=`${e}::${r}`;t.has(n)||(t.add(n),i.push({resourceId:e,purpose:r}))}return i}mergeAuxiliaryResources(e,t){const i=[],s=new Set;for(const r of[...e??[],...t??[]]){if(!r)continue;const e=r.resourceId;e&&!s.has(e)&&(s.add(e),i.push({resourceId:e,purpose:r.purpose}))}return i}cloneSelectionRandomizationState(e){const t={};return e.childOrder&&(t.childOrder=[...e.childOrder]),e.selectedChildIds&&(t.selectedChildIds=[...e.selectedChildIds]),e.hiddenFromChoiceChildIds&&(t.hiddenFromChoiceChildIds=[...e.hiddenFromChoiceChildIds]),void 0!==e.selectionCountStatus&&(t.selectionCountStatus=e.selectionCountStatus),void 0!==e.reorderChildren&&(t.reorderChildren=e.reorderChildren),t}applySelectionRandomizationState(e,t){const i=e.sequencingControls;void 0!==t.selectionCountStatus&&(i.selectionCountStatus=t.selectionCountStatus),void 0!==t.reorderChildren&&(i.reorderChildren=t.reorderChildren);const s=t.selectedChildIds?new Set(t.selectedChildIds):null,r=t.hiddenFromChoiceChildIds?new Set(t.hiddenFromChoiceChildIds):null;t.childOrder&&t.childOrder.length>0&&e.setChildOrder(t.childOrder);let n=!1;if(s||r)for(const t of e.children){if(s){const e=s.has(t.id);t.isAvailable=e,r||(t.isHiddenFromChoice=!e),n=!0}r&&(t.isHiddenFromChoice=r.has(t.id),n=!0)}(n||s||void 0!==t.selectionCountStatus||void 0!==t.reorderChildren||t.childOrder&&t.childOrder.length>0)&&e.setProcessedChildren(e.children.filter(e=>e.isAvailable))}}class oi{sequencingCollections;sequencingConfigBuilder;constructor(e,t){this.sequencingCollections=e||{},this.sequencingConfigBuilder=t||new ni}setSequencingCollections(e){this.sequencingCollections=e}createActivity(e){const t=new Ue(e.id,e.title),i=[],s=this.sequencingConfigBuilder.normalizeCollectionRefs(e.sequencingCollectionRefs);for(const e of s){const s=this.sequencingCollections[e];s&&this.sequencingConfigBuilder.applySequencingCollection(t,s,i)}if(void 0!==e.isVisible&&(t.isVisible=e.isVisible),void 0!==e.isActive&&(t.isActive=e.isActive),void 0!==e.isSuspended&&(t.isSuspended=e.isSuspended),void 0!==e.isCompleted&&(t.isCompleted=e.isCompleted),void 0!==e.isHiddenFromChoice&&(t.isHiddenFromChoice=e.isHiddenFromChoice),void 0!==e.isAvailable&&(t.isAvailable=e.isAvailable),void 0!==e.attemptLimit&&(t.attemptLimit=e.attemptLimit),void 0!==e.attemptAbsoluteDurationLimit&&(t.attemptAbsoluteDurationLimit=e.attemptAbsoluteDurationLimit),void 0!==e.activityAbsoluteDurationLimit&&(t.activityAbsoluteDurationLimit=e.activityAbsoluteDurationLimit),void 0!==e.timeLimitAction&&(t.timeLimitAction=e.timeLimitAction),void 0!==e.timeLimitDuration&&(t.timeLimitDuration=e.timeLimitDuration),void 0!==e.beginTimeLimit&&(t.beginTimeLimit=e.beginTimeLimit),void 0!==e.endTimeLimit&&(t.endTimeLimit=e.endTimeLimit),e.primaryObjective){const i=this.createActivityObjectiveFromSettings(e.primaryObjective,!0);t.primaryObjective=i,null!==i.minNormalizedMeasure&&(t.scaledPassingScore=i.minNormalizedMeasure)}if(e.objectives)for(const i of e.objectives){const e=!0===i.isPrimary,s=this.createActivityObjectiveFromSettings(i,e);e?t.primaryObjective=s:t.addObjective(s)}if(e.sequencingControls&&this.sequencingConfigBuilder.applySequencingControlsSettings(t.sequencingControls,e.sequencingControls),e.sequencingRules&&this.sequencingConfigBuilder.applySequencingRulesSettings(t.sequencingRules,e.sequencingRules),e.rollupRules&&this.sequencingConfigBuilder.applyRollupRulesSettings(t.rollupRules,e.rollupRules),e.rollupConsiderations&&t.applyRollupConsiderations(e.rollupConsiderations),e.hideLmsUi){const i=this.sequencingConfigBuilder.mergeHideLmsUi(t.hideLmsUi,e.hideLmsUi);i.length>0&&(t.hideLmsUi=i)}if(e.auxiliaryResources){const i=this.sequencingConfigBuilder.sanitizeAuxiliaryResources(e.auxiliaryResources);i.length>0&&(t.auxiliaryResources=this.sequencingConfigBuilder.mergeAuxiliaryResources(t.auxiliaryResources,i))}if(e.children)for(const i of e.children){const e=this.createActivity(i);t.addChild(e)}e.selectionRandomizationState&&i.push(this.sequencingConfigBuilder.cloneSelectionRandomizationState(e.selectionRandomizationState));for(const e of i)this.sequencingConfigBuilder.applySelectionRandomizationState(t,e);return t}extractActivityIds(e){const t=[e.id];for(const i of e.children)t.push(...this.extractActivityIds(i));return t}createActivityObjectiveFromSettings(e,t){const i=(e.mapInfo||[]).map(e=>({targetObjectiveID:e.targetObjectiveID,readSatisfiedStatus:e.readSatisfiedStatus??!1,readNormalizedMeasure:e.readNormalizedMeasure??!1,writeSatisfiedStatus:e.writeSatisfiedStatus??!1,writeNormalizedMeasure:e.writeNormalizedMeasure??!1,readCompletionStatus:e.readCompletionStatus??!1,writeCompletionStatus:e.writeCompletionStatus??!1,readProgressMeasure:e.readProgressMeasure??!1,writeProgressMeasure:e.writeProgressMeasure??!1,readRawScore:e.readRawScore??!1,writeRawScore:e.writeRawScore??!1,readMinScore:e.readMinScore??!1,writeMinScore:e.writeMinScore??!1,readMaxScore:e.readMaxScore??!1,writeMaxScore:e.writeMaxScore??!1,updateAttemptData:e.updateAttemptData??!1}));return new Be(e.objectiveID,{description:e.description??null,satisfiedByMeasure:e.satisfiedByMeasure??!1,minNormalizedMeasure:e.minNormalizedMeasure??null,mapInfo:i,isPrimary:t})}}class ai{_globalObjectives=[];context;constructor(e){this.context=e}get globalObjectives(){return this._globalObjectives}set globalObjectives(objectives){this._globalObjectives=objectives}updateSequencingService(e){this.context.sequencingService=e}syncGlobalObjectiveIdsFromSequencing(){if(!this.context.sequencingService)return;const e=this.context.sequencingService.getOverallSequencingProcess();if(!e)return;const t=e.getGlobalObjectiveMap();if(!t||0===t.size)return;const i=Array.from(t.keys()),s=this.context.getSettings(),r=Array.from(new Set((s.globalObjectiveIds||[]).concat(i)));s.globalObjectiveIds=r}restoreGlobalObjectivesToCMI(){if(0!==this._globalObjectives.length)for(let e=0;this._globalObjectives.length>e;e++){const t=this._globalObjectives[e];if(!t||!t.id)continue;if(this.context.cmi.objectives.findObjectiveById(t.id))continue;const i=this.context.cmi.objectives.childArray.length;this.context.commonSetCMIValue("RestoreGlobalObjective",!0,`cmi.objectives.${i}.id`,t.id),t.success_status&&"unknown"!==t.success_status&&this.context.commonSetCMIValue("RestoreGlobalObjective",!0,`cmi.objectives.${i}.success_status`,t.success_status),t.completion_status&&"unknown"!==t.completion_status&&this.context.commonSetCMIValue("RestoreGlobalObjective",!0,`cmi.objectives.${i}.completion_status`,t.completion_status),""!==t.score.scaled&&null!==t.score.scaled&&this.context.commonSetCMIValue("RestoreGlobalObjective",!0,`cmi.objectives.${i}.score.scaled`,t.score.scaled),""!==t.score.raw&&null!==t.score.raw&&this.context.commonSetCMIValue("RestoreGlobalObjective",!0,`cmi.objectives.${i}.score.raw`,t.score.raw),""!==t.score.min&&null!==t.score.min&&this.context.commonSetCMIValue("RestoreGlobalObjective",!0,`cmi.objectives.${i}.score.min`,t.score.min),""!==t.score.max&&null!==t.score.max&&this.context.commonSetCMIValue("RestoreGlobalObjective",!0,`cmi.objectives.${i}.score.max`,t.score.max),""!==t.progress_measure&&null!==t.progress_measure&&this.context.commonSetCMIValue("RestoreGlobalObjective",!0,`cmi.objectives.${i}.progress_measure`,t.progress_measure),""!==t.description&&this.context.commonSetCMIValue("RestoreGlobalObjective",!0,`cmi.objectives.${i}.description`,t.description)}}updateGlobalObjectiveFromCMI(e,t){if(!e||!this.context.sequencingService)return;const i=this.context.sequencingService.getOverallSequencingProcess();if(!i)return;if(!i.getGlobalObjectiveMap().has(e)){const s=this.buildObjectiveMapEntryFromCMI(t);return void i.updateGlobalObjective(e,s)}const s={};t.success_status&&t.success_status!==R&&(s.satisfiedStatus=t.success_status===M,s.satisfiedStatusKnown=!0);const r=this.parseObjectiveNumber(t.score?.scaled);null!==r&&(s.normalizedMeasure=r,s.normalizedMeasureKnown=!0);const n=this.parseObjectiveNumber(t.progress_measure);null!==n&&(s.progressMeasure=n,s.progressMeasureKnown=!0),t.completion_status&&t.completion_status!==j&&(s.completionStatus=t.completion_status,s.completionStatusKnown=!0),0!==Object.keys(s).length&&i.updateGlobalObjective(e,s)}buildObjectiveMapEntryFromCMI(e){const entry={id:e.id,satisfiedStatusKnown:!1,normalizedMeasureKnown:!1,progressMeasureKnown:!1,completionStatusKnown:!1,readSatisfiedStatus:!0,writeSatisfiedStatus:!0,readNormalizedMeasure:!0,writeNormalizedMeasure:!0,readCompletionStatus:!0,writeCompletionStatus:!0,readProgressMeasure:!0,writeProgressMeasure:!0};e.success_status&&e.success_status!==R&&(entry.satisfiedStatus=e.success_status===M,entry.satisfiedStatusKnown=!0);const t=this.parseObjectiveNumber(e.score?.scaled);null!==t&&(entry.normalizedMeasure=t,entry.normalizedMeasureKnown=!0);const i=this.parseObjectiveNumber(e.progress_measure);return null!==i&&(entry.progressMeasure=i,entry.progressMeasureKnown=!0),e.completion_status&&e.completion_status!==j&&(entry.completionStatus=e.completion_status,entry.completionStatusKnown=!0),entry}buildCMIObjectivesFromMap(e){const objectives=[];if(!e||"object"!=typeof e)return objectives;for(const[t,entry]of Object.entries(e)){if(!entry||"object"!=typeof entry)continue;const e=new Ft;e.id=entry.id??t,!0===entry.satisfiedStatusKnown&&(e.success_status=entry.satisfiedStatus?M:w);const i=this.parseObjectiveNumber(entry.normalizedMeasure);!0===entry.normalizedMeasureKnown&&null!==i&&(e.score.scaled=i+"");const s=this.parseObjectiveNumber(entry.progressMeasure);!0===entry.progressMeasureKnown&&null!==s&&(e.progress_measure=s+""),!0===entry.completionStatusKnown&&"string"==typeof entry.completionStatus&&(e.completion_status=entry.completionStatus),objectives.push(e)}return objectives}buildCMIObjectiveFromJSON(e){const t=new Ft;if(!e||"object"!=typeof e)return t;"string"==typeof e.id&&(t.id=e.id),"string"==typeof e.success_status&&(t.success_status=e.success_status),"string"==typeof e.completion_status&&(t.completion_status=e.completion_status),"string"==typeof e.progress_measure&&""!==e.progress_measure&&(t.progress_measure=e.progress_measure),"string"==typeof e.description&&(t.description=e.description);const score=e.score;return score&&"object"==typeof score&&("string"==typeof score.scaled&&""!==score.scaled?t.score.scaled=score.scaled:"number"==typeof score.scaled&&Number.isFinite(score.scaled)&&(t.score.scaled=score.scaled+""),"string"==typeof score.raw&&""!==score.raw?t.score.raw=score.raw:"number"==typeof score.raw&&Number.isFinite(score.raw)&&(t.score.raw=score.raw+""),"string"==typeof score.min&&""!==score.min?t.score.min=score.min:"number"==typeof score.min&&Number.isFinite(score.min)&&(t.score.min=score.min+""),"string"==typeof score.max&&""!==score.max?t.score.max=score.max:"number"==typeof score.max&&Number.isFinite(score.max)&&(t.score.max=score.max+"")),t}captureGlobalObjectiveSnapshot(e){const t={},i=e??this.context.sequencingService?.getOverallSequencingProcess()??null;if(i){const e=i.getGlobalObjectiveMapSnapshot();for(const[id,i]of Object.entries(e))t[id]={...i}}for(const e of this._globalObjectives)e.id&&!t[e.id]&&(t[e.id]=this.buildObjectiveMapEntryFromCMI(e));return t}parseObjectiveNumber(e){if(null==e)return null;if("number"==typeof e&&Number.isFinite(e))return e;const t=parseFloat(e+"");return Number.isFinite(t)?t:null}syncCmiToSequencingActivity(e,t,i){if(!this.context.sequencing)return;const s=this.context.sequencing.getCurrentActivity();if(!s||!s.primaryObjective)return;const r=s.primaryObjective;t!==R&&(r.satisfiedStatus=t===M,r.satisfiedStatusKnown=!0,r.measureStatus=!0,s.objectiveMeasureStatus=!0,s.objectiveSatisfiedStatus=t===M,s.objectiveSatisfiedStatusKnown=!0),e!==j&&(r.completionStatus=e),void 0!==i?.scaled&&null!==i.scaled&&(r.normalizedMeasure=i.scaled,r.measureStatus=!0)}findOrCreateGlobalObjective(e){let t=this._globalObjectives.findIndex(t=>t.id===e);if(-1===t){t=this._globalObjectives.length;const i=new Ft;i.id=e,this._globalObjectives.push(i)}return{index:t,objective:this._globalObjectives[t]}}}class ci{context;globalObjectiveManager;constructor(e,t){this.context=e,this.globalObjectiveManager=t}async saveSequencingState(e){const t=this.context.getSettings();if(!t.sequencingStatePersistence)return this.context.apiLog("saveSequencingState","No persistence configuration provided",I.WARN),!1;try{const i=this.serializeSequencingState(),s={learnerId:this.context.learnerId||"unknown",courseId:t.courseId||"unknown",attemptNumber:1,lastUpdated:(new Date).toISOString(),version:t.sequencingStatePersistence.stateVersion||"1.0",...e},r=t.sequencingStatePersistence;let n=i;if(!1!==r.compress&&(n=this.compressStateData(i)),r.maxStateSize&&n.length>r.maxStateSize)throw Error(`State size ${n.length} exceeds limit ${r.maxStateSize}`);const o=await r.persistence.saveState(n,s);return r.debugPersistence&&this.context.apiLog("saveSequencingState",`State save ${o?"succeeded":"failed"}: size=${n.length}`,o?I.INFO:I.WARN),o}catch(e){return this.context.apiLog("saveSequencingState","Error saving sequencing state: "+(e instanceof Error?e.message:e+""),I.ERROR),!1}}async loadSequencingState(e){const t=this.context.getSettings();if(!t.sequencingStatePersistence)return this.context.apiLog("loadSequencingState","No persistence configuration provided",I.WARN),!1;try{const i={learnerId:this.context.learnerId||"unknown",courseId:t.courseId||"unknown",attemptNumber:1,version:t.sequencingStatePersistence.stateVersion||"1.0",...e},s=t.sequencingStatePersistence,r=await s.persistence.loadState(i);if(!r)return s.debugPersistence&&this.context.apiLog("loadSequencingState","No sequencing state found to load",I.INFO),!1;let n=r;!1!==s.compress&&(n=this.decompressStateData(r));const o=this.deserializeSequencingState(n);return s.debugPersistence&&this.context.apiLog("loadSequencingState",`State load ${o?"succeeded":"failed"}: size=${r.length}`,o?I.INFO:I.WARN),o}catch(e){return this.context.apiLog("loadSequencingState","Error loading sequencing state: "+(e instanceof Error?e.message:e+""),I.ERROR),!1}}serializeSequencingState(){const e=this.context.getSettings(),t={version:e.sequencingStatePersistence?.stateVersion||"1.0",timestamp:(new Date).toISOString(),sequencing:null,currentActivityId:null,globalObjectives:this.globalObjectiveManager.globalObjectives.map(e=>e.toJSON()),globalObjectiveMap:{},adlNavState:{request:this.context.adl.nav.request,request_valid:this.context.adl.nav.request_valid},contentDelivered:!1};if(this.context.sequencingService){const e=this.context.sequencingService.getOverallSequencingProcess();if(e){const i=e.getSequencingState();t.sequencing=i,t.contentDelivered=e.hasContentBeenDelivered(),t.globalObjectiveMap=this.globalObjectiveManager.captureGlobalObjectiveSnapshot(e)}const i=this.context.sequencing.getCurrentActivity();i&&(t.currentActivityId=i.id)}return t.globalObjectiveMap&&0!==Object.keys(t.globalObjectiveMap).length||(t.globalObjectiveMap=this.globalObjectiveManager.captureGlobalObjectiveSnapshot()),JSON.stringify(t)}deserializeSequencingState(e){try{const t=JSON.parse(e),i=this.context.getSettings(),s=i.sequencingStatePersistence?.stateVersion||"1.0";if(t.version!==s&&this.context.apiLog("deserializeSequencingState",`State version mismatch: ${t.version} vs expected ${s}`,I.WARN),t.globalObjectiveMap&&t.sequencing&&!t.sequencing.globalObjectiveMap&&(t.sequencing.globalObjectiveMap=t.globalObjectiveMap),t.sequencing&&this.context.sequencingService){const e=this.context.sequencingService.getOverallSequencingProcess();e&&(e.restoreSequencingState(t.sequencing),t.contentDelivered&&e.setContentDelivered(!0))}const r=new Map;if(Array.isArray(t.globalObjectives))for(const e of t.globalObjectives){const t=this.globalObjectiveManager.buildCMIObjectiveFromJSON(e);t.id&&r.set(t.id,t)}if(t.globalObjectiveMap&&"object"==typeof t.globalObjectiveMap){const e=this.globalObjectiveManager.buildCMIObjectivesFromMap(t.globalObjectiveMap);for(const t of e)t.id&&(r.has(t.id)||r.set(t.id,t))}return r.size>0&&(this.globalObjectiveManager.globalObjectives=Array.from(r.values()),this.globalObjectiveManager.globalObjectives.forEach(e=>{e.id&&this.globalObjectiveManager.updateGlobalObjectiveFromCMI(e.id,e)})),t.adlNavState&&(this.context.adl.nav.request=t.adlNavState.request||"_none_",this.context.adl.nav.request_valid=t.adlNavState.request_valid||{}),!0}catch(e){return this.context.apiLog("deserializeSequencingState","Error deserializing sequencing state: "+(e instanceof Error?e.message:e+""),I.ERROR),!1}}compressStateData(e){return"undefined"!=typeof btoa?btoa(encodeURIComponent(e)):e}decompressStateData(e){if("undefined"!=typeof atob)try{return decodeURIComponent(atob(e))}catch{return e}return e}}class li{context;globalObjectiveManager;constructor(e,t){this.context=e,this.globalObjectiveManager=t||null}setGlobalObjectiveManager(e){this.globalObjectiveManager=e}updateSequencingService(e){this.context.sequencingService=e}renderCommitCMI(e,t=!1){const i=this.context.renderCMIToJSONObject();e||t?i.cmi.total_time=this.context.cmi.getCurrentTotalTime():delete i.cmi.total_time;const result=[],s=r(i);switch(this.context.getSettings().dataCommitFormat){case"flattened":return r(i);case"params":for(const e in s)({}).hasOwnProperty.call(s,e)&&result.push(`${e}=${s[e]}`);return result;default:return i}}renderCommitObject(e,t=!1){const s=this.renderCommitCMI(e,t),r=e||t?this.context.cmi.getCurrentTotalTime():"",n=i(r,k);let o=j,a=R;this.context.cmi.completion_status&&("completed"===this.context.cmi.completion_status?o=O:"incomplete"===this.context.cmi.completion_status&&(o=T)),this.context.cmi.success_status&&("passed"===this.context.cmi.success_status?a=M:"failed"===this.context.cmi.success_status&&(a=w));const c=this.context.cmi?.score?.getScoreObject()||{},l={completionStatus:o,successStatus:a,totalTimeSeconds:n,runtimeData:s};c&&(l.score=c);const u=this.context.getSettings();if(u.autoPopulateCommitMetadata){u.courseId&&(l.courseId=u.courseId),u.scoId&&(l.scoId=u.scoId),this.context.cmi.learner_id&&(l.learnerId=this.context.cmi.learner_id),this.context.cmi.learner_name&&(l.learnerName=this.context.cmi.learner_name);const e=this.context.sequencingService?.getSequencingState();e?.currentActivity?.id&&(l.activityId=e.currentActivity.id)}return this.globalObjectiveManager&&this.globalObjectiveManager.syncCmiToSequencingActivity(o,a,c),l}determineEntryValue(e,t){const i=e?.trim();return""===e||null==e||""===i?"ab-initio":"suspend"===e?"resume":"logout"===e||"normal"===e?"":"time-out"===e&&t?"resume":""}}class Scorm2004API extends At{_version="1.0";_sequencing;_sequencingService=null;_extractedScoItemIds=[];_sequencingCollections={};_responseValidator;_cmiHandler;_activityTreeBuilder;_sequencingConfigBuilder;_globalObjectiveManager;_statePersistence=null;_dataSerializer;constructor(e,t){const i=e?{...e}:void 0;i&&void 0===i.mastery_override&&(i.mastery_override=!1),super(y,i,t),this.cmi=new Yt,this.adl=new Wt,this._sequencing=new ii,this.adl.sequencing=this._sequencing,this._sequencingConfigBuilder=new ni,this._activityTreeBuilder=new oi({},this._sequencingConfigBuilder),this._responseValidator=new si({throwSCORMError:(e,t,i)=>this.throwSCORMError(e,t,i),getLastErrorCode:()=>this.lastErrorCode,checkCorrectResponseValue:(e,t,i,s)=>this._responseValidator.checkCorrectResponseValue(e,t,i,s)}),this._cmiHandler=new ri({cmi:this.cmi,isInitialized:()=>this.isInitialized(),throwSCORMError:(e,t,i)=>this.throwSCORMError(e,t,i),getLastErrorCode:()=>this.lastErrorCode},this._responseValidator);const s={getSettings:()=>this.settings,cmi:this.cmi,sequencing:this._sequencing,sequencingService:this._sequencingService,commonSetCMIValue:this._commonSetCMIValue.bind(this)};this._globalObjectiveManager=new ai(s);const r={getSettings:()=>this.settings,cmi:this.cmi,sequencingService:this._sequencingService,renderCMIToJSONObject:this.renderCMIToJSONObject.bind(this)};this._dataSerializer=new li(r,this._globalObjectiveManager),i?.sequencing&&this.configureSequencing(i.sequencing),this.initializeSequencingService(i),this.Initialize=this.lmsInitialize,this.Terminate=this.lmsFinish,this.GetValue=this.lmsGetValue,this.SetValue=this.lmsSetValue,this.Commit=this.lmsCommit,this.GetLastError=this.lmsGetLastError,this.GetErrorString=this.lmsGetErrorString,this.GetDiagnostic=this.lmsGetDiagnostic}cmi;adl;Initialize;Terminate;GetValue;SetValue;Commit;GetLastError;GetErrorString;GetDiagnostic;reset(e){this.commonReset(e),this.cmi?.reset(),this.adl?.reset()}get version(){return this._version}get globalObjectives(){return this._globalObjectiveManager.globalObjectives}set _globalObjectives(objectives){this._globalObjectiveManager.globalObjectives=objectives}get _globalObjectives(){return this._globalObjectiveManager.globalObjectives}compressStateData(e){return this._statePersistence?this._statePersistence.compressStateData(e):"undefined"!=typeof btoa?btoa(encodeURIComponent(e)):e}decompressStateData(e){if(this._statePersistence)return this._statePersistence.decompressStateData(e);if("undefined"!=typeof atob)try{return decodeURIComponent(atob(e))}catch{return e}return e}lmsInitialize(e=""){if(""!==e)return this.throwSCORMError("api",this._error_codes.ARGUMENT_ERROR),h;this.cmi.initialize();const result=this.initialize("Initialize","LMS was already initialized!","LMS is already finished!");return result===d&&this._sequencingService&&this._sequencingService.initialize(),result===d&&this._globalObjectiveManager.restoreGlobalObjectivesToCMI(),result===d&&this.settings.sequencingStatePersistence&&this.loadSequencingState().catch(()=>{this.apiLog("lmsInitialize","Failed to auto-load sequencing state",I.WARN)}),result}lmsFinish(e=""){if(""!==e)return this.throwSCORMError("api",this._error_codes.ARGUMENT_ERROR),h;const t=this.adl?.nav?.request||"_none_",i=this.cmi?.getExitValueInternal()||"",s=this.isTerminated(),r=this._sequencingService?.isDeliveryInProgress()??!1,result=this.terminate("Terminate",!0);if(result===d&&!s&&!r){let e=!1,s=null,r=t,n="";const o=RegExp(G);if("_none_"!==t){const e=t.match(o);e&&(e.groups?.choice_target?(n=e.groups?.choice_target,r="choice"):e.groups?.jump_target&&(n=e.groups?.jump_target,r="jump"))}if(this._sequencingService)try{let t,o=null;"_none_"!==r?(o=r,t=n||void 0):this._sequencing.getCurrentActivity()&&(o="exit"),o&&(e=this._sequencingService.processNavigationRequest(o,t,i),s=o)}catch(t){this.apiLog("lmsFinish","Sequencing navigation failed, falling back to event-based navigation: "+t,I.WARN),e=!1}if(!e)if("_none_"!==t){const e={continue:"SequenceNext",previous:"SequencePrevious",choice:"SequenceChoice",jump:"SequenceJump",exit:"SequenceExit",exitAll:"SequenceExitAll",abandon:"SequenceAbandon",abandonAll:"SequenceAbandonAll"}[r];e&&this.processListeners(e,"adl.nav.request",n)}else this.settings.autoProgress&&this.processListeners("SequenceNext",void 0,"next");this._sequencingService&&s&&["exitAll","abandonAll","suspendAll"].includes(s)&&this._sequencingService.terminate(),this.adl.nav.request="_none_"}return result}lmsGetValue(e){if(this.isTerminated())return this.lastErrorCode=y.RETRIEVE_AFTER_TERM+"","";if(!this.isInitialized())return this.lastErrorCode=y.RETRIEVE_BEFORE_INIT+"","";if("adl.nav.request"===e)return this.throwSCORMError(e,y.WRITE_ONLY_ELEMENT,"adl.nav.request is write-only"),"";const t="^adl\\.nav\\.request_valid\\.(choice|jump)\\.{target=([a-zA-Z0-9-_]+)}$";if(n(e,t)){const i=e.match(t);if(i){const request=i[1],e=i[2]?.replace(/{target=/g,"").replace(/}/g,"")||"";if("choice"===request||"jump"===request){const t=this._sequencing?.overallSequencingProcess;return this.settings.scoItemIdValidator?this.settings.scoItemIdValidator(e)+"":t?.predictChoiceEnabled&&"choice"===request?t.predictChoiceEnabled(e)?"true":"false":t?.predictJumpEnabled&&"jump"===request?t.predictJumpEnabled(e)?"true":"false":this._extractedScoItemIds.length>0?this._extractedScoItemIds.includes(e)+"":this.settings?.scoItemIds?.includes(e)+""}}}return"cmi.completion_status"===e?this._cmiHandler.evaluateCompletionStatus():"cmi.success_status"===e?this._cmiHandler.evaluateSuccessStatus():this.getValue("GetValue",!0,e)}lmsSetValue(e,t){const i=this._peekCMIValue(e),result=this.setValue("SetValue","Commit",!0,e,t);if(result===d&&this._sequencingService)try{this._sequencingService.triggerRollupOnCMIChange(e,i,t)}catch(t){console.warn(`Sequencing rollup failed for ${e}: ${t}`)}return result===d&&"setValue"===this.settings.sequencingStatePersistence?.autoSaveOn&&["cmi.completion_status","cmi.success_status","cmi.score.scaled","cmi.objectives","adl.nav.request"].some(t=>e.startsWith(t))&&this.saveSequencingState().catch(()=>{this.apiLog("lmsSetValue","Failed to auto-save sequencing state",I.WARN)}),result}lmsCommit(e=""){if(""!==e)return this.throwSCORMError("api",this._error_codes.ARGUMENT_ERROR),h;if(this.settings.throttleCommits)return this.scheduleCommit(500,"Commit"),d;{const result=this.commit("Commit",!0);return result===d&&"commit"===this.settings.sequencingStatePersistence?.autoSaveOn&&this.saveSequencingState().catch(()=>{this.apiLog("lmsCommit","Failed to auto-save sequencing state",I.WARN)}),result}}lmsGetLastError(){return this.getLastError("GetLastError")}lmsGetErrorString(e){return this.getErrorString("GetErrorString",e)}lmsGetDiagnostic(e){return this.getDiagnostic("GetDiagnostic",e)}setCMIValue(e,t){if(n(e,"cmi\\.objectives\\.\\d+")){const i=+e.split(".")[2],s="cmi.objectives."+i;let r;if(n(e,"cmi\\.objectives\\.\\d+\\.id"))r=t;else{const e=this.cmi.objectives.findObjectiveByIndex(i);r=e?e.id:void 0}if(r&&this.settings.globalObjectiveIds?.includes(r)){const{index:i}=this._globalObjectiveManager.findOrCreateGlobalObjective(r),n=e.replace(s,"_globalObjectives."+i);this._commonSetCMIValue("SetGlobalObjectiveValue",!0,n,t);const o=this._globalObjectiveManager.globalObjectives[i];r&&o&&this._globalObjectiveManager.updateGlobalObjectiveFromCMI(r,o)}}return this._commonSetCMIValue("SetValue",!0,e,t)}getChildElement(e,t,i){return this._cmiHandler.getChildElement(e,t,i)}validateCorrectResponse(e,t){const i=e.split("."),s=this.cmi.interactions.childArray[+i[2]];s?this._responseValidator.validateCorrectResponse(e,s,t):this.throwSCORMError(e,y.DEPENDENCY_NOT_ESTABLISHED,e)}_peekCMIValue(e){if(!e||"string"!=typeof e)return null;const t=e.split(".");let i=this;for(let e=0;t.length>e;e++){const s=t[e];if(null==i)return null;try{i=i[s]}catch{return null}if(i instanceof b){const s=e+1;if(s>=t.length)return i;const r=+t[s];if(!Number.isNaN(r)&&Number.isInteger(r)&&r>=0){if(r>=i.childArray.length)return null;i=i.childArray[r],e++}}}return i??null}getCMIValue(e){return this._commonGetCMIValue("GetValue",!0,e)}getLmsErrorMessageDetails(e,t){let i="",s="";const r=m.error_descriptions[e+=""];return r&&(i=r.basicMessage,s=r.detailMessage),t?s:i}replaceWithAnotherScormAPI(e){this.cmi=e.cmi,this.adl=e.adl}renderCommitCMI(e,t=!1){return this._dataSerializer.renderCommitCMI(e,t)}renderCommitObject(e,t=!1){return this._dataSerializer.renderCommitObject(e,t)}storeData(e){e&&"normal"===this.cmi.mode&&"credit"===this.cmi.credit&&(this.cmi.completion_threshold&&this.cmi.progress_measure&&(this.cmi.completion_status=this.cmi.completion_threshold>this.cmi.progress_measure?"incomplete":"completed"),this.cmi.scaled_passing_score&&this.cmi.score.scaled&&(this.cmi.success_status=this.cmi.scaled_passing_score>this.cmi.score.scaled?"failed":"passed"));let t=!1;this.adl.nav.request!==this.startingData?.adl?.nav?.request&&"_none_"!==this.adl.nav.request&&(t=!0);const i=this.getCommitObject(e),s=this.cmi?.score?.getScoreObject()||{};let r=j;"completed"===this.cmi.completion_status?r=O:"incomplete"===this.cmi.completion_status&&(r=T);let n=R;if("passed"===this.cmi.success_status?n=M:"failed"===this.cmi.success_status&&(n=w),this._globalObjectiveManager.syncCmiToSequencingActivity(r,n,s),"string"==typeof this.settings.lmsCommitUrl){const result=this.processHttpRequest(this.settings.lmsCommitUrl,i,e);if(t&&void 0!==result.navRequest&&""!==result.navRequest&&"string"==typeof result.navRequest){const e=function(e){const t=new Set(["start","resumeAll","continue","previous","choice","jump","exit","exitAll","abandon","abandonAll","suspendAll","_none_"]),i=e.trim();if(!i)return{command:"_none_",targetActivityId:null,valid:!1,error:"Empty navigation request"};if(t.has(i))return{command:i,targetActivityId:null,valid:!0};const s=i.indexOf(".");if(s>0){const e=i.substring(0,s),t=i.substring(s+1);if(("choice"===e||"jump"===e)&&t)return/^[a-zA-Z0-9._-]+$/.test(t)?{command:e,targetActivityId:t,valid:!0}:{command:"_none_",targetActivityId:null,valid:!1,error:"Invalid target activity ID: contains disallowed characters"}}return{command:"_none_",targetActivityId:null,valid:!1,error:`Unrecognized navigation command: "${i}"`}}(result.navRequest);if(e.valid){const t={start:"SequenceStart",resumeAll:"SequenceResumeAll",continue:"SequenceNext",previous:"SequencePrevious",choice:"SequenceChoice",jump:"SequenceJump",exit:"SequenceExit",exitAll:"SequenceExitAll",abandon:"SequenceAbandon",abandonAll:"SequenceAbandonAll",suspendAll:"SequenceSuspendAll"}[e.command];t&&this.processListeners(t,"adl.nav.request",e.targetActivityId)}else this.apiLog("storeData","Invalid navigation request from LMS: "+e.error,I.WARN)}else result?.navRequest&&!t&&"object"==typeof result.navRequest&&Object.hasOwnProperty.call(result.navRequest,"name")&&result.navRequest.name&&this.processListeners(result.navRequest.name,result.navRequest.data);return result}return{result:d,errorCode:0}}configureSequencing(e){this._sequencingCollections=this._sequencingConfigBuilder.sanitizeSequencingCollections(e.collections),this._activityTreeBuilder.setSequencingCollections(this._sequencingCollections),e.activityTree&&this.configureActivityTree(e.activityTree),e.sequencingRules&&this.configureSequencingRules(e.sequencingRules),e.sequencingControls&&this.configureSequencingControls(e.sequencingControls),e.rollupRules&&this.configureRollupRules(e.rollupRules),this._sequencing.hideLmsUi=e.hideLmsUi?this._sequencingConfigBuilder.sanitizeHideLmsUi(e.hideLmsUi):[],this._sequencing.auxiliaryResources=e.auxiliaryResources?this._sequencingConfigBuilder.sanitizeAuxiliaryResources(e.auxiliaryResources):[]}configureActivityTree(e){const t=this._activityTreeBuilder.createActivity(e);this._sequencing.activityTree.root=t,this._extractedScoItemIds=this._activityTreeBuilder.extractActivityIds(t)}configureSequencingRules(e){this._sequencingConfigBuilder.applySequencingRulesSettings(this._sequencing.sequencingRules,e)}configureSequencingControls(e){this._sequencingConfigBuilder.applySequencingControlsSettings(this._sequencing.sequencingControls,e)}configureRollupRules(e){this._sequencingConfigBuilder.applyRollupRulesSettings(this._sequencing.rollupRules,e)}initializeSequencingService(e){try{if(this._sequencingService=new _t(this._sequencing,this.cmi,this.adl,this.eventService||this,this.loggingService,{autoRollupOnCMIChange:e?.sequencing?.autoRollupOnCMIChange??!0,autoProgressOnCompletion:e?.sequencing?.autoProgressOnCompletion??!1,validateNavigationRequests:e?.sequencing?.validateNavigationRequests??!0,enableEventSystem:e?.sequencing?.enableEventSystem??!0,logLevel:e?.sequencing?.logLevel??"info"}),e?.sequencing?.eventListeners&&this._sequencingService.setEventListeners(e.sequencing.eventListeners),this._globalObjectiveManager.updateSequencingService(this._sequencingService),this._dataSerializer.updateSequencingService(this._sequencingService),e?.sequencingStatePersistence){const e={getSettings:()=>this.settings,apiLog:this.apiLog.bind(this),adl:this.adl,sequencing:this._sequencing,sequencingService:this._sequencingService,learnerId:this.cmi.learner_id};this._statePersistence=new ci(e,this._globalObjectiveManager)}this._globalObjectiveManager.syncGlobalObjectiveIdsFromSequencing()}catch(e){console.warn("Failed to initialize sequencing service:",e),this._sequencingService=null}}getSequencingService(){return this._sequencingService}setSequencingEventListeners(e){this._sequencingService&&this._sequencingService.setEventListeners(e)}updateSequencingConfiguration(e){this._sequencingService&&this._sequencingService.updateConfiguration(e)}getSequencingState(){return this._sequencingService?this._sequencingService.getSequencingState():{isInitialized:!1,isActive:!1,currentActivity:null,rootActivity:this._sequencing.getRootActivity(),lastSequencingResult:null}}processNavigationRequest(request,e){return!!this._sequencingService&&this._sequencingService.processNavigationRequest(request,e)}resetSequencingState(){this._sequencing?.reset(),this._sequencingService?.setEventListeners({})}getActivityTrackingData(e){if(!this._sequencing?.activityTree)return null;const t=this._sequencing.activityTree.getActivity(e);return t?{completionStatus:t.completionStatus||"unknown",successStatus:t.successStatus||"unknown",progressMeasure:t.progressMeasure??null,score:t.objectiveMeasureStatus?t.objectiveNormalizedMeasure:null}:null}async saveSequencingState(e){if(this._statePersistence)return this._statePersistence.saveSequencingState(e);if(!this.settings.sequencingStatePersistence)return this.apiLog("saveSequencingState","No persistence configuration provided",I.WARN),!1;const t={getSettings:()=>this.settings,apiLog:this.apiLog.bind(this),adl:this.adl,sequencing:this._sequencing,sequencingService:this._sequencingService,learnerId:this.cmi.learner_id};return new ci(t,this._globalObjectiveManager).saveSequencingState(e)}async loadSequencingState(e){if(this._statePersistence)return this._statePersistence.loadSequencingState(e);if(!this.settings.sequencingStatePersistence)return this.apiLog("loadSequencingState","No persistence configuration provided",I.WARN),!1;const t={getSettings:()=>this.settings,apiLog:this.apiLog.bind(this),adl:this.adl,sequencing:this._sequencing,sequencingService:this._sequencingService,learnerId:this.cmi.learner_id};return new ci(t,this._globalObjectiveManager).loadSequencingState(e)}serializeSequencingState(){if(this._statePersistence)return this._statePersistence.serializeSequencingState();const e={getSettings:()=>this.settings,apiLog:this.apiLog.bind(this),adl:this.adl,sequencing:this._sequencing,sequencingService:this._sequencingService,learnerId:this.cmi.learner_id};return new ci(e,this._globalObjectiveManager).serializeSequencingState()}deserializeSequencingState(e){if(this._statePersistence)return this._statePersistence.deserializeSequencingState(e);const t={getSettings:()=>this.settings,apiLog:this.apiLog.bind(this),adl:this.adl,sequencing:this._sequencing,sequencingService:this._sequencingService,learnerId:this.cmi.learner_id};return new ci(t,this._globalObjectiveManager).deserializeSequencingState(e)}determineEntryValue(e,t){return this._dataSerializer.determineEntryValue(e,t)}}export{Scorm2004API};
2
2
  //# sourceMappingURL=scorm2004.min.js.map