scorm-again 3.0.0 → 3.0.2
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.
- package/dist/aicc.js.map +1 -0
- package/dist/aicc.min.js.map +1 -0
- package/dist/cross-frame-api.js +26 -11
- package/dist/cross-frame-api.js.map +1 -0
- package/dist/cross-frame-api.min.js +1 -1
- package/dist/cross-frame-api.min.js.map +1 -0
- package/dist/cross-frame-lms.js +16 -4
- package/dist/cross-frame-lms.js.map +1 -0
- package/dist/cross-frame-lms.min.js +1 -1
- package/dist/cross-frame-lms.min.js.map +1 -0
- package/dist/esm/aicc.js.map +1 -0
- package/dist/esm/aicc.min.js.map +1 -0
- package/dist/esm/cross-frame-api.js +115 -108
- package/dist/esm/cross-frame-api.js.map +1 -0
- package/dist/esm/cross-frame-api.min.js +1 -1
- package/dist/esm/cross-frame-api.min.js.map +1 -0
- package/dist/esm/cross-frame-lms.js +32 -30
- package/dist/esm/cross-frame-lms.js.map +1 -0
- package/dist/esm/cross-frame-lms.min.js +1 -1
- package/dist/esm/cross-frame-lms.min.js.map +1 -0
- package/dist/esm/scorm-again.js +804 -506
- package/dist/esm/scorm-again.js.map +1 -0
- package/dist/esm/scorm-again.min.js +1 -1
- package/dist/esm/scorm-again.min.js.map +1 -0
- package/dist/esm/scorm12.js +152 -373
- package/dist/esm/scorm12.js.map +1 -0
- package/dist/esm/scorm12.min.js +1 -1
- package/dist/esm/scorm12.min.js.map +1 -0
- package/dist/esm/scorm2004.js +582 -312
- package/dist/esm/scorm2004.js.map +1 -0
- package/dist/esm/scorm2004.min.js +1 -1
- package/dist/esm/scorm2004.min.js.map +1 -0
- package/dist/scorm-again.js +1205 -334
- package/dist/scorm-again.js.map +1 -0
- package/dist/scorm-again.min.js +1 -1
- package/dist/scorm-again.min.js.map +1 -0
- package/dist/scorm12.js +832 -71
- package/dist/scorm12.js.map +1 -0
- package/dist/scorm12.min.js +1 -1
- package/dist/scorm12.min.js.map +1 -0
- package/dist/scorm2004.js +1078 -292
- package/dist/scorm2004.js.map +1 -0
- package/dist/scorm2004.min.js +1 -1
- package/dist/scorm2004.min.js.map +1 -0
- package/dist/types/BaseAPI.d.ts +3 -3
- package/dist/types/Scorm2004API.d.ts +1 -0
- package/dist/types/cmi/scorm2004/sequencing/handlers/termination_handler.d.ts +2 -2
- package/dist/types/interfaces/services.d.ts +3 -2
- package/dist/types/services/EventService.d.ts +3 -3
- package/package.json +41 -44
package/dist/scorm2004.min.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
this.Scorm2004API=function(){"use strict";const e={D:86400,H:3600,M:60,S:1},t=o(t=>{if(!t||0>=t)return"PT0S";let i="P",s=t;return Object.entries(e).forEach(e=>{let[t,r]=e,n=Math.floor(s/r);s%=r,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"===t&&s>0&&(n+=s),n&&((i.indexOf("D")>0||["H","M","S"].includes(t))&&-1===i.indexOf("T")&&(i+="T"),i+=`${n}${t}`)}),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 function(){for(var s=arguments.length,r=Array(s),n=0;s>n;n++)r[n]=arguments[n];const o=t?t(...r):JSON.stringify(r);return i.has(o)?i.get(o):(()=>{const result=e(...r);return i.set(o,result),result})()}}class a{constructor(e){this.jsonString=!1,this._initialized=!1,this._cmi_element=e}get initialized(){return this._initialized}initialize(){this._initialized=!0}}class c extends a{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)}get errorCode(){return this._errorCode}}class u extends l{constructor(e,t,i,s){super(e,t),this._detailedMessage="",this.message=`${e} : ${i}`,this._errorMessage=i,s&&(this._detailedMessage=s),Object.setPrototypeOf(this,u.prototype)}get errorMessage(){return this._errorMessage}get detailedMessage(){return this._detailedMessage}}const h="true",d="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{constructor(e){super(e.CMIElement),this.__children=e.children,this._errorCode=e.errorCode??f.GENERAL,this._errorClass=e.errorClass||l,this.childArray=[]}reset(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];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",I="unknown",j={_: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:j.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===h?0:101}:200===e.status?{result:h,errorCode:0}:{result:d,errorCode:101}}return{result:d,errorCode:101}},xhrResponseHandler:function(e){if(void 0!==e){let t=null;if(200>e.status||e.status>299)return{result:d,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===h?0:101}:{result:h,errorCode:0}}return{result:d,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 j.ERROR:console.error(t);break;case"3":case 3:case"WARN":case j.WARN:console.warn(t);break;case"2":case 2:case"INFO":case j.INFO:console.info(t);break;case"1":case 1:case"DEBUG":case j.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{constructor(e,t,i){this._cancelled=!1,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||{});const ie=class e extends a{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"always",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:new Map;super("ruleCondition"),this._condition="always",this._operator=null,this._parameters=new Map,this._referencedObjective=null,this._condition=e,this._operator=t,this._parameters=i}static setNowProvider(t){"function"==typeof t&&(e._now=t)}static setElapsedSecondsHook(t){e._getElapsedSecondsHook=t}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!==I:"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(t){let s=t.timeLimitDuration;if(!s&&t.attemptAbsoluteDurationLimit&&(s=t.attemptAbsoluteDurationLimit),!s)return!1;const r=i(s,k);if(0>=r)return!1;let n=0;if(e._getElapsedSecondsHook)try{const i=e._getElapsedSecondsHook(t);"number"!=typeof i||Number.isNaN(i)||0>i||(n=i)}catch{n=0}if(0===n&&t.attemptExperiencedDuration){const e=i(t.attemptExperiencedDuration,k);e>0&&(n=e)}if(0===n&&t.attemptAbsoluteStartTime)try{const i=new Date(t.attemptAbsoluteStartTime).getTime(),s=e._now().getTime();Number.isNaN(i)||Number.isNaN(s)||i>s||(n=(s-i)/1e3)}catch{n=0}return n>r}evaluateOutsideAvailableTimeRange(t){const i=t.beginTimeLimit,s=t.endTimeLimit;if(!i&&!s)return!1;const r=e._now();return!(!i||r>=new Date(i))||!(!s||new Date(s)>=r)}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}};ie._now=()=>new Date,ie._getElapsedSecondsHook=void 0;let se=ie;class re extends a{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"skip",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"and";super("sequencingRule"),this._conditions=[],this._action="skip",this._conditionCombination="and",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 se))throw new _(this._cmi_element+".conditions",y.TYPE_MISMATCH);this._conditions.includes(e)||this._conditions.push(e)}removeCondition(e){if(!(e instanceof se))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 ne extends a{constructor(){super("sequencingRules"),this._preConditionRules=[],this._exitConditionRules=[],this._postConditionRules=[]}reset(){this._initialized=!1,this._preConditionRules=[],this._exitConditionRules=[],this._postConditionRules=[]}get preConditionRules(){return this._preConditionRules}addPreConditionRule(e){if(!(e instanceof re))throw new _(this._cmi_element+".preConditionRules",y.TYPE_MISMATCH);this._preConditionRules.push(e)}get exitConditionRules(){return this._exitConditionRules}addExitConditionRule(e){if(!(e instanceof re))throw new _(this._cmi_element+".exitConditionRules",y.TYPE_MISMATCH);this._exitConditionRules.push(e)}get postConditionRules(){return this._postConditionRules}addPostConditionRule(e){if(!(e instanceof re))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 oe{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 ae{constructor(e,t){this.activityTree=e,this.treeQueries=t}validateChoice(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};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 ce=(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))(ce||{}),le=(e=>(e.DELIVER="deliver",e.DO_NOT_DELIVER="doNotDeliver",e))(le||{});class ue{constructor(){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,i=arguments.length>3&&void 0!==arguments[3]&&arguments[3];this.deliveryRequest=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"doNotDeliver",this.targetActivity=e,this.exception=t,this.endSequencingSession=i}}class he{constructor(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,s=arguments.length>3&&void 0!==arguments[3]&&arguments[3];this.identifiedActivity=e,this.deliverable=t,this.exception=i,this.endSequencingSession=s}}class de{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;this.activity=e,this.exception=t}}var me=(e=>(e.FORWARD="forward",e.BACKWARD="backward",e))(me||{});class pe{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};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:ce.EXIT_PARENT};case te.EXIT_ALL:return{sequencingRequest:null,terminationRequest:ce.EXIT_ALL};case te.RETRY:return{sequencingRequest:ce.RETRY,terminationRequest:null};case te.RETRY_ALL:return{sequencingRequest:ce.RETRY,terminationRequest:ce.EXIT_ALL};case te.CONTINUE:return{sequencingRequest:ce.CONTINUE,terminationRequest:null};case te.PREVIOUS:return{sequencingRequest:ce.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 ve=(e=>(e.NEVER="never",e.ONCE="once",e.ON_EACH_NEW_ATTEMPT="onEachNewAttempt",e))(ve||{}),ge=(e=>(e.NEVER="never",e.ONCE="once",e.ON_EACH_NEW_ATTEMPT="onEachNewAttempt",e))(ge||{});class _e extends a{constructor(){super("sequencingControls"),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}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 Se{static selectChildrenProcess(e){const t=e.sequencingControls,i=[...e.children];if(t.selectionTiming===ve.NEVER)return i;if(t.selectionTiming===ve.ONCE&&t.selectionCountStatus)return i;if(t.selectionTiming!==ve.ONCE&&!t.selectionCountStatus)return i;const s=t.selectCount;if(null===s||s>=i.length)return t.selectionTiming===ve.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===ve.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===ge.NEVER)return i;if(t.randomizationTiming===ge.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===ge.ONCE&&(t.reorderChildren=!0),e.children.length=0,e.children.push(...s),s}static applySelectionAndRandomization(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const i=e.sequencingControls;if(!t&&(e.isActive||e.isSuspended))return e.children;let s=!1,r=!1;i.selectionTiming===ve.ON_EACH_NEW_ATTEMPT?(s=t,t&&(i.selectionCountStatus=!0)):i.selectionTiming===ve.ONCE&&(s=!i.selectionCountStatus),i.randomizationTiming===ge.ON_EACH_NEW_ATTEMPT?(r=t,t&&(i.reorderChildren=!1)):i.randomizationTiming===ge.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!==ve.NEVER&&(t.selectionTiming!==ve.ONCE||!t.selectionCountStatus)&&null!==t.selectCount&&e.children.length>t.selectCount}static isRandomizationNeeded(e){const t=e.sequencingControls;return t.randomizationTiming!==ge.NEVER&&(t.randomizationTiming!==ge.ONCE||!t.reorderChildren)&&t.randomizeChildren}}class fe{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===me.BACKWARD?s="SB.2.1-3":r&&(s="SB.2.1-2"),new he(i,!1,s,e.endSequencingSession)}r=e.activity.children.length>0&&0===e.activity.getAvailableChildren().length;const n=this.flowActivityTraversalSubprocess(e.activity,t===me.FORWARD,!0,t);if(n)return new he(n,!0,null,!1);i=e.activity,s=!1}return new he(null,!1,null,!1)}flowTreeTraversalSubprocess(e,t){return t===me.FORWARD?this.traverseForward(e,arguments.length>2&&void 0!==arguments[2]&&arguments[2]):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===me.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===me.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&&(Se.isSelectionNeeded(e)||Se.isRandomizationNeeded(e))&&Se.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,me.FORWARD);if(t)return t}return null}canDeliver(e){return this.checkActivityProcess(e)}}class ye{constructor(e,t){this.activityTree=e,this.traversalService=t}handleStart(){const result=new ue;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=le.DELIVER,result.targetActivity=e,result):(result.exception="SB.2.5-3",result)}handleResumeAll(){const result=new ue;return this.activityTree.suspendedActivity?this.activityTree.currentActivity?(result.exception="SB.2.6-2",result):(result.deliveryRequest=le.DELIVER,result.targetActivity=this.activityTree.suspendedActivity,result):(result.exception="SB.2.6-1",result)}handleContinue(e){const result=new ue;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,me.FORWARD);return result.endSequencingSession=t.endSequencingSession,t.deliverable&&t.identifiedActivity?(result.deliveryRequest=le.DELIVER,result.targetActivity=t.identifiedActivity,result):(result.exception=t.exception||"SB.2.7-2",result)}handlePrevious(e){const result=new ue;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,me.BACKWARD);return i.deliverable&&i.identifiedActivity?(result.deliveryRequest=le.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 be{constructor(e,t,i,s){this.activityTree=e,this.constraintValidator=t,this.traversalService=i,this.treeQueries=s}handleChoice(e,t){const result=new ue,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=le.DELIVER,result.targetActivity=o,result}handleJump(e){const result=new ue,t=this.activityTree.getActivity(e);return t?this.treeQueries.isInTree(t)?t.isAvailable?(result.deliveryRequest=le.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){if(arguments.length>1&&void 0!==arguments[1]&&arguments[1]&&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 t=this.constraintValidator.validateTraversalConstraints(e);if(!t.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&&!t.canTraverseInto)return new de(null,"SB.2.4-2");if(t.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 Ce{constructor(e,t){this.activityTree=e,this.ruleEngine=t}handleExit(e){const result=new ue;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 ue;return this.activityTree.root&&this.terminateDescendentAttempts(this.activityTree.root),result}handleAbandon(e){const result=new ue;return e.isActive=!1,this.activityTree.currentActivity=e.parent,result}handleAbandonAll(){const result=new ue;return this.activityTree.currentActivity=null,result}handleSuspendAll(e){const result=new ue;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){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],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 Ae{constructor(e,t){this.activityTree=e,this.traversalService=t}handleRetry(e){const result=new ue;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,me.FORWARD),i)break;return i?(result.deliveryRequest=le.DELIVER,result.targetActivity=i,result):(result.exception="SB.2.10-3",result)}return this.terminateDescendentAttempts(e),result.deliveryRequest=le.DELIVER,result.targetActivity=e,result}handleRetryAll(){if(this.activityTree.currentActivity=null,!this.activityTree.root){const e=new ue;return e.exception="SB.2.10-1",e}const e=this.traversalService.findFirstDeliverableActivity(this.activityTree.root),result=new ue;return e?(result.deliveryRequest=le.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 Ee{get now(){return this._now}set now(e){this._now=e,se.setNowProvider(e),this.ruleEngine=new pe({now:e,getAttemptElapsedSecondsHook:this._getAttemptElapsedSecondsHook}),this.traversalService=new fe(this.activityTree,this.ruleEngine),this.flowHandler=new ye(this.activityTree,this.traversalService),this.choiceHandler=new be(this.activityTree,this.constraintValidator,this.traversalService,this.treeQueries),this.retryHandler=new Ae(this.activityTree,this.traversalService)}get getAttemptElapsedSecondsHook(){return this._getAttemptElapsedSecondsHook}set getAttemptElapsedSecondsHook(e){this._getAttemptElapsedSecondsHook=e,se.setElapsedSecondsHook(e),this.ruleEngine=new pe({now:this._now,getAttemptElapsedSecondsHook:e}),this.traversalService=new fe(this.activityTree,this.ruleEngine),this.flowHandler=new ye(this.activityTree,this.traversalService),this.choiceHandler=new be(this.activityTree,this.constraintValidator,this.traversalService,this.treeQueries),this.retryHandler=new Ae(this.activityTree,this.traversalService)}constructor(e,t,i){let s=arguments.length>4?arguments[4]:void 0;this.activityTree=e,this._now=s?.now||(()=>new Date),this._getAttemptElapsedSecondsHook=s?.getAttemptElapsedSeconds,this.treeQueries=new oe(e),this.ruleEngine=new pe({now:this._now,getAttemptElapsedSecondsHook:this._getAttemptElapsedSecondsHook}),this.constraintValidator=new ae(e,this.treeQueries),this.traversalService=new fe(e,this.ruleEngine),this.flowHandler=new ye(e,this.traversalService),this.choiceHandler=new be(e,this.constraintValidator,this.traversalService,this.treeQueries),this.exitHandler=new Ce(e,this.ruleEngine),this.retryHandler=new Ae(e,this.traversalService)}sequencingRequestProcess(request){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;const t=this.activityTree.currentActivity;switch(request){case ce.START:return this.flowHandler.handleStart();case ce.RESUME_ALL:return this.flowHandler.handleResumeAll();case ce.CONTINUE:return t?this.flowHandler.handleContinue(t):new ue(le.DO_NOT_DELIVER,null,"SB.2.12-1");case ce.PREVIOUS:return t?this.flowHandler.handlePrevious(t):new ue(le.DO_NOT_DELIVER,null,"SB.2.12-1");case ce.CHOICE:return e?this.choiceHandler.handleChoice(e,t):new ue(le.DO_NOT_DELIVER,null,"SB.2.12-5");case ce.JUMP:return e?this.choiceHandler.handleJump(e):new ue(le.DO_NOT_DELIVER,null,"SB.2.12-5");case ce.EXIT:return t?this.exitHandler.handleExit(t):new ue(le.DO_NOT_DELIVER,null,"SB.2.12-1");case ce.EXIT_ALL:return t?this.exitHandler.handleExitAll():new ue(le.DO_NOT_DELIVER,null,"SB.2.12-1");case ce.ABANDON:return t?this.exitHandler.handleAbandon(t):new ue(le.DO_NOT_DELIVER,null,"SB.2.12-1");case ce.ABANDON_ALL:return t?this.exitHandler.handleAbandonAll():new ue(le.DO_NOT_DELIVER,null,"SB.2.12-1");case ce.SUSPEND_ALL:return t?this.exitHandler.handleSuspendAll(t):new ue(le.DO_NOT_DELIVER,null,"SB.2.12-1");case ce.RETRY:return t?this.retryHandler.handleRetry(t):new ue(le.DO_NOT_DELIVER,null,"SB.2.12-1");case ce.RETRY_ALL:return this.retryHandler.handleRetryAll();default:return new ue(le.DO_NOT_DELIVER,null,"SB.2.12-6")}}evaluatePostConditionRules(e){return this.ruleEngine.evaluatePostConditions(e)}canActivityBeDelivered(e){return this.traversalService.canDeliver(e)}validateNavigationRequest(request){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(!Object.values(ce).includes(request))return{valid:!1,exception:"SB.2.12-6"};switch(request){case ce.CONTINUE:case ce.PREVIOUS:if(!t)return{valid:!1,exception:"SB.2.12-1"};if(t.isActive)return{valid:!1,exception:request===ce.CONTINUE?"SB.2.7-1":"SB.2.8-1"};if(t.parent&&!t.parent.sequencingControls.flow)return{valid:!1,exception:request===ce.CONTINUE?"SB.2.7-2":"SB.2.8-2"};if(request===ce.PREVIOUS){const e=this.constraintValidator.checkForwardOnlyViolation(t);if(!e.valid)return e}break;case ce.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 ce.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 Me{constructor(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};this.currentDeliveredActivity=null,this.pendingDelivery=null,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===le.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 we{constructor(e,t){this.settings=e,this.error_codes=t}processHttpRequest(e,t){return this._performAsyncRequest(e,t,arguments.length>2&&void 0!==arguments[2]&&arguments[2],arguments.length>3?arguments[3]:void 0,arguments.length>4?arguments[4]:void 0),{result:h,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+""),j.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:d,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!==h)}updateSettings(e){this.settings=e}}const Re="{target=";function Oe(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 Te{constructor(e){this.context=e}getUndefinedDataModelErrorCode(e){return Oe(this.context.errorCodes,e?"UNDEFINED_DATA_MODEL":"GENERAL")}setCMIValue(e,t,i,s){if(!i||""===i)return t&&this.context.throwSCORMError(i,Oe(this.context.errorCodes,"GENERAL_SET_FAILURE"),"The data model element was not specified"),d;this.context.setLastErrorCode("0");const r=i.split(".");let n=this.context.getDataModel(),o=d,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===d&&this.context.apiLog(e,`There was an error setting the value for: ${i}, value of: ${s}`,j.WARN),o}getCMIValue(e,t,i){if(!i||""===i)return t&&this.context.throwSCORMError(i,Oe(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,Oe(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,Oe(this.context.errorCodes,"CHILDREN_ERROR"),void 0):"_count"===n&&this.context.throwSCORMError(i,Oe(this.context.errorCodes,"COUNT_ERROR"),void 0)),""):r}setFinalAttribute(e,t,i,s,r,o,a){return r&&t?.startsWith(Re)?this.context.isInitialized()?(this.context.throwSCORMError(s,Oe(this.context.errorCodes,"READ_ONLY_ELEMENT")),d):h: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,Oe(this.context.errorCodes,"TYPE_MISMATCH")),d):r&&"0"!==this.context.getLastErrorCode()?d:void 0===t||"__proto__"===t||"constructor"===t?(this.context.throwSCORMError(s,o,a),d):r&&"id"===t&&this.context.isInitialized()&&this.context.checkForDuplicateId(s,i)?(this.context.throwSCORMError(s,Oe(this.context.errorCodes,"GENERAL_SET_FAILURE")),d):(e[t]=i,h):(this.context.throwSCORMError(s,o,a),d)}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?Oe(this.context.errorCodes,"GENERAL_SET_FAILURE"):Oe(this.context.errorCodes,"INVALID_SET_VALUE")||Oe(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(Re)&&"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,Oe(this.context.errorCodes,"GENERAL_GET_FAILURE"),"The data model element does not have children"),{error:!0}):"_count"===t?(this.context.throwSCORMError(i,Oe(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,Oe(this.context.errorCodes,"VALUE_NOT_INITIALIZED"),r),{refObject:e,idx:i,error:!0})}return{refObject:e,idx:i,error:!1}}}class Ie{constructor(){this._logLevel=j.ERROR,this._logHandler=N}static getInstance(){return Ie._instance||(Ie._instance=new Ie),Ie._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(j.ERROR,e)}warn(e){this.log(j.WARN,e)}info(e){this.log(j.INFO,e)}debug(e){this.log(j.DEBUG,e)}shouldLog(e){return this.getNumericLevel(e)>=this.getNumericLevel(this._logLevel)}getNumericLevel(e){if(void 0===e)return j.NONE;if("number"==typeof e)return e;switch(e){case"1":case"DEBUG":return j.DEBUG;case"2":case"INFO":return j.INFO;case"3":case"WARN":return j.WARN;case"4":case"ERROR":default:return j.ERROR;case"5":case"NONE":return j.NONE}}}function je(){return Ie.getInstance()}class qe{constructor(e,t,i,s){this._lastErrorCode="0",this._lastDiagnostic="",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,j.ERROR,e),this._loggingService.error(s),this._lastErrorCode=t+""}clearSCORMError(e){void 0!==e&&e!==d&&(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=d}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=d}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=d}return i}get errorCodes(){return this._errorCodes}}class Ne{constructor(e){this.listenerMap=new Map,this.listenerCount=0,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,j.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,j.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,j.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,j.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 De{constructor(e,t,i){this.apiLog=i,this.storeName="scorm_again_offline_data",this.syncQueue="scorm_again_sync_queue",this.isOnline=navigator.onLine,this.syncInProgress=!1,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)}handleOnlineStatusChange(){const e=this.isOnline;this.isOnline=navigator.onLine,!e&&this.isOnline?(this.apiLog("OfflineStorageService","Device is back online, attempting to sync...",j.INFO),this.syncOfflineData().then(e=>{e?this.apiLog("OfflineStorageService","Sync completed successfully",j.INFO):this.apiLog("OfflineStorageService","Sync failed",j.ERROR)},e=>{this.apiLog("OfflineStorageService","Error during sync: "+e,j.ERROR)})):e&&!this.isOnline&&this.apiLog("OfflineStorageService","Device is offline, data will be stored locally",j.INFO)}handleCustomNetworkStatus(e){if(!(e instanceof CustomEvent))return void this.apiLog("OfflineStorageService","Invalid network status event received",j.WARN);const{online:t}=e.detail;if("boolean"!=typeof t)return void this.apiLog("OfflineStorageService","Invalid online status value in custom event",j.WARN);const i=this.isOnline;this.isOnline=t,this.apiLog("OfflineStorageService","Network status updated via custom event: "+(t?"online":"offline"),j.INFO),!i&&this.isOnline?(this.apiLog("OfflineStorageService","Device is back online, attempting to sync...",j.INFO),this.syncOfflineData().then(e=>{e?this.apiLog("OfflineStorageService","Sync completed successfully",j.INFO):this.apiLog("OfflineStorageService","Sync failed",j.ERROR)},e=>{this.apiLog("OfflineStorageService","Error during sync: "+e,j.ERROR)})):i&&!this.isOnline&&this.apiLog("OfflineStorageService","Device is offline, data will be stored locally",j.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,j.INFO),{result:h,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,j.ERROR),{result:d,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,j.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`,j.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===h?this.apiLog("OfflineStorageService","Successfully synced item "+i.id,j.INFO):(i.syncAttempts++,t.push(i),this.apiLog("OfflineStorageService",`Failed to sync item ${i.id}, attempt #${i.syncAttempts}`,j.WARN))}catch(e){i.syncAttempts++,t.push(i),this.apiLog("OfflineStorageService",`Error syncing item ${i.id}: ${e}`,j.ERROR)}else this.apiLog("OfflineStorageService",`Removing abandoned item ${i.id} after ${e} failed sync attempts`,j.WARN)}return this.saveToStorage(this.syncQueue,t),this.apiLog("OfflineStorageService",`Sync completed. ${e.length-t.length} items synced, ${t.length} items remaining`,j.INFO),this.syncInProgress=!1,!0}catch(e){return this.apiLog("OfflineStorageService","Error during sync process: "+e,j.ERROR),this.syncInProgress=!1,!1}}async sendDataToLMS(e){if(!this.settings.lmsCommitUrl)return{result:d,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!==h?(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,j.ERROR),{result:d,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");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 xe=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}`),Le=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 Pe(e,t,i,s){return xe(e,t,i,y.TYPE_MISMATCH,_,s)}function ze(e,t,i){return Le(e,t,i,y.VALUE_OUT_OF_RANGE,_)}var Fe=(e=>(e.SATISFIED="satisfied",e.NOT_SATISFIED="notSatisfied",e.COMPLETED="completed",e.INCOMPLETE="incomplete",e))(Fe||{}),ke=(e=>(e.ALL="all",e.ANY="any",e.NONE="none",e.AT_LEAST_COUNT="atLeastCount",e.AT_LEAST_PERCENT="atLeastPercent",e))(ke||{});class Ve extends a{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"always",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new Map;super("rollupCondition"),this._condition="always",this._parameters=new Map,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!==I;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 He extends a{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"satisfied",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"all",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0;super("rollupRule"),this._conditions=[],this._action="satisfied",this._consideration="all",this._minimumCount=0,this._minimumPercent=0,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 Ve))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 Be extends a{constructor(){super("rollupRules"),this._rules=[]}reset(){this._initialized=!1,this._rules=[]}get rules(){return this._rules}addRule(e){if(!(e instanceof He))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 Ue{constructor(id){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};this._satisfiedStatus=!1,this._satisfiedStatusKnown=!1,this._measureStatus=!1,this._normalizedMeasure=0,this._progressMeasure=0,this._progressMeasureStatus=!1,this._completionStatus=I,this._progressStatus=!1,this._satisfiedStatusDirty=!1,this._normalizedMeasureDirty=!1,this._completionStatusDirty=!1,this._progressMeasureDirty=!1,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=I,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 $e extends a{constructor(){let id=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";super("activity"),this._id="",this._title="",this._children=[],this._parent=null,this._isVisible=!0,this._isActive=!1,this._isSuspended=!1,this._isCompleted=!1,this._completionStatus=I,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._scaledPassingScore=.7,this._objectiveSatisfiedStatusDirty=!1,this._objectiveNormalizedMeasureDirty=!1,this._objectiveMeasureStatusDirty=!1,this._progressMeasure=0,this._progressMeasureStatus=!1,this._location="",this._attemptAbsoluteStartTime="",this._learnerPrefs=null,this._activityAttemptActive=!1,this._isHiddenFromChoice=!1,this._isAvailable=!0,this._hideLmsUi=[],this._auxiliaryResources=[],this._attemptLimit=null,this._attemptAbsoluteDurationLimit=null,this._activityAbsoluteDurationLimit=null,this._timeLimitAction=null,this._timeLimitDuration=null,this._beginTimeLimit=null,this._endTimeLimit=null,this._launchData="",this._credit="credit",this._maxTimeAllowed="",this._completionThreshold="",this._processedChildren=null,this._isNewAttempt=!1,this._primaryObjective=null,this._objectives=[],this._rollupConsiderations={requiredForSatisfied:"always",requiredForNotSatisfied:"always",requiredForCompleted:"always",requiredForIncomplete:"always",measureSatisfactionIfActive:!0},this._requiredForSatisfied="always",this._requiredForNotSatisfied="always",this._requiredForCompleted="always",this._requiredForIncomplete="always",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._id=id,this._title=e,this._sequencingControls=new _e,this._sequencingRules=new ne,this._rollupRules=new Be,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=I,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){Pe(this._cmi_element+".id",id,B)&&(this._id=id)}get title(){return this._title}set title(e){Pe(this._cmi_element+".title",e,P)&&(this._title=e)}get children(){return this._children}addChild(e){if(!(e instanceof $e))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!==I,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 Ge{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 Ye{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 Fe.SATISFIED:i=this.childFilter.checkChildForRollupSubprocess(e,"objective","satisfied");break;case Fe.NOT_SATISFIED:i=this.childFilter.checkChildForRollupSubprocess(e,"objective","notSatisfied");break;case Fe.COMPLETED:i=this.childFilter.checkChildForRollupSubprocess(e,"progress","completed");break;case Fe.INCOMPLETE:i=this.childFilter.checkChildForRollupSubprocess(e,"progress","incomplete")}i&&(s++,this.evaluateRollupConditionsSubprocess(e,t)&&r++)}return t.consideration===ke.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 ke.ALL:return t.conditions.every(t=>t.evaluate(e));case ke.ANY:return t.conditions.some(t=>t.evaluate(e));case ke.NONE:return!t.conditions.some(t=>t.evaluate(e));case ke.AT_LEAST_COUNT:case ke.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 We{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){let i=2>=arguments.length||void 0===arguments[2]||arguments[2],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 Ke{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===Fe.SATISFIED),s=t.filter(e=>e.action===Fe.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 Je{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===Fe.COMPLETED),s=t.rules.filter(e=>e.action===Fe.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=I,this.objectiveProcessor.syncPrimaryObjectiveFromActivity(e),!0))}}class Xe{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 Qe{constructor(e,t,i,s){this.processingClusters=new Set,this.measureProcessor=e,this.objectiveProcessor=t,this.progressProcessor=i,this.eventCallback=s||null}processCrossClusterDependencies(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]: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){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]: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 Ze{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!==I&&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!==I&&(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!==I,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!==I&&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 et{constructor(e,t){this.rollupStateLog=[],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 tt{constructor(e){this.eventCallback=e||null,this.childFilter=new Ge,this.ruleEvaluator=new Ye(this.childFilter),this.measureProcessor=new We(this.childFilter,e),this.objectiveProcessor=new Ke(this.childFilter,this.ruleEvaluator,e),this.progressProcessor=new Je(this.childFilter,this.ruleEvaluator,this.objectiveProcessor,e),this.durationProcessor=new Xe(e),this.globalObjectiveSynchronizer=new Ze(e),this.stateValidator=new et(this.childFilter,e),this.crossClusterProcessor=new Qe(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||!$e.compareRollupStatus(e,n)||(this.eventCallback?.("rollup_optimization_activated",{activityId:i.id,depth:t.length}),s=!0),!r&&$e.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 it=[O,T,I],st=[M,w,R];function rt(e){return e&&it.includes(e)?e:null}function nt(e){return e&&st.includes(e)?e:null}class ot{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=rt(t.completion_status);i&&i!==I&&(e.completionStatus=i,e.attemptProgressStatus=!0);let s=!1,r=!1,n=!1,o=0;const a=nt(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=nt(i.success_status);c&&c!==R&&(n=c===M,r=!0,s.progressStatus=!0);const l=rt(i.completion_status);if(l&&l!==I&&(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 at{constructor(e,t,i,s){let r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,n=arguments.length>5?arguments[5]:void 0;this.invalidateCacheCallback=null,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 ot({getCMIData:this.getCMIData,fireEvent:(e,t)=>this.fireEvent(e,t)})}setInvalidateCacheCallback(e){this.invalidateCacheCallback=e}processTerminationRequest(request){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],t=arguments.length>2?arguments[2]:void 0;const i=this.activityTree.currentActivity;if(!i)return{terminationRequest:request,sequencingRequest:null,exception:"TB.2.3-1",valid:!1};if((request===ce.EXIT||request===ce.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 ce.EXIT:return this.handleExit(i,e);case ce.EXIT_ALL:return this.handleExitAll(i);case ce.ABANDON:return this.handleAbandon(i,e);case ce.ABANDON_ALL:return this.handleAbandonAll(i);case ce.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);"EXIT_PARENT"===i.action&&e.parent&&(this.activityTree.currentActivity=e.parent,this.endAttempt(this.activityTree.currentActivity));let s,r=!1;do{if(r=!1,s=this.evaluatePostConditions(this.activityTree.currentActivity||e),s.terminationRequest===ce.EXIT_ALL)return this.fireEvent("onPostConditionExitAll",{activity:(this.activityTree.currentActivity||e).id}),this.handleExitAll(this.activityTree.root);if(s.terminationRequest===ce.EXIT_PARENT){const t=this.activityTree.currentActivity||e;if(!t.parent)return{terminationRequest:ce.EXIT_PARENT,sequencingRequest:null,exception:"TB.2.3-4",valid:!1};this.activityTree.currentActivity=t.parent,this.endAttempt(this.activityTree.currentActivity),r=!0,this.fireEvent("onPostConditionExitParent",{fromActivity:t.id,toActivity:this.activityTree.currentActivity.id})}if(!r&&(this.activityTree.currentActivity||e)===this.activityTree.root&&s.sequencingRequest!==ce.RETRY)return{terminationRequest:ce.EXIT,sequencingRequest:ce.EXIT,exception:null,valid:!0}}while(r);if(!t&&!s.sequencingRequest){const t=this.activityTree.currentActivity||e;t.parent&&this.activityTree.setCurrentActivityWithoutActivation(t.parent)}return{terminationRequest:ce.EXIT,sequencingRequest:s.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:ce.EXIT_ALL,sequencingRequest:ce.EXIT,exception:null,valid:!0}}handleAbandon(e,t){return e.isActive=!1,t||(this.activityTree.currentActivity=e.parent),{terminationRequest:ce.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:ce.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:ce.ABANDON_ALL,sequencingRequest:null,exception:null,valid:!0}}handleSuspendAll(e){const t=this.processSuspendAllRequest(e);return t.valid?{terminationRequest:ce.SUSPEND_ALL,sequencingRequest:ce.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:ce.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:ce.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:ce.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:ce.SUSPEND_ALL,sequencingRequest:null,exception:null,valid:!0}}evaluateExitRules(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]: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),Se.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 ct{constructor(){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;this.valid=arguments.length>0&&void 0!==arguments[0]&&arguments[0],this.targetActivity=e,this.exception=t}}const lt=class e{constructor(e,t,i){let s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,n=arguments.length>5?arguments[5]:void 0;this._deliveryInProgress=!1,this.contentDelivered=!1,this.checkActivityCallback=null,this.invalidateCacheCallback=null,this.updateNavigationValidityCallback=null,this.clearSuspendedActivityCallback=null,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 ct(!1,null,"DB.1.1-1");const t=this.getActivityPath(e,!0);if(0===t.length)return new ct(!1,null,"DB.1.1-2");for(const e of t)if(this.checkActivityCallback&&!this.checkActivityCallback(e))return new ct(!1,null,"DB.1.1-3");return new ct(!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,Se.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(t){const i=new Set;for(const e of this.defaultHideLmsUi)i.add(e);let s=t;for(;s;){for(const e of s.hideLmsUi)i.add(e);s=s.parent}return e.HIDE_LMS_UI_ORDER.filter(e=>i.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){let t=1>=arguments.length||void 0===arguments[1]||arguments[1];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}`)}}};lt.HIDE_LMS_UI_ORDER=[...Z];let ut=lt;class ht{constructor(e,t){this.cache=null,this.isDirty=!0,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(ce.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 dt=(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))(dt||{});class mt{constructor(){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,i=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,s=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null;this.valid=arguments.length>0&&void 0!==arguments[0]&&arguments[0],this.terminationRequest=e,this.sequencingRequest=t,this.targetActivityId=i,this.exception=s}}class pt{constructor(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;this.getEffectiveHideLmsUiCallback=null,this.activityTree=e,this.sequencingProcess=t,this.adlNav=i,this.eventCallback=s,this.navigationLookAhead=new ht(e,t)}setGetEffectiveHideLmsUiCallback(e){this.getEffectiveHideLmsUiCallback=e}getNavigationLookAhead(){return this.navigationLookAhead}validateRequest(request){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]: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 mt(!1,null,null,null,"NB.2.1-18")}}validateStartRequest(e){return null!==e?new mt(!1,null,null,null,"NB.2.1-1"):new mt(!0,null,ce.START,null)}validateResumeRequest(e){return null!==e?new mt(!1,null,null,null,"NB.2.1-2"):null===this.activityTree.suspendedActivity?new mt(!1,null,null,null,"NB.2.1-3"):new mt(!0,null,ce.RESUME_ALL,null)}validateContinueRequest(e){return e?e.parent&&e.parent.sequencingControls.flow?new mt(!0,e.isActive?ce.EXIT:null,ce.CONTINUE,null):new mt(!1,null,null,null,"NB.2.1-5"):new mt(!1,null,null,null,"NB.2.1-4")}validatePreviousRequest(e){if(!e)return new mt(!1,null,null,null,"NB.2.1-6");if(!e.parent||!e.parent.sequencingControls.flow)return new mt(!1,null,null,null,"NB.2.1-7");const t=this.validateForwardOnlyConstraints(e);return t.valid?new mt(!0,e.isActive?ce.EXIT:null,ce.PREVIOUS,null):new mt(!1,null,null,null,t.exception)}validateChoiceRequest(e,t){if(!t)return new mt(!1,null,null,null,"NB.2.1-9");const i=this.activityTree.getActivity(t);if(!i)return new mt(!1,null,null,null,"NB.2.1-10");const s=this.validateChoicePath(e,i);return s.valid?new mt(!0,e?.isActive?ce.EXIT:null,ce.CHOICE,t):new mt(!1,null,null,null,s.exception)}validateJumpRequest(e){return e?new mt(!0,null,ce.JUMP,e):new mt(!1,null,null,null,"NB.2.1-12")}validateExitRequest(e){return e?new mt(!0,e===this.activityTree.root?ce.EXIT_ALL:ce.EXIT,null,null):new mt(!1,null,null,null,"NB.2.1-13")}validateExitAllRequest(e){return e?new mt(!0,ce.EXIT_ALL,null,null):new mt(!1,null,null,null,"NB.2.1-14")}validateAbandonRequest(e){return e?new mt(!0,ce.ABANDON,null,null):new mt(!1,null,null,null,"NB.2.1-15")}validateAbandonAllRequest(e){return e?new mt(!0,ce.ABANDON_ALL,null,null):new mt(!1,null,null,null,"NB.2.1-16")}validateSuspendAllRequest(e){return e?new mt(!0,ce.SUSPEND_ALL,null,null):new mt(!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 vt{constructor(e){this.globalObjectiveMap=new Map,this.eventCallback=null,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!==I,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!==I,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 gt{constructor(e,t,i){let s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null;this.getEffectiveHideLmsUiCallback=null,this.getEffectiveAuxiliaryResourcesCallback=null,this.contentDeliveredGetter=null,this.contentDeliveredSetter=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 _t{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=arguments.length>2?arguments[2]:void 0;this.contentDeliveredGetter=null,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 St{constructor(e,t,i){let s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,n=arguments.length>5?arguments[5]:void 0;this.eventCallback=null,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 vt(r||void 0),this.globalObjectiveService.initialize(e.root);const o={};n?.now&&(o.now=n.now),this.deliveryValidator=new _t(e,r,o);const a={};n?.getCMIData&&(a.getCMIData=n.getCMIData),void 0!==n?.is4thEdition&&(a.is4thEdition=n.is4thEdition),this.terminationHandler=new at(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 ut(e,i,this.globalObjectiveService.getMap(),s,r,c),this.navigationValidityService=new pt(e,t,s,r),this.stateManager=new gt(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){let t=arguments.length>2?arguments[2]:void 0;const i=this.navigationValidityService.validateRequest(e,arguments.length>1&&void 0!==arguments[1]?arguments[1]:null);if(!i.valid)return new ct(!1,null,i.exception);if(i.terminationRequest){const s=!!i.sequencingRequest,r=this.terminationHandler.processTerminationRequest(i.terminationRequest,s,t);if(!r.valid)return new ct(!1,null,r.exception||"TB.2.3-1");if(null!==r.sequencingRequest&&(s||r.sequencingRequest!==ce.EXIT)&&(i.sequencingRequest=r.sequencingRequest),!i.sequencingRequest)return i.terminationRequest!==ce.EXIT_ALL&&i.terminationRequest!==ce.ABANDON_ALL||this.fireEvent("onSequencingSessionEnd",{reason:i.terminationRequest===ce.EXIT_ALL?"exit_all":"abandon_all",navigationRequest:e}),new ct(!0,null)}if(i.sequencingRequest){const t=this.sequencingProcess.sequencingRequestProcess(i.sequencingRequest,i.targetActivityId);if(t.endSequencingSession)return this.fireEvent("onSequencingSessionEnd",{reason:"end_of_content",exception:t.exception,navigationRequest:e}),new ct(!1,null,t.exception||"SESSION_ENDED");if(t.exception)return new ct(!1,null,t.exception);if(t.deliveryRequest===le.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 ct(!1,null,"OP.1-1")}processDelivery(e){if(this.enhancedDeliveryValidation){const t=this.deliveryValidator.validateTreeConsistency(e);if(!t.consistent)return new ct(!1,null,t.exception);const i=this.deliveryValidator.validateResources(e);if(!i.available)return new ct(!1,null,i.exception);const s=this.deliveryValidator.validateConcurrentDelivery(e);if(!s.allowed)return new ct(!1,null,s.exception);const r=this.deliveryValidator.validateDependencies(e);if(!r.satisfied)return new ct(!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===I&&(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 ft{constructor(e,cmi,adl,t,i){let s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};this.overallSequencingProcess=null,this.sequencingProcess=null,this.eventListeners={},this.isInitialized=!1,this.isSequencingActive=!1,this.lastCMIValues=new Map,this.lastSequencingResult=null,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 Me(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 tt,this.configuration.now&&se.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 Ee(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 St(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"),h}catch(e){const t="Failed to initialize sequencing service: "+e;return this.log("error",t),this.fireEvent("onSequencingError",t,"initialization"),d}}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"),h}catch(e){const t="Failed to terminate sequencing service: "+e;return this.log("error",t),this.fireEvent("onSequencingError",t,"termination"),d}}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?le.DELIVER:le.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 dt.CHOICE;if(request.includes("jump"))return dt.JUMP;switch(e){case"start":return dt.START;case"resumeAll":return dt.RESUME_ALL;case"continue":return dt.CONTINUE;case"previous":return dt.PREVIOUS;case"exit":return dt.EXIT;case"exitAll":return dt.EXIT_ALL;case"abandon":return dt.ABANDON;case"abandonAll":return dt.ABANDON_ALL;case"suspendAll":return dt.SUSPEND_ALL;case"_none_":return dt.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){if(this.configuration.enableEventSystem){for(var t=arguments.length,i=Array(t>1?t-1:0),s=1;t>s;s++)i[s-1]=arguments[s];"onSequencingDebug"!==e&&this.fireDebugEvent(e+" fired",{eventType:e,argsLength:i.length});try{const t=this.eventListeners[e];if(t&&"function"==typeof t)try{t(...i),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,i[0],...i.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 t=window.scormSequencingEvents;t[e]&&"function"==typeof t[e]&&(t[e](...i),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 yt{loadFromFlattenedJSON(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2?arguments[2]:void 0,s=arguments.length>3?arguments[3]:void 0,r=arguments.length>4?arguments[4]:void 0;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){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2?arguments[2]:void 0,s=arguments.length>3?arguments[3]:void 0,r=arguments.length>4?arguments[4]:void 0;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[j.DEBUG,"1",1,"DEBUG"].includes(n)&&(console.debug("Commit (terminated: "+(e?"yes":"no")+"): "),console.debug(a)),a}}class bt{constructor(e,t){this.settings=e,this.error_codes=t}processHttpRequest(e,t){return arguments.length>2&&void 0!==arguments[2]&&arguments[2]?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=>{let[t,i]=e;n.setRequestHeader(t,i+"")}),this.settings.xhrWithCredentials&&(n.withCredentials=!0);try{return n.send(s),this.settings.xhrResponseHandler(n)}catch(e){return{result:d,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 Ct(e,t,i,s){return xe(e,t,i,f.TYPE_MISMATCH,v,s)}function At(e,t,i,s){if(""===t)throw new v(e,f.VALUE_OUT_OF_RANGE);return Le(e,t,i,f.VALUE_OUT_OF_RANGE,v)}const Et=new class{validateScore(e,t,i,s,r,n,o){return xe(e,t,i,r,o)&&(!s||Le(e,t,s,n,o))}validateScorm12Audio(e,t){return Ct(e,t,D)&&At(e,t,"-1#100")}validateScorm12Language(e,t){return Ct(e,t,"^[\\s\\S]{0,255}$")}validateScorm12Speed(e,t){return Ct(e,t,D)&&At(e,t,"-100#100")}validateScorm12Text(e,t){return Ct(e,t,D)&&At(e,t,"-1#1")}validateReadOnly(e,t){if(t)throw new v(e,f.READ_ONLY_ELEMENT)}};class Mt{constructor(e,t,i,s,r,n,o,a,c){if(this._settings=q,this._courseId="",new.target===Mt)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 we(this.settings,this._error_codes)):this._httpService=new bt(this.settings,this._error_codes),this._eventService=s||new Ne((e,t,i,s)=>this.apiLog(e,t,i,s)),this._serializationService=r||new yt,this._errorHandlingService=o||new qe(this._error_codes,(e,t,i,s)=>this.apiLog(e,t,i||j.ERROR,s),(e,t)=>this.getLmsErrorMessageDetails(e,t),void 0),this.settings.enableOfflineSupport&&(this._offlineStorageService=c||new De(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",j.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,j.ERROR),this.processListeners("OfflineDataSyncFailed")})}),this._offlineStorageService&&this._courseId&&this._offlineStorageService.getOfflineData(this._courseId).then(e=>{e&&(this.apiLog("constructor","Found offline data to restore",j.INFO),this.loadFromJSON(e.runtimeData))}).catch(e=>{this.apiLog("constructor","Error retrieving offline data: "+e,j.ERROR)})),this._cmiValueAccessService=new Te({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})}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",j.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=d;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=h,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",j.INFO),this._offlineStorageService?.syncOfflineData().then(t=>{t&&(this.apiLog(e,"Successfully synced offline data",j.INFO),this.processListeners("OfflineDataSynced"))}))})),this.apiLog(e,"returned: "+s,j.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=h,s=!1;if(this.isNotInitialized()){const e=this._error_codes.TERMINATION_BEFORE_INIT??0;this.throwSCORMError("api",e),112===e&&(i=d)}else if(t&&this.isTerminated()){const e=this._error_codes.MULTIPLE_TERMINATION??0;this.throwSCORMError("api",e),113===e&&(i=d)}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,j.ERROR),result.errorDetails&&this.apiLog("terminate","Error details: "+JSON.stringify(result.errorDetails),j.DEBUG),this.throwSCORMError("api",result.errorCode??0),i=d;else{this.currentState=2,t&&(this.lastErrorCode="0");const e=result?.result??h;i="boolean"==typeof e?e+"":e}this.processListeners(e)}return this.apiLog(e,"returned: "+i,j.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,j.INFO,i),void 0===s?"":("0"===this.lastErrorCode&&this.clearSCORMError(s),s)}setValue(e,t,i,s,r){void 0!==r&&(r+="");let n=d;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=d),this.lastErrorCode+""=="0"&&this.settings.autocommit&&this.scheduleCommit(1e3*this.settings.autocommitSeconds,t),this.apiLog(e,": "+r+": result: "+n,j.INFO,s),"0"===this.lastErrorCode&&this.clearSCORMError(n),n}commit(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.clearScheduledCommit();let i=h;if(this.isNotInitialized()){const e=this._error_codes.COMMIT_BEFORE_INIT??0;this.throwSCORMError("api",e),142===e&&(i=d)}else if(t&&this.isTerminated()){const e=this._error_codes.COMMIT_AFTER_TERM??0;this.throwSCORMError("api",e),143===e&&(i=d)}else{const result=this.storeData(!1);(result.errorCode??0)>0&&(result.errorMessage&&this.apiLog("commit","Commit failed with error: "+result.errorMessage,j.ERROR),result.errorDetails&&this.apiLog("commit","Error details: "+JSON.stringify(result.errorDetails),j.DEBUG),this.throwSCORMError("api",result.errorCode));const s=result?.result??d;i="boolean"==typeof s?s+"":s,this.apiLog(e," Result: "+i,j.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",j.INFO),this._offlineStorageService?.syncOfflineData().then(t=>{t?(this.apiLog(e,"Successfully synced offline data",j.INFO),this.processListeners("OfflineDataSynced")):this.apiLog(e,"Failed to sync some offline data",j.WARN)}))})}return this.apiLog(e,"returned: "+i,j.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,j.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,j.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,j.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){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){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";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){let i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return this.settings.enableOfflineSupport&&this._offlineStorageService&&!this._offlineStorageService.isDeviceOnline()&&this._courseId?(this.apiLog("processHttpRequest","Device is offline, storing data locally",j.INFO),t&&"object"==typeof t&&"cmi"in t?this._offlineStorageService.storeOffline(this._courseId,t):(this.apiLog("processHttpRequest","Invalid commit data format for offline storage",j.ERROR),{result:d,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",j.DEBUG,""))}clearScheduledCommit(){this._timeout&&(this._timeout.cancel(),this._timeout=void 0,this.apiLog("clearScheduledCommit","cleared",j.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=d),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 wt extends a{constructor(){super("cmi.learner_preference"),this.__children=m.student_preference_children,this._audio_level="1",this._language="",this._delivery_speed="1",this._audio_captioning="0"}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){Pe(this._cmi_element+".audio_level",audio_level,V)&&ze(this._cmi_element+".audio_level",audio_level,"0#999.9999999")&&(this._audio_level=audio_level)}get language(){return this._language}set language(language){Pe(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(Pe(this._cmi_element+".delivery_speed",delivery_speed,V)&&ze(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){Pe(this._cmi_element+".audio_captioning",audio_captioning,"^-?([0-9]+)$")&&ze(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 Rt extends b{constructor(){super({CMIElement:"cmi.interactions",children:m.interactions_children,errorCode:y.READ_ONLY_ELEMENT,errorClass:_})}}class Ot extends a{constructor(){super("cmi.interactions.n"),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})}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);Pe(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);Pe(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);Pe(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);Pe(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){Pe(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);Pe(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);Pe(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 Tt extends a{constructor(){super("cmi.interactions.n.objectives.n"),this._id=""}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);Pe(this._cmi_element+".id",id,B)&&(this._id=id)}toJSON(){this.jsonString=!0;const result={id:this.id};return this.jsonString=!1,result}}function It(e){return e.replace(/[[\]]/g,"")}function jt(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function qt(text,e){const t=jt(e),i=RegExp("(?<!\\\\)"+t,"g"),s=RegExp("\\\\"+t,"g");return text.split(i).map(t=>t.replace(s,e))}function Nt(text,e){const t=jt(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 Dt extends a{constructor(e){super("cmi.interactions.n.correct_responses.n"),this._pattern="",this._interactionType=e}reset(){this._initialized=!1,this._pattern=""}get pattern(){return this._pattern}set pattern(pattern){if("fill-in"!==this._interactionType||""!==pattern){if(Pe(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?It(e.delimiter):null,i=t?qt(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?It(e.delimiter):null;let r;if(r=s?qt(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=It(t),s=e.split(RegExp("(?<!\\\\)"+jt(i),"g")).map(e=>e.replace(RegExp("\\\\"+jt(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?It(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=Nt(t,It(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 xt extends a{constructor(e){super(e.CMIElement),this._raw="",this._min="",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){Et.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){Et.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){Et.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 Lt extends xt{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:_}),this._scaled=""}reset(){this._initialized=!1,this._scaled="",this._raw="",this._min="",this._max=""}get scaled(){return this._scaled}set scaled(e){Pe(this._cmi_element+".scaled",e,V)&&ze(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 Pt extends b{constructor(){super({CMIElement:"cmi.comments_from_lms",children:m.comments_children,errorCode:y.READ_ONLY_ELEMENT,errorClass:_})}}class zt extends b{constructor(){super({CMIElement:"cmi.comments_from_learner",children:m.comments_children,errorCode:y.READ_ONLY_ELEMENT,errorClass:_})}}class Ft extends a{constructor(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];super("cmi.comments_from_learner.n"),this._comment="",this._location="",this._timestamp="",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);Pe(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);Pe(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);Pe(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 kt 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 Vt extends a{constructor(){super("cmi.objectives.n"),this._id="",this._idIsSet=!1,this._success_status="unknown",this._completion_status="unknown",this._progress_measure="",this._description="",this.score=new Lt}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()}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);Pe(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);Pe(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);Pe(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);Pe(this._cmi_element+".progress_measure",progress_measure,V)&&ze(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);Pe(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 Ht extends a{constructor(){super("cmi"),this.__version="1.0",this.__children=m.cmi_children}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 Bt extends a{constructor(){super("cmi"),this._learner_id="",this._learner_name=""}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 Ut extends a{constructor(){super("cmi"),this._completion_status="unknown",this._success_status="unknown",this._progress_measure=""}get completion_status(){return this._completion_status}set completion_status(completion_status){Pe(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){Pe(this._cmi_element+".success_status",success_status,$)&&(this._success_status=success_status)}get progress_measure(){return this._progress_measure}set progress_measure(progress_measure){Pe(this._cmi_element+".progress_measure",progress_measure,V)&&ze(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 $t extends a{constructor(){super("cmi"),this._entry="",this._exit="",this._session_time="PT0H0M0S",this._total_time="PT0S"}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.'),Pe(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){Pe(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,r){const n=RegExp(r);return t(i(e,n)+i(s,n))}(this._total_time,s,k)}reset(){this._initialized=!1,this._entry="ab-initio",this._exit="",this._session_time="PT0H0M0S"}}class Gt extends a{constructor(){super("cmi"),this._location="",this._launch_data="",this._suspend_data=""}get location(){return this._location}set location(location){Pe(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){Pe(this._cmi_element+".suspend_data",suspend_data,L,!0)&&(this._suspend_data=suspend_data)}reset(){this._initialized=!1,this._location="",this._suspend_data=""}}class Yt extends a{constructor(){super("cmi"),this._credit="credit",this._mode="normal",this._time_limit_action="continue,no message",this._max_time_allowed=""}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 Wt extends a{constructor(){super("cmi"),this._scaled_passing_score="",this._completion_threshold=""}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 Kt extends c{constructor(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];super("cmi"),this.metadata=new Ht,this.learner=new Bt,this.status=new Ut,this.session=new $t,this.content=new Gt,this.settings=new Yt,this.thresholds=new Wt,this.learner_preference=new wt,this.score=new Lt,this.comments_from_learner=new zt,this.comments_from_lms=new Pt,this.interactions=new Rt,this.objectives=new kt,e&&this.initialize()}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 Jt extends a{constructor(){super("adl"),this.data=new Qt,this._sequencing=null,this.nav=new Xt,this.data=new Qt}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 Xt extends a{constructor(){super("adl.nav"),this._request="_none_",this._sequencing=null,this.request_valid=new ii,this.request_valid.setParentNav(this)}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){Pe(this._cmi_element+".request",request,G)&&(this._request=request)}toJSON(){this.jsonString=!0;const result={request:this.request};return this.jsonString=!1,result}}class Qt extends b{constructor(){super({CMIElement:"adl.data",children:m.adl_data_children,errorCode:y.READ_ONLY_ELEMENT,errorClass:_})}}class Zt extends a{constructor(){super("adl.data.n"),this._id="",this._store="",this._idIsSet=!1,this._storeIsSet=!1}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);Pe(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);Pe(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 ei{constructor(){this._parentNav=null,this._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 ti{constructor(){this._parentNav=null,this._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 ii extends a{constructor(){super("adl.nav.request_valid"),this._continue="unknown",this._previous="unknown",this._exit="unknown",this._exitAll="unknown",this._abandon="unknown",this._abandonAll="unknown",this._suspendAll="unknown",this._parentNav=null,this._choice=new ei,this._jump=new ti}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);Pe(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);Pe(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)&&Pe(this._cmi_element+".choice."+i,e[i]||"",Y)&&Pe(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)&&Pe(this._cmi_element+".jump."+i,e[i]||"",Y)&&Pe(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);Pe(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);Pe(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);Pe(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);Pe(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);Pe(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 si extends a{constructor(e){super("activityTree"),this._root=null,this._currentActivity=null,this._suspendedActivity=null,this._activities=new Map,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 $e))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 $e))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 $e))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 $e))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){return 1>=arguments.length||void 0===arguments[1]||arguments[1]?e.getAvailableChildren():e.children}getSiblings(e){return e.parent?e.parent.children.filter(t=>t!==e):[]}getNextSibling(e){let t=1>=arguments.length||void 0===arguments[1]||arguments[1];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){let t=1>=arguments.length||void 0===arguments[1]||arguments[1];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){const t=1>=arguments.length||void 0===arguments[1]||arguments[1]?e.getAvailableChildren():e.children;return 0===t.length?null:t[0]??null}getLastChild(e){const t=1>=arguments.length||void 0===arguments[1]||arguments[1]?e.getAvailableChildren():e.children;return 0===t.length?null:t[t.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 ri extends a{constructor(){super("sequencing"),this._adlNav=null,this._hideLmsUi=[],this._auxiliaryResources=[],this._overallSequencingProcess=null,this._activityTree=new si,this._sequencingRules=new ne,this._sequencingControls=new _e,this._rollupRules=new Be}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 si))throw new _(this._cmi_element+".activityTree",y.TYPE_MISMATCH);this._activityTree=e}get sequencingRules(){return this._sequencingRules}set sequencingRules(e){if(!(e instanceof ne))throw new _(this._cmi_element+".sequencingRules",y.TYPE_MISMATCH);this._sequencingRules=e}get sequencingControls(){return this._sequencingControls}set sequencingControls(e){if(!(e instanceof _e))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 Be))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 ni{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=t.match(n),a=null;for(;o;){switch(o[2]){case"lang":if(a=t.match("^(({lang=([a-zA-Z]{1,8}|i|x)?(-[a-zA-Z0-9-]{2,8})?}))(.*?)$"),a){const i=a[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"!==o[3]&&"false"!==o[3]&&this.context.throwSCORMError(e,y.TYPE_MISMATCH,""+t),s=!0;break;case"order_matters":s||r||i||"true"!==o[3]&&"false"!==o[3]&&this.context.throwSCORMError(e,y.TYPE_MISMATCH,""+t),i=!0}o=(t=t.substring(o[1]?.length||0)).match(n)}return t}}class oi{constructor(e,t){this.context=e,this.responseValidator=t}getChildElement(e,t,i){if(n(e,"cmi\\.objectives\\.\\d+"))return new Vt;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 Tt}else if(n(e,"cmi\\.interactions\\.\\d+"))return new Ot;return n(e,"cmi\\.comments_from_learner\\.\\d+")?new Ft:n(e,"cmi\\.comments_from_lms\\.\\d+")?new Ft(!0):n(e,"adl\\.data\\.\\d+")?new Zt: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 Dt(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 I}}return i||I}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 ai{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 re(e.action,e.conditionCombination);for(const i of e.conditions){const e=new se(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 He(e.action,e.consideration,e.minimumCount,e.minimumPercent);for(const i of e.conditions){const e=new Ve(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 ci{constructor(e,t){this.sequencingCollections=e||{},this.sequencingConfigBuilder=t||new ai}setSequencingCollections(e){this.sequencingCollections=e}createActivity(e){const t=new $e(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 Ue(e.objectiveID,{description:e.description??null,satisfiedByMeasure:e.satisfiedByMeasure??!1,minNormalizedMeasure:e.minNormalizedMeasure??null,mapInfo:i,isPrimary:t})}}class li{constructor(e){this._globalObjectives=[],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!==I&&(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!==I&&(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 Vt;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 Vt;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!==I&&(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 Vt;i.id=e,this._globalObjectives.push(i)}return{index:t,objective:this._globalObjectives[t]}}}class ui{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",j.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?j.INFO:j.WARN),o}catch(e){return this.context.apiLog("saveSequencingState","Error saving sequencing state: "+(e instanceof Error?e.message:e+""),j.ERROR),!1}}async loadSequencingState(e){const t=this.context.getSettings();if(!t.sequencingStatePersistence)return this.context.apiLog("loadSequencingState","No persistence configuration provided",j.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",j.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?j.INFO:j.WARN),o}catch(e){return this.context.apiLog("loadSequencingState","Error loading sequencing state: "+(e instanceof Error?e.message:e+""),j.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}`,j.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+""),j.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 hi{constructor(e,t){this.context=e,this.globalObjectiveManager=t||null}setGlobalObjectiveManager(e){this.globalObjectiveManager=e}updateSequencingService(e){this.context.sequencingService=e}renderCommitCMI(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[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){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const s=this.renderCommitCMI(e,t),r=e||t?this.context.cmi.getCurrentTotalTime():"",n=i(r,k);let o=I,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":""}}return class extends Mt{constructor(e,t){const i=e?{...e}:void 0;i&&void 0===i.mastery_override&&(i.mastery_override=!1),super(y,i,t),this._version="1.0",this._sequencingService=null,this._extractedScoItemIds=[],this._sequencingCollections={},this._statePersistence=null,this.cmi=new Kt,this.adl=new Jt,this._sequencing=new ri,this.adl.sequencing=this._sequencing,this._sequencingConfigBuilder=new ai,this._activityTreeBuilder=new ci({},this._sequencingConfigBuilder),this._responseValidator=new ni({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 oi({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 li(s);const r={getSettings:()=>this.settings,cmi:this.cmi,sequencingService:this._sequencingService,renderCMIToJSONObject:this.renderCMIToJSONObject.bind(this)};this._dataSerializer=new hi(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}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(){if(""!==(arguments.length>0&&void 0!==arguments[0]?arguments[0]:""))return this.throwSCORMError("api",this._error_codes.ARGUMENT_ERROR),d;this.cmi.initialize();const result=this.initialize("Initialize","LMS was already initialized!","LMS is already finished!");return result===h&&this._sequencingService&&this._sequencingService.initialize(),result===h&&this._globalObjectiveManager.restoreGlobalObjectivesToCMI(),result===h&&this.settings.sequencingStatePersistence&&this.loadSequencingState().catch(()=>{this.apiLog("lmsInitialize","Failed to auto-load sequencing state",j.WARN)}),result}lmsFinish(){if(""!==(arguments.length>0&&void 0!==arguments[0]?arguments[0]:""))return this.throwSCORMError("api",this._error_codes.ARGUMENT_ERROR),d;const e=this.adl?.nav?.request||"_none_",t=this.cmi?.getExitValueInternal()||"",i=this.isTerminated(),s=this._sequencingService?.isDeliveryInProgress()??!1,result=this.terminate("Terminate",!0);if(result===h&&!i&&!s){let i=!1,s=null,r=e,n="";const o=RegExp(G);if("_none_"!==e){const t=e.match(o);t&&(t.groups?.choice_target?(n=t.groups?.choice_target,r="choice"):t.groups?.jump_target&&(n=t.groups?.jump_target,r="jump"))}if(this._sequencingService)try{let e,o=null;"_none_"!==r?(o=r,e=n||void 0):this._sequencing.getCurrentActivity()&&(o="exit"),o&&(i=this._sequencingService.processNavigationRequest(o,e,t),s=o)}catch(e){i=!1}if(!i)if("_none_"!==e){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("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 this.isTerminated()?(this.lastErrorCode=y.RETRIEVE_AFTER_TERM+"",""):this.isInitialized()?"cmi.completion_status"===e?this._cmiHandler.evaluateCompletionStatus():"cmi.success_status"===e?this._cmiHandler.evaluateSuccessStatus():this.getValue("GetValue",!0,e):(this.lastErrorCode=y.RETRIEVE_BEFORE_INIT+"","")}lmsSetValue(e,t){let i=null;try{i=this.getCMIValue(e)}catch(e){i=null}const result=this.setValue("SetValue","Commit",!0,e,t);if(result===h&&this._sequencingService)try{this._sequencingService.triggerRollupOnCMIChange(e,i,t)}catch(t){console.warn(`Sequencing rollup failed for ${e}: ${t}`)}return result===h&&"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",j.WARN)}),result}lmsCommit(){if(""!==(arguments.length>0&&void 0!==arguments[0]?arguments[0]:""))return this.throwSCORMError("api",this._error_codes.ARGUMENT_ERROR),d;if(this.settings.throttleCommits)return this.scheduleCommit(500,"Commit"),h;{const result=this.commit("Commit",!0);return result===h&&"commit"===this.settings.sequencingStatePersistence?.autoSaveOn&&this.saveSequencingState().catch(()=>{this.apiLog("lmsCommit","Failed to auto-save sequencing state",j.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)}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){return this._dataSerializer.renderCommitCMI(e,arguments.length>1&&void 0!==arguments[1]&&arguments[1])}renderCommitObject(e){return this._dataSerializer.renderCommitObject(e,arguments.length>1&&void 0!==arguments[1]&&arguments[1])}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=I;"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,j.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:h,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 ft(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 ui(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",j.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 ui(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",j.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 ui(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 ui(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 ui(t,this._globalObjectiveManager).deserializeSequencingState(e)}determineEntryValue(e,t){return this._dataSerializer.determineEntryValue(e,t)}}}();
|
|
1
|
+
this.Scorm2004API=function(){"use strict";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=>{let[t,r]=e,n=Math.floor(s/r);s%=r,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"===t&&s>0&&(n+=s),n&&((i.indexOf("D")>0||["H","M","S"].includes(t))&&-1===i.indexOf("T")&&(i+="T"),i+=`${n}${t}`)}),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 function(){for(var s=arguments.length,r=Array(s),n=0;s>n;n++)r[n]=arguments[n];const o=t?t(...r):JSON.stringify(r);return i.has(o)?i.get(o):(()=>{const result=e(...r);return i.set(o,result),result})()}}var a=Object.defineProperty,c=(e,t,i)=>((e,t,i)=>t in e?a(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class l{constructor(e){c(this,"jsonString",!1),c(this,"_cmi_element"),c(this,"_initialized",!1),this._cmi_element=e}get initialized(){return this._initialized}initialize(){this._initialized=!0}}class u extends l{constructor(){super(...arguments),c(this,"_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()}}var h=Object.defineProperty,d=(e,t,i)=>((e,t,i)=>t in e?h(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class m extends Error{constructor(e,t){super(`${e} : ${""+t}`),d(this,"_errorCode"),this._errorCode=t,Object.setPrototypeOf(this,m.prototype)}get errorCode(){return this._errorCode}}class p extends m{constructor(e,t,i,s){super(e,t),d(this,"_errorMessage"),d(this,"_detailedMessage",""),this.message=`${e} : ${i}`,this._errorMessage=i,s&&(this._detailedMessage=s),Object.setPrototypeOf(this,p.prototype)}get errorMessage(){return this._errorMessage}get detailedMessage(){return this._detailedMessage}}const v="true",g="false",_={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."}}},f={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 S extends p{constructor(e,t){!{}.hasOwnProperty.call(f,t+"")?super(e,101,f[101]?.basicMessage,f[101]?.detailMessage):super(e,t,f[t+""]?.basicMessage||"Unknown error",f[t+""]?.detailMessage),Object.setPrototypeOf(this,S.prototype)}}const b=_.error_descriptions;class y extends p{constructor(e,t){!{}.hasOwnProperty.call(b,t+"")?super(e,101,b[101]?.basicMessage,b[101]?.detailMessage):super(e,t,b[t+""]?.basicMessage||"Unknown error",b[t+""]?.detailMessage),Object.setPrototypeOf(this,y.prototype)}}const C={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},A={...C,INVALID_SET_VALUE:402,READ_ONLY_ELEMENT:403,TYPE_MISMATCH:405,VALUE_OUT_OF_RANGE:407},E={...C,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};var w=Object.defineProperty,M=(e,t,i)=>((e,t,i)=>t in e?w(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class O extends l{constructor(e){super(e.CMIElement),M(this,"_errorCode"),M(this,"_errorClass"),M(this,"__children"),M(this,"childArray"),this.__children=e.children,this._errorCode=e.errorCode??A.GENERAL,this._errorClass=e.errorClass||m,this.childArray=[]}reset(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];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 R="unknown",T="true",j="false",I="passed",q="failed",N="unknown",D="completed",x="incomplete",L="unknown",P={_:0,DEBUG:1,INFO:2,WARN:3,ERROR:4,NONE:5},z={autocommit:!1,autocommitSeconds:10,throttleCommits:!1,useAsynchronousCommits:!1,sendFullCommit:!0,lmsCommitUrl:!1,dataCommitFormat:"json",commitRequestDataType:"application/json;charset=UTF-8",autoProgress:!1,logLevel:P.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===v?0:101}:200===e.status?{result:v,errorCode:0}:{result:g,errorCode:101}}return{result:g,errorCode:101}},xhrResponseHandler:function(e){if(void 0!==e){let t=null;if(200>e.status||e.status>299)return{result:g,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===v?0:101}:{result:v,errorCode:0}}return{result:g,errorCode:101}},requestHandler:function(e){return e},onLogMessage:F,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 F(e,t){switch(e){case"4":case 4:case"ERROR":case P.ERROR:console.error(t);break;case"3":case 3:case"WARN":case P.WARN:console.warn(t);break;case"2":case 2:case"INFO":case P.INFO:console.info(t);break;case"1":case 1:case"DEBUG":case P.DEBUG:console.debug?console.debug(t):console.log(t)}}const k="^-?([0-9]+)$",V="^[\\u0000-\\uFFFF]{0,4000}$",H="^[\\u0000-\\uFFFF]{0,64000}$",B="^({lang=([a-zA-Z]{1,8}|i|x)(-[a-zA-Z0-9-]{2,8})?})?((?!{.*$).{0,250}$)?$",U="^({lang=([a-zA-Z]{1,8}|i|x)(-[a-zA-Z0-9-]{2,8})?})?((?!{.*$).{0,4000}$)?$",$="^(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])?)?)?)?)?)?)?)?$",G="^P(?:([.,\\d]+)Y)?(?:([.,\\d]+)M)?(?:([.,\\d]+)W)?(?:([.,\\d]+)D)?(?:T?(?:([.,\\d]+)H)?(?:([.,\\d]+)M)?(?:(\\d+(?:\\.\\d{1,2})?)S)?)?$",Y="^-?([0-9]{1,10})(\\.[0-9]{1,18})?$",W="^(?=.*\\w)[\\w\\-\\(\\)\\+\\.\\:\\=\\@\\;\\$\\_\\!\\*\\'\\%\\/\\#]{1,250}$",K="^(?:(?!urn:)\\S{1,4000}|urn:[A-Za-z0-9-]{1,31}:\\S{1,4000}|.{1,4000})$",J="^(completed|incomplete|not attempted|unknown)$",X="^(passed|failed|unknown)$",Q="^(_?(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)$",Z="^(unknown|true|false)$",ee="^{target=\\S{0,}[a-zA-Z0-9-_]+}$",te={"true-false":{format:"^true$|^false$",max:1,delimiter:"",unique:!1},choice:{format:K,max:36,delimiter:"[,]",unique:!0},"fill-in":{format:B,max:10,delimiter:"[,]",unique:!1},"long-fill-in":{format:U,max:1,delimiter:"",unique:!1},matching:{format:W,format2:W,max:36,delimiter:"[,]",delimiter2:"[.]",unique:!1},performance:{format:"^$|"+W,format2:Y+"|^$|"+W,max:250,delimiter:"[,]",delimiter2:"[.]",unique:!1},sequencing:{format:W,max:36,delimiter:"[,]",unique:!1},likert:{format:W,max:1,delimiter:"",unique:!1},numeric:{format:Y,max:1,delimiter:"",unique:!1},other:{format:V,max:1,delimiter:"",unique:!1}},ie={"true-false":{max:1,delimiter:"",unique:!1,duplicate:!1,format:"^true$|^false$",limit:1},choice:{max:36,delimiter:"[,]",unique:!0,duplicate:!1,format:K},"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:U},matching:{max:36,delimiter:"[,]",delimiter2:"[.]",unique:!1,duplicate:!1,format:W,format2:W},performance:{max:250,delimiter:"[,]",delimiter2:"[.]",unique:!1,duplicate:!1,format:W,format2:`^(${W})$|^(?:\\d+(?:\\.\\d+)?(?::\\d+(?:\\.\\d+)?)?)$`},sequencing:{max:36,delimiter:"[,]",unique:!1,duplicate:!1,format:W},likert:{max:1,delimiter:"",unique:!1,duplicate:!1,format:W,limit:1},numeric:{max:2,delimiter:"[:]",unique:!1,duplicate:!1,format:Y,limit:1},other:{max:1,delimiter:"",unique:!1,duplicate:!1,format:V,limit:1}},se=["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"];var re=Object.defineProperty,ne=(e,t,i)=>((e,t,i)=>t in e?re(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class oe{constructor(e,t,i){ne(this,"_API"),ne(this,"_cancelled",!1),ne(this,"_timeout"),ne(this,"_callback"),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 ae=["continue","previous","exit","exitAll","abandon","abandonAll","suspendAll"];var ce=Object.defineProperty,le=(e,t,i)=>((e,t,i)=>t in e?ce(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i),ue=(e=>(e.NOT="not",e.AND="and",e.OR="or",e))(ue||{}),he=(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))(he||{});const de=class e extends l{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"always",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:new Map;super("ruleCondition"),le(this,"_condition","always"),le(this,"_operator",null),le(this,"_parameters",new Map),le(this,"_referencedObjective",null),this._condition=e,this._operator=t,this._parameters=i}static setNowProvider(t){"function"==typeof t&&(e._now=t)}static setElapsedSecondsHook(t){e._getElapsedSecondsHook=t}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===I||!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===D:e.isCompleted;break;case"progressKnown":case"activityProgressKnown":result=t?t.completionStatus!==L:"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(t){let s=t.timeLimitDuration;if(!s&&t.attemptAbsoluteDurationLimit&&(s=t.attemptAbsoluteDurationLimit),!s)return!1;const r=i(s,G);if(0>=r)return!1;let n=0;if(e._getElapsedSecondsHook)try{const i=e._getElapsedSecondsHook(t);"number"!=typeof i||Number.isNaN(i)||0>i||(n=i)}catch{n=0}if(0===n&&t.attemptExperiencedDuration){const e=i(t.attemptExperiencedDuration,G);e>0&&(n=e)}if(0===n&&t.attemptAbsoluteStartTime)try{const i=new Date(t.attemptAbsoluteStartTime).getTime(),s=e._now().getTime();Number.isNaN(i)||Number.isNaN(s)||i>s||(n=(s-i)/1e3)}catch{n=0}return n>r}evaluateOutsideAvailableTimeRange(t){const i=t.beginTimeLimit,s=t.endTimeLimit;if(!i&&!s)return!1;const r=e._now();return!(!i||r>=new Date(i))||!(!s||new Date(s)>=r)}parseISO8601Duration(e){return 1e3*i(e,G)}toJSON(){this.jsonString=!0;const result={condition:this._condition,operator:this._operator,parameters:Object.fromEntries(this._parameters)};return this.jsonString=!1,result}};le(de,"_now",()=>new Date),le(de,"_getElapsedSecondsHook");let me=de;class pe extends l{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"skip",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"and";super("sequencingRule"),le(this,"_conditions",[]),le(this,"_action","skip"),le(this,"_conditionCombination","and"),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 me))throw new y(this._cmi_element+".conditions",E.TYPE_MISMATCH);this._conditions.includes(e)||this._conditions.push(e)}removeCondition(e){if(!(e instanceof me))throw new y(this._cmi_element+".conditions",E.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 ve extends l{constructor(){super("sequencingRules"),le(this,"_preConditionRules",[]),le(this,"_exitConditionRules",[]),le(this,"_postConditionRules",[])}reset(){this._initialized=!1,this._preConditionRules=[],this._exitConditionRules=[],this._postConditionRules=[]}get preConditionRules(){return this._preConditionRules}addPreConditionRule(e){if(!(e instanceof pe))throw new y(this._cmi_element+".preConditionRules",E.TYPE_MISMATCH);this._preConditionRules.push(e)}get exitConditionRules(){return this._exitConditionRules}addExitConditionRule(e){if(!(e instanceof pe))throw new y(this._cmi_element+".exitConditionRules",E.TYPE_MISMATCH);this._exitConditionRules.push(e)}get postConditionRules(){return this._postConditionRules}addPostConditionRule(e){if(!(e instanceof pe))throw new y(this._cmi_element+".postConditionRules",E.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 ge{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 _e{constructor(e,t){this.activityTree=e,this.treeQueries=t}validateChoice(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};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 fe=Object.defineProperty,Se=(e,t,i)=>((e,t,i)=>t in e?fe(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i),be=(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))(be||{}),ye=(e=>(e.DELIVER="deliver",e.DO_NOT_DELIVER="doNotDeliver",e))(ye||{});class Ce{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"doNotDeliver",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,s=arguments.length>3&&void 0!==arguments[3]&&arguments[3];Se(this,"deliveryRequest"),Se(this,"targetActivity"),Se(this,"exception"),Se(this,"endSequencingSession"),this.deliveryRequest=e,this.targetActivity=t,this.exception=i,this.endSequencingSession=s}}class Ae{constructor(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,s=arguments.length>3&&void 0!==arguments[3]&&arguments[3];Se(this,"identifiedActivity"),Se(this,"deliverable"),Se(this,"exception"),Se(this,"endSequencingSession"),this.identifiedActivity=e,this.deliverable=t,this.exception=i,this.endSequencingSession=s}}class Ee{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;Se(this,"activity"),Se(this,"exception"),this.activity=e,this.exception=t}}var we=(e=>(e.FORWARD="forward",e.BACKWARD="backward",e))(we||{}),Me=Object.defineProperty,Oe=(e,t,i)=>((e,t,i)=>t in e?Me(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Re{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};Oe(this,"now"),Oe(this,"getAttemptElapsedSecondsHook"),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===ue.AND?t.conditions.every(t=>t.evaluate(e)):("any"===i||i===ue.OR)&&t.conditions.some(t=>t.evaluate(e))}evaluateExitRules(e){const t=this.checkSequencingRules(e,e.sequencingRules.exitConditionRules);return t===he.EXIT||t===he.EXIT_PARENT||t===he.EXIT_ALL?t:null}evaluatePostConditionAction(e){const t=this.checkSequencingRules(e,e.sequencingRules.postConditionRules);return t&&[he.EXIT_PARENT,he.EXIT_ALL,he.RETRY,he.RETRY_ALL,he.CONTINUE,he.PREVIOUS,he.STOP_FORWARD_TRAVERSAL].includes(t)?t:null}evaluatePostConditions(e){const t=this.evaluatePostConditionAction(e);if(!t)return{sequencingRequest:null,terminationRequest:null};switch(t){case he.EXIT_PARENT:return{sequencingRequest:null,terminationRequest:be.EXIT_PARENT};case he.EXIT_ALL:return{sequencingRequest:null,terminationRequest:be.EXIT_ALL};case he.RETRY:return{sequencingRequest:be.RETRY,terminationRequest:null};case he.RETRY_ALL:return{sequencingRequest:be.RETRY,terminationRequest:be.EXIT_ALL};case he.CONTINUE:return{sequencingRequest:be.CONTINUE,terminationRequest:null};case he.PREVIOUS:return{sequencingRequest:be.PREVIOUS,terminationRequest:null};case he.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,G);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!==he.SKIP&&t!==he.DISABLED,wasSkipped:t===he.SKIP}}}var Te=Object.defineProperty,je=(e,t,i)=>((e,t,i)=>t in e?Te(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i),Ie=(e=>(e.NEVER="never",e.ONCE="once",e.ON_EACH_NEW_ATTEMPT="onEachNewAttempt",e))(Ie||{}),qe=(e=>(e.NEVER="never",e.ONCE="once",e.ON_EACH_NEW_ATTEMPT="onEachNewAttempt",e))(qe||{});class Ne extends l{constructor(){super("sequencingControls"),je(this,"_enabled",!0),je(this,"_choice",!0),je(this,"_choiceExit",!0),je(this,"_flow",!0),je(this,"_forwardOnly",!1),je(this,"_useCurrentAttemptObjectiveInfo",!0),je(this,"_useCurrentAttemptProgressInfo",!0),je(this,"_preventActivation",!1),je(this,"_constrainChoice",!1),je(this,"_stopForwardTraversal",!1),je(this,"_rollupObjectiveSatisfied",!0),je(this,"_rollupProgressCompletion",!0),je(this,"_objectiveMeasureWeight",1),je(this,"_selectionTiming","never"),je(this,"_selectCount",null),je(this,"_selectionCountStatus",!1),je(this,"_randomizeChildren",!1),je(this,"_randomizationTiming","never"),je(this,"_reorderChildren",!1),je(this,"_completionSetByContent",!1),je(this,"_objectiveSetByContent",!1),je(this,"_tracked",!0)}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 De{static selectChildrenProcess(e){const t=e.sequencingControls,i=[...e.children];if(t.selectionTiming===Ie.NEVER)return i;if(t.selectionTiming===Ie.ONCE&&t.selectionCountStatus)return i;if(t.selectionTiming!==Ie.ONCE&&!t.selectionCountStatus)return i;const s=t.selectCount;if(null===s||s>=i.length)return t.selectionTiming===Ie.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===Ie.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===qe.NEVER)return i;if(t.randomizationTiming===qe.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===qe.ONCE&&(t.reorderChildren=!0),e.children.length=0,e.children.push(...s),s}static applySelectionAndRandomization(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const i=e.sequencingControls;if(!t&&(e.isActive||e.isSuspended))return e.children;let s=!1,r=!1;i.selectionTiming===Ie.ON_EACH_NEW_ATTEMPT?(s=t,t&&(i.selectionCountStatus=!0)):i.selectionTiming===Ie.ONCE&&(s=!i.selectionCountStatus),i.randomizationTiming===qe.ON_EACH_NEW_ATTEMPT?(r=t,t&&(i.reorderChildren=!1)):i.randomizationTiming===qe.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!==Ie.NEVER&&(t.selectionTiming!==Ie.ONCE||!t.selectionCountStatus)&&null!==t.selectCount&&e.children.length>t.selectCount}static isRandomizationNeeded(e){const t=e.sequencingControls;return t.randomizationTiming!==qe.NEVER&&(t.randomizationTiming!==qe.ONCE||!t.reorderChildren)&&t.randomizeChildren}}class xe{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===we.BACKWARD?s="SB.2.1-3":r&&(s="SB.2.1-2"),new Ae(i,!1,s,e.endSequencingSession)}r=e.activity.children.length>0&&0===e.activity.getAvailableChildren().length;const n=this.flowActivityTraversalSubprocess(e.activity,t===we.FORWARD,!0,t);if(n)return new Ae(n,!0,null,!1);i=e.activity,s=!1}return new Ae(null,!1,null,!1)}flowTreeTraversalSubprocess(e,t){return t===we.FORWARD?this.traverseForward(e,arguments.length>2&&void 0!==arguments[2]&&arguments[2]):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===we.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===we.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&&(De.isSelectionNeeded(e)||De.isRandomizationNeeded(e))&&De.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,we.FORWARD);if(t)return t}return null}canDeliver(e){return this.checkActivityProcess(e)}}class Le{constructor(e,t){this.activityTree=e,this.traversalService=t}handleStart(){const result=new Ce;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=ye.DELIVER,result.targetActivity=e,result):(result.exception="SB.2.5-3",result)}handleResumeAll(){const result=new Ce;return this.activityTree.suspendedActivity?this.activityTree.currentActivity?(result.exception="SB.2.6-2",result):(result.deliveryRequest=ye.DELIVER,result.targetActivity=this.activityTree.suspendedActivity,result):(result.exception="SB.2.6-1",result)}handleContinue(e){const result=new Ce;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,we.FORWARD);return result.endSequencingSession=t.endSequencingSession,t.deliverable&&t.identifiedActivity?(result.deliveryRequest=ye.DELIVER,result.targetActivity=t.identifiedActivity,result):(result.exception=t.exception||"SB.2.7-2",result)}handlePrevious(e){const result=new Ce;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,we.BACKWARD);return i.deliverable&&i.identifiedActivity?(result.deliveryRequest=ye.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 Pe{constructor(e,t,i,s){this.activityTree=e,this.constraintValidator=t,this.traversalService=i,this.treeQueries=s}handleChoice(e,t){const result=new Ce,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=ye.DELIVER,result.targetActivity=o,result}handleJump(e){const result=new Ce,t=this.activityTree.getActivity(e);return t?this.treeQueries.isInTree(t)?t.isAvailable?(result.deliveryRequest=ye.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){if(arguments.length>1&&void 0!==arguments[1]&&arguments[1]&&e===this.activityTree.root)return new Ee(null,"SB.2.4-3");if(!e.isAvailable)return new Ee(null,null);if(e.isHiddenFromChoice)return new Ee(null,null);if(e.sequencingControls&&e.sequencingControls.stopForwardTraversal)return new Ee(null,"SB.2.4-1");const t=this.constraintValidator.validateTraversalConstraints(e);if(!t.canTraverse)return new Ee(null,null);if(0===e.children.length)return this.traversalService.checkActivityProcess(e)?new Ee(e,null):new Ee(null,null);if(e.parent?.sequencingControls.constrainChoice&&!t.canTraverseInto)return new Ee(null,"SB.2.4-2");if(t.canTraverseInto){const t=this.choiceFlowTreeTraversal(e);return new Ee(t,null)}return new Ee(null,null)}terminateDescendentAttemptsProcess(e){e.isActive=!1;for(const t of e.children)this.terminateDescendentAttemptsProcess(t)}}class ze{constructor(e,t){this.activityTree=e,this.ruleEngine=t}handleExit(e){const result=new Ce;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 Ce;return this.activityTree.root&&this.terminateDescendentAttempts(this.activityTree.root),result}handleAbandon(e){const result=new Ce;return e.isActive=!1,this.activityTree.currentActivity=e.parent,result}handleAbandonAll(){const result=new Ce;return this.activityTree.currentActivity=null,result}handleSuspendAll(e){const result=new Ce;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){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],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 he.EXIT:break;case he.EXIT_PARENT:t.parent&&t.parent.isActive&&this.terminateDescendentAttempts(t.parent,!0);break;case he.EXIT_ALL:this.activityTree.root&&this.activityTree.root!==t&&this.activityTree.getAllActivities().some(e=>e.isActive)&&this.terminateDescendentAttempts(this.activityTree.root,!0)}}}class Fe{constructor(e,t){this.activityTree=e,this.traversalService=t}handleRetry(e){const result=new Ce;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,we.FORWARD),i)break;return i?(result.deliveryRequest=ye.DELIVER,result.targetActivity=i,result):(result.exception="SB.2.10-3",result)}return this.terminateDescendentAttempts(e),result.deliveryRequest=ye.DELIVER,result.targetActivity=e,result}handleRetryAll(){if(this.activityTree.currentActivity=null,!this.activityTree.root){const e=new Ce;return e.exception="SB.2.10-1",e}const e=this.traversalService.findFirstDeliverableActivity(this.activityTree.root),result=new Ce;return e?(result.deliveryRequest=ye.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)}}var ke=Object.defineProperty,Ve=(e,t,i)=>((e,t,i)=>t in e?ke(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class He{constructor(e,t,i){let s=arguments.length>4?arguments[4]:void 0;Ve(this,"activityTree"),Ve(this,"treeQueries"),Ve(this,"constraintValidator"),Ve(this,"ruleEngine"),Ve(this,"traversalService"),Ve(this,"flowHandler"),Ve(this,"choiceHandler"),Ve(this,"exitHandler"),Ve(this,"retryHandler"),Ve(this,"_now"),Ve(this,"_getAttemptElapsedSecondsHook"),this.activityTree=e,this._now=s?.now||(()=>new Date),this._getAttemptElapsedSecondsHook=s?.getAttemptElapsedSeconds,this.treeQueries=new ge(e),this.ruleEngine=new Re({now:this._now,getAttemptElapsedSecondsHook:this._getAttemptElapsedSecondsHook}),this.constraintValidator=new _e(e,this.treeQueries),this.traversalService=new xe(e,this.ruleEngine),this.flowHandler=new Le(e,this.traversalService),this.choiceHandler=new Pe(e,this.constraintValidator,this.traversalService,this.treeQueries),this.exitHandler=new ze(e,this.ruleEngine),this.retryHandler=new Fe(e,this.traversalService)}get now(){return this._now}set now(e){this._now=e,me.setNowProvider(e),this.ruleEngine=new Re({now:e,getAttemptElapsedSecondsHook:this._getAttemptElapsedSecondsHook}),this.traversalService=new xe(this.activityTree,this.ruleEngine),this.flowHandler=new Le(this.activityTree,this.traversalService),this.choiceHandler=new Pe(this.activityTree,this.constraintValidator,this.traversalService,this.treeQueries),this.retryHandler=new Fe(this.activityTree,this.traversalService)}get getAttemptElapsedSecondsHook(){return this._getAttemptElapsedSecondsHook}set getAttemptElapsedSecondsHook(e){this._getAttemptElapsedSecondsHook=e,me.setElapsedSecondsHook(e),this.ruleEngine=new Re({now:this._now,getAttemptElapsedSecondsHook:e}),this.traversalService=new xe(this.activityTree,this.ruleEngine),this.flowHandler=new Le(this.activityTree,this.traversalService),this.choiceHandler=new Pe(this.activityTree,this.constraintValidator,this.traversalService,this.treeQueries),this.retryHandler=new Fe(this.activityTree,this.traversalService)}sequencingRequestProcess(request){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;const t=this.activityTree.currentActivity;switch(request){case be.START:return this.flowHandler.handleStart();case be.RESUME_ALL:return this.flowHandler.handleResumeAll();case be.CONTINUE:return t?this.flowHandler.handleContinue(t):new Ce(ye.DO_NOT_DELIVER,null,"SB.2.12-1");case be.PREVIOUS:return t?this.flowHandler.handlePrevious(t):new Ce(ye.DO_NOT_DELIVER,null,"SB.2.12-1");case be.CHOICE:return e?this.choiceHandler.handleChoice(e,t):new Ce(ye.DO_NOT_DELIVER,null,"SB.2.12-5");case be.JUMP:return e?this.choiceHandler.handleJump(e):new Ce(ye.DO_NOT_DELIVER,null,"SB.2.12-5");case be.EXIT:return t?this.exitHandler.handleExit(t):new Ce(ye.DO_NOT_DELIVER,null,"SB.2.12-1");case be.EXIT_ALL:return t?this.exitHandler.handleExitAll():new Ce(ye.DO_NOT_DELIVER,null,"SB.2.12-1");case be.ABANDON:return t?this.exitHandler.handleAbandon(t):new Ce(ye.DO_NOT_DELIVER,null,"SB.2.12-1");case be.ABANDON_ALL:return t?this.exitHandler.handleAbandonAll():new Ce(ye.DO_NOT_DELIVER,null,"SB.2.12-1");case be.SUSPEND_ALL:return t?this.exitHandler.handleSuspendAll(t):new Ce(ye.DO_NOT_DELIVER,null,"SB.2.12-1");case be.RETRY:return t?this.retryHandler.handleRetry(t):new Ce(ye.DO_NOT_DELIVER,null,"SB.2.12-1");case be.RETRY_ALL:return this.retryHandler.handleRetryAll();default:return new Ce(ye.DO_NOT_DELIVER,null,"SB.2.12-6")}}evaluatePostConditionRules(e){return this.ruleEngine.evaluatePostConditions(e)}canActivityBeDelivered(e){return this.traversalService.canDeliver(e)}validateNavigationRequest(request){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,t=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(!Object.values(be).includes(request))return{valid:!1,exception:"SB.2.12-6"};switch(request){case be.CONTINUE:case be.PREVIOUS:if(!t)return{valid:!1,exception:"SB.2.12-1"};if(t.isActive)return{valid:!1,exception:request===be.CONTINUE?"SB.2.7-1":"SB.2.8-1"};if(t.parent&&!t.parent.sequencingControls.flow)return{valid:!1,exception:request===be.CONTINUE?"SB.2.7-2":"SB.2.8-2"};if(request===be.PREVIOUS){const e=this.constraintValidator.checkForwardOnlyViolation(t);if(!e.valid)return e}break;case be.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)===he.HIDE_FROM_CHOICE)return{valid:!1,exception:"SB.2.9-4"};break}case be.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}}var Be=Object.defineProperty,Ue=(e,t,i)=>((e,t,i)=>t in e?Be(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class $e{constructor(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};Ue(this,"eventService"),Ue(this,"loggingService"),Ue(this,"callbacks"),Ue(this,"currentDeliveredActivity",null),Ue(this,"pendingDelivery",null),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===ye.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}}var Ge=Object.defineProperty,Ye=(e,t,i)=>((e,t,i)=>t in e?Ge(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class We{constructor(e,t){Ye(this,"settings"),Ye(this,"error_codes"),this.settings=e,this.error_codes=t}processHttpRequest(e,t){return this._performAsyncRequest(e,t,arguments.length>2&&void 0!==arguments[2]&&arguments[2],arguments.length>3?arguments[3]:void 0,arguments.length>4?arguments[4]:void 0),{result:v,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+""),P.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:g,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!==v)}updateSettings(e){this.settings=e}}var Ke=Object.defineProperty;const Je="{target=";function Xe(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 Qe{constructor(e){var t;((e,t,i)=>{t in e?Ke(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i})(this,"context"+"",t),this.context=e}getUndefinedDataModelErrorCode(e){return Xe(this.context.errorCodes,e?"UNDEFINED_DATA_MODEL":"GENERAL")}setCMIValue(e,t,i,s){if(!i||""===i)return t&&this.context.throwSCORMError(i,Xe(this.context.errorCodes,"GENERAL_SET_FAILURE"),"The data model element was not specified"),g;this.context.setLastErrorCode("0");const r=i.split(".");let n=this.context.getDataModel(),o=g,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===g&&this.context.apiLog(e,`There was an error setting the value for: ${i}, value of: ${s}`,P.WARN),o}getCMIValue(e,t,i){if(!i||""===i)return t&&this.context.throwSCORMError(i,Xe(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,Xe(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 O){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,Xe(this.context.errorCodes,"CHILDREN_ERROR"),void 0):"_count"===n&&this.context.throwSCORMError(i,Xe(this.context.errorCodes,"COUNT_ERROR"),void 0)),""):r}setFinalAttribute(e,t,i,s,r,o,a){return r&&t?.startsWith(Je)?this.context.isInitialized()?(this.context.throwSCORMError(s,Xe(this.context.errorCodes,"READ_ONLY_ELEMENT")),g):v: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,Xe(this.context.errorCodes,"TYPE_MISMATCH")),g):r&&"0"!==this.context.getLastErrorCode()?g:void 0===t||"__proto__"===t||"constructor"===t?(this.context.throwSCORMError(s,o,a),g):r&&"id"===t&&this.context.isInitialized()&&this.context.checkForDuplicateId(s,i)?(this.context.throwSCORMError(s,Xe(this.context.errorCodes,"GENERAL_SET_FAILURE")),g):(e[t]=i,v):(this.context.throwSCORMError(s,o,a),g)}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 O){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?Xe(this.context.errorCodes,"GENERAL_SET_FAILURE"):Xe(this.context.errorCodes,"INVALID_SET_VALUE")||Xe(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(Je)&&"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,Xe(this.context.errorCodes,"GENERAL_GET_FAILURE"),"The data model element does not have children"),{error:!0}):"_count"===t?(this.context.throwSCORMError(i,Xe(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,Xe(this.context.errorCodes,"VALUE_NOT_INITIALIZED"),r),{refObject:e,idx:i,error:!0})}return{refObject:e,idx:i,error:!1}}}var Ze=Object.defineProperty,et=(e,t,i)=>((e,t,i)=>t in e?Ze(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);const tt=class e{constructor(){et(this,"_logLevel",P.ERROR),et(this,"_logHandler"),this._logHandler=F}static getInstance(){return e._instance||(e._instance=new e),e._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(P.ERROR,e)}warn(e){this.log(P.WARN,e)}info(e){this.log(P.INFO,e)}debug(e){this.log(P.DEBUG,e)}shouldLog(e){return this.getNumericLevel(e)>=this.getNumericLevel(this._logLevel)}getNumericLevel(e){if(void 0===e)return P.NONE;if("number"==typeof e)return e;switch(e){case"1":case"DEBUG":return P.DEBUG;case"2":case"INFO":return P.INFO;case"3":case"WARN":return P.WARN;case"4":case"ERROR":default:return P.ERROR;case"5":case"NONE":return P.NONE}}};et(tt,"_instance");let it=tt;function st(){return it.getInstance()}var rt=Object.defineProperty,nt=(e,t,i)=>((e,t,i)=>t in e?rt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class ot{constructor(e,t,i,s){nt(this,"_lastErrorCode","0"),nt(this,"_lastDiagnostic",""),nt(this,"_errorCodes"),nt(this,"_apiLog"),nt(this,"_getLmsErrorMessageDetails"),nt(this,"_loggingService"),this._errorCodes=e,this._apiLog=t,this._getLmsErrorMessageDetails=i,this._loggingService=s||st()}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,P.ERROR,e),this._loggingService.error(s),this._lastErrorCode=t+""}clearSCORMError(e){void 0!==e&&e!==g&&(this._lastErrorCode="0")}handleValueAccessException(e,t,i){if(t instanceof p){const s=t;this._lastErrorCode=s.errorCode+"",this._lastDiagnostic="",this._loggingService.warn(`Validation Error ${s.errorCode}: ${s.message} [Element: ${e}]`),i=g}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=g}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=g}return i}get errorCodes(){return this._errorCodes}}var at=Object.defineProperty,ct=(e,t,i)=>((e,t,i)=>t in e?at(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class lt{constructor(e){ct(this,"listenerMap",new Map),ct(this,"listenerCount",0),ct(this,"apiLog"),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,P.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,P.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,P.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,P.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}}var ut=Object.defineProperty,ht=(e,t,i)=>((e,t,i)=>t in e?ut(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class dt{constructor(e,t,i){this.apiLog=i,ht(this,"settings"),ht(this,"error_codes"),ht(this,"storeName","scorm_again_offline_data"),ht(this,"syncQueue","scorm_again_sync_queue"),ht(this,"isOnline",navigator.onLine),ht(this,"syncInProgress",!1),ht(this,"boundOnlineStatusChangeHandler"),ht(this,"boundCustomNetworkStatusHandler"),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)}handleOnlineStatusChange(){const e=this.isOnline;this.isOnline=navigator.onLine,!e&&this.isOnline?(this.apiLog("OfflineStorageService","Device is back online, attempting to sync...",P.INFO),this.syncOfflineData().then(e=>{e?this.apiLog("OfflineStorageService","Sync completed successfully",P.INFO):this.apiLog("OfflineStorageService","Sync failed",P.ERROR)},e=>{this.apiLog("OfflineStorageService","Error during sync: "+e,P.ERROR)})):e&&!this.isOnline&&this.apiLog("OfflineStorageService","Device is offline, data will be stored locally",P.INFO)}handleCustomNetworkStatus(e){if(!(e instanceof CustomEvent))return void this.apiLog("OfflineStorageService","Invalid network status event received",P.WARN);const{online:t}=e.detail;if("boolean"!=typeof t)return void this.apiLog("OfflineStorageService","Invalid online status value in custom event",P.WARN);const i=this.isOnline;this.isOnline=t,this.apiLog("OfflineStorageService","Network status updated via custom event: "+(t?"online":"offline"),P.INFO),!i&&this.isOnline?(this.apiLog("OfflineStorageService","Device is back online, attempting to sync...",P.INFO),this.syncOfflineData().then(e=>{e?this.apiLog("OfflineStorageService","Sync completed successfully",P.INFO):this.apiLog("OfflineStorageService","Sync failed",P.ERROR)},e=>{this.apiLog("OfflineStorageService","Error during sync: "+e,P.ERROR)})):i&&!this.isOnline&&this.apiLog("OfflineStorageService","Device is offline, data will be stored locally",P.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,P.INFO),{result:v,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,P.ERROR),{result:g,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,P.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`,P.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===v?this.apiLog("OfflineStorageService","Successfully synced item "+i.id,P.INFO):(i.syncAttempts++,t.push(i),this.apiLog("OfflineStorageService",`Failed to sync item ${i.id}, attempt #${i.syncAttempts}`,P.WARN))}catch(e){i.syncAttempts++,t.push(i),this.apiLog("OfflineStorageService",`Error syncing item ${i.id}: ${e}`,P.ERROR)}else this.apiLog("OfflineStorageService",`Removing abandoned item ${i.id} after ${e} failed sync attempts`,P.WARN)}return this.saveToStorage(this.syncQueue,t),this.apiLog("OfflineStorageService",`Sync completed. ${e.length-t.length} items synced, ${t.length} items remaining`,P.INFO),this.syncInProgress=!1,!0}catch(e){return this.apiLog("OfflineStorageService","Error during sync process: "+e,P.ERROR),this.syncInProgress=!1,!1}}async sendDataToLMS(e){if(!this.settings.lmsCommitUrl)return{result:g,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!==v?(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,P.ERROR),{result:g,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 mt=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}`),pt=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 vt(e,t,i,s){return mt(e,t,i,E.TYPE_MISMATCH,y,s)}function gt(e,t,i){return pt(e,t,i,E.VALUE_OUT_OF_RANGE,y)}var _t=Object.defineProperty,ft=(e,t,i)=>((e,t,i)=>t in e?_t(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i),St=(e=>(e.SATISFIED="satisfied",e.NOT_SATISFIED="notSatisfied",e.COMPLETED="completed",e.INCOMPLETE="incomplete",e))(St||{}),bt=(e=>(e.ALL="all",e.ANY="any",e.NONE="none",e.AT_LEAST_COUNT="atLeastCount",e.AT_LEAST_PERCENT="atLeastPercent",e))(bt||{});class yt extends l{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"always",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:new Map;super("rollupCondition"),ft(this,"_condition","always"),ft(this,"_parameters",new Map),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===I;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!==L;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 Ct extends l{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"satisfied",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"all",i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:0;super("rollupRule"),ft(this,"_conditions",[]),ft(this,"_action","satisfied"),ft(this,"_consideration","all"),ft(this,"_minimumCount",0),ft(this,"_minimumPercent",0),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 yt))throw new y(this._cmi_element+".conditions",E.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 At extends l{constructor(){super("rollupRules"),ft(this,"_rules",[])}reset(){this._initialized=!1,this._rules=[]}get rules(){return this._rules}addRule(e){if(!(e instanceof Ct))throw new y(this._cmi_element+".rules",E.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=I,s=!0;break;case"notSatisfied":e.successStatus=q,s=!0;break;case"completed":e.completionStatus=D,e.isCompleted=!0,i=!0;break;case"incomplete":e.completionStatus=x,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=D,e.isCompleted=!0):t.some(e=>e.completionStatus===x)&&(e.completionStatus=x,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=q,e.objectiveSatisfiedStatus=!1,!1):(e.successStatus=I,e.objectiveSatisfiedStatus=!0,!0)}_defaultSuccessRollup(e,t){t.every(e=>e.successStatus===I)?e.successStatus=I:t.some(e=>e.successStatus===q)&&(e.successStatus=q)}toJSON(){this.jsonString=!0;const result={rules:this._rules};return this.jsonString=!1,result}}var Et=Object.defineProperty,wt=(e,t,i)=>((e,t,i)=>t in e?Et(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Mt{constructor(id){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{};wt(this,"_id"),wt(this,"_description"),wt(this,"_satisfiedByMeasure"),wt(this,"_minNormalizedMeasure"),wt(this,"_mapInfo"),wt(this,"_isPrimary"),wt(this,"_satisfiedStatus",!1),wt(this,"_satisfiedStatusKnown",!1),wt(this,"_measureStatus",!1),wt(this,"_normalizedMeasure",0),wt(this,"_progressMeasure",0),wt(this,"_progressMeasureStatus",!1),wt(this,"_completionStatus",L),wt(this,"_progressStatus",!1),wt(this,"_satisfiedStatusDirty",!1),wt(this,"_normalizedMeasureDirty",!1),wt(this,"_completionStatusDirty",!1),wt(this,"_progressMeasureDirty",!1),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=L,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 Ot extends l{constructor(){let id=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";super("activity"),wt(this,"_id",""),wt(this,"_title",""),wt(this,"_children",[]),wt(this,"_parent",null),wt(this,"_isVisible",!0),wt(this,"_isActive",!1),wt(this,"_isSuspended",!1),wt(this,"_isCompleted",!1),wt(this,"_completionStatus",L),wt(this,"_successStatus",N),wt(this,"_attemptCount",0),wt(this,"_attemptCompletionAmount",0),wt(this,"_attemptAbsoluteDuration","PT0H0M0S"),wt(this,"_attemptExperiencedDuration","PT0H0M0S"),wt(this,"_activityAbsoluteDuration","PT0H0M0S"),wt(this,"_activityExperiencedDuration","PT0H0M0S"),wt(this,"_attemptAbsoluteDurationValue","PT0H0M0S"),wt(this,"_attemptExperiencedDurationValue","PT0H0M0S"),wt(this,"_activityAbsoluteDurationValue","PT0H0M0S"),wt(this,"_activityExperiencedDurationValue","PT0H0M0S"),wt(this,"_activityStartTimestampUtc",null),wt(this,"_attemptStartTimestampUtc",null),wt(this,"_activityEndedDate",null),wt(this,"_objectiveSatisfiedStatus",!1),wt(this,"_objectiveSatisfiedStatusKnown",!1),wt(this,"_objectiveMeasureStatus",!1),wt(this,"_objectiveNormalizedMeasure",0),wt(this,"_scaledPassingScore",.7),wt(this,"_objectiveSatisfiedStatusDirty",!1),wt(this,"_objectiveNormalizedMeasureDirty",!1),wt(this,"_objectiveMeasureStatusDirty",!1),wt(this,"_progressMeasure",0),wt(this,"_progressMeasureStatus",!1),wt(this,"_location",""),wt(this,"_attemptAbsoluteStartTime",""),wt(this,"_learnerPrefs",null),wt(this,"_activityAttemptActive",!1),wt(this,"_isHiddenFromChoice",!1),wt(this,"_isAvailable",!0),wt(this,"_hideLmsUi",[]),wt(this,"_auxiliaryResources",[]),wt(this,"_attemptLimit",null),wt(this,"_attemptAbsoluteDurationLimit",null),wt(this,"_activityAbsoluteDurationLimit",null),wt(this,"_timeLimitAction",null),wt(this,"_timeLimitDuration",null),wt(this,"_beginTimeLimit",null),wt(this,"_endTimeLimit",null),wt(this,"_launchData",""),wt(this,"_credit","credit"),wt(this,"_maxTimeAllowed",""),wt(this,"_completionThreshold",""),wt(this,"_sequencingControls"),wt(this,"_sequencingRules"),wt(this,"_rollupRules"),wt(this,"_processedChildren",null),wt(this,"_isNewAttempt",!1),wt(this,"_primaryObjective",null),wt(this,"_objectives",[]),wt(this,"_rollupConsiderations",{requiredForSatisfied:"always",requiredForNotSatisfied:"always",requiredForCompleted:"always",requiredForIncomplete:"always",measureSatisfactionIfActive:!0}),wt(this,"_requiredForSatisfied","always"),wt(this,"_requiredForNotSatisfied","always"),wt(this,"_requiredForCompleted","always"),wt(this,"_requiredForIncomplete","always"),wt(this,"_wasSkipped",!1),wt(this,"_attemptProgressStatus",!1),wt(this,"_wasAutoCompleted",!1),wt(this,"_wasAutoSatisfied",!1),wt(this,"_completedByMeasure",!1),wt(this,"_minProgressMeasure",1),wt(this,"_progressWeight",1),wt(this,"_attemptCompletionAmountStatus",!1),this._id=id,this._title=e,this._sequencingControls=new Ne,this._sequencingRules=new ve,this._rollupRules=new At,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=L,this._successStatus=N,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){vt(this._cmi_element+".id",id,K)&&(this._id=id)}get title(){return this._title}set title(e){vt(this._cmi_element+".title",e,B)&&(this._title=e)}get children(){return this._children}addChild(e){if(!(e instanceof Ot))throw new y(this._cmi_element+".children",E.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?D:x}get completionStatus(){return this._completionStatus}set completionStatus(e){this._completionStatus=e,this._isCompleted=e===D,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?I:q,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,G))throw new y(this._cmi_element+".attemptAbsoluteDurationLimit",E.TYPE_MISMATCH);this._attemptAbsoluteDurationLimit=e}get attemptExperiencedDuration(){return this._attemptExperiencedDuration}set attemptExperiencedDuration(e){if(!s(e,G))throw new y(this._cmi_element+".attemptExperiencedDuration",E.TYPE_MISMATCH);this._attemptExperiencedDuration=e}get activityAbsoluteDurationLimit(){return this._activityAbsoluteDurationLimit}set activityAbsoluteDurationLimit(e){if(null!==e&&!s(e,G))throw new y(this._cmi_element+".activityAbsoluteDurationLimit",E.TYPE_MISMATCH);this._activityAbsoluteDurationLimit=e}get activityExperiencedDuration(){return this._activityExperiencedDuration}set activityExperiencedDuration(e){if(!s(e,G))throw new y(this._cmi_element+".activityExperiencedDuration",E.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,G))throw new y(this._cmi_element+".attemptAbsoluteDurationValue",E.TYPE_MISMATCH);this._attemptAbsoluteDurationValue=e}get attemptExperiencedDurationValue(){return this._attemptExperiencedDurationValue}set attemptExperiencedDurationValue(e){if(!s(e,G))throw new y(this._cmi_element+".attemptExperiencedDurationValue",E.TYPE_MISMATCH);this._attemptExperiencedDurationValue=e}get activityAbsoluteDurationValue(){return this._activityAbsoluteDurationValue}set activityAbsoluteDurationValue(e){if(!s(e,G))throw new y(this._cmi_element+".activityAbsoluteDurationValue",E.TYPE_MISMATCH);this._activityAbsoluteDurationValue=e}get activityExperiencedDurationValue(){return this._activityExperiencedDurationValue}set activityExperiencedDurationValue(e){if(!s(e,G))throw new y(this._cmi_element+".activityExperiencedDurationValue",E.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 y(this._cmi_element+".minProgressMeasure",E.TYPE_MISMATCH);this._minProgressMeasure=e}get progressWeight(){return this._progressWeight}set progressWeight(e){if(0>e)throw new y(this._cmi_element+".progressWeight",E.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!==L,attemptCompletionStatus:this._completionStatus===D}}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(ae),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 Rt{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===I}isChildCompletedForRollup(e){return!("completed"!==e.completionStatus&&!e.isCompleted)}getTrackableChildren(e){return e.children.filter(e=>!1!==e.sequencingControls.tracked)}}var Tt=Object.defineProperty;class jt{constructor(e){var t;((e,t,i)=>{t in e?Tt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i})(this,"childFilter"+"",t),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 St.SATISFIED:i=this.childFilter.checkChildForRollupSubprocess(e,"objective","satisfied");break;case St.NOT_SATISFIED:i=this.childFilter.checkChildForRollupSubprocess(e,"objective","notSatisfied");break;case St.COMPLETED:i=this.childFilter.checkChildForRollupSubprocess(e,"progress","completed");break;case St.INCOMPLETE:i=this.childFilter.checkChildForRollupSubprocess(e,"progress","incomplete")}i&&(s++,this.evaluateRollupConditionsSubprocess(e,t)&&r++)}return t.consideration===bt.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 bt.ALL:return t.conditions.every(t=>t.evaluate(e));case bt.ANY:return t.conditions.some(t=>t.evaluate(e));case bt.NONE:return!t.conditions.some(t=>t.evaluate(e));case bt.AT_LEAST_COUNT:case bt.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}}var It=Object.defineProperty,qt=(e,t,i)=>((e,t,i)=>t in e?It(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Nt{constructor(e,t){qt(this,"childFilter"),qt(this,"eventCallback"),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){let i=2>=arguments.length||void 0===arguments[2]||arguments[2],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}}var Dt=Object.defineProperty,xt=(e,t,i)=>((e,t,i)=>t in e?Dt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Lt{constructor(e,t,i){xt(this,"childFilter"),xt(this,"ruleEvaluator"),xt(this,"eventCallback"),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===St.SATISFIED),s=t.filter(e=>e.action===St.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)}}var Pt=Object.defineProperty,zt=(e,t,i)=>((e,t,i)=>t in e?Pt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Ft{constructor(e,t,i,s){zt(this,"childFilter"),zt(this,"ruleEvaluator"),zt(this,"objectiveProcessor"),zt(this,"eventCallback"),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===St.COMPLETED),s=t.rules.filter(e=>e.action===St.INCOMPLETE);for(const t of i)if(this.ruleEvaluator.evaluateRollupRule(e,t))return e.completionStatus=D,void this.objectiveProcessor.syncPrimaryObjectiveFromActivity(e);for(const t of s)if(this.ruleEvaluator.evaluateRollupRule(e,t))return e.completionStatus=x,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=x,void this.objectiveProcessor.syncPrimaryObjectiveFromActivity(e)):(e.completionStatus=D,void this.objectiveProcessor.syncPrimaryObjectiveFromActivity(e))}activityProgressRollupUsingMeasure(e){return!!e.completedByMeasure&&(e.attemptCompletionAmountStatus?(e.completionStatus=e.minProgressMeasure>e.attemptCompletionAmount?x:D,this.objectiveProcessor.syncPrimaryObjectiveFromActivity(e),!0):(e.completionStatus=L,this.objectiveProcessor.syncPrimaryObjectiveFromActivity(e),!0))}}var kt=Object.defineProperty;class Vt{constructor(e){var t;((e,t,i)=>{t in e?kt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i})(this,"eventCallback"+"",t),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,G)),!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,G))}}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})}}}var Ht=Object.defineProperty,Bt=(e,t,i)=>((e,t,i)=>t in e?Ht(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Ut{constructor(e,t,i,s){Bt(this,"measureProcessor"),Bt(this,"objectiveProcessor"),Bt(this,"progressProcessor"),Bt(this,"eventCallback"),Bt(this,"processingClusters",new Set),this.measureProcessor=e,this.objectiveProcessor=t,this.progressProcessor=i,this.eventCallback=s||null}processCrossClusterDependencies(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]: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){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]: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)}}var $t=Object.defineProperty;class Gt{constructor(e){var t;((e,t,i)=>{t in e?$t(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i})(this,"eventCallback"+"",t),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!==L&&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!==L&&(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!==L,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!==L&&e.completionStatus!==x||(e.completionStatus=D),"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()})}}}var Yt=Object.defineProperty,Wt=(e,t,i)=>((e,t,i)=>t in e?Yt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Kt{constructor(e,t){Wt(this,"rollupStateLog",[]),Wt(this,"childFilter"),Wt(this,"eventCallback"),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=[]}}var Jt=Object.defineProperty,Xt=(e,t,i)=>((e,t,i)=>t in e?Jt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Qt{constructor(e){Xt(this,"childFilter"),Xt(this,"ruleEvaluator"),Xt(this,"measureProcessor"),Xt(this,"objectiveProcessor"),Xt(this,"progressProcessor"),Xt(this,"durationProcessor"),Xt(this,"globalObjectiveSynchronizer"),Xt(this,"stateValidator"),Xt(this,"crossClusterProcessor"),Xt(this,"eventCallback"),this.eventCallback=e||null,this.childFilter=new Rt,this.ruleEvaluator=new jt(this.childFilter),this.measureProcessor=new Nt(this.childFilter,e),this.objectiveProcessor=new Lt(this.childFilter,this.ruleEvaluator,e),this.progressProcessor=new Ft(this.childFilter,this.ruleEvaluator,this.objectiveProcessor,e),this.durationProcessor=new Vt(e),this.globalObjectiveSynchronizer=new Gt(e),this.stateValidator=new Kt(this.childFilter,e),this.crossClusterProcessor=new Ut(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||!Ot.compareRollupStatus(e,n)||(this.eventCallback?.("rollup_optimization_activated",{activityId:i.id,depth:t.length}),s=!0),!r&&Ot.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}}var Zt=Object.defineProperty;const ei=[D,x,L],ti=[I,q,N];function ii(e){return e&&ei.includes(e)?e:null}function si(e){return e&&ti.includes(e)?e:null}class ri{constructor(e){var t;((e,t,i)=>{t in e?Zt(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i})(this,"context"+"",t),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=ii(t.completion_status);i&&i!==L&&(e.completionStatus=i,e.attemptProgressStatus=!0);let s=!1,r=!1,n=!1,o=0;const a=si(t.success_status);if(a&&a!==N&&(r=a===I,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=si(i.success_status);c&&c!==N&&(n=c===I,r=!0,s.progressStatus=!0);const l=ii(i.completion_status);if(l&&l!==L&&(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}}var ni=Object.defineProperty,oi=(e,t,i)=>((e,t,i)=>t in e?ni(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class ai{constructor(e,t,i,s){let r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,n=arguments.length>5?arguments[5]:void 0;oi(this,"activityTree"),oi(this,"sequencingProcess"),oi(this,"rollupProcess"),oi(this,"globalObjectiveMap"),oi(this,"eventCallback"),oi(this,"getCMIData"),oi(this,"is4thEdition"),oi(this,"invalidateCacheCallback",null),oi(this,"_rteDataTransferService"),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 ri({getCMIData:this.getCMIData,fireEvent:(e,t)=>this.fireEvent(e,t)})}setInvalidateCacheCallback(e){this.invalidateCacheCallback=e}processTerminationRequest(request){let e=arguments.length>1&&void 0!==arguments[1]&&arguments[1],t=arguments.length>2?arguments[2]:void 0;const i=this.activityTree.currentActivity;if(!i)return{terminationRequest:request,sequencingRequest:null,exception:"TB.2.3-1",valid:!1};if((request===be.EXIT||request===be.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 be.EXIT:return this.handleExit(i,e);case be.EXIT_ALL:return this.handleExitAll(i);case be.ABANDON:return this.handleAbandon(i,e);case be.ABANDON_ALL:return this.handleAbandonAll(i);case be.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===be.EXIT_ALL)return this.fireEvent("onPostConditionExitAll",{activity:(this.activityTree.currentActivity||e).id}),this.handleExitAll(this.activityTree.root);if(r.terminationRequest===be.EXIT_PARENT){const t=this.activityTree.currentActivity||e;if(!t.parent)return{terminationRequest:be.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!==be.RETRY)return{terminationRequest:be.EXIT,sequencingRequest:be.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:be.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:be.EXIT_ALL,sequencingRequest:be.EXIT,exception:null,valid:!0}}handleAbandon(e,t){return e.isActive=!1,t||(this.activityTree.currentActivity=e.parent),{terminationRequest:be.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:be.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:be.ABANDON_ALL,sequencingRequest:null,exception:null,valid:!0}}handleSuspendAll(e){const t=this.processSuspendAllRequest(e);return t.valid?{terminationRequest:be.SUSPEND_ALL,sequencingRequest:be.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:be.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:be.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:be.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:be.SUSPEND_ALL,sequencingRequest:null,exception:null,valid:!0}}evaluateExitRules(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]: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===he.EXIT_PARENT)return{action:"EXIT_PARENT",recursionDepth:t};if(s.action===he.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===he.EXIT_PARENT)return"EXIT_PARENT";if(i.action===he.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),De.applySelectionAndRandomization(e,!1)}}fireEvent(e,t){try{this.eventCallback&&this.eventCallback(e,t)}catch(t){console.warn(`Failed to fire sequencing event ${e}: ${t}`)}}}var ci=Object.defineProperty,li=(e,t,i)=>((e,t,i)=>t in e?ci(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class ui{constructor(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;li(this,"valid"),li(this,"targetActivity"),li(this,"exception"),this.valid=e,this.targetActivity=t,this.exception=i}}const hi=class e{constructor(e,t,i){let s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,n=arguments.length>5?arguments[5]:void 0;li(this,"activityTree"),li(this,"rollupProcess"),li(this,"globalObjectiveMap"),li(this,"adlNav"),li(this,"eventCallback"),li(this,"now"),li(this,"defaultHideLmsUi"),li(this,"defaultAuxiliaryResources"),li(this,"_deliveryInProgress",!1),li(this,"contentDelivered",!1),li(this,"checkActivityCallback",null),li(this,"invalidateCacheCallback",null),li(this,"updateNavigationValidityCallback",null),li(this,"clearSuspendedActivityCallback",null),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 ui(!1,null,"DB.1.1-1");const t=this.getActivityPath(e,!0);if(0===t.length)return new ui(!1,null,"DB.1.1-2");for(const e of t)if(this.checkActivityCallback&&!this.checkActivityCallback(e))return new ui(!1,null,"DB.1.1-3");return new ui(!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,De.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(t){const i=new Set;for(const e of this.defaultHideLmsUi)i.add(e);let s=t;for(;s;){for(const e of s.hideLmsUi)i.add(e);s=s.parent}return e.HIDE_LMS_UI_ORDER.filter(e=>i.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){let t=1>=arguments.length||void 0===arguments[1]||arguments[1];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}`)}}};li(hi,"HIDE_LMS_UI_ORDER",[...ae]);let di=hi;var mi=Object.defineProperty,pi=(e,t,i)=>((e,t,i)=>t in e?mi(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class vi{constructor(e,t){pi(this,"activityTree"),pi(this,"sequencingProcess"),pi(this,"cache",null),pi(this,"isDirty",!0),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(be.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 gi=Object.defineProperty,_i=(e,t,i)=>((e,t,i)=>t in e?gi(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i),fi=(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))(fi||{});class Si{constructor(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null;_i(this,"valid"),_i(this,"terminationRequest"),_i(this,"sequencingRequest"),_i(this,"targetActivityId"),_i(this,"exception"),this.valid=e,this.terminationRequest=t,this.sequencingRequest=i,this.targetActivityId=s,this.exception=r}}class bi{constructor(e,t){let i=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null;_i(this,"activityTree"),_i(this,"sequencingProcess"),_i(this,"adlNav"),_i(this,"eventCallback"),_i(this,"navigationLookAhead"),_i(this,"getEffectiveHideLmsUiCallback",null),this.activityTree=e,this.sequencingProcess=t,this.adlNav=i,this.eventCallback=s,this.navigationLookAhead=new vi(e,t)}setGetEffectiveHideLmsUiCallback(e){this.getEffectiveHideLmsUiCallback=e}getNavigationLookAhead(){return this.navigationLookAhead}validateRequest(request){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]: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 Si(!1,null,null,null,"NB.2.1-18")}}validateStartRequest(e){return null!==e?new Si(!1,null,null,null,"NB.2.1-1"):new Si(!0,null,be.START,null)}validateResumeRequest(e){return null!==e?new Si(!1,null,null,null,"NB.2.1-2"):null===this.activityTree.suspendedActivity?new Si(!1,null,null,null,"NB.2.1-3"):new Si(!0,null,be.RESUME_ALL,null)}validateContinueRequest(e){return e?e.parent&&e.parent.sequencingControls.flow?new Si(!0,e.isActive?be.EXIT:null,be.CONTINUE,null):new Si(!1,null,null,null,"NB.2.1-5"):new Si(!1,null,null,null,"NB.2.1-4")}validatePreviousRequest(e){if(!e)return new Si(!1,null,null,null,"NB.2.1-6");if(!e.parent||!e.parent.sequencingControls.flow)return new Si(!1,null,null,null,"NB.2.1-7");const t=this.validateForwardOnlyConstraints(e);return t.valid?new Si(!0,e.isActive?be.EXIT:null,be.PREVIOUS,null):new Si(!1,null,null,null,t.exception)}validateChoiceRequest(e,t){if(!t)return new Si(!1,null,null,null,"NB.2.1-9");const i=this.activityTree.getActivity(t);if(!i)return new Si(!1,null,null,null,"NB.2.1-10");const s=this.validateChoicePath(e,i);return s.valid?new Si(!0,e?.isActive?be.EXIT:null,be.CHOICE,t):new Si(!1,null,null,null,s.exception)}validateJumpRequest(e){return e?new Si(!0,null,be.JUMP,e):new Si(!1,null,null,null,"NB.2.1-12")}validateExitRequest(e){return e?new Si(!0,e===this.activityTree.root?be.EXIT_ALL:be.EXIT,null,null):new Si(!1,null,null,null,"NB.2.1-13")}validateExitAllRequest(e){return e?new Si(!0,be.EXIT_ALL,null,null):new Si(!1,null,null,null,"NB.2.1-14")}validateAbandonRequest(e){return e?new Si(!0,be.ABANDON,null,null):new Si(!1,null,null,null,"NB.2.1-15")}validateAbandonAllRequest(e){return e?new Si(!0,be.ABANDON_ALL,null,null):new Si(!1,null,null,null,"NB.2.1-16")}validateSuspendAllRequest(e){return e?new Si(!0,be.SUSPEND_ALL,null,null):new Si(!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===he.DISABLED||t===he.HIDE_FROM_CHOICE||t===he.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!==he.SKIP&&t!==he.DISABLED&&t!==he.HIDE_FROM_CHOICE&&t!==he.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===he.SKIP||t===he.DISABLED||t===he.HIDE_FROM_CHOICE||t===he.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}`)}}}var yi=Object.defineProperty,Ci=(e,t,i)=>((e,t,i)=>t in e?yi(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Ai{constructor(e){Ci(this,"globalObjectiveMap",new Map),Ci(this,"eventCallback",null),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!==L,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!==L,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}`)}}}var Ei=Object.defineProperty,wi=(e,t,i)=>((e,t,i)=>t in e?Ei(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Mi{constructor(e,t,i){let s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null;wi(this,"activityTree"),wi(this,"globalObjectiveService"),wi(this,"rollupProcess"),wi(this,"adlNav"),wi(this,"eventCallback"),wi(this,"getEffectiveHideLmsUiCallback",null),wi(this,"getEffectiveAuxiliaryResourcesCallback",null),wi(this,"contentDeliveredGetter",null),wi(this,"contentDeliveredSetter",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}`)}}}var Oi=Object.defineProperty,Ri=(e,t,i)=>((e,t,i)=>t in e?Oi(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Ti{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null,i=arguments.length>2?arguments[2]:void 0;Ri(this,"activityTree"),Ri(this,"eventCallback"),Ri(this,"now"),Ri(this,"contentDeliveredGetter",null),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,G);s>0&&(s>i(e.attemptAbsoluteDuration||"PT0H0M0S",G)||(result=!1,t="Attempt duration limit exceeded"))}if(result&&e.activityAbsoluteDurationLimit){const s=i(e.activityAbsoluteDurationLimit,G);s>0&&(s>i(e.activityAbsoluteDuration||"PT0H0M0S",G)||(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,G)/60}fireEvent(e,t){try{this.eventCallback&&this.eventCallback(e,t)}catch(t){console.warn(`Failed to fire delivery validator event ${e}: ${t}`)}}}var ji=Object.defineProperty,Ii=(e,t,i)=>((e,t,i)=>t in e?ji(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class qi{constructor(e,t,i){let s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:null,r=arguments.length>4&&void 0!==arguments[4]?arguments[4]:null,n=arguments.length>5?arguments[5]:void 0;Ii(this,"activityTree"),Ii(this,"sequencingProcess"),Ii(this,"rollupProcess"),Ii(this,"adlNav"),Ii(this,"eventCallback",null),Ii(this,"terminationHandler"),Ii(this,"deliveryHandler"),Ii(this,"navigationValidityService"),Ii(this,"globalObjectiveService"),Ii(this,"stateManager"),Ii(this,"deliveryValidator"),Ii(this,"navigationLookAhead"),Ii(this,"enhancedDeliveryValidation"),Ii(this,"is4thEdition"),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 Ai(r||void 0),this.globalObjectiveService.initialize(e.root);const o={};n?.now&&(o.now=n.now),this.deliveryValidator=new Ti(e,r,o);const a={};n?.getCMIData&&(a.getCMIData=n.getCMIData),void 0!==n?.is4thEdition&&(a.is4thEdition=n.is4thEdition),this.terminationHandler=new ai(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 di(e,i,this.globalObjectiveService.getMap(),s,r,c),this.navigationValidityService=new bi(e,t,s,r),this.stateManager=new Mi(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){let t=arguments.length>2?arguments[2]:void 0;const i=this.navigationValidityService.validateRequest(e,arguments.length>1&&void 0!==arguments[1]?arguments[1]:null);if(!i.valid)return new ui(!1,null,i.exception);if(i.terminationRequest){const s=!!i.sequencingRequest,r=this.terminationHandler.processTerminationRequest(i.terminationRequest,s,t);if(!r.valid)return new ui(!1,null,r.exception||"TB.2.3-1");if(null!==r.sequencingRequest&&(s||r.sequencingRequest!==be.EXIT)&&(i.sequencingRequest=r.sequencingRequest),!i.sequencingRequest)return i.terminationRequest!==be.EXIT_ALL&&i.terminationRequest!==be.ABANDON_ALL||this.fireEvent("onSequencingSessionEnd",{reason:i.terminationRequest===be.EXIT_ALL?"exit_all":"abandon_all",navigationRequest:e}),new ui(!0,null)}if(i.sequencingRequest){const t=this.sequencingProcess.sequencingRequestProcess(i.sequencingRequest,i.targetActivityId);if(t.endSequencingSession)return this.fireEvent("onSequencingSessionEnd",{reason:"end_of_content",exception:t.exception,navigationRequest:e}),new ui(!1,null,t.exception||"SESSION_ENDED");if(t.exception)return new ui(!1,null,t.exception);if(t.deliveryRequest===ye.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 ui(!1,null,"OP.1-1")}processDelivery(e){if(this.enhancedDeliveryValidation){const t=this.deliveryValidator.validateTreeConsistency(e);if(!t.consistent)return new ui(!1,null,t.exception);const i=this.deliveryValidator.validateResources(e);if(!i.available)return new ui(!1,null,i.exception);const s=this.deliveryValidator.validateConcurrentDelivery(e);if(!s.allowed)return new ui(!1,null,s.exception);const r=this.deliveryValidator.validateDependencies(e);if(!r.satisfied)return new ui(!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===L&&(e.completionStatus=D,e.wasAutoCompleted=!0),e.sequencingControls.objectiveSetByContent||e.successStatus===N&&(e.successStatus=I,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}`)}}}var Ni=Object.defineProperty,Di=(e,t,i)=>((e,t,i)=>t in e?Ni(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class xi{constructor(e,cmi,adl,t,i){let s=arguments.length>5&&void 0!==arguments[5]?arguments[5]:{};Di(this,"sequencing"),Di(this,"cmi"),Di(this,"adl"),Di(this,"eventService"),Di(this,"loggingService"),Di(this,"activityDeliveryService"),Di(this,"rollupProcess"),Di(this,"overallSequencingProcess",null),Di(this,"sequencingProcess",null),Di(this,"eventListeners",{}),Di(this,"configuration"),Di(this,"isInitialized",!1),Di(this,"isSequencingActive",!1),Di(this,"lastCMIValues",new Map),Di(this,"lastSequencingResult",null),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 $e(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 Qt,this.configuration.now&&me.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 He(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 qi(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"),v}catch(e){const t="Failed to initialize sequencing service: "+e;return this.log("error",t),this.fireEvent("onSequencingError",t,"initialization"),g}}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"),v}catch(e){const t="Failed to terminate sequencing service: "+e;return this.log("error",t),this.fireEvent("onSequencingError",t,"termination"),g}}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?ye.DELIVER:ye.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 fi.CHOICE;if(request.includes("jump"))return fi.JUMP;switch(e){case"start":return fi.START;case"resumeAll":return fi.RESUME_ALL;case"continue":return fi.CONTINUE;case"previous":return fi.PREVIOUS;case"exit":return fi.EXIT;case"exitAll":return fi.EXIT_ALL;case"abandon":return fi.ABANDON;case"abandonAll":return fi.ABANDON_ALL;case"suspendAll":return fi.SUSPEND_ALL;case"_none_":return fi.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){if(this.configuration.enableEventSystem){for(var t=arguments.length,i=Array(t>1?t-1:0),s=1;t>s;s++)i[s-1]=arguments[s];"onSequencingDebug"!==e&&this.fireDebugEvent(e+" fired",{eventType:e,argsLength:i.length});try{const t=this.eventListeners[e];if(t&&"function"==typeof t)try{t(...i),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,i[0],...i.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 t=window.scormSequencingEvents;t[e]&&"function"==typeof t[e]&&(t[e](...i),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 Li{loadFromFlattenedJSON(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2?arguments[2]:void 0,s=arguments.length>3?arguments[3]:void 0,r=arguments.length>4?arguments[4]:void 0;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){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"",i=arguments.length>2?arguments[2]:void 0,s=arguments.length>3?arguments[3]:void 0,r=arguments.length>4?arguments[4]:void 0;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[P.DEBUG,"1",1,"DEBUG"].includes(n)&&(console.debug("Commit (terminated: "+(e?"yes":"no")+"): "),console.debug(a)),a}}var Pi=Object.defineProperty,zi=(e,t,i)=>((e,t,i)=>t in e?Pi(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Fi{constructor(e,t){zi(this,"settings"),zi(this,"error_codes"),this.settings=e,this.error_codes=t}processHttpRequest(e,t){return arguments.length>2&&void 0!==arguments[2]&&arguments[2]?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=>{let[t,i]=e;n.setRequestHeader(t,i+"")}),this.settings.xhrWithCredentials&&(n.withCredentials=!0);try{return n.send(s),this.settings.xhrResponseHandler(n)}catch(e){return{result:g,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 ki(e,t,i,s){return mt(e,t,i,A.TYPE_MISMATCH,S,s)}function Vi(e,t,i,s){if(""===t)throw new S(e,A.VALUE_OUT_OF_RANGE);return pt(e,t,i,A.VALUE_OUT_OF_RANGE,S)}const Hi=new class{validateScore(e,t,i,s,r,n,o){return mt(e,t,i,r,o)&&(!s||pt(e,t,s,n,o))}validateScorm12Audio(e,t){return ki(e,t,k)&&Vi(e,t,"-1#100")}validateScorm12Language(e,t){return ki(e,t,"^[\\s\\S]{0,255}$")}validateScorm12Speed(e,t){return ki(e,t,k)&&Vi(e,t,"-100#100")}validateScorm12Text(e,t){return ki(e,t,k)&&Vi(e,t,"-1#1")}validateReadOnly(e,t){if(t)throw new S(e,A.READ_ONLY_ELEMENT)}};var Bi=Object.defineProperty,Ui=(e,t,i)=>((e,t,i)=>t in e?Bi(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class $i{constructor(e,t,i,s,r,n,o,a,c){if(Ui(this,"_timeout"),Ui(this,"_error_codes"),Ui(this,"_settings",z),Ui(this,"_httpService"),Ui(this,"_eventService"),Ui(this,"_serializationService"),Ui(this,"_errorHandlingService"),Ui(this,"_loggingService"),Ui(this,"_offlineStorageService"),Ui(this,"_cmiValueAccessService"),Ui(this,"_courseId",""),Ui(this,"startingData"),Ui(this,"currentState"),new.target===$i)throw new TypeError("Cannot construct BaseAPI instances directly");this.currentState=0,this._error_codes=e,t&&(this.settings={...z,...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||st(),this._loggingService.setLogLevel(this.settings.logLevel),this._loggingService.setLogHandler(this.settings.onLogMessage?this.settings.onLogMessage:F),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 We(this.settings,this._error_codes)):this._httpService=new Fi(this.settings,this._error_codes),this._eventService=s||new lt((e,t,i,s)=>this.apiLog(e,t,i,s)),this._serializationService=r||new Li,this._errorHandlingService=o||new ot(this._error_codes,(e,t,i,s)=>this.apiLog(e,t,i||P.ERROR,s),(e,t)=>this.getLmsErrorMessageDetails(e,t),void 0),this.settings.enableOfflineSupport&&(this._offlineStorageService=c||new dt(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",P.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,P.ERROR),this.processListeners("OfflineDataSyncFailed")})}),this._offlineStorageService&&this._courseId&&this._offlineStorageService.getOfflineData(this._courseId).then(e=>{e&&(this.apiLog("constructor","Found offline data to restore",P.INFO),this.loadFromJSON(e.runtimeData))}).catch(e=>{this.apiLog("constructor","Error retrieving offline data: "+e,P.ERROR)})),this._cmiValueAccessService=new Qe({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})}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",P.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=g;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=v,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",P.INFO),this._offlineStorageService?.syncOfflineData().then(t=>{t&&(this.apiLog(e,"Successfully synced offline data",P.INFO),this.processListeners("OfflineDataSynced"))}))})),this.apiLog(e,"returned: "+s,P.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=v,s=!1;if(this.isNotInitialized()){const e=this._error_codes.TERMINATION_BEFORE_INIT??0;this.throwSCORMError("api",e),112===e&&(i=g)}else if(t&&this.isTerminated()){const e=this._error_codes.MULTIPLE_TERMINATION??0;this.throwSCORMError("api",e),113===e&&(i=g)}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,P.ERROR),result.errorDetails&&this.apiLog("terminate","Error details: "+JSON.stringify(result.errorDetails),P.DEBUG),this.throwSCORMError("api",result.errorCode??0),i=g;else{this.currentState=2,t&&(this.lastErrorCode="0");const e=result?.result??v;i="boolean"==typeof e?e+"":e}this.processListeners(e)}return this.apiLog(e,"returned: "+i,P.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,P.INFO,i),void 0===s?"":("0"===this.lastErrorCode&&this.clearSCORMError(s),s)}setValue(e,t,i,s,r){void 0!==r&&(r+="");let n=g;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=g),this.lastErrorCode+""=="0"&&this.settings.autocommit&&this.scheduleCommit(1e3*this.settings.autocommitSeconds,t),this.apiLog(e,": "+r+": result: "+n,P.INFO,s),"0"===this.lastErrorCode&&this.clearSCORMError(n),n}commit(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];this.clearScheduledCommit();let i=v;if(this.isNotInitialized()){const e=this._error_codes.COMMIT_BEFORE_INIT??0;this.throwSCORMError("api",e),142===e&&(i=g)}else if(t&&this.isTerminated()){const e=this._error_codes.COMMIT_AFTER_TERM??0;this.throwSCORMError("api",e),143===e&&(i=g)}else{const result=this.storeData(!1);(result.errorCode??0)>0&&(result.errorMessage&&this.apiLog("commit","Commit failed with error: "+result.errorMessage,P.ERROR),result.errorDetails&&this.apiLog("commit","Error details: "+JSON.stringify(result.errorDetails),P.DEBUG),this.throwSCORMError("api",result.errorCode));const s=result?.result??g;i="boolean"==typeof s?s+"":s,this.apiLog(e," Result: "+i,P.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",P.INFO),this._offlineStorageService?.syncOfflineData().then(t=>{t?(this.apiLog(e,"Successfully synced offline data",P.INFO),this.processListeners("OfflineDataSynced")):this.apiLog(e,"Failed to sync some offline data",P.WARN)}))})}return this.apiLog(e,"returned: "+i,P.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,P.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,P.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,P.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 O?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){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){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"";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){let i=arguments.length>2&&void 0!==arguments[2]&&arguments[2];return this.settings.enableOfflineSupport&&this._offlineStorageService&&!this._offlineStorageService.isDeviceOnline()&&this._courseId?(this.apiLog("processHttpRequest","Device is offline, storing data locally",P.INFO),t&&"object"==typeof t&&"cmi"in t?this._offlineStorageService.storeOffline(this._courseId,t):(this.apiLog("processHttpRequest","Invalid commit data format for offline storage",P.ERROR),{result:g,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 oe(this,e,t),this.apiLog("scheduleCommit","scheduled",P.DEBUG,""))}clearScheduledCommit(){this._timeout&&(this._timeout.cancel(),this._timeout=void 0,this.apiLog("clearScheduledCommit","cleared",P.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 p?(this.lastErrorCode=t.errorCode+"",""!==i&&(i=g),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)}}var Gi=Object.defineProperty,Yi=(e,t,i)=>((e,t,i)=>t in e?Gi(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Wi extends l{constructor(){super("cmi.learner_preference"),Yi(this,"__children",_.student_preference_children),Yi(this,"_audio_level","1"),Yi(this,"_language",""),Yi(this,"_delivery_speed","1"),Yi(this,"_audio_captioning","0")}reset(){this._initialized=!1}get _children(){return this.__children}set _children(_children){throw new y(this._cmi_element+"._children",E.READ_ONLY_ELEMENT)}get audio_level(){return this._audio_level}set audio_level(audio_level){vt(this._cmi_element+".audio_level",audio_level,Y)&>(this._cmi_element+".audio_level",audio_level,"0#999.9999999")&&(this._audio_level=audio_level)}get language(){return this._language}set language(language){vt(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(vt(this._cmi_element+".delivery_speed",delivery_speed,Y)&>(this._cmi_element+".delivery_speed",delivery_speed,"0#999.9999999")){if(0===parseFloat(delivery_speed))throw new y(this._cmi_element+".delivery_speed",E.VALUE_OUT_OF_RANGE);this._delivery_speed=delivery_speed}}get audio_captioning(){return this._audio_captioning}set audio_captioning(audio_captioning){vt(this._cmi_element+".audio_captioning",audio_captioning,"^-?([0-9]+)$")&>(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}}var Ki=Object.defineProperty,Ji=(e,t,i)=>((e,t,i)=>t in e?Ki(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Xi extends O{constructor(){super({CMIElement:"cmi.interactions",children:_.interactions_children,errorCode:E.READ_ONLY_ELEMENT,errorClass:y})}}class Qi extends l{constructor(){super("cmi.interactions.n"),Ji(this,"_id",""),Ji(this,"_idIsSet",!1),Ji(this,"_type",""),Ji(this,"_timestamp",""),Ji(this,"_weighting",""),Ji(this,"_learner_response",""),Ji(this,"_result",""),Ji(this,"_latency",""),Ji(this,"_description",""),Ji(this,"objectives"),Ji(this,"correct_responses"),this.objectives=new O({CMIElement:"cmi.interactions.n.objectives",errorCode:E.READ_ONLY_ELEMENT,errorClass:y,children:_.objectives_children}),this.correct_responses=new O({CMIElement:"cmi.interactions.n.correct_responses",errorCode:E.READ_ONLY_ELEMENT,errorClass:y,children:_.correct_responses_children})}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 O({CMIElement:"cmi.interactions.n.objectives",errorCode:E.READ_ONLY_ELEMENT,errorClass:y,children:_.objectives_children}),this.correct_responses=new O({CMIElement:"cmi.interactions.n.correct_responses",errorCode:E.READ_ONLY_ELEMENT,errorClass:y,children:_.correct_responses_children})}get id(){return this._id}set id(id){if(""===id||""===id.trim())throw new y(this._cmi_element+".id",E.TYPE_MISMATCH);if(this._idIsSet&&this._id!==id)throw new y(this._cmi_element+".id",E.GENERAL_SET_FAILURE);vt(this._cmi_element+".id",id,K)&&(this._id=id,this._idIsSet=!0)}get type(){return this._type}set type(type){if(this.initialized&&""===this._id)throw new y(this._cmi_element+".type",E.DEPENDENCY_NOT_ESTABLISHED);vt(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 y(this._cmi_element+".timestamp",E.DEPENDENCY_NOT_ESTABLISHED);vt(this._cmi_element+".timestamp",timestamp,$)&&(this._timestamp=timestamp)}get weighting(){return this._weighting}set weighting(weighting){if(this.initialized&&""===this._id)throw new y(this._cmi_element+".weighting",E.DEPENDENCY_NOT_ESTABLISHED);vt(this._cmi_element+".weighting",weighting,Y)&&(this._weighting=weighting)}get learner_response(){return this._learner_response}set learner_response(learner_response){if(this.initialized&&(""===this._type||""===this._id))throw new y(this._cmi_element+".learner_response",E.DEPENDENCY_NOT_ESTABLISHED);{let e=[];const t=te[this.type];if(!t)throw new y(this._cmi_element+".learner_response",E.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 y(this._cmi_element+".learner_response",E.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 y(this._cmi_element+".learner_response",E.TYPE_MISMATCH);if("performance"===this.type&&(""===n[0]||""===n[1]))throw new y(this._cmi_element+".learner_response",E.TYPE_MISMATCH);if(!n[0]?.match(i))throw new y(this._cmi_element+".learner_response",E.TYPE_MISMATCH);if(!t.format2||!n[1]?.match(RegExp(t.format2)))throw new y(this._cmi_element+".learner_response",E.TYPE_MISMATCH)}else{if(!e[s]?.match(i))throw new y(this._cmi_element+".learner_response",E.TYPE_MISMATCH);if(""!==e[s]&&t.unique)for(let t=0;s>t;t++)if(e[s]===e[t])throw new y(this._cmi_element+".learner_response",E.TYPE_MISMATCH)}}this._learner_response=learner_response}}get result(){return this._result}set result(result){vt(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 y(this._cmi_element+".latency",E.DEPENDENCY_NOT_ESTABLISHED);vt(this._cmi_element+".latency",latency,G)&&(this._latency=latency)}get description(){return this._description}set description(description){if(this.initialized&&""===this._id)throw new y(this._cmi_element+".description",E.DEPENDENCY_NOT_ESTABLISHED);vt(this._cmi_element+".description",description,B,!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 Zi extends l{constructor(){super("cmi.interactions.n.objectives.n"),Ji(this,"_id","")}reset(){this._initialized=!1,this._id=""}get id(){return this._id}set id(id){if(""===id||""===id.trim())throw new y(this._cmi_element+".id",E.TYPE_MISMATCH);vt(this._cmi_element+".id",id,K)&&(this._id=id)}toJSON(){this.jsonString=!0;const result={id:this.id};return this.jsonString=!1,result}}function es(e){return e.replace(/[[\]]/g,"")}function ts(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function is(text,e){const t=ts(e),i=RegExp("(?<!\\\\)"+t,"g"),s=RegExp("\\\\"+t,"g");return text.split(i).map(t=>t.replace(s,e))}function ss(text,e){const t=ts(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 rs extends l{constructor(e){super("cmi.interactions.n.correct_responses.n"),Ji(this,"_pattern",""),Ji(this,"_interactionType"),this._interactionType=e}reset(){this._initialized=!1,this._pattern=""}get pattern(){return this._pattern}set pattern(pattern){if("fill-in"!==this._interactionType||""!==pattern){if(vt(this._cmi_element+".pattern",pattern,"^.*$")){if(this._interactionType){const e=ie[this._interactionType];e&&("matching"===this._interactionType&&/\\[.,]/.test(pattern)||function(type,pattern,e){if(pattern.trim()!==pattern)throw new y("cmi.interactions.n.correct_responses.n.pattern",E.TYPE_MISMATCH);const t=e.delimiter?es(e.delimiter):null,i=t?is(pattern,t):[pattern];for(const e of i)if(e.trim()!==e)throw new y("cmi.interactions.n.correct_responses.n.pattern",E.TYPE_MISMATCH);if("fill-in"===type&&""===pattern)return;const s=e.delimiter?es(e.delimiter):null;let r;if(r=s?is(pattern,s):[pattern],!e.delimiter&&pattern.includes(","))throw new y("cmi.interactions.n.correct_responses.n.pattern",E.TYPE_MISMATCH);if((e.unique||!1===e.duplicate)&&new Set(r).size!==r.length)throw new y("cmi.interactions.n.correct_responses.n.pattern",E.TYPE_MISMATCH);if(0===r.length||r.length>e.max)throw new y("cmi.interactions.n.correct_responses.n.pattern",E.GENERAL_SET_FAILURE);const n=RegExp(e.format),o=e.format2?RegExp(e.format2):null,a=e=>{if(!n.test(e))throw new y("cmi.interactions.n.correct_responses.n.pattern",E.TYPE_MISMATCH)},c=(e,t)=>{if(!t)throw new y("cmi.interactions.n.correct_responses.n.pattern",E.TYPE_MISMATCH);const i=es(t),s=e.split(RegExp("(?<!\\\\)"+ts(i),"g")).map(e=>e.replace(RegExp("\\\\"+ts(i),"g"),i));if(2!==s.length||""===s[0]||""===s[1])throw new y("cmi.interactions.n.correct_responses.n.pattern",E.TYPE_MISMATCH);if(void 0!==s[0]&&!n.test(s[0])||o&&void 0!==s[1]&&!o.test(s[1]))throw new y("cmi.interactions.n.correct_responses.n.pattern",E.TYPE_MISMATCH)};for(const t of r)switch(type){case"numeric":{const i=e.delimiter?es(e.delimiter):":",s=t.split(i);if(1>s.length||s.length>2)throw new y("cmi.interactions.n.correct_responses.n.pattern",E.TYPE_MISMATCH);s.forEach(a);break}case"performance":{const i=e.delimiter2;if(!i)throw new y("cmi.interactions.n.correct_responses.n.pattern",E.TYPE_MISMATCH);const s=ss(t,es(i));if(2!==s.length)throw new y("cmi.interactions.n.correct_responses.n.pattern",E.TYPE_MISMATCH);const[r,a]=s;if(""===r||""===a||r===a)throw new y("cmi.interactions.n.correct_responses.n.pattern",E.TYPE_MISMATCH);if(void 0===r||!n.test(r))throw new y("cmi.interactions.n.correct_responses.n.pattern",E.TYPE_MISMATCH);if(o&&void 0!==a&&!o.test(a))throw new y("cmi.interactions.n.correct_responses.n.pattern",E.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}}var ns=Object.defineProperty,os=(e,t,i)=>((e,t,i)=>t in e?ns(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class as extends l{constructor(e){super(e.CMIElement),os(this,"__children"),os(this,"__score_range"),os(this,"__invalid_error_code"),os(this,"__invalid_type_code"),os(this,"__invalid_range_code"),os(this,"__decimal_regex"),os(this,"__error_class"),os(this,"_raw",""),os(this,"_min",""),os(this,"_max"),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||A.INVALID_SET_VALUE,this.__invalid_type_code=e.invalidTypeCode||A.TYPE_MISMATCH,this.__invalid_range_code=e.invalidRangeCode||A.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){Hi.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){Hi.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){Hi.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}}var cs=Object.defineProperty;class ls extends as{constructor(){super({CMIElement:"cmi.score",score_children:_.score_children,max:"",invalidErrorCode:E.READ_ONLY_ELEMENT,invalidTypeCode:E.TYPE_MISMATCH,invalidRangeCode:E.VALUE_OUT_OF_RANGE,decimalRegex:Y,errorClass:y}),((e,t,i)=>{t in e?cs(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i})(this,"_scaled"+"","")}reset(){this._initialized=!1,this._scaled="",this._raw="",this._min="",this._max=""}get scaled(){return this._scaled}set scaled(e){vt(this._cmi_element+".scaled",e,Y)&>(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}}var us=Object.defineProperty,hs=(e,t,i)=>((e,t,i)=>t in e?us(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class ds extends O{constructor(){super({CMIElement:"cmi.comments_from_lms",children:_.comments_children,errorCode:E.READ_ONLY_ELEMENT,errorClass:y})}}class ms extends O{constructor(){super({CMIElement:"cmi.comments_from_learner",children:_.comments_children,errorCode:E.READ_ONLY_ELEMENT,errorClass:y})}}class ps extends l{constructor(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];super("cmi.comments_from_learner.n"),hs(this,"_comment",""),hs(this,"_location",""),hs(this,"_timestamp",""),hs(this,"_readOnlyAfterInit"),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 y(this._cmi_element+".comment",E.READ_ONLY_ELEMENT);vt(this._cmi_element+".comment",comment,U,!0)&&(this._comment=comment)}get location(){return this._location}set location(location){if(this.initialized&&this._readOnlyAfterInit)throw new y(this._cmi_element+".location",E.READ_ONLY_ELEMENT);vt(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 y(this._cmi_element+".timestamp",E.READ_ONLY_ELEMENT);vt(this._cmi_element+".timestamp",timestamp,$)&&(this._timestamp=timestamp)}toJSON(){this.jsonString=!0;const result={comment:this.comment,location:this.location,timestamp:this.timestamp};return this.jsonString=!1,result}}var vs=Object.defineProperty,gs=(e,t,i)=>((e,t,i)=>t in e?vs(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class _s extends O{constructor(){super({CMIElement:"cmi.objectives",children:_.objectives_children,errorCode:E.READ_ONLY_ELEMENT,errorClass:y})}findObjectiveById(id){return this.childArray.find(e=>e.id===id)}findObjectiveByIndex(e){return this.childArray[e]}setObjectiveByIndex(e,t){this.childArray[e]=t}}class fs extends l{constructor(){super("cmi.objectives.n"),gs(this,"_id",""),gs(this,"_idIsSet",!1),gs(this,"_success_status","unknown"),gs(this,"_completion_status","unknown"),gs(this,"_progress_measure",""),gs(this,"_description",""),gs(this,"score"),this.score=new ls}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()}initialize(){super.initialize(),this.score?.initialize()}get id(){return this._id}set id(id){if(""===id||""===id.trim())throw new y(this._cmi_element+".id",E.TYPE_MISMATCH);if(this._idIsSet&&this._id!==id)throw new y(this._cmi_element+".id",E.GENERAL_SET_FAILURE);vt(this._cmi_element+".id",id,K)&&(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 y(this._cmi_element+".success_status",E.DEPENDENCY_NOT_ESTABLISHED);vt(this._cmi_element+".success_status",success_status,X)&&(this._success_status=success_status)}get completion_status(){return this._completion_status}set completion_status(completion_status){if(this.initialized&&""===this._id)throw new y(this._cmi_element+".completion_status",E.DEPENDENCY_NOT_ESTABLISHED);vt(this._cmi_element+".completion_status",completion_status,J)&&(this._completion_status=completion_status)}get progress_measure(){return this._progress_measure}set progress_measure(progress_measure){if(this.initialized&&""===this._id)throw new y(this._cmi_element+".progress_measure",E.DEPENDENCY_NOT_ESTABLISHED);vt(this._cmi_element+".progress_measure",progress_measure,Y)&>(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 y(this._cmi_element+".description",E.DEPENDENCY_NOT_ESTABLISHED);vt(this._cmi_element+".description",description,B,!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+"")))}}var Ss=Object.defineProperty,bs=(e,t,i)=>((e,t,i)=>t in e?Ss(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class ys extends l{constructor(){super("cmi"),bs(this,"__version","1.0"),bs(this,"__children",_.cmi_children)}get _version(){return this.__version}set _version(_version){throw new y(this._cmi_element+"._version",E.READ_ONLY_ELEMENT)}get _children(){return this.__children}set _children(_children){throw new y(this._cmi_element+"._children",E.READ_ONLY_ELEMENT)}reset(){this._initialized=!1}}var Cs=Object.defineProperty,As=(e,t,i)=>((e,t,i)=>t in e?Cs(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Es extends l{constructor(){super("cmi"),As(this,"_learner_id",""),As(this,"_learner_name","")}get learner_id(){return this._learner_id}set learner_id(learner_id){if(this.initialized)throw new y(this._cmi_element+".learner_id",E.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 y(this._cmi_element+".learner_name",E.READ_ONLY_ELEMENT);this._learner_name=learner_name}reset(){this._initialized=!1}}var ws=Object.defineProperty,Ms=(e,t,i)=>((e,t,i)=>t in e?ws(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Os extends l{constructor(){super("cmi"),Ms(this,"_completion_status","unknown"),Ms(this,"_success_status","unknown"),Ms(this,"_progress_measure","")}get completion_status(){return this._completion_status}set completion_status(completion_status){vt(this._cmi_element+".completion_status",completion_status,J)&&(this._completion_status=completion_status)}get success_status(){return this._success_status}set success_status(success_status){vt(this._cmi_element+".success_status",success_status,X)&&(this._success_status=success_status)}get progress_measure(){return this._progress_measure}set progress_measure(progress_measure){vt(this._cmi_element+".progress_measure",progress_measure,Y)&>(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=""}}var Rs=Object.defineProperty,Ts=(e,t,i)=>((e,t,i)=>t in e?Rs(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class js extends l{constructor(){super("cmi"),Ts(this,"_entry",""),Ts(this,"_exit",""),Ts(this,"_session_time","PT0H0M0S"),Ts(this,"_total_time","PT0S")}get entry(){return this._entry}set entry(entry){if(this.initialized)throw new y(this._cmi_element+".entry",E.READ_ONLY_ELEMENT);this._entry=entry}get exit(){if(!this.jsonString)throw new y(this._cmi_element+".exit",E.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.'),vt(this._cmi_element+".exit",exit,"^(time-out|suspend|logout|normal)$",!0)&&(this._exit=exit)}get session_time(){if(!this.jsonString)throw new y(this._cmi_element+".session_time",E.WRITE_ONLY_ELEMENT);return this._session_time}set session_time(session_time){vt(this._cmi_element+".session_time",session_time,G)&&(this._session_time=session_time)}get total_time(){return this._total_time}set total_time(total_time){if(this.initialized)throw new y(this._cmi_element+".total_time",E.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,r){const n=RegExp(r);return t(i(e,n)+i(s,n))}(this._total_time,s,G)}reset(){this._initialized=!1,this._entry="ab-initio",this._exit="",this._session_time="PT0H0M0S"}}var Is=Object.defineProperty,qs=(e,t,i)=>((e,t,i)=>t in e?Is(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Ns extends l{constructor(){super("cmi"),qs(this,"_location",""),qs(this,"_launch_data",""),qs(this,"_suspend_data","")}get location(){return this._location}set location(location){vt(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 y(this._cmi_element+".launch_data",E.READ_ONLY_ELEMENT);this._launch_data=launch_data}get suspend_data(){return this._suspend_data}set suspend_data(suspend_data){vt(this._cmi_element+".suspend_data",suspend_data,H,!0)&&(this._suspend_data=suspend_data)}reset(){this._initialized=!1,this._location="",this._suspend_data=""}}var Ds=Object.defineProperty,xs=(e,t,i)=>((e,t,i)=>t in e?Ds(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Ls extends l{constructor(){super("cmi"),xs(this,"_credit","credit"),xs(this,"_mode","normal"),xs(this,"_time_limit_action","continue,no message"),xs(this,"_max_time_allowed","")}get credit(){return this._credit}set credit(credit){if(this.initialized)throw new y(this._cmi_element+".credit",E.READ_ONLY_ELEMENT);if(!/^(credit|no-credit)$/.test(credit))throw new y(this._cmi_element+".credit",E.TYPE_MISMATCH);this._credit=credit}get mode(){return this._mode}set mode(mode){if(this.initialized)throw new y(this._cmi_element+".mode",E.READ_ONLY_ELEMENT);if(!/^(browse|normal|review)$/.test(mode))throw new y(this._cmi_element+".mode",E.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 y(this._cmi_element+".time_limit_action",E.READ_ONLY_ELEMENT);if(!/^(exit,message|exit,no message|continue,message|continue,no message)$/.test(time_limit_action))throw new y(this._cmi_element+".time_limit_action",E.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 y(this._cmi_element+".max_time_allowed",E.READ_ONLY_ELEMENT);if(""!==max_time_allowed){if(!RegExp(G).test(max_time_allowed))throw new y(this._cmi_element+".max_time_allowed",E.TYPE_MISMATCH);this._max_time_allowed=max_time_allowed}else this._max_time_allowed=max_time_allowed}reset(){this._initialized=!1}}var Ps=Object.defineProperty,zs=(e,t,i)=>((e,t,i)=>t in e?Ps(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Fs extends l{constructor(){super("cmi"),zs(this,"_scaled_passing_score",""),zs(this,"_completion_threshold","")}get scaled_passing_score(){return this._scaled_passing_score}set scaled_passing_score(scaled_passing_score){if(this.initialized)throw new y(this._cmi_element+".scaled_passing_score",E.READ_ONLY_ELEMENT??404);if(""===scaled_passing_score)return void(this._scaled_passing_score=scaled_passing_score);if(!RegExp(Y).test(scaled_passing_score))throw new y(this._cmi_element+".scaled_passing_score",E.TYPE_MISMATCH??406);const e=parseFloat(scaled_passing_score);if(-1>e||e>1)throw new y(this._cmi_element+".scaled_passing_score",E.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 y(this._cmi_element+".completion_threshold",E.READ_ONLY_ELEMENT??404);if(""===e)return void(this._completion_threshold=e);if(!RegExp(Y).test(e))throw new y(this._cmi_element+".completion_threshold",E.TYPE_MISMATCH??406);const t=parseFloat(e);if(0>t||t>1)throw new y(this._cmi_element+".completion_threshold",E.VALUE_OUT_OF_RANGE??407);this._completion_threshold=e}reset(){this._initialized=!1}}var ks=Object.defineProperty,Vs=(e,t,i)=>((e,t,i)=>t in e?ks(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class Hs extends u{constructor(){let e=arguments.length>0&&void 0!==arguments[0]&&arguments[0];super("cmi"),Vs(this,"metadata"),Vs(this,"learner"),Vs(this,"status"),Vs(this,"session"),Vs(this,"content"),Vs(this,"settings"),Vs(this,"thresholds"),Vs(this,"learner_preference"),Vs(this,"score"),Vs(this,"comments_from_learner"),Vs(this,"comments_from_lms"),Vs(this,"interactions"),Vs(this,"objectives"),this.metadata=new ys,this.learner=new Es,this.status=new Os,this.session=new js,this.content=new Ns,this.settings=new Ls,this.thresholds=new Fs,this.learner_preference=new Wi,this.score=new ls,this.comments_from_learner=new ms,this.comments_from_lms=new ds,this.interactions=new Xi,this.objectives=new _s,e&&this.initialize()}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}}var Bs=Object.defineProperty,Us=(e,t,i)=>((e,t,i)=>t in e?Bs(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class $s extends l{constructor(){super("adl"),Us(this,"nav"),Us(this,"data",new Ys),Us(this,"_sequencing",null),this.nav=new Gs,this.data=new Ys}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 Gs extends l{constructor(){super("adl.nav"),Us(this,"_request","_none_"),Us(this,"_sequencing",null),Us(this,"request_valid"),this.request_valid=new Xs,this.request_valid.setParentNav(this)}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){vt(this._cmi_element+".request",request,Q)&&(this._request=request)}toJSON(){this.jsonString=!0;const result={request:this.request};return this.jsonString=!1,result}}class Ys extends O{constructor(){super({CMIElement:"adl.data",children:_.adl_data_children,errorCode:E.READ_ONLY_ELEMENT,errorClass:y})}}class Ws extends l{constructor(){super("adl.data.n"),Us(this,"_id",""),Us(this,"_store",""),Us(this,"_idIsSet",!1),Us(this,"_storeIsSet",!1)}reset(){this._initialized=!1,this._idIsSet=!1,this._storeIsSet=!1}get id(){return this._id}set id(id){if(this.initialized)throw new y(this._cmi_element+".id",E.READ_ONLY_ELEMENT);vt(this._cmi_element+".id",id,K)&&(this._id=id,this._idIsSet=!0)}get store(){if(this.initialized&&!this._storeIsSet)throw new y(this._cmi_element+".store",E.VALUE_NOT_INITIALIZED);return this._store}set store(e){if(this.initialized&&!this._idIsSet)throw new y(this._cmi_element+".store",E.DEPENDENCY_NOT_ESTABLISHED);vt(this._cmi_element+".store",e,H)&&(this._store=e,this._storeIsSet=!0)}toJSON(){this.jsonString=!0;const result={id:this._id,store:this._store};return this.jsonString=!1,result}}class Ks{constructor(){Us(this,"_parentNav",null),Us(this,"_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===T?"true":t===j?"false":"unknown"}getAll(){return{...this._staticValues}}setAll(e){this._staticValues={...e}}}class Js{constructor(){Us(this,"_parentNav",null),Us(this,"_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===T?"true":t===j?"false":"unknown"}getAll(){return{...this._staticValues}}setAll(e){this._staticValues={...e}}}class Xs extends l{constructor(){super("adl.nav.request_valid"),Us(this,"_continue","unknown"),Us(this,"_previous","unknown"),Us(this,"_choice"),Us(this,"_jump"),Us(this,"_exit","unknown"),Us(this,"_exitAll","unknown"),Us(this,"_abandon","unknown"),Us(this,"_abandonAll","unknown"),Us(this,"_suspendAll","unknown"),Us(this,"_parentNav",null),this._choice=new Ks,this._jump=new Js}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 y(this._cmi_element+".continue",E.READ_ONLY_ELEMENT);vt(this._cmi_element+".continue",e,Z)&&(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 y(this._cmi_element+".previous",E.READ_ONLY_ELEMENT);vt(this._cmi_element+".previous",e,Z)&&(this._previous=e)}get choice(){return this._choice}set choice(e){if(this.initialized)throw new y(this._cmi_element+".choice",E.READ_ONLY_ELEMENT);if("object"!=typeof e)throw new y(this._cmi_element+".choice",E.TYPE_MISMATCH);const t={};for(const i in e)if({}.hasOwnProperty.call(e,i)&&vt(this._cmi_element+".choice."+i,e[i]||"",Z)&&vt(this._cmi_element+".choice."+i,i,ee)){const s=e[i];"true"===s?t[i]=T:"false"===s?t[i]=j:"unknown"===s&&(t[i]=R)}this._choice.setAll(t)}get jump(){return this._jump}set jump(e){if(this.initialized)throw new y(this._cmi_element+".jump",E.READ_ONLY_ELEMENT);if("object"!=typeof e)throw new y(this._cmi_element+".jump",E.TYPE_MISMATCH);const t={};for(const i in e)if({}.hasOwnProperty.call(e,i)&&vt(this._cmi_element+".jump."+i,e[i]||"",Z)&&vt(this._cmi_element+".jump."+i,i,ee)){const s=e[i];"true"===s?t[i]=T:"false"===s?t[i]=j:"unknown"===s&&(t[i]=R)}this._jump.setAll(t)}get exit(){return this._exit}set exit(e){if(this.initialized)throw new y(this._cmi_element+".exit",E.READ_ONLY_ELEMENT);vt(this._cmi_element+".exit",e,Z)&&(this._exit=e)}get exitAll(){return this._exitAll}set exitAll(e){if(this.initialized)throw new y(this._cmi_element+".exitAll",E.READ_ONLY_ELEMENT);vt(this._cmi_element+".exitAll",e,Z)&&(this._exitAll=e)}get abandon(){return this._abandon}set abandon(e){if(this.initialized)throw new y(this._cmi_element+".abandon",E.READ_ONLY_ELEMENT);vt(this._cmi_element+".abandon",e,Z)&&(this._abandon=e)}get abandonAll(){return this._abandonAll}set abandonAll(e){if(this.initialized)throw new y(this._cmi_element+".abandonAll",E.READ_ONLY_ELEMENT);vt(this._cmi_element+".abandonAll",e,Z)&&(this._abandonAll=e)}get suspendAll(){return this._suspendAll}set suspendAll(e){if(this.initialized)throw new y(this._cmi_element+".suspendAll",E.READ_ONLY_ELEMENT);vt(this._cmi_element+".suspendAll",e,Z)&&(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}}var Qs=Object.defineProperty,Zs=(e,t,i)=>((e,t,i)=>t in e?Qs(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class er extends l{constructor(e){super("activityTree"),Zs(this,"_root",null),Zs(this,"_currentActivity",null),Zs(this,"_suspendedActivity",null),Zs(this,"_activities",new Map),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 Ot))throw new y(this._cmi_element+".root",E.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 Ot))throw new y(this._cmi_element+".currentActivity",E.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 Ot))throw new y(this._cmi_element+".currentActivity",E.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 Ot))throw new y(this._cmi_element+".suspendedActivity",E.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){return 1>=arguments.length||void 0===arguments[1]||arguments[1]?e.getAvailableChildren():e.children}getSiblings(e){return e.parent?e.parent.children.filter(t=>t!==e):[]}getNextSibling(e){let t=1>=arguments.length||void 0===arguments[1]||arguments[1];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){let t=1>=arguments.length||void 0===arguments[1]||arguments[1];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){const t=1>=arguments.length||void 0===arguments[1]||arguments[1]?e.getAvailableChildren():e.children;return 0===t.length?null:t[0]??null}getLastChild(e){const t=1>=arguments.length||void 0===arguments[1]||arguments[1]?e.getAvailableChildren():e.children;return 0===t.length?null:t[t.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}}var tr=Object.defineProperty,ir=(e,t,i)=>((e,t,i)=>t in e?tr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class sr extends l{constructor(){super("sequencing"),ir(this,"_activityTree"),ir(this,"_sequencingRules"),ir(this,"_sequencingControls"),ir(this,"_rollupRules"),ir(this,"_adlNav",null),ir(this,"_hideLmsUi",[]),ir(this,"_auxiliaryResources",[]),ir(this,"_overallSequencingProcess",null),this._activityTree=new er,this._sequencingRules=new ve,this._sequencingControls=new Ne,this._rollupRules=new At}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 er))throw new y(this._cmi_element+".activityTree",E.TYPE_MISMATCH);this._activityTree=e}get sequencingRules(){return this._sequencingRules}set sequencingRules(e){if(!(e instanceof ve))throw new y(this._cmi_element+".sequencingRules",E.TYPE_MISMATCH);this._sequencingRules=e}get sequencingControls(){return this._sequencingControls}set sequencingControls(e){if(!(e instanceof Ne))throw new y(this._cmi_element+".sequencingControls",E.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 At))throw new y(this._cmi_element+".rollupRules",E.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}}var rr=Object.defineProperty;class nr{constructor(e){var t;((e,t,i)=>{t in e?rr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i})(this,"context"+"",t),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,E.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,E.GENERAL_SET_FAILURE,""+i)}}validateCorrectResponse(e,t,i){const s=+e.split(".")[4];if(!t)return void this.context.throwSCORMError(e,E.DEPENDENCY_NOT_ESTABLISHED,e);const r=t.correct_responses._count;this.checkDuplicateChoiceResponse(e,t,i);const n=ie[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,E.GENERAL_SET_FAILURE,`Data Model Element Pattern Already Exists: ${e} - ${i}`)):this.context.throwSCORMError(e,E.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=ie[t];if(!r)return void this.context.throwSCORMError(e,E.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,E.TYPE_MISMATCH,`${t}: ${s}`)}else{const a=i[o].match(n);if(!a&&""!==s||!a&&"true-false"===t)this.context.throwSCORMError(e,E.TYPE_MISMATCH,`${t}: ${s}`);else if("numeric"===t&&i.length>1)+i[0]>+i[1]&&this.context.throwSCORMError(e,E.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,E.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&&(se.includes(i.toLowerCase())||this.context.throwSCORMError(e,E.TYPE_MISMATCH,""+t))}r=!0;break;case"case_matters":r||i||s||"true"!==a[3]&&"false"!==a[3]&&this.context.throwSCORMError(e,E.TYPE_MISMATCH,""+t),s=!0;break;case"order_matters":s||r||i||"true"!==a[3]&&"false"!==a[3]&&this.context.throwSCORMError(e,E.TYPE_MISMATCH,""+t),i=!0}a=(t=t.substring(a[1]?.length||0)).match(n)}return t}}var or=Object.defineProperty,ar=(e,t,i)=>((e,t,i)=>t in e?or(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class cr{constructor(e,t){ar(this,"context"),ar(this,"responseValidator"),this.context=e,this.responseValidator=t}getChildElement(e,t,i){if(n(e,"cmi\\.objectives\\.\\d+"))return new fs;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 Zi}else if(n(e,"cmi\\.interactions\\.\\d+"))return new Qi;return n(e,"cmi\\.comments_from_learner\\.\\d+")?new ps:n(e,"cmi\\.comments_from_lms\\.\\d+")?new ps(!0):n(e,"adl\\.data\\.\\d+")?new Ws: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,E.DEPENDENCY_NOT_ESTABLISHED,e),null;{const i=ie[s.type];if(i&&void 0!==i.limit&&s.correct_responses._count>=i.limit)return this.context.throwSCORMError(e,E.GENERAL_SET_FAILURE,"Data Model Element Collection Limit Reached: "+e),null;if(this.responseValidator.checkDuplicateChoiceResponse(e,s,t),!i)return this.context.throwSCORMError(e,E.GENERAL_SET_FAILURE,"Incorrect Response Type: "+s.type),null;this.responseValidator.checkValidResponseType(e,i,t,s.type)}}return"0"===this.context.getLastErrorCode()?new rs(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?x:D}return L}}return i||L}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?q:I}return N}}return i||N}}class lr{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 pe(e.action,e.conditionCombination);for(const i of e.conditions){const e=new me(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 Ct(e.action,e.consideration,e.minimumCount,e.minimumPercent);for(const i of e.conditions){const e=new yt(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(ae),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))}}var ur=Object.defineProperty,hr=(e,t,i)=>((e,t,i)=>t in e?ur(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class dr{constructor(e,t){hr(this,"sequencingCollections"),hr(this,"sequencingConfigBuilder"),this.sequencingCollections=e||{},this.sequencingConfigBuilder=t||new lr}setSequencingCollections(e){this.sequencingCollections=e}createActivity(e){const t=new Ot(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 Mt(e.objectiveID,{description:e.description??null,satisfiedByMeasure:e.satisfiedByMeasure??!1,minNormalizedMeasure:e.minNormalizedMeasure??null,mapInfo:i,isPrimary:t})}}var mr=Object.defineProperty,pr=(e,t,i)=>((e,t,i)=>t in e?mr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class vr{constructor(e){pr(this,"_globalObjectives",[]),pr(this,"context"),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!==N&&(s.satisfiedStatus=t.success_status===I,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!==L&&(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!==N&&(entry.satisfiedStatus=e.success_status===I,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!==L&&(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 fs;e.id=entry.id??t,!0===entry.satisfiedStatusKnown&&(e.success_status=entry.satisfiedStatus?I:q);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 fs;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!==N&&(r.satisfiedStatus=t===I,r.satisfiedStatusKnown=!0,r.measureStatus=!0,s.objectiveMeasureStatus=!0,s.objectiveSatisfiedStatus=t===I,s.objectiveSatisfiedStatusKnown=!0),e!==L&&(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 fs;i.id=e,this._globalObjectives.push(i)}return{index:t,objective:this._globalObjectives[t]}}}var gr=Object.defineProperty,_r=(e,t,i)=>((e,t,i)=>t in e?gr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class fr{constructor(e,t){_r(this,"context"),_r(this,"globalObjectiveManager"),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",P.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?P.INFO:P.WARN),o}catch(e){return this.context.apiLog("saveSequencingState","Error saving sequencing state: "+(e instanceof Error?e.message:e+""),P.ERROR),!1}}async loadSequencingState(e){const t=this.context.getSettings();if(!t.sequencingStatePersistence)return this.context.apiLog("loadSequencingState","No persistence configuration provided",P.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",P.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?P.INFO:P.WARN),o}catch(e){return this.context.apiLog("loadSequencingState","Error loading sequencing state: "+(e instanceof Error?e.message:e+""),P.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}`,P.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+""),P.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}}var Sr=Object.defineProperty,br=(e,t,i)=>((e,t,i)=>t in e?Sr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);class yr{constructor(e,t){br(this,"context"),br(this,"globalObjectiveManager"),this.context=e,this.globalObjectiveManager=t||null}setGlobalObjectiveManager(e){this.globalObjectiveManager=e}updateSequencingService(e){this.context.sequencingService=e}renderCommitCMI(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[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){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];const s=this.renderCommitCMI(e,t),r=e||t?this.context.cmi.getCurrentTotalTime():"",n=i(r,G);let o=L,a=N;this.context.cmi.completion_status&&("completed"===this.context.cmi.completion_status?o=D:"incomplete"===this.context.cmi.completion_status&&(o=x)),this.context.cmi.success_status&&("passed"===this.context.cmi.success_status?a=I:"failed"===this.context.cmi.success_status&&(a=q));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":""}}var Cr=Object.defineProperty,Ar=(e,t,i)=>((e,t,i)=>t in e?Cr(e,t,{enumerable:!0,configurable:!0,writable:!0,value:i}):e[t]=i)(e,"symbol"!=typeof t?t+"":t,i);return class extends $i{constructor(e,t){const i=e?{...e}:void 0;i&&void 0===i.mastery_override&&(i.mastery_override=!1),super(E,i,t),Ar(this,"_version","1.0"),Ar(this,"_sequencing"),Ar(this,"_sequencingService",null),Ar(this,"_extractedScoItemIds",[]),Ar(this,"_sequencingCollections",{}),Ar(this,"_responseValidator"),Ar(this,"_cmiHandler"),Ar(this,"_activityTreeBuilder"),Ar(this,"_sequencingConfigBuilder"),Ar(this,"_globalObjectiveManager"),Ar(this,"_statePersistence",null),Ar(this,"_dataSerializer"),Ar(this,"cmi"),Ar(this,"adl"),Ar(this,"Initialize"),Ar(this,"Terminate"),Ar(this,"GetValue"),Ar(this,"SetValue"),Ar(this,"Commit"),Ar(this,"GetLastError"),Ar(this,"GetErrorString"),Ar(this,"GetDiagnostic"),this.cmi=new Hs,this.adl=new $s,this._sequencing=new sr,this.adl.sequencing=this._sequencing,this._sequencingConfigBuilder=new lr,this._activityTreeBuilder=new dr({},this._sequencingConfigBuilder),this._responseValidator=new nr({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 cr({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 vr(s);const r={getSettings:()=>this.settings,cmi:this.cmi,sequencingService:this._sequencingService,renderCMIToJSONObject:this.renderCMIToJSONObject.bind(this)};this._dataSerializer=new yr(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}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(){if(""!==(arguments.length>0&&void 0!==arguments[0]?arguments[0]:""))return this.throwSCORMError("api",this._error_codes.ARGUMENT_ERROR),g;this.cmi.initialize();const result=this.initialize("Initialize","LMS was already initialized!","LMS is already finished!");return result===v&&this._sequencingService&&this._sequencingService.initialize(),result===v&&this._globalObjectiveManager.restoreGlobalObjectivesToCMI(),result===v&&this.settings.sequencingStatePersistence&&this.loadSequencingState().catch(()=>{this.apiLog("lmsInitialize","Failed to auto-load sequencing state",P.WARN)}),result}lmsFinish(){if(""!==(arguments.length>0&&void 0!==arguments[0]?arguments[0]:""))return this.throwSCORMError("api",this._error_codes.ARGUMENT_ERROR),g;const e=this.adl?.nav?.request||"_none_",t=this.cmi?.getExitValueInternal()||"",i=this.isTerminated(),s=this._sequencingService?.isDeliveryInProgress()??!1,result=this.terminate("Terminate",!0);if(result===v&&!i&&!s){let i=!1,s=null,r=e,n="";const o=RegExp(Q);if("_none_"!==e){const t=e.match(o);t&&(t.groups?.choice_target?(n=t.groups?.choice_target,r="choice"):t.groups?.jump_target&&(n=t.groups?.jump_target,r="jump"))}if(this._sequencingService)try{let e,o=null;"_none_"!==r?(o=r,e=n||void 0):this._sequencing.getCurrentActivity()&&(o="exit"),o&&(i=this._sequencingService.processNavigationRequest(o,e,t),s=o)}catch(e){this.apiLog("lmsFinish","Sequencing navigation failed, falling back to event-based navigation: "+e,P.WARN),i=!1}if(!i)if("_none_"!==e){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=E.RETRIEVE_AFTER_TERM+"","";if(!this.isInitialized())return this.lastErrorCode=E.RETRIEVE_BEFORE_INIT+"","";if("adl.nav.request"===e)return this.throwSCORMError(e,E.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===v&&this._sequencingService)try{this._sequencingService.triggerRollupOnCMIChange(e,i,t)}catch(t){console.warn(`Sequencing rollup failed for ${e}: ${t}`)}return result===v&&"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",P.WARN)}),result}lmsCommit(){if(""!==(arguments.length>0&&void 0!==arguments[0]?arguments[0]:""))return this.throwSCORMError("api",this._error_codes.ARGUMENT_ERROR),g;if(this.settings.throttleCommits)return this.scheduleCommit(500,"Commit"),v;{const result=this.commit("Commit",!0);return result===v&&"commit"===this.settings.sequencingStatePersistence?.autoSaveOn&&this.saveSequencingState().catch(()=>{this.apiLog("lmsCommit","Failed to auto-save sequencing state",P.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,E.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 O){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=_.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){return this._dataSerializer.renderCommitCMI(e,arguments.length>1&&void 0!==arguments[1]&&arguments[1])}renderCommitObject(e){return this._dataSerializer.renderCommitObject(e,arguments.length>1&&void 0!==arguments[1]&&arguments[1])}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=L;"completed"===this.cmi.completion_status?r=D:"incomplete"===this.cmi.completion_status&&(r=x);let n=N;if("passed"===this.cmi.success_status?n=I:"failed"===this.cmi.success_status&&(n=q),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,P.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:v,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 xi(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 fr(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",P.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 fr(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",P.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 fr(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 fr(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 fr(t,this._globalObjectiveManager).deserializeSequencingState(e)}determineEntryValue(e,t){return this._dataSerializer.determineEntryValue(e,t)}}}();
|
|
2
2
|
//# sourceMappingURL=scorm2004.min.js.map
|