@fps-games/editor-deployment 0.2.3-beta.13 → 0.2.3-beta.14

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.
Files changed (36) hide show
  1. package/bin/fps-editor-prepare.mjs +3 -4
  2. package/bin/fps-editor-server.mjs +1 -1
  3. package/licenses/THIRD_PARTY_NOTICES.txt +2 -2
  4. package/manifest.json +62 -73
  5. package/npm-shrinkwrap.json +3 -4
  6. package/package.json +7 -7
  7. package/public/assets/{editor-core-plugin-host-c2002442.js → editor-core-plugin-host-94e73c63.js} +1 -1
  8. package/public/assets/editor-core-plugin-host-94e73c63.js.br +0 -0
  9. package/public/assets/editor-core-plugin-host-94e73c63.js.gz +0 -0
  10. package/public/assets/index-CToRH9gy.js +1 -0
  11. package/public/assets/index-CToRH9gy.js.br +0 -0
  12. package/public/assets/index-CToRH9gy.js.gz +0 -0
  13. package/public/assets/playable-sdk-CrrQJDf4.js +4 -0
  14. package/public/assets/playable-sdk-CrrQJDf4.js.br +0 -0
  15. package/public/assets/playable-sdk-CrrQJDf4.js.gz +0 -0
  16. package/public/assets/playable-standard-project-DkUozryX.js +5249 -0
  17. package/public/assets/playable-standard-project-DkUozryX.js.br +0 -0
  18. package/public/assets/playable-standard-project-DkUozryX.js.gz +0 -0
  19. package/public/index.html +3 -3
  20. package/public/index.html.br +0 -0
  21. package/public/index.html.gz +0 -0
  22. package/runtime/editor-control-plane.mjs +96 -5
  23. package/worker/editor-service-worker.mjs +17 -24
  24. package/bin/fps-editor-agent.mjs +0 -5
  25. package/public/assets/editor-core-plugin-host-c2002442.js.br +0 -0
  26. package/public/assets/editor-core-plugin-host-c2002442.js.gz +0 -0
  27. package/public/assets/index-c2oXc5B5.js +0 -5
  28. package/public/assets/index-c2oXc5B5.js.br +0 -0
  29. package/public/assets/index-c2oXc5B5.js.gz +0 -0
  30. package/public/assets/playable-sdk-Dfz54Mv_.js +0 -5
  31. package/public/assets/playable-sdk-Dfz54Mv_.js.br +0 -0
  32. package/public/assets/playable-sdk-Dfz54Mv_.js.gz +0 -0
  33. package/public/assets/playable-standard-project-C61X2B53.js +0 -5247
  34. package/public/assets/playable-standard-project-C61X2B53.js.br +0 -0
  35. package/public/assets/playable-standard-project-C61X2B53.js.gz +0 -0
  36. package/runtime/runtime-debug-authoring-bridge.mjs +0 -1
@@ -1 +1 @@
1
- var Jn=Object.create;var $t=Object.defineProperty;var Kn=Object.getOwnPropertyDescriptor;var Wn=Object.getOwnPropertyNames;var Yn=Object.getPrototypeOf,Qn=Object.prototype.hasOwnProperty;var $=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var Zn=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Wn(t))!Qn.call(e,i)&&i!==r&&$t(e,i,{get:()=>t[i],enumerable:!(n=Kn(t,i))||n.enumerable});return e};var It=(e,t,r)=>(r=e!=null?Jn(Yn(e)):{},Zn(t||!e||!e.__esModule?$t(r,"default",{value:e,enumerable:!0}):r,e));var ne=$((Ua,Ot)=>{"use strict";var ei="2.0.0",ti=Number.MAX_SAFE_INTEGER||9007199254740991,ri=16,ni=250,ii=["major","premajor","minor","preminor","patch","prepatch","prerelease"];Ot.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:ri,MAX_SAFE_BUILD_LENGTH:ni,MAX_SAFE_INTEGER:ti,RELEASE_TYPES:ii,SEMVER_SPEC_VERSION:ei,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}});var fe=$((Va,St)=>{"use strict";var oi=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...e)=>console.error("SEMVER",...e):()=>{};St.exports=oi});var ie=$((G,Pt)=>{"use strict";var{MAX_SAFE_COMPONENT_LENGTH:ke,MAX_SAFE_BUILD_LENGTH:si,MAX_LENGTH:ai}=ne(),ci=fe();G=Pt.exports={};var li=G.re=[],di=G.safeRe=[],g=G.src=[],ui=G.safeSrc=[],E=G.t={},fi=0,Me="[a-zA-Z0-9-]",pi=[["\\s",1],["\\d",ai],[Me,si]],mi=e=>{for(let[t,r]of pi)e=e.split(`${t}*`).join(`${t}{0,${r}}`).split(`${t}+`).join(`${t}{1,${r}}`);return e},I=(e,t,r)=>{let n=mi(t),i=fi++;ci(e,i,t),E[e]=i,g[i]=t,ui[i]=n,li[i]=new RegExp(t,r?"g":void 0),di[i]=new RegExp(n,r?"g":void 0)};I("NUMERICIDENTIFIER","0|[1-9]\\d*");I("NUMERICIDENTIFIERLOOSE","\\d+");I("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${Me}*`);I("MAINVERSION",`(${g[E.NUMERICIDENTIFIER]})\\.(${g[E.NUMERICIDENTIFIER]})\\.(${g[E.NUMERICIDENTIFIER]})`);I("MAINVERSIONLOOSE",`(${g[E.NUMERICIDENTIFIERLOOSE]})\\.(${g[E.NUMERICIDENTIFIERLOOSE]})\\.(${g[E.NUMERICIDENTIFIERLOOSE]})`);I("PRERELEASEIDENTIFIER",`(?:${g[E.NONNUMERICIDENTIFIER]}|${g[E.NUMERICIDENTIFIER]})`);I("PRERELEASEIDENTIFIERLOOSE",`(?:${g[E.NONNUMERICIDENTIFIER]}|${g[E.NUMERICIDENTIFIERLOOSE]})`);I("PRERELEASE",`(?:-(${g[E.PRERELEASEIDENTIFIER]}(?:\\.${g[E.PRERELEASEIDENTIFIER]})*))`);I("PRERELEASELOOSE",`(?:-?(${g[E.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${g[E.PRERELEASEIDENTIFIERLOOSE]})*))`);I("BUILDIDENTIFIER",`${Me}+`);I("BUILD",`(?:\\+(${g[E.BUILDIDENTIFIER]}(?:\\.${g[E.BUILDIDENTIFIER]})*))`);I("FULLPLAIN",`v?${g[E.MAINVERSION]}${g[E.PRERELEASE]}?${g[E.BUILD]}?`);I("FULL",`^${g[E.FULLPLAIN]}$`);I("LOOSEPLAIN",`[v=\\s]*${g[E.MAINVERSIONLOOSE]}${g[E.PRERELEASELOOSE]}?${g[E.BUILD]}?`);I("LOOSE",`^${g[E.LOOSEPLAIN]}$`);I("GTLT","((?:<|>)?=?)");I("XRANGEIDENTIFIERLOOSE",`${g[E.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);I("XRANGEIDENTIFIER",`${g[E.NUMERICIDENTIFIER]}|x|X|\\*`);I("XRANGEPLAIN",`[v=\\s]*(${g[E.XRANGEIDENTIFIER]})(?:\\.(${g[E.XRANGEIDENTIFIER]})(?:\\.(${g[E.XRANGEIDENTIFIER]})(?:${g[E.PRERELEASE]})?${g[E.BUILD]}?)?)?`);I("XRANGEPLAINLOOSE",`[v=\\s]*(${g[E.XRANGEIDENTIFIERLOOSE]})(?:\\.(${g[E.XRANGEIDENTIFIERLOOSE]})(?:\\.(${g[E.XRANGEIDENTIFIERLOOSE]})(?:${g[E.PRERELEASELOOSE]})?${g[E.BUILD]}?)?)?`);I("XRANGE",`^${g[E.GTLT]}\\s*${g[E.XRANGEPLAIN]}$`);I("XRANGELOOSE",`^${g[E.GTLT]}\\s*${g[E.XRANGEPLAINLOOSE]}$`);I("COERCEPLAIN",`(^|[^\\d])(\\d{1,${ke}})(?:\\.(\\d{1,${ke}}))?(?:\\.(\\d{1,${ke}}))?`);I("COERCE",`${g[E.COERCEPLAIN]}(?:$|[^\\d])`);I("COERCEFULL",g[E.COERCEPLAIN]+`(?:${g[E.PRERELEASE]})?(?:${g[E.BUILD]})?(?:$|[^\\d])`);I("COERCERTL",g[E.COERCE],!0);I("COERCERTLFULL",g[E.COERCEFULL],!0);I("LONETILDE","(?:~>?)");I("TILDETRIM",`(\\s*)${g[E.LONETILDE]}\\s+`,!0);G.tildeTrimReplace="$1~";I("TILDE",`^${g[E.LONETILDE]}${g[E.XRANGEPLAIN]}$`);I("TILDELOOSE",`^${g[E.LONETILDE]}${g[E.XRANGEPLAINLOOSE]}$`);I("LONECARET","(?:\\^)");I("CARETTRIM",`(\\s*)${g[E.LONECARET]}\\s+`,!0);G.caretTrimReplace="$1^";I("CARET",`^${g[E.LONECARET]}${g[E.XRANGEPLAIN]}$`);I("CARETLOOSE",`^${g[E.LONECARET]}${g[E.XRANGEPLAINLOOSE]}$`);I("COMPARATORLOOSE",`^${g[E.GTLT]}\\s*(${g[E.LOOSEPLAIN]})$|^$`);I("COMPARATOR",`^${g[E.GTLT]}\\s*(${g[E.FULLPLAIN]})$|^$`);I("COMPARATORTRIM",`(\\s*)${g[E.GTLT]}\\s*(${g[E.LOOSEPLAIN]}|${g[E.XRANGEPLAIN]})`,!0);G.comparatorTrimReplace="$1$2$3";I("HYPHENRANGE",`^\\s*(${g[E.XRANGEPLAIN]})\\s+-\\s+(${g[E.XRANGEPLAIN]})\\s*$`);I("HYPHENRANGELOOSE",`^\\s*(${g[E.XRANGEPLAINLOOSE]})\\s+-\\s+(${g[E.XRANGEPLAINLOOSE]})\\s*$`);I("STAR","(<|>)?=?\\s*\\*");I("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$");I("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")});var ve=$((Ga,Rt)=>{"use strict";var hi=Object.freeze({loose:!0}),gi=Object.freeze({}),Ei=e=>e?typeof e!="object"?hi:e:gi;Rt.exports=Ei});var He=$((Xa,Ct)=>{"use strict";var Tt=/^[0-9]+$/,jt=(e,t)=>{if(typeof e=="number"&&typeof t=="number")return e===t?0:e<t?-1:1;let r=Tt.test(e),n=Tt.test(t);return r&&n&&(e=+e,t=+t),e===t?0:r&&!n?-1:n&&!r?1:e<t?-1:1},yi=(e,t)=>jt(t,e);Ct.exports={compareIdentifiers:jt,rcompareIdentifiers:yi}});var L=$((Ba,At)=>{"use strict";var $e=fe(),{MAX_LENGTH:xt,MAX_SAFE_INTEGER:Ie}=ne(),{safeRe:Oe,t:Se}=ie(),wi=ve(),{compareIdentifiers:Ue}=He(),bi=(e,t)=>{let r=t.split(".");if(r.length>e.length)return!1;for(let n=0;n<r.length;n++)if(Ue(e[n],r[n])!==0)return!1;return!0},Ve=class e{constructor(t,r){if(r=wi(r),t instanceof e){if(t.loose===!!r.loose&&t.includePrerelease===!!r.includePrerelease)return t;t=t.version}else if(typeof t!="string")throw new TypeError(`Invalid version. Must be a string. Got type "${typeof t}".`);if(t.length>xt)throw new TypeError(`version is longer than ${xt} characters`);$e("SemVer",t,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;let n=t.trim().match(r.loose?Oe[Se.LOOSE]:Oe[Se.FULL]);if(!n)throw new TypeError(`Invalid Version: ${t}`);if(this.raw=t,this.major=+n[1],this.minor=+n[2],this.patch=+n[3],this.major>Ie||this.major<0)throw new TypeError("Invalid major version");if(this.minor>Ie||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>Ie||this.patch<0)throw new TypeError("Invalid patch version");n[4]?this.prerelease=n[4].split(".").map(i=>{if(/^[0-9]+$/.test(i)){let o=+i;if(o>=0&&o<Ie)return o}return i}):this.prerelease=[],this.build=n[5]?n[5].split("."):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(".")}`),this.version}toString(){return this.version}compare(t){if($e("SemVer.compare",this.version,this.options,t),!(t instanceof e)){if(typeof t=="string"&&t===this.version)return 0;t=new e(t,this.options)}return t.version===this.version?0:this.compareMain(t)||this.comparePre(t)}compareMain(t){return t instanceof e||(t=new e(t,this.options)),this.major<t.major?-1:this.major>t.major?1:this.minor<t.minor?-1:this.minor>t.minor?1:this.patch<t.patch?-1:this.patch>t.patch?1:0}comparePre(t){if(t instanceof e||(t=new e(t,this.options)),this.prerelease.length&&!t.prerelease.length)return-1;if(!this.prerelease.length&&t.prerelease.length)return 1;if(!this.prerelease.length&&!t.prerelease.length)return 0;let r=0;do{let n=this.prerelease[r],i=t.prerelease[r];if($e("prerelease compare",r,n,i),n===void 0&&i===void 0)return 0;if(i===void 0)return 1;if(n===void 0)return-1;if(n===i)continue;return Ue(n,i)}while(++r)}compareBuild(t){t instanceof e||(t=new e(t,this.options));let r=0;do{let n=this.build[r],i=t.build[r];if($e("build compare",r,n,i),n===void 0&&i===void 0)return 0;if(i===void 0)return 1;if(n===void 0)return-1;if(n===i)continue;return Ue(n,i)}while(++r)}inc(t,r,n){if(t.startsWith("pre")){if(!r&&n===!1)throw new Error("invalid increment argument: identifier is empty");if(r){let i=`-${r}`.match(this.options.loose?Oe[Se.PRERELEASELOOSE]:Oe[Se.PRERELEASE]);if(!i||i[1]!==r)throw new Error(`invalid identifier: ${r}`)}}switch(t){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",r,n);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",r,n);break;case"prepatch":this.prerelease.length=0,this.inc("patch",r,n),this.inc("pre",r,n);break;case"prerelease":this.prerelease.length===0&&this.inc("patch",r,n),this.inc("pre",r,n);break;case"release":if(this.prerelease.length===0)throw new Error(`version ${this.raw} is not a prerelease`);this.prerelease.length=0;break;case"major":(this.minor!==0||this.patch!==0||this.prerelease.length===0)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":(this.patch!==0||this.prerelease.length===0)&&this.minor++,this.patch=0,this.prerelease=[];break;case"patch":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case"pre":{let i=Number(n)?1:0;if(this.prerelease.length===0)this.prerelease=[i];else{let o=this.prerelease.length;for(;--o>=0;)typeof this.prerelease[o]=="number"&&(this.prerelease[o]++,o=-2);if(o===-1){if(r===this.prerelease.join(".")&&n===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(i)}}if(r){let o=[r,i];if(n===!1&&(o=[r]),bi(this.prerelease,r)){let s=this.prerelease[r.split(".").length];isNaN(s)&&(this.prerelease=o)}else this.prerelease=o}break}default:throw new Error(`invalid increment argument: ${t}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}};At.exports=Ve});var Y=$((Ja,Lt)=>{"use strict";var Nt=L(),vi=(e,t,r=!1)=>{if(e instanceof Nt)return e;try{return new Nt(e,t)}catch(n){if(!r)return null;throw n}};Lt.exports=vi});var zt=$((Ka,qt)=>{"use strict";var $i=Y(),Ii=(e,t)=>{let r=$i(e,t);return r?r.version:null};qt.exports=Ii});var Dt=$((Wa,Ft)=>{"use strict";var Oi=Y(),Si=(e,t)=>{let r=Oi(e.trim().replace(/^[=v]+/,""),t);return r?r.version:null};Ft.exports=Si});var Mt=$((Ya,kt)=>{"use strict";var _t=L(),Pi=(e,t,r,n,i)=>{typeof r=="string"&&(i=n,n=r,r=void 0);try{return new _t(e instanceof _t?e.version:e,r).inc(t,n,i).version}catch{return null}};kt.exports=Pi});var Vt=$((Qa,Ut)=>{"use strict";var Ht=Y(),Ri=(e,t)=>{let r=Ht(e,null,!0),n=Ht(t,null,!0),i=r.compare(n);if(i===0)return null;let o=i>0,s=o?r:n,a=o?n:r,c=!!s.prerelease.length;if(!!a.prerelease.length&&!c){if(!a.patch&&!a.minor)return"major";if(a.compareMain(s)===0)return a.minor&&!a.patch?"minor":"patch"}let p=c?"pre":"";return r.major!==n.major?p+"major":r.minor!==n.minor?p+"minor":r.patch!==n.patch?p+"patch":"prerelease"};Ut.exports=Ri});var Xt=$((Za,Gt)=>{"use strict";var Ti=L(),ji=(e,t)=>new Ti(e,t).major;Gt.exports=ji});var Jt=$((ec,Bt)=>{"use strict";var Ci=L(),xi=(e,t)=>new Ci(e,t).minor;Bt.exports=xi});var Wt=$((tc,Kt)=>{"use strict";var Ai=L(),Ni=(e,t)=>new Ai(e,t).patch;Kt.exports=Ni});var Qt=$((rc,Yt)=>{"use strict";var Li=Y(),qi=(e,t)=>{let r=Li(e,t);return r&&r.prerelease.length?r.prerelease:null};Yt.exports=qi});var M=$((nc,er)=>{"use strict";var Zt=L(),zi=(e,t,r)=>new Zt(e,r).compare(new Zt(t,r));er.exports=zi});var rr=$((ic,tr)=>{"use strict";var Fi=M(),Di=(e,t,r)=>Fi(t,e,r);tr.exports=Di});var ir=$((oc,nr)=>{"use strict";var _i=M(),ki=(e,t)=>_i(e,t,!0);nr.exports=ki});var Pe=$((sc,sr)=>{"use strict";var or=L(),Mi=(e,t,r)=>{let n=new or(e,r),i=new or(t,r);return n.compare(i)||n.compareBuild(i)};sr.exports=Mi});var cr=$((ac,ar)=>{"use strict";var Hi=Pe(),Ui=(e,t)=>e.sort((r,n)=>Hi(r,n,t));ar.exports=Ui});var dr=$((cc,lr)=>{"use strict";var Vi=Pe(),Gi=(e,t)=>e.sort((r,n)=>Vi(n,r,t));lr.exports=Gi});var pe=$((lc,ur)=>{"use strict";var Xi=M(),Bi=(e,t,r)=>Xi(e,t,r)>0;ur.exports=Bi});var Re=$((dc,fr)=>{"use strict";var Ji=M(),Ki=(e,t,r)=>Ji(e,t,r)<0;fr.exports=Ki});var Ge=$((uc,pr)=>{"use strict";var Wi=M(),Yi=(e,t,r)=>Wi(e,t,r)===0;pr.exports=Yi});var Xe=$((fc,mr)=>{"use strict";var Qi=M(),Zi=(e,t,r)=>Qi(e,t,r)!==0;mr.exports=Zi});var Te=$((pc,hr)=>{"use strict";var eo=M(),to=(e,t,r)=>eo(e,t,r)>=0;hr.exports=to});var je=$((mc,gr)=>{"use strict";var ro=M(),no=(e,t,r)=>ro(e,t,r)<=0;gr.exports=no});var Be=$((hc,Er)=>{"use strict";var io=Ge(),oo=Xe(),so=pe(),ao=Te(),co=Re(),lo=je(),uo=(e,t,r,n)=>{switch(t){case"===":return typeof e=="object"&&(e=e.version),typeof r=="object"&&(r=r.version),e===r;case"!==":return typeof e=="object"&&(e=e.version),typeof r=="object"&&(r=r.version),e!==r;case"":case"=":case"==":return io(e,r,n);case"!=":return oo(e,r,n);case">":return so(e,r,n);case">=":return ao(e,r,n);case"<":return co(e,r,n);case"<=":return lo(e,r,n);default:throw new TypeError(`Invalid operator: ${t}`)}};Er.exports=uo});var wr=$((gc,yr)=>{"use strict";var fo=L(),po=Y(),{safeRe:Ce,t:xe}=ie(),mo=(e,t)=>{if(e instanceof fo)return e;if(typeof e=="number"&&(e=String(e)),typeof e!="string")return null;t=t||{};let r=null;if(!t.rtl)r=e.match(t.includePrerelease?Ce[xe.COERCEFULL]:Ce[xe.COERCE]);else{let c=t.includePrerelease?Ce[xe.COERCERTLFULL]:Ce[xe.COERCERTL],u;for(;(u=c.exec(e))&&(!r||r.index+r[0].length!==e.length);)(!r||u.index+u[0].length!==r.index+r[0].length)&&(r=u),c.lastIndex=u.index+u[1].length+u[2].length;c.lastIndex=-1}if(r===null)return null;let n=r[2],i=r[3]||"0",o=r[4]||"0",s=t.includePrerelease&&r[5]?`-${r[5]}`:"",a=t.includePrerelease&&r[6]?`+${r[6]}`:"";return po(`${n}.${i}.${o}${s}${a}`,t)};yr.exports=mo});var vr=$((Ec,br)=>{"use strict";var ho=Y(),go=ne(),Eo=L(),yo=(e,t,r)=>{if(!go.RELEASE_TYPES.includes(t))return null;let n=wo(e,r);return n&&bo(n,t)},wo=(e,t)=>{let r=e instanceof Eo?e.version:e;return ho(r,t)},bo=(e,t)=>{if(vo(t))return e.version;switch(e.prerelease=[],t){case"major":e.minor=0,e.patch=0;break;case"minor":e.patch=0;break}return e.format()},vo=e=>e.startsWith("pre");br.exports=yo});var Ir=$((yc,$r)=>{"use strict";var Je=class{constructor(){this.max=1e3,this.map=new Map}get(t){let r=this.map.get(t);if(r!==void 0)return this.map.delete(t),this.map.set(t,r),r}delete(t){return this.map.delete(t)}set(t,r){if(!this.delete(t)&&r!==void 0){if(this.map.size>=this.max){let i=this.map.keys().next().value;this.delete(i)}this.map.set(t,r)}return this}};$r.exports=Je});var H=$((wc,Rr)=>{"use strict";var $o=/\s+/g,Ke=class e{constructor(t,r){if(r=Oo(r),t instanceof e)return t.loose===!!r.loose&&t.includePrerelease===!!r.includePrerelease?t:new e(t.raw,r);if(t instanceof We)return this.raw=t.value,this.set=[[t]],this.formatted=void 0,this;if(this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease,this.raw=t.trim().replace($o," "),this.set=this.raw.split("||").map(n=>this.parseRange(n.trim())).filter(n=>n.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let n=this.set[0];if(this.set=this.set.filter(i=>!Sr(i[0])),this.set.length===0)this.set=[n];else if(this.set.length>1){for(let i of this.set)if(i.length===1&&No(i[0])){this.set=[i];break}}}this.formatted=void 0}get range(){if(this.formatted===void 0){this.formatted="";for(let t=0;t<this.set.length;t++){t>0&&(this.formatted+="||");let r=this.set[t];for(let n=0;n<r.length;n++)n>0&&(this.formatted+=" "),this.formatted+=r[n].toString().trim()}}return this.formatted}format(){return this.range}toString(){return this.range}parseRange(t){t=t.replace(Ao,"");let n=((this.options.includePrerelease&&Co)|(this.options.loose&&xo))+":"+t,i=Or.get(n);if(i)return i;let o=this.options.loose,s=o?D[q.HYPHENRANGELOOSE]:D[q.HYPHENRANGE];t=t.replace(s,Vo(this.options.includePrerelease)),T("hyphen replace",t),t=t.replace(D[q.COMPARATORTRIM],Ro),T("comparator trim",t),t=t.replace(D[q.TILDETRIM],To),T("tilde trim",t),t=t.replace(D[q.CARETTRIM],jo),T("caret trim",t);let a=t.split(" ").map(y=>Lo(y,this.options)).join(" ").split(/\s+/).map(y=>Uo(y,this.options));o&&(a=a.filter(y=>(T("loose invalid filter",y,this.options),!!y.match(D[q.COMPARATORLOOSE])))),T("range list",a);let c=new Map,u=a.map(y=>new We(y,this.options));for(let y of u){if(Sr(y))return[y];c.set(y.value,y)}c.size>1&&c.has("")&&c.delete("");let p=[...c.values()];return Or.set(n,p),p}intersects(t,r){if(!(t instanceof e))throw new TypeError("a Range is required");return this.set.some(n=>Pr(n,r)&&t.set.some(i=>Pr(i,r)&&n.every(o=>i.every(s=>o.intersects(s,r)))))}test(t){if(!t)return!1;if(typeof t=="string")try{t=new So(t,this.options)}catch{return!1}for(let r=0;r<this.set.length;r++)if(Go(this.set[r],t,this.options))return!0;return!1}};Rr.exports=Ke;var Io=Ir(),Or=new Io,Oo=ve(),We=me(),T=fe(),So=L(),{safeRe:D,src:Po,t:q,comparatorTrimReplace:Ro,tildeTrimReplace:To,caretTrimReplace:jo}=ie(),{FLAG_INCLUDE_PRERELEASE:Co,FLAG_LOOSE:xo}=ne(),Ao=new RegExp(Po[q.BUILD],"g"),Sr=e=>e.value==="<0.0.0-0",No=e=>e.value==="",Pr=(e,t)=>{let r=!0,n=e.slice(),i=n.pop();for(;r&&n.length;)r=n.every(o=>i.intersects(o,t)),i=n.pop();return r},Lo=(e,t)=>(e=e.replace(D[q.BUILD],""),T("comp",e,t),e=Do(e,t),T("caret",e),e=zo(e,t),T("tildes",e),e=ko(e,t),T("xrange",e),e=Ho(e,t),T("stars",e),e),A=e=>!e||e.toLowerCase()==="x"||e==="*",qo=(e,t,r)=>A(e)&&!A(t)||A(t)&&r&&!A(r),zo=(e,t)=>e.trim().split(/\s+/).map(r=>Fo(r,t)).join(" "),Fo=(e,t)=>{let r=t.loose?D[q.TILDELOOSE]:D[q.TILDE],n=t.includePrerelease?"-0":"";return e.replace(r,(i,o,s,a,c)=>{T("tilde",e,i,o,s,a,c);let u;return A(o)?u="":A(s)?u=`>=${o}.0.0${n} <${+o+1}.0.0-0`:A(a)?u=`>=${o}.${s}.0${n} <${o}.${+s+1}.0-0`:c?(T("replaceTilde pr",c),u=`>=${o}.${s}.${a}-${c} <${o}.${+s+1}.0-0`):u=`>=${o}.${s}.${a} <${o}.${+s+1}.0-0`,T("tilde return",u),u})},Do=(e,t)=>e.trim().split(/\s+/).map(r=>_o(r,t)).join(" "),_o=(e,t)=>{T("caret",e,t);let r=t.loose?D[q.CARETLOOSE]:D[q.CARET],n=t.includePrerelease?"-0":"";return e.replace(r,(i,o,s,a,c)=>{T("caret",e,i,o,s,a,c);let u;return A(o)?u="":A(s)?u=`>=${o}.0.0${n} <${+o+1}.0.0-0`:A(a)?o==="0"?u=`>=${o}.${s}.0${n} <${o}.${+s+1}.0-0`:u=`>=${o}.${s}.0${n} <${+o+1}.0.0-0`:c?(T("replaceCaret pr",c),o==="0"?s==="0"?u=`>=${o}.${s}.${a}-${c} <${o}.${s}.${+a+1}-0`:u=`>=${o}.${s}.${a}-${c} <${o}.${+s+1}.0-0`:u=`>=${o}.${s}.${a}-${c} <${+o+1}.0.0-0`):(T("no pr"),o==="0"?s==="0"?u=`>=${o}.${s}.${a} <${o}.${s}.${+a+1}-0`:u=`>=${o}.${s}.${a} <${o}.${+s+1}.0-0`:u=`>=${o}.${s}.${a} <${+o+1}.0.0-0`),T("caret return",u),u})},ko=(e,t)=>(T("replaceXRanges",e,t),e.split(/\s+/).map(r=>Mo(r,t)).join(" ")),Mo=(e,t)=>{e=e.trim();let r=t.loose?D[q.XRANGELOOSE]:D[q.XRANGE];return e.replace(r,(n,i,o,s,a,c)=>{if(T("xRange",e,n,i,o,s,a,c),qo(o,s,a))return e;let u=A(o),p=u||A(s),y=p||A(a),m=y;return i==="="&&m&&(i=""),c=t.includePrerelease?"-0":"",u?i===">"||i==="<"?n="<0.0.0-0":n="*":i&&m?(p&&(s=0),a=0,i===">"?(i=">=",p?(o=+o+1,s=0,a=0):(s=+s+1,a=0)):i==="<="&&(i="<",p?o=+o+1:s=+s+1),i==="<"&&(c="-0"),n=`${i+o}.${s}.${a}${c}`):p?n=`>=${o}.0.0${c} <${+o+1}.0.0-0`:y&&(n=`>=${o}.${s}.0${c} <${o}.${+s+1}.0-0`),T("xRange return",n),n})},Ho=(e,t)=>(T("replaceStars",e,t),e.trim().replace(D[q.STAR],"")),Uo=(e,t)=>(T("replaceGTE0",e,t),e.trim().replace(D[t.includePrerelease?q.GTE0PRE:q.GTE0],"")),Vo=e=>(t,r,n,i,o,s,a,c,u,p,y,m)=>(A(n)?r="":A(i)?r=`>=${n}.0.0${e?"-0":""}`:A(o)?r=`>=${n}.${i}.0${e?"-0":""}`:s?r=`>=${r}`:r=`>=${r}${e?"-0":""}`,A(u)?c="":A(p)?c=`<${+u+1}.0.0-0`:A(y)?c=`<${u}.${+p+1}.0-0`:m?c=`<=${u}.${p}.${y}-${m}`:e?c=`<${u}.${p}.${+y+1}-0`:c=`<=${c}`,`${r} ${c}`.trim()),Go=(e,t,r)=>{for(let n=0;n<e.length;n++)if(!e[n].test(t))return!1;if(t.prerelease.length&&!r.includePrerelease){for(let n=0;n<e.length;n++)if(T(e[n].semver),e[n].semver!==We.ANY&&e[n].semver.prerelease.length>0){let i=e[n].semver;if(i.major===t.major&&i.minor===t.minor&&i.patch===t.patch)return!0}return!1}return!0}});var me=$((bc,Nr)=>{"use strict";var he=Symbol("SemVer ANY"),Ze=class e{static get ANY(){return he}constructor(t,r){if(r=Tr(r),t instanceof e){if(t.loose===!!r.loose)return t;t=t.value}t=t.trim().split(/\s+/).join(" "),Qe("comparator",t,r),this.options=r,this.loose=!!r.loose,this.parse(t),this.semver===he?this.value="":this.value=this.operator+this.semver.version,Qe("comp",this)}parse(t){let r=this.options.loose?jr[Cr.COMPARATORLOOSE]:jr[Cr.COMPARATOR],n=t.match(r);if(!n)throw new TypeError(`Invalid comparator: ${t}`);this.operator=n[1]!==void 0?n[1]:"",this.operator==="="&&(this.operator=""),n[2]?this.semver=new xr(n[2],this.options.loose):this.semver=he}toString(){return this.value}test(t){if(Qe("Comparator.test",t,this.options.loose),this.semver===he||t===he)return!0;if(typeof t=="string")try{t=new xr(t,this.options)}catch{return!1}return Ye(t,this.operator,this.semver,this.options)}intersects(t,r){if(!(t instanceof e))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new Ar(t.value,r).test(this.value):t.operator===""?t.value===""?!0:new Ar(this.value,r).test(t.semver):(r=Tr(r),r.includePrerelease&&(this.value==="<0.0.0-0"||t.value==="<0.0.0-0")||!r.includePrerelease&&(this.value.startsWith("<0.0.0")||t.value.startsWith("<0.0.0"))?!1:!!(this.operator.startsWith(">")&&t.operator.startsWith(">")||this.operator.startsWith("<")&&t.operator.startsWith("<")||this.semver.version===t.semver.version&&this.operator.includes("=")&&t.operator.includes("=")||Ye(this.semver,"<",t.semver,r)&&this.operator.startsWith(">")&&t.operator.startsWith("<")||Ye(this.semver,">",t.semver,r)&&this.operator.startsWith("<")&&t.operator.startsWith(">")))}};Nr.exports=Ze;var Tr=ve(),{safeRe:jr,t:Cr}=ie(),Ye=Be(),Qe=fe(),xr=L(),Ar=H()});var ge=$((vc,Lr)=>{"use strict";var Xo=H(),Bo=(e,t,r)=>{try{t=new Xo(t,r)}catch{return!1}return t.test(e)};Lr.exports=Bo});var zr=$(($c,qr)=>{"use strict";var Jo=H(),Ko=(e,t)=>new Jo(e,t).set.map(r=>r.map(n=>n.value).join(" ").trim().split(" "));qr.exports=Ko});var Dr=$((Ic,Fr)=>{"use strict";var Wo=L(),Yo=H(),Qo=(e,t,r)=>{let n=null,i=null,o=null;try{o=new Yo(t,r)}catch{return null}return e.forEach(s=>{o.test(s)&&(!n||i.compare(s)===-1)&&(n=s,i=new Wo(n,r))}),n};Fr.exports=Qo});var kr=$((Oc,_r)=>{"use strict";var Zo=L(),es=H(),ts=(e,t,r)=>{let n=null,i=null,o=null;try{o=new es(t,r)}catch{return null}return e.forEach(s=>{o.test(s)&&(!n||i.compare(s)===1)&&(n=s,i=new Zo(n,r))}),n};_r.exports=ts});var Ur=$((Sc,Hr)=>{"use strict";var et=L(),rs=H(),Mr=pe(),ns=(e,t)=>{e=new rs(e,t);let r=new et("0.0.0");if(e.test(r)||(r=new et("0.0.0-0"),e.test(r)))return r;r=null;for(let n=0;n<e.set.length;++n){let i=e.set[n],o=null;i.forEach(s=>{let a=new et(s.semver.version);switch(s.operator){case">":a.prerelease.length===0?a.patch++:a.prerelease.push(0),a.raw=a.format();case"":case">=":(!o||Mr(a,o))&&(o=a);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${s.operator}`)}}),o&&(!r||Mr(r,o))&&(r=o)}return r&&e.test(r)?r:null};Hr.exports=ns});var Gr=$((Pc,Vr)=>{"use strict";var is=H(),os=(e,t)=>{try{return new is(e,t).range||"*"}catch{return null}};Vr.exports=os});var Ae=$((Rc,Kr)=>{"use strict";var ss=L(),Jr=me(),{ANY:as}=Jr,cs=H(),ls=ge(),Xr=pe(),Br=Re(),ds=je(),us=Te(),fs=(e,t,r,n)=>{e=new ss(e,n),t=new cs(t,n);let i,o,s,a,c;switch(r){case">":i=Xr,o=ds,s=Br,a=">",c=">=";break;case"<":i=Br,o=us,s=Xr,a="<",c="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(ls(e,t,n))return!1;for(let u=0;u<t.set.length;++u){let p=t.set[u],y=null,m=null;if(p.forEach(f=>{f.semver===as&&(f=new Jr(">=0.0.0")),y=y||f,m=m||f,i(f.semver,y.semver,n)?y=f:s(f.semver,m.semver,n)&&(m=f)}),y.operator===a||y.operator===c||(!m.operator||m.operator===a)&&o(e,m.semver))return!1;if(m.operator===c&&s(e,m.semver))return!1}return!0};Kr.exports=fs});var Yr=$((Tc,Wr)=>{"use strict";var ps=Ae(),ms=(e,t,r)=>ps(e,t,">",r);Wr.exports=ms});var Zr=$((jc,Qr)=>{"use strict";var hs=Ae(),gs=(e,t,r)=>hs(e,t,"<",r);Qr.exports=gs});var rn=$((Cc,tn)=>{"use strict";var en=H(),Es=(e,t,r)=>(e=new en(e,r),t=new en(t,r),e.intersects(t,r));tn.exports=Es});var on=$((xc,nn)=>{"use strict";var ys=ge(),ws=M();nn.exports=(e,t,r)=>{let n=[],i=null,o=null,s=e.sort((p,y)=>ws(p,y,r));for(let p of s)ys(p,t,r)?(o=p,i||(i=p)):(o&&n.push([i,o]),o=null,i=null);i&&n.push([i,null]);let a=[];for(let[p,y]of n)p===y?a.push(p):!y&&p===s[0]?a.push("*"):y?p===s[0]?a.push(`<=${y}`):a.push(`${p} - ${y}`):a.push(`>=${p}`);let c=a.join(" || "),u=typeof t.raw=="string"?t.raw:String(t);return c.length<u.length?c:t}});var un=$((Ac,dn)=>{"use strict";var sn=H(),nt=me(),{ANY:tt}=nt,rt=ge(),it=M(),bs=(e,t,r={})=>{if(e===t)return!0;e=new sn(e,r),t=new sn(t,r);let n=!1;e:for(let i of e.set){for(let o of t.set){let s=$s(i,o,r);if(n=n||s!==null,s)continue e}if(n)return!1}return!0},vs=[new nt(">=0.0.0-0")],an=[new nt(">=0.0.0")],$s=(e,t,r)=>{if(e===t)return!0;if(e.length===1&&e[0].semver===tt){if(t.length===1&&t[0].semver===tt)return!0;r.includePrerelease?e=vs:e=an}if(t.length===1&&t[0].semver===tt){if(r.includePrerelease)return!0;t=an}let n=new Set,i,o;for(let f of e)f.operator===">"||f.operator===">="?i=cn(i,f,r):f.operator==="<"||f.operator==="<="?o=ln(o,f,r):n.add(f.semver);if(n.size>1)return null;let s;if(i&&o){if(s=it(i.semver,o.semver,r),s>0)return null;if(s===0&&(i.operator!==">="||o.operator!=="<="))return null}for(let f of n){if(i&&!rt(f,String(i),r)||o&&!rt(f,String(o),r))return null;for(let R of t)if(!rt(f,String(R),r))return!1;return!0}let a,c,u,p,y=o&&!r.includePrerelease&&o.semver.prerelease.length?o.semver:!1,m=i&&!r.includePrerelease&&i.semver.prerelease.length?i.semver:!1;y&&y.prerelease.length===1&&o.operator==="<"&&y.prerelease[0]===0&&(y=!1);for(let f of t){if(p=p||f.operator===">"||f.operator===">=",u=u||f.operator==="<"||f.operator==="<=",i){if(m&&f.semver.prerelease&&f.semver.prerelease.length&&f.semver.major===m.major&&f.semver.minor===m.minor&&f.semver.patch===m.patch&&(m=!1),f.operator===">"||f.operator===">="){if(a=cn(i,f,r),a===f&&a!==i)return!1}else if(i.operator===">="&&!f.test(i.semver))return!1}if(o){if(y&&f.semver.prerelease&&f.semver.prerelease.length&&f.semver.major===y.major&&f.semver.minor===y.minor&&f.semver.patch===y.patch&&(y=!1),f.operator==="<"||f.operator==="<="){if(c=ln(o,f,r),c===f&&c!==o)return!1}else if(o.operator==="<="&&!f.test(o.semver))return!1}if(!f.operator&&(o||i)&&s!==0)return!1}return!(i&&u&&!o&&s!==0||o&&p&&!i&&s!==0||m||y)},cn=(e,t,r)=>{if(!e)return t;let n=it(e.semver,t.semver,r);return n>0?e:n<0||t.operator===">"&&e.operator===">="?t:e},ln=(e,t,r)=>{if(!e)return t;let n=it(e.semver,t.semver,r);return n<0?e:n>0||t.operator==="<"&&e.operator==="<="?t:e};dn.exports=bs});var st=$((Nc,mn)=>{"use strict";var ot=ie(),fn=ne(),Is=L(),pn=He(),Os=Y(),Ss=zt(),Ps=Dt(),Rs=Mt(),Ts=Vt(),js=Xt(),Cs=Jt(),xs=Wt(),As=Qt(),Ns=M(),Ls=rr(),qs=ir(),zs=Pe(),Fs=cr(),Ds=dr(),_s=pe(),ks=Re(),Ms=Ge(),Hs=Xe(),Us=Te(),Vs=je(),Gs=Be(),Xs=wr(),Bs=vr(),Js=me(),Ks=H(),Ws=ge(),Ys=zr(),Qs=Dr(),Zs=kr(),ea=Ur(),ta=Gr(),ra=Ae(),na=Yr(),ia=Zr(),oa=rn(),sa=on(),aa=un();mn.exports={parse:Os,valid:Ss,clean:Ps,inc:Rs,diff:Ts,major:js,minor:Cs,patch:xs,prerelease:As,compare:Ns,rcompare:Ls,compareLoose:qs,compareBuild:zs,sort:Fs,rsort:Ds,gt:_s,lt:ks,eq:Ms,neq:Hs,gte:Us,lte:Vs,cmp:Gs,coerce:Xs,truncate:Bs,Comparator:Js,Range:Ks,satisfies:Ws,toComparators:Ys,maxSatisfying:Qs,minSatisfying:Zs,minVersion:ea,validRange:ta,outside:ra,gtr:na,ltr:ia,intersects:oa,simplifyRange:sa,subset:aa,SemVer:Is,re:ot.re,src:ot.src,tokens:ot.t,SEMVER_SPEC_VERSION:fn.SEMVER_SPEC_VERSION,RELEASE_TYPES:fn.RELEASE_TYPES,compareIdentifiers:pn.compareIdentifiers,rcompareIdentifiers:pn.rcompareIdentifiers}});var bn=It(st(),1),ca=Object.freeze(["editor","game-development","game-test","game-production"]);function En(e,t="Plugin config"){let r=new Set,n=(i,o)=>{if(i===null||typeof i=="string"||typeof i=="boolean")return i;if(typeof i=="number"){if(!Number.isFinite(i))throw new Error(`${o} must contain finite numbers.`);return i}if(typeof i!="object")throw new Error(`${o} must contain static JSON data only.`);if(r.has(i))throw new Error(`${o} must not contain circular references.`);r.add(i);try{if(Array.isArray(i)){if(Object.getPrototypeOf(i)!==Array.prototype)throw new Error(`${o} must contain plain arrays only.`);let c=[];for(let u=0;u<i.length;u+=1){let p=Object.getOwnPropertyDescriptor(i,String(u));if(!p?.enumerable||!("value"in p))throw new Error(`${o} must be a dense data array.`);c.push(n(p.value,`${o}[${u}]`))}for(let u of Reflect.ownKeys(i))if(u!=="length"&&(typeof u!="string"||!/^(0|[1-9][0-9]*)$/.test(u)||Number(u)>=i.length))throw new Error(`${o} contains unsupported property: ${String(u)}`);return Object.freeze(c)}let s=Object.getPrototypeOf(i);if(s!==Object.prototype&&s!==null)throw new Error(`${o} must contain plain objects only.`);let a=Object.create(null);for(let c of Reflect.ownKeys(i)){if(typeof c!="string"||c==="__proto__")throw new Error(`${o} contains unsupported property: ${String(c)}`);let u=Object.getOwnPropertyDescriptor(i,c);if(!u?.enumerable||!("value"in u))throw new Error(`${o}.${c} must be an enumerable data field.`);a[c]=n(u.value,`${o}.${c}`)}return Object.freeze(a)}finally{r.delete(i)}};return n(e,t)}var la=/^[a-z0-9]+(?:[._-][a-z0-9]+)+$/,da=/^[a-z0-9]+(?:[._-][A-Za-z0-9]+)+$/;function oe(e,t){if(!la.test(e))throw new Error(`${t} must be a namespaced lowercase id, got: ${e}`);return e}function ua(e,t){if(!da.test(e))throw new Error(`${t} must be a namespaced event id, got: ${e}`);return e}function K(e,t,r){if(!e||typeof e!="object"||Array.isArray(e))throw new Error(`${r} must be an object.`);let n=Object.getPrototypeOf(e);if(n!==Object.prototype&&n!==null)throw new Error(`${r} must be a plain object.`);let i=new Set(t),o=Object.create(null);for(let s of Reflect.ownKeys(e)){if(typeof s!="string"||!i.has(s))throw new Error(`${r} contains unknown field: ${String(s)}`);if(s==="__proto__")throw new Error(`${r} contains reserved field: ${s}`);let a=Object.getOwnPropertyDescriptor(e,s);if(!a?.enumerable||!("value"in a))throw new Error(`${r} must contain enumerable data fields only: ${s}`);o[s]=a.value}return o}function Ne(e,t){if(!Array.isArray(e))throw new Error(`${t} must be an array.`);let r=[];for(let n=0;n<e.length;n+=1){let i=Object.getOwnPropertyDescriptor(e,String(n));if(!i?.enumerable||!("value"in i))throw new Error(`${t} must be a dense data array.`);r.push(i.value)}for(let n of Reflect.ownKeys(e))if(n!=="length"&&(typeof n!="string"||!/^(0|[1-9][0-9]*)$/.test(n)||Number(n)>=e.length))throw new Error(`${t} contains unsupported property: ${String(n)}`);return r}function at(e,t,r){if(!Object.prototype.hasOwnProperty.call(e,t))return;let n=Ne(e[t],r).map(i=>{if(typeof i!="string")throw new Error(`${r} entries must be strings.`);return oe(i,`${r} entry`)});return Object.freeze([...new Set(n)])}function yn(e){let t=K(e,["id","version","apiVersion","requires","provides","entries","environmentContracts","deploymentConstraints","testedAgainst"],"Plugin manifest"),r=K(t.entries,["runtime","editor","renderer","tooling","agent"],"Plugin entries");if(typeof t.id!="string")throw new Error("Plugin id must be a string.");let n=oe(t.id,"Plugin id");if(typeof t.version!="string"||!vn(t.version))throw new Error(`Plugin version must be semver, got: ${String(t.version)}`);if(!Number.isInteger(t.apiVersion)||t.apiVersion<1)throw new Error("Plugin apiVersion must be a positive integer.");let i=hn(t.requires,"Plugin requirements","Required services"),o=gn(t.provides,"Plugin provides","Provided features","Provided services"),s=new Set(["runtime","editor","renderer","tooling","agent"]),a=Object.entries(r);if(a.length===0)throw new Error(`Plugin manifest must declare at least one environment entry: ${n}`);for(let[f,R]of a){if(!s.has(f))throw new Error(`Unknown plugin environment entry: ${f}`);if(typeof R!="string"||!R.trim())throw new Error(`Plugin environment entry path is required: ${n} (${f})`)}let c=t.environmentContracts===void 0?void 0:K(t.environmentContracts,["runtime","editor","renderer","tooling","agent"],"Plugin environment contracts"),u=c?Object.freeze(Object.fromEntries(Object.entries(c).map(([f,R])=>{if(!Object.prototype.hasOwnProperty.call(r,f))throw new Error(`Plugin environment contract requires a matching entry: ${n} (${f})`);let v=K(R,["requires","provides","scopes"],`Plugin environment contract ${f}`),j=v.scopes===void 0?void 0:Object.freeze(Ne(v.scopes,`Plugin environment contract ${f}.scopes`).map(_=>{if(typeof _!="string"||!pa(_))throw new Error(`Unknown Plugin scope: ${String(_)}`);return _}));return[f,Object.freeze({requires:hn(v.requires,`Plugin environment contract ${f}.requires`),provides:gn(v.provides,`Plugin environment contract ${f}.provides`),...j?{scopes:Object.freeze([...new Set(j)])}:{}})]}))):void 0,p=t.deploymentConstraints===void 0?void 0:ga(t.deploymentConstraints),y=t.testedAgainst===void 0?void 0:fa(t.testedAgainst),m=Object.freeze({id:n,version:t.version,apiVersion:t.apiVersion,requires:i,provides:o,entries:Object.freeze(Object.fromEntries(a.map(([f,R])=>[f,R.trim()]))),...u?{environmentContracts:u}:{},...p?{deploymentConstraints:p}:{},...y?{testedAgainst:y}:{}});for(let[f]of a)Ee(m,f),ye(m,f);return m}function fa(e){if(!e||typeof e!="object"||Array.isArray(e))throw new Error("Plugin testedAgainst must be an object.");let t=Object.getPrototypeOf(e);if(t!==Object.prototype&&t!==null)throw new Error("Plugin testedAgainst must be a plain object.");let r=Object.create(null);for(let n of Reflect.ownKeys(e)){if(typeof n!="string"||!/^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/.test(n))throw new Error(`Plugin testedAgainst package name is invalid: ${String(n)}`);let i=Object.getOwnPropertyDescriptor(e,n);if(!i?.enumerable||!("value"in i))throw new Error(`Plugin testedAgainst must contain enumerable data fields only: ${n}`);if(typeof i.value!="string"||!vn(i.value))throw new Error(`Plugin testedAgainst version must be exact semver: ${n}@${String(i.value)}`);r[n]=i.value}if(Object.keys(r).length===0)throw new Error("Plugin testedAgainst must not be empty when declared.");return Object.freeze(r)}function Ee(e,t){let r=e.environmentContracts?.[t]?.requires;return Object.freeze({...ma(e.requires.plugins,r?.plugins),...ct("services",e.requires.services,r?.services)})}function ye(e,t){let r=e.environmentContracts?.[t]?.provides;return Object.freeze({...ct("features",e.provides.features,r?.features),...ct("services",e.provides.services,r?.services)})}function lt(e,t){return e.environmentContracts?.[t]?.scopes??Object.freeze(["application"])}function pa(e){return["application","project","scene","document","preview","session"].includes(e)}function hn(e,t,r=`${t}.services`){let n=K(e,["plugins","services"],t),i=Object.prototype.hasOwnProperty.call(n,"plugins")?Ne(n.plugins,`${t}.plugins`).map(s=>{let a=K(s,["id","range"],"Plugin requirement");if(typeof a.id!="string")throw new Error("Required plugin id must be a string.");let c=oe(a.id,"Required plugin id");if(a.range!==void 0&&(typeof a.range!="string"||!ya(a.range)))throw new Error(`Required plugin range must be semver, got: ${c}@${String(a.range)}`);return Object.freeze({id:c,...a.range===void 0?{}:{range:a.range}})}):void 0,o=at(n,"services",r);return Object.freeze({...i?{plugins:Object.freeze(i)}:{},...o?{services:o}:{}})}function gn(e,t,r=`${t}.features`,n=`${t}.services`){let i=K(e,["features","services"],t),o=at(i,"features",r),s=at(i,"services",n);return Object.freeze({...o?{features:o}:{},...s?{services:s}:{}})}function ma(e,t){let r=new Map;for(let n of[...e??[],...t??[]]){let i=r.get(n.id);if(i&&i.range!==n.range)throw new Error(`Conflicting Plugin requirement ranges: ${n.id}`);r.set(n.id,n)}return r.size>0?{plugins:Object.freeze([...r.values()])}:{}}function ct(e,t,r){let n=[...new Set([...t??[],...r??[]])];return n.length>0?{[e]:Object.freeze(n)}:{}}function ha(e){return typeof e=="string"&&ca.includes(e)}function ga(e){let t=K(e,["allowedTargets"],"Plugin deployment constraints");if(!Object.prototype.hasOwnProperty.call(t,"allowedTargets"))throw new Error("Plugin deployment constraints.allowedTargets is required.");return Object.freeze({allowedTargets:Ea(t.allowedTargets,"Plugin deployment constraints.allowedTargets")})}function Ea(e,t){let r=Ne(e,t).map(n=>{if(!ha(n))throw new Error(`Unknown fps build target: ${String(n)}`);return n});if(r.length===0)throw new Error(`${t} must not be empty.`);if(new Set(r).size!==r.length)throw new Error(`${t} must not contain duplicates.`);return Object.freeze(r)}function Le(e){let t=K(e,["pluginId","environment","register","start","stop","dispose"],"Plugin entry");if(typeof t.pluginId!="string")throw new Error("Plugin entry id must be a string.");let r=oe(t.pluginId,"Plugin entry id");if(typeof t.environment!="string"||!["runtime","editor","renderer","tooling","agent"].includes(t.environment))throw new Error(`Unknown plugin entry environment: ${String(t.environment)}`);if(typeof t.register!="function")throw new Error(`Plugin entry register must be a function: ${r}`);for(let n of["start","stop","dispose"])if(t[n]!==void 0&&typeof t[n]!="function")throw new Error(`Plugin entry ${n} must be a function: ${r}`);return Object.freeze({pluginId:r,environment:t.environment,register:t.register,...t.start?{start:t.start}:{},...t.stop?{stop:t.stop}:{},...t.dispose?{dispose:t.dispose}:{}})}function dt(e){return Object.freeze({kind:"service",id:oe(e,"Service id")})}function U(e){return Object.freeze({kind:"event",id:ua(e,"Event id")})}function wn(e){let t=oe(e,"Plugin event owner id");return`fps.plugin.${t.length}.${t}.`}var{valid:vn,validRange:ya}=bn.default;var In=It(st(),1),{satisfies:wa,valid:On,validRange:ba}=In.default;function we(e,t){let r=e.map(i=>i instanceof Error?i.message:String(i)).join("; "),n=new Error(`${t} ${r}`);return Object.assign(n,{errors:[...e]}),n}var ut=class{constructor(t){this.parent=t,this.values=new Map,this.active=!0}assertActive(){if(!this.active)throw new Error("Service registry is disposed.")}register(t,r){return this.registerOwned(t,r,"host")}registerOwned(t,r,n){if(this.assertActive(),this.values.has(t.id))throw new Error(`Service already registered in this scope: ${t.id}`);let i={value:r,owner:n};return this.values.set(t.id,i),()=>{this.values.get(t.id)===i&&this.values.delete(t.id)}}has(t){return this.assertActive(),this.hasId(t.id)}get(t){this.assertActive();let r=this.resolve(t.id);if(!r)throw new Error(`Service not registered: ${t.id}`);return r.value}getOptional(t){return this.assertActive(),this.resolve(t.id)?.value}resolve(t){return this.values.get(t)??this.parent?.resolve(t)}hasId(t){return this.resolve(t)!==void 0}hasLocalId(t,r){let n=this.values.get(t);return n!==void 0&&(r===void 0||n.owner===r)}deactivate(){this.values.clear(),this.active=!1}},ft=class{constructor(t,r,n){this.services=t,this.manifest=r;let i=Ee(r,n),o=ye(r,n);this.writable=new Set(o.services??[]),this.readable=new Set([...i.services??[],...this.writable])}assertReadable(t){if(!this.readable.has(t.id))throw new Error(`Plugin accessed undeclared service: ${this.manifest.id} -> ${t.id}`)}register(t,r){if(!this.writable.has(t.id))throw new Error(`Plugin registered undeclared service: ${this.manifest.id} -> ${t.id}`);return this.services.registerOwned(t,r,this.manifest.id)}has(t){return this.assertReadable(t),this.services.has(t)}get(t){return this.assertReadable(t),this.services.get(t)}getOptional(t){return this.assertReadable(t),this.services.getOptional(t)}},pt=class{constructor(t,r){this.parent=t,this.assertExecutionAvailable=r,this.handlers=new Map,this.activeExecutions=new Map,this.nextExecutionId=1,this.active=!0}assertActive(){if(!this.active)throw new Error("Command registry is disposed.")}register(t,r){if(this.assertActive(),this.handlers.has(t.id))throw new Error(`Command already registered in this scope: ${t.id}`);return this.handlers.set(t.id,r),()=>{this.handlers.get(t.id)===r&&this.handlers.delete(t.id)}}async execute(t,r){return this.executeWithAuthorization(t,r,!1)}async executeWithAuthorization(t,r,n){this.assertActive(),n||this.assertExecutionAvailable?.();let i=this.handlers.get(t.id);if(i){let o=this.nextExecutionId++;this.activeExecutions.set(o,t.id);try{return await i(r)}finally{this.activeExecutions.delete(o)}}if(this.parent)return this.parent.executeWithAuthorization(t,r,!0);throw new Error(`Command not registered: ${t.id}`)}listActiveExecutions(){return[...this.activeExecutions.values()]}deactivate(){this.handlers.clear(),this.active=!1}},mt=class{constructor(t,r){this.parent=t,this.report=r,this.listeners=new Map,this.active=!0}assertActive(){if(!this.active)throw new Error("Event registry is disposed.")}subscribe(t,r){this.assertActive();let n=this.listeners.get(t.id)??new Set;return n.add(r),this.listeners.set(t.id,n),()=>{n.delete(r),n.size||this.listeners.delete(t.id)}}async deliver(t,r,n){for(let i of[...this.listeners.get(t.id)??[]])try{await i(r)}catch(o){n.push(o)}await this.parent?.deliver(t,r,n)}async publish(t,r){this.assertActive();let n=[];if(await this.deliver(t,r,n),n.length===0)return;let i=n.map(s=>s instanceof Error?s.message:String(s));try{this.report({code:"plugin.event.deliveryFailed",message:`Event ${t.id} reported ${n.length} listener error(s).`,severity:"error",details:Object.freeze({eventId:t.id,listenerErrorCount:n.length,listenerErrorMessages:Object.freeze(i)})})}catch(s){n.push(s)}let o=we(n,`Event delivery failed: ${t.id}.`);throw o.name="FpsEventDeliveryError",o}deactivate(){this.listeners.clear(),this.active=!1}};function va(e,t){let r=wn(t);return Object.freeze({subscribe(n,i){return e.subscribe(n,i)},publish(n,i){return n.ownerPluginId!==t||!n.id.startsWith(r)?Promise.reject(new Error(`Plugin ${t} may only publish events in namespace ${r}*; got ${n.id}`)):e.publish(n,i)}})}var ht=(e,t)=>e.id<t.id?-1:e.id>t.id?1:0;function $n(e,t,r,n){if(!On(e))throw new Error(`Invalid plugin version: ${n}@${e}`);let i=t??"*";if(!ba(i))throw new Error(`Invalid plugin version range: ${r} requires ${n}@${i}`);if(!wa(e,i))throw new Error(`Plugin version mismatch: ${r} requires ${n}@${i}`)}function $a(e,t,r,n){let i=new Map,o=new Map,s=new Map;for(let m of e){let f=n?.(m.id);if(f&&(f.version!==m.version||f.apiVersion!==m.apiVersion))throw new Error(`Plugin identity mismatch across scopes: ${m.id}`);if(i.has(m.id))throw new Error(`Duplicate plugin id: ${m.id}`);if(i.set(m.id,m),!m.entries[t])continue;if(!On(m.version))throw new Error(`Invalid plugin version: ${m.id}@${m.version}`);o.set(m.id,m);let R=ye(m,t);for(let v of R.services??[]){let j=s.get(v);if(j)throw new Error(`Duplicate service provider: ${v} (${j.id}, ${m.id})`);if(r?.hasLocalId(v)&&!r.hasLocalId(v,m.id))throw new Error(`Duplicate service provider: ${v} (host, ${m.id})`);s.set(v,m)}}let a=m=>{let f=new Map,R=Ee(m,t);for(let v of R.plugins??[]){let j=o.get(v.id);if(!j){let _=n?.(v.id);if(_){$n(_.version,v.range,m.id,v.id);continue}let Z=i.has(v.id)?` (${t} entry unavailable)`:"";throw new Error(`Missing plugin dependency: ${m.id} -> ${v.id}${Z}`)}$n(j.version,v.range,m.id,v.id),f.set(j.id,j)}for(let v of R.services??[]){let j=s.get(v);if(j)f.set(j.id,j);else if(!r?.hasId(v))throw new Error(`Missing required service: ${m.id} -> ${v}`)}return[...f.values()].sort(ht)},c=new Set,u=new Set,p=[],y=m=>{if(c.has(m.id))throw new Error(`Plugin dependency cycle at: ${m.id}`);if(!u.has(m.id)){c.add(m.id);for(let f of a(m))y(f);c.delete(m.id),u.add(m.id),p.push(m)}};for(let m of[...o.values()].sort(ht))y(m);return p}function Sn(e,t){let r=Object.freeze(Object.fromEntries(Object.entries(e.pluginConfigs??{}).map(([l,d])=>[l,En(d,`Plugin config ${l}`)])));e={...e,manifests:e.manifests.map(l=>yn(l)),pluginConfigs:r};let n=new ut(t?.services),i=new pt(t?.commands,()=>C()),o=[],s=[],a=new Map(e.manifests.map(l=>[l.id,l.entries[e.environment]?"discovered":"unavailable"])),c=[],u=e.scope??"application",p="created",y,m=!1,f=0,R=null,v,j=new Map(e.manifests.filter(l=>l.entries[e.environment]).map(l=>[l.id,l])),_=l=>j.get(l)??t?.resolvePlugin(l),Z=l=>{s.push(Object.freeze({code:l.code,message:l.message,severity:l.severity,...l.pluginId?{pluginId:l.pluginId}:{}})),s.length>200&&s.shift()},ee=(l,d=!0)=>{if(Z(l),!(!d||!e.report))try{e.report(l)}catch(O){Z({code:"plugin.report.observerFailed",message:O instanceof Error?O.message:String(O),severity:"error",...l.pluginId?{pluginId:l.pluginId}:{}})}},W=new mt(t?.events,l=>ee(l)),be=()=>m||c.some(l=>l.hasTransitionInTree()),X=()=>be()||t?.isTransitioningTree()===!0,B=()=>p==="cleanup-failed"||c.some(l=>l.hasCleanupFailureInTree()),te=()=>B()||t?.hasCleanupFailureInTree()===!0,de=()=>f>0||c.some(l=>l.hasTeardownReservationInTree()),h=()=>de()||t?.isTeardownReservedTree()===!0,b=()=>Object.freeze([...i.listActiveExecutions(),...c.flatMap(l=>l.listActiveCommandsInTree())]),w=()=>Object.freeze([...i.listActiveExecutions(),...t?.listActiveCommandsInLineage()??[]]),S=l=>{let d=Object.freeze([...t?.listActiveCommandsInLineage()??[],...b()]);if(d.length!==0)throw new Error(`Cannot ${l} Plugin Host while commands are active: ${d.join(", ")}`)};function C(){if(h())throw new Error("Plugin host disposal has been requested; command execution is unavailable.");if(te())throw new Error("Plugin host cleanup is incomplete; command execution is unavailable.");let l=X();if((p!=="started"||l)&&!(p==="registered"&&m&&R===null))throw new Error(`Plugin host command execution requires an idle started host, got: ${p}${l?" (transitioning)":""}.`)}let x=()=>{if(h())throw new Error("Plugin host disposal has been requested; public operations are unavailable.");if(te())throw new Error("Plugin host cleanup is incomplete; only stop or dispose may be retried.");let l=X();if(p!=="started"||l)throw new Error(`Plugin host public operations require an idle started host, got: ${p}${l?" (transitioning)":""}.`)},Q={register(l,d){return x(),n.register(l,d)},has(l){return x(),n.has(l)},get(l){return x(),n.get(l)},getOptional(l){return x(),n.getOptional(l)}},k={register(l,d){return x(),i.register(l,d)},execute(l,d){return x(),i.execute(l,d)}},F={subscribe(l,d){return x(),W.subscribe(l,d)},publish(l,d){return x(),W.publish(l,d)}},ue=()=>{let l=e.manifests.map(d=>{let O=a.get(d.id)??"unavailable";return Object.freeze({manifest:d,lifecycle:O,compatible:d.apiVersion===e.apiVersion})}).sort((d,O)=>ht(d.manifest,O.manifest));return Object.freeze({environment:e.environment,apiVersion:e.apiVersion,scope:u,state:B()?"cleanup-failed":p,transitioning:X()||h(),plugins:Object.freeze(l),diagnostics:Object.freeze([...s])})},V=async(l,d=!1)=>{if(m)throw new Error("Plugin host lifecycle transition already in progress.");if(!d&&t?.isTransitioningTree())throw new Error("Ancestor plugin scope lifecycle transition already in progress.");m=!0;try{return await l()}finally{m=!1}};for(let l of e.initialServices??[])n.register(l.token,l.value);let Xn=async(l,d)=>{if(!l.disposeCompleted)try{await l.entry.dispose?.(l.context),l.disposeCompleted=!0}catch(P){return d.push(P),!1}for(let P=l.disposers.length-1;P>=0;P-=1)try{await l.disposers[P](),l.disposers.splice(P,1)}catch(N){d.push(N);break}let O=l.disposeCompleted&&l.disposers.length===0;return O&&a.set(l.manifest.id,"disposed"),O},De=async l=>{for(let d of[...o].reverse())if(d.started)try{await d.entry.stop?.(d.context),d.started=!1,a.set(d.manifest.id,"stopped")}catch(O){l.push(O);break}},_e=async(l,d)=>{R="dispose";let O=[];for(let N of[...c].reverse())try{await N.disposeFromParent()}catch(J){O.push(J);break}if(O.length===0&&(await De(O),O.length===0))for(let N=o.length-1;N>=0;N-=1){let J=o[N];if(!J.started)if(await Xn(J,O))o.splice(N,1);else break}O.length===0?(n.deactivate(),i.deactivate(),W.deactivate(),p="disposed",R=null,t?.removeChild(y)):p="cleanup-failed";let P=[...l?[d]:[],...O];if(P.length===1)throw P[0];if(P.length>1)throw we(P,"Plugin host lifecycle failed and cleanup reported errors:")};return y={get state(){return B()?"cleanup-failed":p},get transitioning(){return X()||h()},scope:u,services:Q,commands:k,events:F,inspect:ue,createScope(l){if(h())throw new Error("Cannot create a child scope while Plugin Host teardown is reserved.");if(te())throw new Error("Cannot create a child scope while Plugin Host tree is cleanup-failed (cleanup is incomplete).");let d=X();if(p!=="started"||d)throw new Error(`Cannot create a child scope from plugin host state: ${p}${d?" (transitioning)":""}`);return Sn({...e,scope:l.scope,manifests:l.manifests??e.manifests,pluginConfigs:l.pluginConfigs??e.pluginConfigs,loadEntry:l.loadEntry??e.loadEntry,initialServices:l.initialServices},{services:n,commands:i,events:W,getState:()=>p,isTransitioningTree:X,hasCleanupFailureInTree:B,isTeardownReservedTree:h,listActiveCommandsInLineage:w,resolvePlugin:_,addChild:P=>c.push(P),removeChild:P=>{let N=c.findIndex(J=>J.host===P);N>=0&&c.splice(N,1)}})},start(){return V(async()=>{if(h())throw new Error("Plugin host cannot start while teardown is reserved.");if(p!=="created")throw new Error(`Plugin host cannot start from state: ${p}`);if(t&&t.getState()!=="started")throw new Error(`Child plugin scope cannot start while parent is: ${t.getState()}`);if(t?.hasCleanupFailureInTree())throw new Error("Child plugin scope cannot start while the Plugin Host tree cleanup is incomplete.");try{let l=$a(e.manifests,e.environment,n,t?.resolvePlugin);for(let d of l){if(v=d.id,d.apiVersion!==e.apiVersion)throw new Error(`Plugin API mismatch: ${d.id}`);if(!d.entries[e.environment])continue;let O=await e.loadEntry(d,e.environment);if(!O)throw new Error(`Plugin entry could not be loaded: ${d.id} (${e.environment})`);let P=Le(O);if(P.pluginId!==d.id||P.environment!==e.environment)throw new Error(`Plugin entry mismatch: ${d.id}`);let N={manifest:d,entry:P,context:void 0,disposers:[],started:!1,disposeCompleted:!1};N.context={environment:e.environment,pluginId:d.id,config:e.pluginConfigs?.[d.id],scope:u,services:new ft(n,d,e.environment),commands:i,events:va(W,d.id),report:re=>ee({...re,pluginId:d.id}),add:re=>N.disposers.push(re)},o.push(N);let J=await P.register(N.context);J&&N.disposers.push(J);let Bn=ye(d,e.environment);for(let re of Bn.services??[])if(!n.hasLocalId(re,d.id))throw new Error(`Plugin did not register declared service: ${d.id} -> ${re}`);a.set(d.id,"registered")}for(let d of l){if(!d.entries[e.environment])continue;let O=Ee(d,e.environment);for(let P of O.services??[])if(!n.hasId(P))throw new Error(`Required service not registered: ${d.id} -> ${P}`)}p="registered";for(let d of o)v=d.manifest.id,d.started=!0,await d.entry.start?.(d.context),a.set(d.manifest.id,"started");v=void 0,p="started"}catch(l){ee({code:"plugin.lifecycle.failed",message:l instanceof Error?l.message:String(l),severity:"error",...v?{pluginId:v}:{}},!1);let d=b();if(d.length>0)throw R="dispose",p="cleanup-failed",we([l,new Error(`Plugin start rollback is waiting for active commands: ${d.join(", ")}`)],"Plugin host start failed and cleanup is pending:");await _e(!0,l)}})},stop(){return S("stop"),V(async()=>{if(p!=="started"&&p!=="cleanup-failed")return;if(p==="cleanup-failed"&&R==="dispose")throw new Error("Plugin host disposal cleanup is incomplete; dispose must be retried.");R="stop";let l=c.find(O=>O.hasTransitionInTree());if(l)throw new Error(`Child plugin scope lifecycle transition already in progress: ${l.host.scope}`);let d=[];for(let O of[...c].reverse())try{await O.stopFromParent()}catch(P){d.push(P);break}if(d.length===0&&await De(d),d.length>0||o.some(O=>O.started)?p="cleanup-failed":(p="stopped",R=null),d.length===1)throw d[0];if(d.length>1)throw we(d,"Plugin host stop reported errors:")})},dispose(){return S("dispose"),V(async()=>{if(p==="disposed")return;let l=c.find(d=>d.hasTransitionInTree());if(l)throw new Error(`Child plugin scope lifecycle transition already in progress: ${l.host.scope}`);await _e(!1)})},reserveTeardown(){if(p==="disposed")return Object.assign(()=>{},{assertReady:()=>{}});f+=1;let l=!0;return Object.assign(()=>{l&&(l=!1,f-=1)},{assertReady:()=>S("reserve teardown for")})}},t?.addChild({host:y,hasTransitionInTree:be,hasCleanupFailureInTree:B,hasTeardownReservationInTree:de,listActiveCommandsInTree:b,stopFromParent:()=>V(async()=>{if(S("stop"),p!=="started"&&p!=="cleanup-failed")return;if(p==="cleanup-failed"&&R==="dispose")throw new Error("Plugin host disposal cleanup is incomplete; dispose must be retried.");R="stop";let l=c.find(O=>O.hasTransitionInTree());if(l)throw new Error(`Child plugin scope lifecycle transition already in progress: ${l.host.scope}`);let d=[];for(let O of[...c].reverse())try{await O.stopFromParent()}catch(P){d.push(P);break}if(d.length===0&&await De(d),d.length>0||o.some(O=>O.started)?p="cleanup-failed":(p="stopped",R=null),d.length===1)throw d[0];if(d.length>1)throw we(d,"Plugin host stop reported errors:")},!0),disposeFromParent:()=>V(async()=>{if(S("dispose"),p==="disposed")return;let l=c.find(d=>d.hasTransitionInTree());if(l)throw new Error(`Child plugin scope lifecycle transition already in progress: ${l.host.scope}`);await _e(!1)},!0)}),y}function Pn(e){return Sn(e)}var Rn=Symbol("fps.editor.event.route"),Dc=U("fps.editor.lifecycle.changed"),_c=U("fps.editor.scope.opened"),kc=U("fps.editor.scope.closed"),Mc=U("fps.editor.document.changed"),Hc=U("fps.editor.document.committed"),Uc=U("fps.editor.document.saveFailed"),Vc=U("fps.editor.selection.changed"),Gc=U("fps.editor.history.changed"),Xc=U("fps.editor.activeTool.changed"),Bc=U("fps.editor.preview.changed"),gt=U("fps.editor.diagnostic.reported");function Ia(e,t){try{e?.(t)}catch{}}function Tn(e){let t=e.now??Date.now,r=0,n=Promise.resolve(),i=o=>Object.freeze({[Rn]:e.captureRoute?.(o)??(()=>e.events)});return Object.freeze({captureRoute:i,publish(o,s,a,c=i(a)){let u=Object.freeze({version:1,sequence:++r,timestamp:t(),scope:a.scope,scopeId:a.scopeId,...a.traceId?{traceId:a.traceId}:{},...a.transactionId?{transactionId:a.transactionId}:{},...a.sourcePluginId?{sourcePluginId:a.sourcePluginId}:{},payload:s}),p=n.then(async()=>{let y=c[Rn]();try{await y.publish(o,u)}catch(m){Ia(e.report,{code:"editor.event.observerFailed",message:m instanceof Error?m.message:String(m),severity:"error",details:Object.freeze({eventId:o.id,sequence:u.sequence})})}});return n=p.catch(()=>{}),p}})}var jn=Object.freeze(["application.start","application.stop","application.dispose","project.open","project.close","mode.enterEdit","mode.recoverEdit","mode.exitEdit","document.load","document.markDirty","document.markClean","document.prepareSave","document.commit","document.saveFailed","document.discard","preview.create","preview.dispose"]),Kc={"application.start":z(e=>e.application==="created",{application:"starting"},{application:"ready"},{application:"failed"}),"application.stop":z(e=>(e.application==="ready"||e.application==="failed")&&e.project==="closed"&&e.mode==="play"&&e.preview==="absent",{application:"stopping"},{application:"disposed"},{application:"failed"}),"application.dispose":z(e=>e.application!=="disposed",{application:"stopping"},{application:"disposed",project:"closed",mode:"play",document:"unloaded",preview:"absent",scopes:Object.freeze([])},{application:"failed",project:"failed",mode:"failed",document:"failed",preview:"failed"}),"project.open":z(e=>e.application==="ready"&&e.project==="closed",{project:"opening"},{project:"open"},{project:"failed"}),"project.close":z(e=>(e.project==="open"||e.project==="failed")&&e.mode==="play"&&e.preview==="absent"&&(e.document==="clean"||e.document==="unloaded"),{project:"closing"},{project:"closed",document:"unloaded"},{project:"failed"}),"mode.enterEdit":z(e=>e.application==="ready"&&e.project==="open"&&e.mode==="play",{mode:"entering-edit"},{mode:"edit"},{mode:"failed",document:"failed"}),"mode.recoverEdit":z(e=>e.application==="ready"&&e.project==="open"&&e.mode==="failed",{mode:"entering-edit"},{mode:"edit"},{mode:"failed",document:"failed"}),"mode.exitEdit":z(e=>(e.mode==="edit"||e.mode==="failed")&&e.preview==="absent"&&(e.document==="clean"||e.document==="unloaded"),{mode:"exiting-edit"},{mode:"play",document:"unloaded"},{mode:"failed",document:"failed"}),"document.load":z(e=>e.project==="open"&&(e.document==="unloaded"||e.document==="failed"),{document:"loading"},{document:"clean"},{document:"failed"}),"document.markDirty":z(e=>e.project==="open"&&e.mode==="edit"&&(e.document==="clean"||e.document==="dirty"||e.document==="committing"||e.document==="failed"),{document:"dirty"},{document:"dirty"},{document:"failed"}),"document.markClean":z(e=>e.project==="open"&&e.mode==="edit"&&(e.document==="clean"||e.document==="dirty"||e.document==="failed"),{document:"clean"},{document:"clean"},{document:"failed"}),"document.prepareSave":z(e=>e.project==="open"&&e.mode==="edit"&&(e.document==="clean"||e.document==="dirty"||e.document==="failed"),{document:"preparing-save"},{document:"committing"},{document:"failed"}),"document.commit":z(e=>e.project==="open"&&e.mode==="edit"&&(e.document==="committing"||e.document==="failed"),{document:"committing"},{document:"clean"},{document:"failed"}),"document.saveFailed":z(e=>e.document==="preparing-save"||e.document==="committing",{document:"failed"},{document:"failed"},{document:"failed"}),"document.discard":z(e=>e.project==="open"&&e.mode==="edit"&&(e.document==="clean"||e.document==="dirty"||e.document==="failed"),{document:"loading"},{document:"clean"},{document:"failed"}),"preview.create":z(e=>e.mode==="edit"&&e.preview==="absent",{preview:"creating"},{preview:"active"},{preview:"failed"}),"preview.dispose":z(e=>e.preview==="active"||e.preview==="failed",{preview:"disposing"},{preview:"absent"},{preview:"failed"})};function z(e,t,r,n){return Object.freeze({assertAllowed:e,start:Object.freeze(t),settled:Object.freeze(r),failed:Object.freeze(n)})}var Oa=Object.freeze({application:Object.freeze([]),project:Object.freeze(["application"]),scene:Object.freeze(["project"]),document:Object.freeze(["project","scene"]),session:Object.freeze(["document"]),preview:Object.freeze(["document","session"])});function Cn(e,t){if(e.scope==="application"){if(e.parentId)throw new Error("Editor application lifecycle scope cannot have a parent.");if(t.some(i=>i.scope==="application"))throw new Error("Editor lifecycle can only have one application scope.");return}if(!e.parentId)throw new Error(`Editor ${e.scope} lifecycle scope requires a parent.`);let r=t.find(i=>i.id===e.parentId);if(!r||r.state!=="open")throw new Error(`Editor lifecycle scope parent is not open: ${e.parentId}`);if(!Oa[e.scope].includes(r.scope))throw new Error(`Editor ${e.scope} lifecycle scope cannot be parented by ${r.scope}.`)}var Yc=Object.freeze({state:"enabled"});function Fe(e){if(!e||typeof e!="object")throw new Error("Editor Tool registration must be an object.");if(typeof e.createRuntime!="function")throw new Error("Editor Tool registration requires createRuntime().");return Object.freeze({definition:Sa(e.definition),createRuntime:e.createRuntime})}function Sa(e){if(!e||typeof e!="object")throw new Error("Editor Tool definition must be an object.");let t=qe(e.id,"Editor Tool id"),r=ze(e.label,"Editor Tool label"),n=qe(e.group,"Editor Tool group");if(e.kind!=="primary"&&e.kind!=="action")throw new Error(`Unknown Editor Tool kind: ${String(e.kind)}`);let i=e.order??0;if(!Number.isFinite(i))throw new Error("Editor Tool order must be finite.");let o=Object.freeze((e.requiredCapabilities??[]).map(s=>qe(s,"Editor capability id")));if(new Set(o).size!==o.length)throw new Error(`Editor Tool required capabilities must be unique: ${t}`);return Object.freeze({id:t,label:r,group:n,order:i,kind:e.kind,requiredCapabilities:o,...e.icon===void 0?{}:{icon:ze(e.icon,"Editor Tool icon")},...e.shortcut===void 0?{}:{shortcut:ze(e.shortcut,"Editor Tool shortcut").toUpperCase()},...e.fallbackToolId===void 0?{}:{fallbackToolId:qe(e.fallbackToolId,"Editor Tool fallback id")}})}function qe(e,t){let r=ze(e,t);if(!/^[a-z0-9]+(?:[._-][a-z0-9]+)+$/.test(r))throw new Error(`${t} must be namespaced lowercase, got: ${e}`);return r}function ze(e,t){if(typeof e!="string"||!e.trim())throw new Error(`${t} must be a non-empty string.`);return e.trim()}var Zc=128*1024;function An(e){if(!e||typeof e!="object")throw new Error("Editor command manifest is required.");if(e.schemaVersion!==1)throw new Error(`Unsupported Editor command schema version: ${String(e.schemaVersion)}`);let t=xa(e.id);if(!Number.isInteger(e.version)||e.version<=0)throw new Error(`Editor command version must be a positive integer: ${t}`);let r=yt(e.title,`Editor command title is required: ${t}`);if(!new Set(["workspace-service","tooling","authoring","view","renderer"]).has(e.target))throw new Error(`Editor command target is invalid: ${t}`);if(e.access!=="read"&&e.access!=="write")throw new Error(`Editor command access is invalid: ${t}`);if(!new Set(["experimental","stable","deprecated"]).has(e.stability))throw new Error(`Editor command stability is invalid: ${t}`);if(!e.effects||typeof e.effects!="object")throw new Error(`Editor command effects are required: ${t}`);if(!new Set(["none","view","authoring","filesystem"]).has(e.effects.persistence))throw new Error(`Editor command persistence is invalid: ${t}`);if(typeof e.effects.undoable!="boolean"||typeof e.effects.idempotent!="boolean")throw new Error(`Editor command effects flags are invalid: ${t}`);if(e.transaction&&(e.transaction.compatible!==!0||e.transaction.sideEffects!=="authoring"||e.transaction.phase!=="mutation"||e.target!=="authoring"||e.access!=="write"||e.effects.persistence!=="authoring"))throw new Error(`Editor command transaction policy is invalid: ${t}`);let s=le(e.description),a={schemaVersion:1,id:t,version:e.version,title:r,...s?{description:s}:{},target:e.target,access:e.access,stability:e.stability,inputSchema:xn(e.inputSchema,`${t}.inputSchema`),outputSchema:xn(e.outputSchema,`${t}.outputSchema`),...e.requires?{requires:Ra(e.requires,t)}:{},effects:Object.freeze({...e.effects}),...e.transaction?{transaction:Object.freeze({...e.transaction})}:{},...e.presentation?{presentation:Ta(e.presentation,t,e.inputSchema)}:{}};return Object.freeze(a)}function Ra(e,t){for(let r of["editorReady","viewAttached","rendererAttached"])if(e[r]!==void 0&&typeof e[r]!="boolean")throw new Error(`Editor command requirement ${r} is invalid: ${t}`);return Object.freeze({...e.editorReady!==void 0?{editorReady:e.editorReady}:{},...e.viewAttached!==void 0?{viewAttached:e.viewAttached}:{},...e.rendererAttached!==void 0?{rendererAttached:e.rendererAttached}:{},...e.activeScope?{activeScope:Object.freeze(ce(e.activeScope,t))}:{},...e.permissions?{permissions:Object.freeze(ce(e.permissions,t))}:{}})}function Ta(e,t,r){let n=le(e.category),i=le(e.shortcut),o=new Set(["none","inline-json","schema-form"]);if(e.inputMode!==void 0&&!o.has(e.inputMode))throw new Error(`Editor command presentation input mode is invalid: ${t}`);let s=e.menu?Object.freeze({path:Object.freeze(ce(e.menu.path,t)),...le(e.menu.group)?{group:e.menu.group.trim()}:{},...e.menu.order!==void 0?{order:Aa(e.menu.order,`${t}.menu.order`)}:{}}):void 0,a=e.selectionBinding?ja(e.selectionBinding,t,r):void 0;return Object.freeze({...n?{category:n}:{},...e.aliases?{aliases:Object.freeze(ce(e.aliases,t))}:{},...e.keywords?{keywords:Object.freeze(ce(e.keywords,t))}:{},...e.examples?{examples:Object.freeze(ce(e.examples,t))}:{},...i?{shortcut:i}:{},...s?{menu:s}:{},...e.inputMode?{inputMode:e.inputMode}:{},...a?{selectionBinding:a}:{}})}function ja(e,t,r){let n=le(e.activeId),i=le(e.selectedIds);if(!n&&!i)throw new Error(`Editor command selection binding is empty: ${t}`);let o=r.properties&&typeof r.properties=="object"?r.properties:{};if(n&&o[n]?.type!=="string")throw new Error(`Editor command active selection binding must target a string property: ${t}.${n}`);if(i&&(o[i]?.type!=="array"||o[i]?.items?.type!=="string"))throw new Error(`Editor command multi-selection binding must target a string array property: ${t}.${i}`);return Object.freeze({...n?{activeId:n}:{},...i?{selectedIds:i}:{}})}var el=Symbol("editor-command-aborted");function xn(e,t){let r=Ca(e,t);return se(r,t),r}function se(e,t){if(typeof e=="boolean")return;if(!ae(e))throw new Error(`Editor command JSON Schema is invalid at ${t}.`);let r=e,n=new Set(["null","object","array","string","number","integer","boolean"]);if("type"in r){let i=typeof r.type=="string"?[r.type]:r.type;if(!Array.isArray(i)||i.length===0||i.some(o=>typeof o!="string"||!n.has(o))||new Set(i).size!==i.length)throw new Error(`Editor command JSON Schema type is invalid at ${t}.type.`)}if("required"in r&&(!Array.isArray(r.required)||r.required.some(i=>typeof i!="string"||i.length===0)||new Set(r.required).size!==r.required.length))throw new Error(`Editor command JSON Schema required is invalid at ${t}.required.`);if("properties"in r){if(!ae(r.properties))throw new Error(`Editor command JSON Schema properties is invalid at ${t}.properties.`);for(let[i,o]of Object.entries(r.properties))se(o,`${t}.properties.${i}`)}if("additionalProperties"in r&&typeof r.additionalProperties!="boolean"&&!ae(r.additionalProperties))throw new Error(`Editor command JSON Schema additionalProperties is invalid at ${t}.additionalProperties.`);ae(r.additionalProperties)&&se(r.additionalProperties,`${t}.additionalProperties`),"items"in r&&se(r.items,`${t}.items`);for(let i of["allOf","anyOf","oneOf"]){if(!(i in r))continue;let o=r[i];if(!Array.isArray(o)||o.length===0)throw new Error(`Editor command JSON Schema ${i} is invalid at ${t}.${i}.`);o.forEach((s,a)=>se(s,`${t}.${i}[${a}]`))}if("not"in r&&se(r.not,`${t}.not`),"enum"in r&&(!Array.isArray(r.enum)||r.enum.length===0))throw new Error(`Editor command JSON Schema enum is invalid at ${t}.enum.`);for(let i of["minLength","maxLength","minItems","maxItems","minProperties","maxProperties"])if(i in r&&(!Number.isSafeInteger(r[i])||r[i]<0))throw new Error(`Editor command JSON Schema ${i} is invalid at ${t}.${i}.`);for(let i of["minimum","maximum","exclusiveMinimum","exclusiveMaximum"])if(i in r&&(typeof r[i]!="number"||!Number.isFinite(r[i])))throw new Error(`Editor command JSON Schema ${i} is invalid at ${t}.${i}.`);if("multipleOf"in r&&(typeof r.multipleOf!="number"||!Number.isFinite(r.multipleOf)||r.multipleOf<=0))throw new Error(`Editor command JSON Schema multipleOf is invalid at ${t}.multipleOf.`);if("uniqueItems"in r&&typeof r.uniqueItems!="boolean")throw new Error(`Editor command JSON Schema uniqueItems is invalid at ${t}.uniqueItems.`);if("pattern"in r){if(typeof r.pattern!="string")throw new Error(`Editor command JSON Schema pattern is invalid at ${t}.pattern.`);try{new RegExp(r.pattern)}catch{throw new Error(`Editor command JSON Schema pattern is invalid at ${t}.pattern.`)}}}function Ca(e,t){let r=Et(e,t);if(!ae(r))throw new Error(`Editor command JSON object is required at ${t}.`);return Object.freeze(r)}function Et(e,t){if(e===null||typeof e=="string"||typeof e=="boolean"||typeof e=="number"&&Number.isFinite(e))return e;if(Array.isArray(e))return Object.freeze(e.map((n,i)=>Et(n,`${t}[${i}]`)));if(!ae(e))throw new Error(`Editor command value must be JSON-compatible at ${t}.`);let r=Object.create(null);for(let[n,i]of Object.entries(e))i!==void 0&&(r[n]=Et(i,`${t}.${n}`));return Object.freeze(r)}function ae(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}function ce(e,t){if(!Array.isArray(e))throw new Error(`Editor command string list is invalid: ${t}`);return[...new Set(e.map(r=>yt(r,`Editor command string list contains an empty value: ${t}`)))]}function xa(e){let t=yt(e,"Editor command id is required.");if(t.length>160||/\s/.test(t))throw new Error(`Editor command id is invalid: ${t}`);return t}function yt(e,t){if(typeof e!="string"||!e.trim())throw new Error(t);return e.trim()}function le(e){return typeof e=="string"&&e.trim()?e.trim():void 0}function Aa(e,t){if(typeof e!="number"||!Number.isFinite(e))throw new Error(`Editor command number is invalid: ${t}`);return e}var Na=Object.freeze({subscribe:()=>()=>{},publish:()=>Promise.resolve()}),zn=new WeakMap,wt=new WeakMap,La=new Set(["hierarchy","inspector","panel","command","capability","tool","lifecycle-participant"]),Fn=dt("fps.editor.contributions"),Dn=new WeakMap;function Nn(e,t){let r=t.map(i=>i instanceof Error?i.message:String(i)).join("; "),n=new Error(`${e}: ${r}`);return n.errors=[...t],n}function cl(e){let t=Dn.get(e);if(!t)throw new Error("Editor Plugin lifecycle scope host is unavailable.");return t()}var _n=new WeakMap;function ll(e,t,r){kn(e),Mn(e);let n=_a(t);if(typeof r!="function")throw new Error(`Editor command handler is required: ${n.command.id}`);let i=Object.freeze({type:"editor.command",registration:n});_n.set(i,r),bt(e,{id:n.command.id,kind:"command",value:i})}function dl(e,t){let r=vt(t);return bt(e,{id:r.id,kind:"lifecycle-participant",value:r})}function ul(e,t,r=0){let n=Fe(t);return bt(e,{id:n.definition.id,kind:"tool",priority:r,value:Object.freeze({type:"editor.tool",registration:n})})}function fl(e){return Object.freeze(e.list("tool").map(t=>{let r=t.value;if(!Vn(r)||r.type!=="editor.tool"||!("registration"in r))throw new Error(`Invalid Editor Tool contribution: ${t.id}`);let n=Fe(r.registration);if(n.definition.id!==t.id)throw new Error(`Editor Tool contribution id mismatch: ${t.id} != ${n.definition.id}`);return n}))}function pl(e,t){let r=new Map,n=o=>{let s=new Map(o.list("tool").map(a=>[a.id,a]));for(let[a,c]of[...r])s.get(a)!==c.contribution&&(c.unregister(),r.delete(a));for(let a of s.values()){if(r.has(a.id))continue;let c=Gn(a);r.set(a.id,{contribution:a,unregister:t.register(c)})}};n(e);let i=e.subscribe(n);return()=>{i();for(let o of[...r.values()].reverse())o.unregister();r.clear()}}function ml(e){return e.list("lifecycle-participant").map(t=>{let r=vt(t.value);if(r.id!==t.id)throw new Error(`Editor lifecycle participant contribution id mismatch: ${t.id} != ${r.id}`);return r})}function qa(){let e=new Map,t=new Set,r=()=>{for(let i of[...t])i(n)},n={get:i=>e.get(i),list:i=>(i!==void 0&&qn(i),[...e.values()].filter(o=>i===void 0||o.kind===i).sort(Ma)),subscribe(i){return t.add(i),()=>{t.delete(i)}}};return zn.set(n,(i,o)=>{let s=Hn(o.id),a=qn(o.kind);if(e.has(s))throw new Error(`Duplicate editor contribution id: ${s}`);let c=Object.freeze({...o,id:s,kind:a,pluginId:i,priority:Un(o.priority)});e.set(s,c),r();let u=!0;return()=>{u&&(u=!1,e.get(s)===c&&(e.delete(s),r()))}}),n}function bt(e,t){let r=kn(e);if(Mn(e),e.services.get(Fn)!==r.registry)throw new Error("Editor contribution service does not belong to this Plugin Host.");let i=zn.get(r.registry);if(!i)throw new Error("Editor contribution registry is not owned by this host.");t.kind==="lifecycle-participant"&&vt(t.value),t.kind==="tool"&&Gn(Object.freeze({...t,pluginId:r.pluginId,priority:Un(t.priority)}));let o=i(r.pluginId,t);r.addDisposer(o);let s=!0;return()=>{if(!(!s||!r.registrationOpen))return s=!1,o()}}function za(e){let t=qa(),r=new Map,n=1,i=!1,o=0,s=!1,a=null,c=new Map,u=new Set,p=[],y,m=(h,b,w={scope:"application",scopeId:"editor:application"})=>{p.push(Object.freeze({code:h.code,message:h.message,severity:h.severity,...h.pluginId?{pluginId:h.pluginId}:{}})),p.length>200&&p.shift();try{e.report?.(h)}catch{}!b||!y||h.details?.eventId===gt.id||y.publish(gt,Object.freeze({diagnostic:Object.freeze({code:h.code,message:h.message,severity:h.severity,...h.pluginId?{pluginId:h.pluginId}:{}})}),{...w,...w.sourcePluginId||!h.pluginId?{}:{sourcePluginId:h.pluginId}})},f=()=>s||u.size>0,R=e.manifests.filter(h=>lt(h,"editor").includes("application")),v=Pn({environment:"editor",apiVersion:1,scope:"application",manifests:R,initialServices:[{token:Fn,value:t},...e.initialServices??[]],pluginConfigs:e.pluginConfigs,loadEntry:async(h,b)=>{let w=await e.loadEntry(h,b);return w?ka(Le(w),t):null},report:h=>m(h,!0)});y=Tn({events:v.events,captureRoute(h){let b=[],w=c.get(h.scopeId);for(;w;)b.push(w),w=w.input.parentId?c.get(w.input.parentId):void 0;return()=>{for(let S of b){if(c.get(S.input.id)!==S||S.closeRequested||S.closing)continue;let C=S.host??v;if(!(C.state!=="started"||C.transitioning))return C.events}return v.state==="started"&&!v.transitioning?v.events:Na}},report:h=>m(h,!1)});let j=()=>i||o>0||v.transitioning,_=()=>{if(f())throw new Error("Editor Plugin Host cleanup is incomplete; only cleanup retry operations are available.");if(j())throw new Error("Editor Plugin Host observation is unavailable during a lifecycle transition.")},Z=Object.freeze({get(h){return _(),t.get(h)},list(h){return _(),t.list(h)},subscribe(h){return _(),t.subscribe(h)}}),ee=async h=>{o+=1;try{return await h()}finally{o-=1}},W=(h="anonymous")=>{let b=j();if(v.state!=="started"||b||f())throw new Error(`Editor Plugin Host consumers require an idle started host, got: ${f()?"cleanup-failed":v.state}${b?" (transitioning)":""}`);let w=n++;r.set(w,h);let S=!0;return()=>{S&&(S=!1,r.delete(w))}},be=async(h,b)=>{let w=c.get(b.id);if(w){if(w.input.scope!==b.scope||w.input.parentId!==b.parentId)throw new Error(`Editor Plugin lifecycle scope identity conflicts with the existing scope: ${b.id}`);if(w.owner!==h)throw new Error(`Editor Plugin lifecycle scope is owned by another controller: ${b.id}`);if(u.has(b.id))throw new Error(`Editor Plugin lifecycle scope cleanup is incomplete; close must be retried: ${b.id}`);if(w.closing)throw new Error(`Editor Plugin lifecycle scope is closing: ${b.id}`);return w.ready}let S=i||v.transitioning;if(v.state!=="started"||S||f())throw new Error(`Editor Plugin lifecycle scopes require an idle started host, got: ${f()?"cleanup-failed":v.state}${S?" (transitioning)":""}`);if(Cn(b,[...c.values()].map(F=>({id:F.input.id,scope:F.input.scope,state:F.closing?"failed":"open"}))),b.scope==="application"){c.set(b.id,{input:Object.freeze({...b}),owner:h,host:null,ready:Promise.resolve(),closing:null,closeRequested:!1,releaseTeardownReservation:null});return}let C=c.get(b.parentId);if(!C||C.closing)throw new Error(`Editor Plugin lifecycle parent scope is not open: ${b.parentId}`);if(C.owner!==h)throw new Error(`Editor Plugin lifecycle parent scope is owned by another controller: ${b.parentId}`);let x=b.scope,Q=e.manifests.filter(F=>lt(F,"editor").includes(x)),k={input:Object.freeze({...b}),owner:h,host:null,ready:Promise.resolve(),closing:null,closeRequested:!1,releaseTeardownReservation:null};c.set(b.id,k),k.ready=C.ready.then(async()=>{let F=(C.host??v).createScope({scope:x,manifests:Q});if(k.host=F,k.closeRequested){k.releaseTeardownReservation=F.reserveTeardown();return}await F.start()}).catch(async F=>{let ue;try{await k.host?.dispose()}catch(V){ue=V}if((!k.host||k.host.state==="disposed")&&c.get(b.id)===k&&c.delete(b.id),ue){u.add(b.id),a="dispose";let V=new Error("Editor Plugin lifecycle scope start and cleanup failed.");throw V.errors=[F,ue],V}throw F}),await k.ready},X=(h,b)=>{let w=c.get(h);if(!w)return null;if(b&&w.owner!==b)throw new Error(`Editor Plugin lifecycle scope is owned by another controller: ${h}`);w.closeRequested=!0,w.releaseTeardownReservation??(w.releaseTeardownReservation=w.input.scope==="application"?v.reserveTeardown():w.host?.reserveTeardown()??null);try{w.releaseTeardownReservation?.assertReady()}catch(S){throw u.add(h),a="dispose",S}return w},B=async(h,b)=>{let w=X(h,b);if(w)return w.closing||(w.closing=(async()=>{try{try{await w.ready}catch{}let S=[...c.values()].filter(x=>x.input.parentId===h).reverse(),C=[];for(let x of S)try{await B(x.input.id,b)}catch(Q){C.push(Q);break}if(C.length>0)throw Nn(`Editor Plugin lifecycle child scope cleanup failed: ${h}`,C);w.host?.state!=="disposed"&&await w.host?.dispose(),u.delete(h),c.delete(h)}catch(S){throw(w.host?.state==="cleanup-failed"||[...c.values()].some(x=>x.input.parentId===h&&u.has(x.input.id)))&&(u.add(h),a??(a="dispose")),S}finally{c.get(h)===w?w.closing=null:(w.releaseTeardownReservation?.(),w.releaseTeardownReservation=null)}})()),w.closing},te=async()=>{let h=[...c.values()].filter(w=>!w.input.parentId).reverse(),b=[];for(let w of h)try{await B(w.input.id)}catch(S){b.push(S)}if(b.length>0)throw Nn("Editor Plugin lifecycle root scope cleanup failed",b)},de={get state(){return f()?"cleanup-failed":v.state},get transitioning(){return j()},contributions:Z,eventPublisher:y,reportDiagnostic(h,b={scope:"application",scopeId:"editor:application"}){m(h,!0,b)},inspect:()=>{let h=v.inspect();return Object.freeze({...h,...f()?{state:"cleanup-failed"}:{},transitioning:j(),diagnostics:Object.freeze([...p])})},acquireConsumer:W,mountCommands(h){_();let b=[];try{for(let S of Fa(t)){let{registration:C}=S,x=_n.get(S);if(!x)throw new Error(`Editor command handler is unavailable: ${C.command.id}`);b.push(h.registerCommand({manifest:C.manifest,available:()=>v.state==="started"&&!j()&&!f(),handler:async(Q,k)=>{let F=W(`command:${C.command.id}`);try{return{ok:!0,output:await x(Q,k)}}finally{F()}}}))}}catch(S){for(let C of b.reverse())C();throw S}let w=!0;return()=>{if(w){w=!1;for(let S of b.reverse())S()}}},start:()=>v.start(),stop:()=>{if(Ln(r,"stop"),i)throw new Error("Editor Plugin Host lifecycle is already transitioning.");if(f()&&a==="dispose")throw new Error("Editor Plugin Host disposal cleanup is incomplete; dispose or the owning scope close must be retried.");return i=!0,a="stop",(async()=>{try{await te(),await v.stop(),s=!1,a=null}catch(h){throw s=!0,h}finally{i=!1}})()},dispose:()=>{if(Ln(r,"dispose"),i)throw new Error("Editor Plugin Host lifecycle is already transitioning.");return i=!0,a="dispose",(async()=>{try{await te(),await v.dispose(),s=!1,a=null}catch(h){throw s=!0,h}finally{i=!1}})()}};return Dn.set(de,()=>{let h=Object.freeze({});return Object.freeze({openScope:w=>ee(()=>be(h,w)),reserveScopeClose:w=>{X(w,h)},closeScope:w=>ee(async()=>{await B(w,h),!f()&&!i&&(a=null)})})}),de}function hl(e){if(e.module.environment!=="editor")throw new Error(`Editor Plugin Host requires an editor environment module, got: ${e.module.environment}`);let t=new Map;for(let r of e.module.entries){if(t.has(r.pluginId))throw new Error(`Duplicate Editor Plugin module entry: ${r.pluginId}`);t.set(r.pluginId,r)}return za({manifests:e.module.manifests,pluginConfigs:e.module.pluginConfigs,initialServices:e.initialServices,report:e.report,async loadEntry(r){let n=t.get(r.id);if(!n)throw new Error(`Editor Plugin module entry is missing: ${r.id}`);return n.load()}})}function kn(e){let t=wt.get(e);if(!t)throw new Error("Editor contribution registration requires a host-authenticated Plugin context.");if(!t.registrationOpen)throw new Error("Editor contributions may only be registered during the Plugin register lifecycle.");return t}function Mn(e){if(e.scope!=="application")throw new Error(`Editor contributions are application-scope extension definitions; ${e.scope} scopes may own resources but cannot register global contributions.`)}function Fa(e){return e.list("command").map(t=>{let r=t.value;if(!Da(r)||r.registration.command.id!==t.id)throw new Error(`Invalid Editor command contribution: ${t.id}`);return r})}function Da(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=e;return t.type==="editor.command"&&!!t.registration&&t.registration.command?.kind==="command"}function _a(e){if(e.command?.kind!=="command")throw new Error("Editor command registration requires a command token.");let t=An(e.manifest);if(t.id!==e.command.id)throw new Error(`Editor command token and manifest ids must match: ${e.command.id} != ${t.id}`);return Object.freeze({command:e.command,manifest:t})}function vt(e){if(!e||typeof e!="object"||Array.isArray(e))throw new Error("Editor lifecycle participant must be an object.");let t=e,r=Hn(t.id??"");if(!Array.isArray(t.transitions)||t.transitions.length===0)throw new Error(`Editor lifecycle participant transitions are required: ${r}`);let n=new Set(jn),i=t.transitions.map(o=>{if(typeof o!="string"||!n.has(o))throw new Error(`Editor lifecycle participant transition is invalid: ${r} -> ${String(o)}`);return o});for(let o of["prepare","settled","failed"])if(t[o]!==void 0&&typeof t[o]!="function")throw new Error(`Editor lifecycle participant ${o} must be a function: ${r}`);return Object.freeze({id:r,transitions:Object.freeze([...new Set(i)]),...t.prepare?{prepare:t.prepare}:{},...t.settled?{settled:t.settled}:{},...t.failed?{failed:t.failed}:{}})}function Ln(e,t){if(e.size!==0)throw new Error(`Cannot ${t} Editor Plugin Host with active consumers: ${[...e.values()].join(", ")}`)}function ka(e,t){return{pluginId:e.pluginId,environment:e.environment,async register(r){let n={registry:t,pluginId:r.pluginId,registrationOpen:!0,addDisposer:r.add.bind(r)};wt.set(r,n);try{return await e.register(r)}finally{n.registrationOpen=!1}},...e.start?{start:r=>e.start(r)}:{},...e.stop?{stop:r=>e.stop(r)}:{},dispose:async r=>{try{await e.dispose?.(r)}finally{wt.delete(r)}}}}function Hn(e){let t=e.trim();if(!/^[a-z0-9]+(?:[._-][a-z0-9]+)+$/.test(t))throw new Error(`Editor contribution id must be namespaced lowercase, got: ${e}`);return t}function Un(e){if(e===void 0)return 0;if(!Number.isFinite(e))throw new Error("Editor contribution priority must be finite.");return e}function qn(e){if(typeof e!="string"||!La.has(e))throw new Error(`Unknown editor contribution kind: ${String(e)}`);return e}function Ma(e,t){let r=(t.priority??0)-(e.priority??0);return r!==0?r:e.id<t.id?-1:e.id>t.id?1:0}function Vn(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Gn(e){let t=e.value;if(!Vn(t)||t.type!=="editor.tool"||!("registration"in t))throw new Error(`Invalid Editor Tool contribution: ${e.id}`);let r=Fe(t.registration);if(r.definition.id!==e.id)throw new Error(`Editor Tool contribution id mismatch: ${e.id} != ${r.definition.id}`);return r}export{Fn as FPS_EDITOR_CONTRIBUTIONS,pl as bindFpsEditorTools,qa as createFpsEditorContributionRegistry,za as createFpsEditorPluginHost,hl as createFpsEditorPluginHostFromEnvironmentModule,cl as getFpsEditorPluginLifecycleScopeHost,ll as registerFpsEditorCommand,bt as registerFpsEditorContribution,dl as registerFpsEditorLifecycleParticipant,ul as registerFpsEditorTool,ml as resolveFpsEditorLifecycleParticipants,fl as resolveFpsEditorTools};
1
+ var Kn=Object.create;var $t=Object.defineProperty;var Wn=Object.getOwnPropertyDescriptor;var Yn=Object.getOwnPropertyNames;var Qn=Object.getPrototypeOf,Zn=Object.prototype.hasOwnProperty;var $=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports);var ei=(e,t,r,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let i of Yn(t))!Zn.call(e,i)&&i!==r&&$t(e,i,{get:()=>t[i],enumerable:!(n=Wn(t,i))||n.enumerable});return e};var It=(e,t,r)=>(r=e!=null?Kn(Qn(e)):{},ei(t||!e||!e.__esModule?$t(r,"default",{value:e,enumerable:!0}):r,e));var ne=$((Va,Ot)=>{"use strict";var ti="2.0.0",ri=Number.MAX_SAFE_INTEGER||9007199254740991,ni=16,ii=250,oi=["major","premajor","minor","preminor","patch","prepatch","prerelease"];Ot.exports={MAX_LENGTH:256,MAX_SAFE_COMPONENT_LENGTH:ni,MAX_SAFE_BUILD_LENGTH:ii,MAX_SAFE_INTEGER:ri,RELEASE_TYPES:oi,SEMVER_SPEC_VERSION:ti,FLAG_INCLUDE_PRERELEASE:1,FLAG_LOOSE:2}});var fe=$((Ga,St)=>{"use strict";var si=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...e)=>console.error("SEMVER",...e):()=>{};St.exports=si});var ie=$((G,Pt)=>{"use strict";var{MAX_SAFE_COMPONENT_LENGTH:_e,MAX_SAFE_BUILD_LENGTH:ai,MAX_LENGTH:ci}=ne(),li=fe();G=Pt.exports={};var di=G.re=[],ui=G.safeRe=[],g=G.src=[],fi=G.safeSrc=[],E=G.t={},pi=0,Me="[a-zA-Z0-9-]",mi=[["\\s",1],["\\d",ci],[Me,ai]],hi=e=>{for(let[t,r]of mi)e=e.split(`${t}*`).join(`${t}{0,${r}}`).split(`${t}+`).join(`${t}{1,${r}}`);return e},I=(e,t,r)=>{let n=hi(t),i=pi++;li(e,i,t),E[e]=i,g[i]=t,fi[i]=n,di[i]=new RegExp(t,r?"g":void 0),ui[i]=new RegExp(n,r?"g":void 0)};I("NUMERICIDENTIFIER","0|[1-9]\\d*");I("NUMERICIDENTIFIERLOOSE","\\d+");I("NONNUMERICIDENTIFIER",`\\d*[a-zA-Z-]${Me}*`);I("MAINVERSION",`(${g[E.NUMERICIDENTIFIER]})\\.(${g[E.NUMERICIDENTIFIER]})\\.(${g[E.NUMERICIDENTIFIER]})`);I("MAINVERSIONLOOSE",`(${g[E.NUMERICIDENTIFIERLOOSE]})\\.(${g[E.NUMERICIDENTIFIERLOOSE]})\\.(${g[E.NUMERICIDENTIFIERLOOSE]})`);I("PRERELEASEIDENTIFIER",`(?:${g[E.NONNUMERICIDENTIFIER]}|${g[E.NUMERICIDENTIFIER]})`);I("PRERELEASEIDENTIFIERLOOSE",`(?:${g[E.NONNUMERICIDENTIFIER]}|${g[E.NUMERICIDENTIFIERLOOSE]})`);I("PRERELEASE",`(?:-(${g[E.PRERELEASEIDENTIFIER]}(?:\\.${g[E.PRERELEASEIDENTIFIER]})*))`);I("PRERELEASELOOSE",`(?:-?(${g[E.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${g[E.PRERELEASEIDENTIFIERLOOSE]})*))`);I("BUILDIDENTIFIER",`${Me}+`);I("BUILD",`(?:\\+(${g[E.BUILDIDENTIFIER]}(?:\\.${g[E.BUILDIDENTIFIER]})*))`);I("FULLPLAIN",`v?${g[E.MAINVERSION]}${g[E.PRERELEASE]}?${g[E.BUILD]}?`);I("FULL",`^${g[E.FULLPLAIN]}$`);I("LOOSEPLAIN",`[v=\\s]*${g[E.MAINVERSIONLOOSE]}${g[E.PRERELEASELOOSE]}?${g[E.BUILD]}?`);I("LOOSE",`^${g[E.LOOSEPLAIN]}$`);I("GTLT","((?:<|>)?=?)");I("XRANGEIDENTIFIERLOOSE",`${g[E.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);I("XRANGEIDENTIFIER",`${g[E.NUMERICIDENTIFIER]}|x|X|\\*`);I("XRANGEPLAIN",`[v=\\s]*(${g[E.XRANGEIDENTIFIER]})(?:\\.(${g[E.XRANGEIDENTIFIER]})(?:\\.(${g[E.XRANGEIDENTIFIER]})(?:${g[E.PRERELEASE]})?${g[E.BUILD]}?)?)?`);I("XRANGEPLAINLOOSE",`[v=\\s]*(${g[E.XRANGEIDENTIFIERLOOSE]})(?:\\.(${g[E.XRANGEIDENTIFIERLOOSE]})(?:\\.(${g[E.XRANGEIDENTIFIERLOOSE]})(?:${g[E.PRERELEASELOOSE]})?${g[E.BUILD]}?)?)?`);I("XRANGE",`^${g[E.GTLT]}\\s*${g[E.XRANGEPLAIN]}$`);I("XRANGELOOSE",`^${g[E.GTLT]}\\s*${g[E.XRANGEPLAINLOOSE]}$`);I("COERCEPLAIN",`(^|[^\\d])(\\d{1,${_e}})(?:\\.(\\d{1,${_e}}))?(?:\\.(\\d{1,${_e}}))?`);I("COERCE",`${g[E.COERCEPLAIN]}(?:$|[^\\d])`);I("COERCEFULL",g[E.COERCEPLAIN]+`(?:${g[E.PRERELEASE]})?(?:${g[E.BUILD]})?(?:$|[^\\d])`);I("COERCERTL",g[E.COERCE],!0);I("COERCERTLFULL",g[E.COERCEFULL],!0);I("LONETILDE","(?:~>?)");I("TILDETRIM",`(\\s*)${g[E.LONETILDE]}\\s+`,!0);G.tildeTrimReplace="$1~";I("TILDE",`^${g[E.LONETILDE]}${g[E.XRANGEPLAIN]}$`);I("TILDELOOSE",`^${g[E.LONETILDE]}${g[E.XRANGEPLAINLOOSE]}$`);I("LONECARET","(?:\\^)");I("CARETTRIM",`(\\s*)${g[E.LONECARET]}\\s+`,!0);G.caretTrimReplace="$1^";I("CARET",`^${g[E.LONECARET]}${g[E.XRANGEPLAIN]}$`);I("CARETLOOSE",`^${g[E.LONECARET]}${g[E.XRANGEPLAINLOOSE]}$`);I("COMPARATORLOOSE",`^${g[E.GTLT]}\\s*(${g[E.LOOSEPLAIN]})$|^$`);I("COMPARATOR",`^${g[E.GTLT]}\\s*(${g[E.FULLPLAIN]})$|^$`);I("COMPARATORTRIM",`(\\s*)${g[E.GTLT]}\\s*(${g[E.LOOSEPLAIN]}|${g[E.XRANGEPLAIN]})`,!0);G.comparatorTrimReplace="$1$2$3";I("HYPHENRANGE",`^\\s*(${g[E.XRANGEPLAIN]})\\s+-\\s+(${g[E.XRANGEPLAIN]})\\s*$`);I("HYPHENRANGELOOSE",`^\\s*(${g[E.XRANGEPLAINLOOSE]})\\s+-\\s+(${g[E.XRANGEPLAINLOOSE]})\\s*$`);I("STAR","(<|>)?=?\\s*\\*");I("GTE0","^\\s*>=\\s*0\\.0\\.0\\s*$");I("GTE0PRE","^\\s*>=\\s*0\\.0\\.0-0\\s*$")});var ve=$((Ja,Rt)=>{"use strict";var gi=Object.freeze({loose:!0}),Ei=Object.freeze({}),yi=e=>e?typeof e!="object"?gi:e:Ei;Rt.exports=yi});var He=$((Xa,Ct)=>{"use strict";var Tt=/^[0-9]+$/,jt=(e,t)=>{if(typeof e=="number"&&typeof t=="number")return e===t?0:e<t?-1:1;let r=Tt.test(e),n=Tt.test(t);return r&&n&&(e=+e,t=+t),e===t?0:r&&!n?-1:n&&!r?1:e<t?-1:1},wi=(e,t)=>jt(t,e);Ct.exports={compareIdentifiers:jt,rcompareIdentifiers:wi}});var L=$((Ba,At)=>{"use strict";var $e=fe(),{MAX_LENGTH:xt,MAX_SAFE_INTEGER:Ie}=ne(),{safeRe:Oe,t:Se}=ie(),bi=ve(),{compareIdentifiers:Ue}=He(),vi=(e,t)=>{let r=t.split(".");if(r.length>e.length)return!1;for(let n=0;n<r.length;n++)if(Ue(e[n],r[n])!==0)return!1;return!0},Ve=class e{constructor(t,r){if(r=bi(r),t instanceof e){if(t.loose===!!r.loose&&t.includePrerelease===!!r.includePrerelease)return t;t=t.version}else if(typeof t!="string")throw new TypeError(`Invalid version. Must be a string. Got type "${typeof t}".`);if(t.length>xt)throw new TypeError(`version is longer than ${xt} characters`);$e("SemVer",t,r),this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease;let n=t.trim().match(r.loose?Oe[Se.LOOSE]:Oe[Se.FULL]);if(!n)throw new TypeError(`Invalid Version: ${t}`);if(this.raw=t,this.major=+n[1],this.minor=+n[2],this.patch=+n[3],this.major>Ie||this.major<0)throw new TypeError("Invalid major version");if(this.minor>Ie||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>Ie||this.patch<0)throw new TypeError("Invalid patch version");n[4]?this.prerelease=n[4].split(".").map(i=>{if(/^[0-9]+$/.test(i)){let o=+i;if(o>=0&&o<Ie)return o}return i}):this.prerelease=[],this.build=n[5]?n[5].split("."):[],this.format()}format(){return this.version=`${this.major}.${this.minor}.${this.patch}`,this.prerelease.length&&(this.version+=`-${this.prerelease.join(".")}`),this.version}toString(){return this.version}compare(t){if($e("SemVer.compare",this.version,this.options,t),!(t instanceof e)){if(typeof t=="string"&&t===this.version)return 0;t=new e(t,this.options)}return t.version===this.version?0:this.compareMain(t)||this.comparePre(t)}compareMain(t){return t instanceof e||(t=new e(t,this.options)),this.major<t.major?-1:this.major>t.major?1:this.minor<t.minor?-1:this.minor>t.minor?1:this.patch<t.patch?-1:this.patch>t.patch?1:0}comparePre(t){if(t instanceof e||(t=new e(t,this.options)),this.prerelease.length&&!t.prerelease.length)return-1;if(!this.prerelease.length&&t.prerelease.length)return 1;if(!this.prerelease.length&&!t.prerelease.length)return 0;let r=0;do{let n=this.prerelease[r],i=t.prerelease[r];if($e("prerelease compare",r,n,i),n===void 0&&i===void 0)return 0;if(i===void 0)return 1;if(n===void 0)return-1;if(n===i)continue;return Ue(n,i)}while(++r)}compareBuild(t){t instanceof e||(t=new e(t,this.options));let r=0;do{let n=this.build[r],i=t.build[r];if($e("build compare",r,n,i),n===void 0&&i===void 0)return 0;if(i===void 0)return 1;if(n===void 0)return-1;if(n===i)continue;return Ue(n,i)}while(++r)}inc(t,r,n){if(t.startsWith("pre")){if(!r&&n===!1)throw new Error("invalid increment argument: identifier is empty");if(r){let i=`-${r}`.match(this.options.loose?Oe[Se.PRERELEASELOOSE]:Oe[Se.PRERELEASE]);if(!i||i[1]!==r)throw new Error(`invalid identifier: ${r}`)}}switch(t){case"premajor":this.prerelease.length=0,this.patch=0,this.minor=0,this.major++,this.inc("pre",r,n);break;case"preminor":this.prerelease.length=0,this.patch=0,this.minor++,this.inc("pre",r,n);break;case"prepatch":this.prerelease.length=0,this.inc("patch",r,n),this.inc("pre",r,n);break;case"prerelease":this.prerelease.length===0&&this.inc("patch",r,n),this.inc("pre",r,n);break;case"release":if(this.prerelease.length===0)throw new Error(`version ${this.raw} is not a prerelease`);this.prerelease.length=0;break;case"major":(this.minor!==0||this.patch!==0||this.prerelease.length===0)&&this.major++,this.minor=0,this.patch=0,this.prerelease=[];break;case"minor":(this.patch!==0||this.prerelease.length===0)&&this.minor++,this.patch=0,this.prerelease=[];break;case"patch":this.prerelease.length===0&&this.patch++,this.prerelease=[];break;case"pre":{let i=Number(n)?1:0;if(this.prerelease.length===0)this.prerelease=[i];else{let o=this.prerelease.length;for(;--o>=0;)typeof this.prerelease[o]=="number"&&(this.prerelease[o]++,o=-2);if(o===-1){if(r===this.prerelease.join(".")&&n===!1)throw new Error("invalid increment argument: identifier already exists");this.prerelease.push(i)}}if(r){let o=[r,i];if(n===!1&&(o=[r]),vi(this.prerelease,r)){let s=this.prerelease[r.split(".").length];isNaN(s)&&(this.prerelease=o)}else this.prerelease=o}break}default:throw new Error(`invalid increment argument: ${t}`)}return this.raw=this.format(),this.build.length&&(this.raw+=`+${this.build.join(".")}`),this}};At.exports=Ve});var Y=$((Ka,Lt)=>{"use strict";var Nt=L(),$i=(e,t,r=!1)=>{if(e instanceof Nt)return e;try{return new Nt(e,t)}catch(n){if(!r)return null;throw n}};Lt.exports=$i});var zt=$((Wa,qt)=>{"use strict";var Ii=Y(),Oi=(e,t)=>{let r=Ii(e,t);return r?r.version:null};qt.exports=Oi});var Dt=$((Ya,Ft)=>{"use strict";var Si=Y(),Pi=(e,t)=>{let r=Si(e.trim().replace(/^[=v]+/,""),t);return r?r.version:null};Ft.exports=Pi});var Mt=$((Qa,_t)=>{"use strict";var kt=L(),Ri=(e,t,r,n,i)=>{typeof r=="string"&&(i=n,n=r,r=void 0);try{return new kt(e instanceof kt?e.version:e,r).inc(t,n,i).version}catch{return null}};_t.exports=Ri});var Vt=$((Za,Ut)=>{"use strict";var Ht=Y(),Ti=(e,t)=>{let r=Ht(e,null,!0),n=Ht(t,null,!0),i=r.compare(n);if(i===0)return null;let o=i>0,s=o?r:n,a=o?n:r,c=!!s.prerelease.length;if(!!a.prerelease.length&&!c){if(!a.patch&&!a.minor)return"major";if(a.compareMain(s)===0)return a.minor&&!a.patch?"minor":"patch"}let p=c?"pre":"";return r.major!==n.major?p+"major":r.minor!==n.minor?p+"minor":r.patch!==n.patch?p+"patch":"prerelease"};Ut.exports=Ti});var Jt=$((ec,Gt)=>{"use strict";var ji=L(),Ci=(e,t)=>new ji(e,t).major;Gt.exports=Ci});var Bt=$((tc,Xt)=>{"use strict";var xi=L(),Ai=(e,t)=>new xi(e,t).minor;Xt.exports=Ai});var Wt=$((rc,Kt)=>{"use strict";var Ni=L(),Li=(e,t)=>new Ni(e,t).patch;Kt.exports=Li});var Qt=$((nc,Yt)=>{"use strict";var qi=Y(),zi=(e,t)=>{let r=qi(e,t);return r&&r.prerelease.length?r.prerelease:null};Yt.exports=zi});var M=$((ic,er)=>{"use strict";var Zt=L(),Fi=(e,t,r)=>new Zt(e,r).compare(new Zt(t,r));er.exports=Fi});var rr=$((oc,tr)=>{"use strict";var Di=M(),ki=(e,t,r)=>Di(t,e,r);tr.exports=ki});var ir=$((sc,nr)=>{"use strict";var _i=M(),Mi=(e,t)=>_i(e,t,!0);nr.exports=Mi});var Pe=$((ac,sr)=>{"use strict";var or=L(),Hi=(e,t,r)=>{let n=new or(e,r),i=new or(t,r);return n.compare(i)||n.compareBuild(i)};sr.exports=Hi});var cr=$((cc,ar)=>{"use strict";var Ui=Pe(),Vi=(e,t)=>e.sort((r,n)=>Ui(r,n,t));ar.exports=Vi});var dr=$((lc,lr)=>{"use strict";var Gi=Pe(),Ji=(e,t)=>e.sort((r,n)=>Gi(n,r,t));lr.exports=Ji});var pe=$((dc,ur)=>{"use strict";var Xi=M(),Bi=(e,t,r)=>Xi(e,t,r)>0;ur.exports=Bi});var Re=$((uc,fr)=>{"use strict";var Ki=M(),Wi=(e,t,r)=>Ki(e,t,r)<0;fr.exports=Wi});var Ge=$((fc,pr)=>{"use strict";var Yi=M(),Qi=(e,t,r)=>Yi(e,t,r)===0;pr.exports=Qi});var Je=$((pc,mr)=>{"use strict";var Zi=M(),eo=(e,t,r)=>Zi(e,t,r)!==0;mr.exports=eo});var Te=$((mc,hr)=>{"use strict";var to=M(),ro=(e,t,r)=>to(e,t,r)>=0;hr.exports=ro});var je=$((hc,gr)=>{"use strict";var no=M(),io=(e,t,r)=>no(e,t,r)<=0;gr.exports=io});var Xe=$((gc,Er)=>{"use strict";var oo=Ge(),so=Je(),ao=pe(),co=Te(),lo=Re(),uo=je(),fo=(e,t,r,n)=>{switch(t){case"===":return typeof e=="object"&&(e=e.version),typeof r=="object"&&(r=r.version),e===r;case"!==":return typeof e=="object"&&(e=e.version),typeof r=="object"&&(r=r.version),e!==r;case"":case"=":case"==":return oo(e,r,n);case"!=":return so(e,r,n);case">":return ao(e,r,n);case">=":return co(e,r,n);case"<":return lo(e,r,n);case"<=":return uo(e,r,n);default:throw new TypeError(`Invalid operator: ${t}`)}};Er.exports=fo});var wr=$((Ec,yr)=>{"use strict";var po=L(),mo=Y(),{safeRe:Ce,t:xe}=ie(),ho=(e,t)=>{if(e instanceof po)return e;if(typeof e=="number"&&(e=String(e)),typeof e!="string")return null;t=t||{};let r=null;if(!t.rtl)r=e.match(t.includePrerelease?Ce[xe.COERCEFULL]:Ce[xe.COERCE]);else{let c=t.includePrerelease?Ce[xe.COERCERTLFULL]:Ce[xe.COERCERTL],u;for(;(u=c.exec(e))&&(!r||r.index+r[0].length!==e.length);)(!r||u.index+u[0].length!==r.index+r[0].length)&&(r=u),c.lastIndex=u.index+u[1].length+u[2].length;c.lastIndex=-1}if(r===null)return null;let n=r[2],i=r[3]||"0",o=r[4]||"0",s=t.includePrerelease&&r[5]?`-${r[5]}`:"",a=t.includePrerelease&&r[6]?`+${r[6]}`:"";return mo(`${n}.${i}.${o}${s}${a}`,t)};yr.exports=ho});var vr=$((yc,br)=>{"use strict";var go=Y(),Eo=ne(),yo=L(),wo=(e,t,r)=>{if(!Eo.RELEASE_TYPES.includes(t))return null;let n=bo(e,r);return n&&vo(n,t)},bo=(e,t)=>{let r=e instanceof yo?e.version:e;return go(r,t)},vo=(e,t)=>{if($o(t))return e.version;switch(e.prerelease=[],t){case"major":e.minor=0,e.patch=0;break;case"minor":e.patch=0;break}return e.format()},$o=e=>e.startsWith("pre");br.exports=wo});var Ir=$((wc,$r)=>{"use strict";var Be=class{constructor(){this.max=1e3,this.map=new Map}get(t){let r=this.map.get(t);if(r!==void 0)return this.map.delete(t),this.map.set(t,r),r}delete(t){return this.map.delete(t)}set(t,r){if(!this.delete(t)&&r!==void 0){if(this.map.size>=this.max){let i=this.map.keys().next().value;this.delete(i)}this.map.set(t,r)}return this}};$r.exports=Be});var H=$((bc,Rr)=>{"use strict";var Io=/\s+/g,Ke=class e{constructor(t,r){if(r=So(r),t instanceof e)return t.loose===!!r.loose&&t.includePrerelease===!!r.includePrerelease?t:new e(t.raw,r);if(t instanceof We)return this.raw=t.value,this.set=[[t]],this.formatted=void 0,this;if(this.options=r,this.loose=!!r.loose,this.includePrerelease=!!r.includePrerelease,this.raw=t.trim().replace(Io," "),this.set=this.raw.split("||").map(n=>this.parseRange(n.trim())).filter(n=>n.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${this.raw}`);if(this.set.length>1){let n=this.set[0];if(this.set=this.set.filter(i=>!Sr(i[0])),this.set.length===0)this.set=[n];else if(this.set.length>1){for(let i of this.set)if(i.length===1&&Lo(i[0])){this.set=[i];break}}}this.formatted=void 0}get range(){if(this.formatted===void 0){this.formatted="";for(let t=0;t<this.set.length;t++){t>0&&(this.formatted+="||");let r=this.set[t];for(let n=0;n<r.length;n++)n>0&&(this.formatted+=" "),this.formatted+=r[n].toString().trim()}}return this.formatted}format(){return this.range}toString(){return this.range}parseRange(t){t=t.replace(No,"");let n=((this.options.includePrerelease&&xo)|(this.options.loose&&Ao))+":"+t,i=Or.get(n);if(i)return i;let o=this.options.loose,s=o?D[q.HYPHENRANGELOOSE]:D[q.HYPHENRANGE];t=t.replace(s,Go(this.options.includePrerelease)),T("hyphen replace",t),t=t.replace(D[q.COMPARATORTRIM],To),T("comparator trim",t),t=t.replace(D[q.TILDETRIM],jo),T("tilde trim",t),t=t.replace(D[q.CARETTRIM],Co),T("caret trim",t);let a=t.split(" ").map(y=>qo(y,this.options)).join(" ").split(/\s+/).map(y=>Vo(y,this.options));o&&(a=a.filter(y=>(T("loose invalid filter",y,this.options),!!y.match(D[q.COMPARATORLOOSE])))),T("range list",a);let c=new Map,u=a.map(y=>new We(y,this.options));for(let y of u){if(Sr(y))return[y];c.set(y.value,y)}c.size>1&&c.has("")&&c.delete("");let p=[...c.values()];return Or.set(n,p),p}intersects(t,r){if(!(t instanceof e))throw new TypeError("a Range is required");return this.set.some(n=>Pr(n,r)&&t.set.some(i=>Pr(i,r)&&n.every(o=>i.every(s=>o.intersects(s,r)))))}test(t){if(!t)return!1;if(typeof t=="string")try{t=new Po(t,this.options)}catch{return!1}for(let r=0;r<this.set.length;r++)if(Jo(this.set[r],t,this.options))return!0;return!1}};Rr.exports=Ke;var Oo=Ir(),Or=new Oo,So=ve(),We=me(),T=fe(),Po=L(),{safeRe:D,src:Ro,t:q,comparatorTrimReplace:To,tildeTrimReplace:jo,caretTrimReplace:Co}=ie(),{FLAG_INCLUDE_PRERELEASE:xo,FLAG_LOOSE:Ao}=ne(),No=new RegExp(Ro[q.BUILD],"g"),Sr=e=>e.value==="<0.0.0-0",Lo=e=>e.value==="",Pr=(e,t)=>{let r=!0,n=e.slice(),i=n.pop();for(;r&&n.length;)r=n.every(o=>i.intersects(o,t)),i=n.pop();return r},qo=(e,t)=>(e=e.replace(D[q.BUILD],""),T("comp",e,t),e=ko(e,t),T("caret",e),e=Fo(e,t),T("tildes",e),e=Mo(e,t),T("xrange",e),e=Uo(e,t),T("stars",e),e),A=e=>!e||e.toLowerCase()==="x"||e==="*",zo=(e,t,r)=>A(e)&&!A(t)||A(t)&&r&&!A(r),Fo=(e,t)=>e.trim().split(/\s+/).map(r=>Do(r,t)).join(" "),Do=(e,t)=>{let r=t.loose?D[q.TILDELOOSE]:D[q.TILDE],n=t.includePrerelease?"-0":"";return e.replace(r,(i,o,s,a,c)=>{T("tilde",e,i,o,s,a,c);let u;return A(o)?u="":A(s)?u=`>=${o}.0.0${n} <${+o+1}.0.0-0`:A(a)?u=`>=${o}.${s}.0${n} <${o}.${+s+1}.0-0`:c?(T("replaceTilde pr",c),u=`>=${o}.${s}.${a}-${c} <${o}.${+s+1}.0-0`):u=`>=${o}.${s}.${a} <${o}.${+s+1}.0-0`,T("tilde return",u),u})},ko=(e,t)=>e.trim().split(/\s+/).map(r=>_o(r,t)).join(" "),_o=(e,t)=>{T("caret",e,t);let r=t.loose?D[q.CARETLOOSE]:D[q.CARET],n=t.includePrerelease?"-0":"";return e.replace(r,(i,o,s,a,c)=>{T("caret",e,i,o,s,a,c);let u;return A(o)?u="":A(s)?u=`>=${o}.0.0${n} <${+o+1}.0.0-0`:A(a)?o==="0"?u=`>=${o}.${s}.0${n} <${o}.${+s+1}.0-0`:u=`>=${o}.${s}.0${n} <${+o+1}.0.0-0`:c?(T("replaceCaret pr",c),o==="0"?s==="0"?u=`>=${o}.${s}.${a}-${c} <${o}.${s}.${+a+1}-0`:u=`>=${o}.${s}.${a}-${c} <${o}.${+s+1}.0-0`:u=`>=${o}.${s}.${a}-${c} <${+o+1}.0.0-0`):(T("no pr"),o==="0"?s==="0"?u=`>=${o}.${s}.${a} <${o}.${s}.${+a+1}-0`:u=`>=${o}.${s}.${a} <${o}.${+s+1}.0-0`:u=`>=${o}.${s}.${a} <${+o+1}.0.0-0`),T("caret return",u),u})},Mo=(e,t)=>(T("replaceXRanges",e,t),e.split(/\s+/).map(r=>Ho(r,t)).join(" ")),Ho=(e,t)=>{e=e.trim();let r=t.loose?D[q.XRANGELOOSE]:D[q.XRANGE];return e.replace(r,(n,i,o,s,a,c)=>{if(T("xRange",e,n,i,o,s,a,c),zo(o,s,a))return e;let u=A(o),p=u||A(s),y=p||A(a),m=y;return i==="="&&m&&(i=""),c=t.includePrerelease?"-0":"",u?i===">"||i==="<"?n="<0.0.0-0":n="*":i&&m?(p&&(s=0),a=0,i===">"?(i=">=",p?(o=+o+1,s=0,a=0):(s=+s+1,a=0)):i==="<="&&(i="<",p?o=+o+1:s=+s+1),i==="<"&&(c="-0"),n=`${i+o}.${s}.${a}${c}`):p?n=`>=${o}.0.0${c} <${+o+1}.0.0-0`:y&&(n=`>=${o}.${s}.0${c} <${o}.${+s+1}.0-0`),T("xRange return",n),n})},Uo=(e,t)=>(T("replaceStars",e,t),e.trim().replace(D[q.STAR],"")),Vo=(e,t)=>(T("replaceGTE0",e,t),e.trim().replace(D[t.includePrerelease?q.GTE0PRE:q.GTE0],"")),Go=e=>(t,r,n,i,o,s,a,c,u,p,y,m)=>(A(n)?r="":A(i)?r=`>=${n}.0.0${e?"-0":""}`:A(o)?r=`>=${n}.${i}.0${e?"-0":""}`:s?r=`>=${r}`:r=`>=${r}${e?"-0":""}`,A(u)?c="":A(p)?c=`<${+u+1}.0.0-0`:A(y)?c=`<${u}.${+p+1}.0-0`:m?c=`<=${u}.${p}.${y}-${m}`:e?c=`<${u}.${p}.${+y+1}-0`:c=`<=${c}`,`${r} ${c}`.trim()),Jo=(e,t,r)=>{for(let n=0;n<e.length;n++)if(!e[n].test(t))return!1;if(t.prerelease.length&&!r.includePrerelease){for(let n=0;n<e.length;n++)if(T(e[n].semver),e[n].semver!==We.ANY&&e[n].semver.prerelease.length>0){let i=e[n].semver;if(i.major===t.major&&i.minor===t.minor&&i.patch===t.patch)return!0}return!1}return!0}});var me=$((vc,Nr)=>{"use strict";var he=Symbol("SemVer ANY"),Ze=class e{static get ANY(){return he}constructor(t,r){if(r=Tr(r),t instanceof e){if(t.loose===!!r.loose)return t;t=t.value}t=t.trim().split(/\s+/).join(" "),Qe("comparator",t,r),this.options=r,this.loose=!!r.loose,this.parse(t),this.semver===he?this.value="":this.value=this.operator+this.semver.version,Qe("comp",this)}parse(t){let r=this.options.loose?jr[Cr.COMPARATORLOOSE]:jr[Cr.COMPARATOR],n=t.match(r);if(!n)throw new TypeError(`Invalid comparator: ${t}`);this.operator=n[1]!==void 0?n[1]:"",this.operator==="="&&(this.operator=""),n[2]?this.semver=new xr(n[2],this.options.loose):this.semver=he}toString(){return this.value}test(t){if(Qe("Comparator.test",t,this.options.loose),this.semver===he||t===he)return!0;if(typeof t=="string")try{t=new xr(t,this.options)}catch{return!1}return Ye(t,this.operator,this.semver,this.options)}intersects(t,r){if(!(t instanceof e))throw new TypeError("a Comparator is required");return this.operator===""?this.value===""?!0:new Ar(t.value,r).test(this.value):t.operator===""?t.value===""?!0:new Ar(this.value,r).test(t.semver):(r=Tr(r),r.includePrerelease&&(this.value==="<0.0.0-0"||t.value==="<0.0.0-0")||!r.includePrerelease&&(this.value.startsWith("<0.0.0")||t.value.startsWith("<0.0.0"))?!1:!!(this.operator.startsWith(">")&&t.operator.startsWith(">")||this.operator.startsWith("<")&&t.operator.startsWith("<")||this.semver.version===t.semver.version&&this.operator.includes("=")&&t.operator.includes("=")||Ye(this.semver,"<",t.semver,r)&&this.operator.startsWith(">")&&t.operator.startsWith("<")||Ye(this.semver,">",t.semver,r)&&this.operator.startsWith("<")&&t.operator.startsWith(">")))}};Nr.exports=Ze;var Tr=ve(),{safeRe:jr,t:Cr}=ie(),Ye=Xe(),Qe=fe(),xr=L(),Ar=H()});var ge=$(($c,Lr)=>{"use strict";var Xo=H(),Bo=(e,t,r)=>{try{t=new Xo(t,r)}catch{return!1}return t.test(e)};Lr.exports=Bo});var zr=$((Ic,qr)=>{"use strict";var Ko=H(),Wo=(e,t)=>new Ko(e,t).set.map(r=>r.map(n=>n.value).join(" ").trim().split(" "));qr.exports=Wo});var Dr=$((Oc,Fr)=>{"use strict";var Yo=L(),Qo=H(),Zo=(e,t,r)=>{let n=null,i=null,o=null;try{o=new Qo(t,r)}catch{return null}return e.forEach(s=>{o.test(s)&&(!n||i.compare(s)===-1)&&(n=s,i=new Yo(n,r))}),n};Fr.exports=Zo});var _r=$((Sc,kr)=>{"use strict";var es=L(),ts=H(),rs=(e,t,r)=>{let n=null,i=null,o=null;try{o=new ts(t,r)}catch{return null}return e.forEach(s=>{o.test(s)&&(!n||i.compare(s)===1)&&(n=s,i=new es(n,r))}),n};kr.exports=rs});var Ur=$((Pc,Hr)=>{"use strict";var et=L(),ns=H(),Mr=pe(),is=(e,t)=>{e=new ns(e,t);let r=new et("0.0.0");if(e.test(r)||(r=new et("0.0.0-0"),e.test(r)))return r;r=null;for(let n=0;n<e.set.length;++n){let i=e.set[n],o=null;i.forEach(s=>{let a=new et(s.semver.version);switch(s.operator){case">":a.prerelease.length===0?a.patch++:a.prerelease.push(0),a.raw=a.format();case"":case">=":(!o||Mr(a,o))&&(o=a);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${s.operator}`)}}),o&&(!r||Mr(r,o))&&(r=o)}return r&&e.test(r)?r:null};Hr.exports=is});var Gr=$((Rc,Vr)=>{"use strict";var os=H(),ss=(e,t)=>{try{return new os(e,t).range||"*"}catch{return null}};Vr.exports=ss});var Ae=$((Tc,Kr)=>{"use strict";var as=L(),Br=me(),{ANY:cs}=Br,ls=H(),ds=ge(),Jr=pe(),Xr=Re(),us=je(),fs=Te(),ps=(e,t,r,n)=>{e=new as(e,n),t=new ls(t,n);let i,o,s,a,c;switch(r){case">":i=Jr,o=us,s=Xr,a=">",c=">=";break;case"<":i=Xr,o=fs,s=Jr,a="<",c="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(ds(e,t,n))return!1;for(let u=0;u<t.set.length;++u){let p=t.set[u],y=null,m=null;if(p.forEach(f=>{f.semver===cs&&(f=new Br(">=0.0.0")),y=y||f,m=m||f,i(f.semver,y.semver,n)?y=f:s(f.semver,m.semver,n)&&(m=f)}),y.operator===a||y.operator===c||(!m.operator||m.operator===a)&&o(e,m.semver))return!1;if(m.operator===c&&s(e,m.semver))return!1}return!0};Kr.exports=ps});var Yr=$((jc,Wr)=>{"use strict";var ms=Ae(),hs=(e,t,r)=>ms(e,t,">",r);Wr.exports=hs});var Zr=$((Cc,Qr)=>{"use strict";var gs=Ae(),Es=(e,t,r)=>gs(e,t,"<",r);Qr.exports=Es});var rn=$((xc,tn)=>{"use strict";var en=H(),ys=(e,t,r)=>(e=new en(e,r),t=new en(t,r),e.intersects(t,r));tn.exports=ys});var on=$((Ac,nn)=>{"use strict";var ws=ge(),bs=M();nn.exports=(e,t,r)=>{let n=[],i=null,o=null,s=e.sort((p,y)=>bs(p,y,r));for(let p of s)ws(p,t,r)?(o=p,i||(i=p)):(o&&n.push([i,o]),o=null,i=null);i&&n.push([i,null]);let a=[];for(let[p,y]of n)p===y?a.push(p):!y&&p===s[0]?a.push("*"):y?p===s[0]?a.push(`<=${y}`):a.push(`${p} - ${y}`):a.push(`>=${p}`);let c=a.join(" || "),u=typeof t.raw=="string"?t.raw:String(t);return c.length<u.length?c:t}});var un=$((Nc,dn)=>{"use strict";var sn=H(),nt=me(),{ANY:tt}=nt,rt=ge(),it=M(),vs=(e,t,r={})=>{if(e===t)return!0;e=new sn(e,r),t=new sn(t,r);let n=!1;e:for(let i of e.set){for(let o of t.set){let s=Is(i,o,r);if(n=n||s!==null,s)continue e}if(n)return!1}return!0},$s=[new nt(">=0.0.0-0")],an=[new nt(">=0.0.0")],Is=(e,t,r)=>{if(e===t)return!0;if(e.length===1&&e[0].semver===tt){if(t.length===1&&t[0].semver===tt)return!0;r.includePrerelease?e=$s:e=an}if(t.length===1&&t[0].semver===tt){if(r.includePrerelease)return!0;t=an}let n=new Set,i,o;for(let f of e)f.operator===">"||f.operator===">="?i=cn(i,f,r):f.operator==="<"||f.operator==="<="?o=ln(o,f,r):n.add(f.semver);if(n.size>1)return null;let s;if(i&&o){if(s=it(i.semver,o.semver,r),s>0)return null;if(s===0&&(i.operator!==">="||o.operator!=="<="))return null}for(let f of n){if(i&&!rt(f,String(i),r)||o&&!rt(f,String(o),r))return null;for(let R of t)if(!rt(f,String(R),r))return!1;return!0}let a,c,u,p,y=o&&!r.includePrerelease&&o.semver.prerelease.length?o.semver:!1,m=i&&!r.includePrerelease&&i.semver.prerelease.length?i.semver:!1;y&&y.prerelease.length===1&&o.operator==="<"&&y.prerelease[0]===0&&(y=!1);for(let f of t){if(p=p||f.operator===">"||f.operator===">=",u=u||f.operator==="<"||f.operator==="<=",i){if(m&&f.semver.prerelease&&f.semver.prerelease.length&&f.semver.major===m.major&&f.semver.minor===m.minor&&f.semver.patch===m.patch&&(m=!1),f.operator===">"||f.operator===">="){if(a=cn(i,f,r),a===f&&a!==i)return!1}else if(i.operator===">="&&!f.test(i.semver))return!1}if(o){if(y&&f.semver.prerelease&&f.semver.prerelease.length&&f.semver.major===y.major&&f.semver.minor===y.minor&&f.semver.patch===y.patch&&(y=!1),f.operator==="<"||f.operator==="<="){if(c=ln(o,f,r),c===f&&c!==o)return!1}else if(o.operator==="<="&&!f.test(o.semver))return!1}if(!f.operator&&(o||i)&&s!==0)return!1}return!(i&&u&&!o&&s!==0||o&&p&&!i&&s!==0||m||y)},cn=(e,t,r)=>{if(!e)return t;let n=it(e.semver,t.semver,r);return n>0?e:n<0||t.operator===">"&&e.operator===">="?t:e},ln=(e,t,r)=>{if(!e)return t;let n=it(e.semver,t.semver,r);return n<0?e:n>0||t.operator==="<"&&e.operator==="<="?t:e};dn.exports=vs});var st=$((Lc,mn)=>{"use strict";var ot=ie(),fn=ne(),Os=L(),pn=He(),Ss=Y(),Ps=zt(),Rs=Dt(),Ts=Mt(),js=Vt(),Cs=Jt(),xs=Bt(),As=Wt(),Ns=Qt(),Ls=M(),qs=rr(),zs=ir(),Fs=Pe(),Ds=cr(),ks=dr(),_s=pe(),Ms=Re(),Hs=Ge(),Us=Je(),Vs=Te(),Gs=je(),Js=Xe(),Xs=wr(),Bs=vr(),Ks=me(),Ws=H(),Ys=ge(),Qs=zr(),Zs=Dr(),ea=_r(),ta=Ur(),ra=Gr(),na=Ae(),ia=Yr(),oa=Zr(),sa=rn(),aa=on(),ca=un();mn.exports={parse:Ss,valid:Ps,clean:Rs,inc:Ts,diff:js,major:Cs,minor:xs,patch:As,prerelease:Ns,compare:Ls,rcompare:qs,compareLoose:zs,compareBuild:Fs,sort:Ds,rsort:ks,gt:_s,lt:Ms,eq:Hs,neq:Us,gte:Vs,lte:Gs,cmp:Js,coerce:Xs,truncate:Bs,Comparator:Ks,Range:Ws,satisfies:Ys,toComparators:Qs,maxSatisfying:Zs,minSatisfying:ea,minVersion:ta,validRange:ra,outside:na,gtr:ia,ltr:oa,intersects:sa,simplifyRange:aa,subset:ca,SemVer:Os,re:ot.re,src:ot.src,tokens:ot.t,SEMVER_SPEC_VERSION:fn.SEMVER_SPEC_VERSION,RELEASE_TYPES:fn.RELEASE_TYPES,compareIdentifiers:pn.compareIdentifiers,rcompareIdentifiers:pn.rcompareIdentifiers}});var bn=It(st(),1),la=Object.freeze(["editor","game-development","game-test","game-production"]);function En(e,t="Plugin config"){let r=new Set,n=(i,o)=>{if(i===null||typeof i=="string"||typeof i=="boolean")return i;if(typeof i=="number"){if(!Number.isFinite(i))throw new Error(`${o} must contain finite numbers.`);return i}if(typeof i!="object")throw new Error(`${o} must contain static JSON data only.`);if(r.has(i))throw new Error(`${o} must not contain circular references.`);r.add(i);try{if(Array.isArray(i)){if(Object.getPrototypeOf(i)!==Array.prototype)throw new Error(`${o} must contain plain arrays only.`);let c=[];for(let u=0;u<i.length;u+=1){let p=Object.getOwnPropertyDescriptor(i,String(u));if(!p?.enumerable||!("value"in p))throw new Error(`${o} must be a dense data array.`);c.push(n(p.value,`${o}[${u}]`))}for(let u of Reflect.ownKeys(i))if(u!=="length"&&(typeof u!="string"||!/^(0|[1-9][0-9]*)$/.test(u)||Number(u)>=i.length))throw new Error(`${o} contains unsupported property: ${String(u)}`);return Object.freeze(c)}let s=Object.getPrototypeOf(i);if(s!==Object.prototype&&s!==null)throw new Error(`${o} must contain plain objects only.`);let a=Object.create(null);for(let c of Reflect.ownKeys(i)){if(typeof c!="string"||c==="__proto__")throw new Error(`${o} contains unsupported property: ${String(c)}`);let u=Object.getOwnPropertyDescriptor(i,c);if(!u?.enumerable||!("value"in u))throw new Error(`${o}.${c} must be an enumerable data field.`);a[c]=n(u.value,`${o}.${c}`)}return Object.freeze(a)}finally{r.delete(i)}};return n(e,t)}var da=/^[a-z0-9]+(?:[._-][a-z0-9]+)+$/,ua=/^[a-z0-9]+(?:[._-][A-Za-z0-9]+)+$/;function oe(e,t){if(!da.test(e))throw new Error(`${t} must be a namespaced lowercase id, got: ${e}`);return e}function fa(e,t){if(!ua.test(e))throw new Error(`${t} must be a namespaced event id, got: ${e}`);return e}function K(e,t,r){if(!e||typeof e!="object"||Array.isArray(e))throw new Error(`${r} must be an object.`);let n=Object.getPrototypeOf(e);if(n!==Object.prototype&&n!==null)throw new Error(`${r} must be a plain object.`);let i=new Set(t),o=Object.create(null);for(let s of Reflect.ownKeys(e)){if(typeof s!="string"||!i.has(s))throw new Error(`${r} contains unknown field: ${String(s)}`);if(s==="__proto__")throw new Error(`${r} contains reserved field: ${s}`);let a=Object.getOwnPropertyDescriptor(e,s);if(!a?.enumerable||!("value"in a))throw new Error(`${r} must contain enumerable data fields only: ${s}`);o[s]=a.value}return o}function Ne(e,t){if(!Array.isArray(e))throw new Error(`${t} must be an array.`);let r=[];for(let n=0;n<e.length;n+=1){let i=Object.getOwnPropertyDescriptor(e,String(n));if(!i?.enumerable||!("value"in i))throw new Error(`${t} must be a dense data array.`);r.push(i.value)}for(let n of Reflect.ownKeys(e))if(n!=="length"&&(typeof n!="string"||!/^(0|[1-9][0-9]*)$/.test(n)||Number(n)>=e.length))throw new Error(`${t} contains unsupported property: ${String(n)}`);return r}function at(e,t,r){if(!Object.prototype.hasOwnProperty.call(e,t))return;let n=Ne(e[t],r).map(i=>{if(typeof i!="string")throw new Error(`${r} entries must be strings.`);return oe(i,`${r} entry`)});return Object.freeze([...new Set(n)])}function yn(e){let t=K(e,["id","version","apiVersion","requires","provides","entries","environmentContracts","deploymentConstraints","testedAgainst"],"Plugin manifest"),r=K(t.entries,["runtime","editor","renderer","tooling","agent"],"Plugin entries");if(typeof t.id!="string")throw new Error("Plugin id must be a string.");let n=oe(t.id,"Plugin id");if(typeof t.version!="string"||!vn(t.version))throw new Error(`Plugin version must be semver, got: ${String(t.version)}`);if(!Number.isInteger(t.apiVersion)||t.apiVersion<1)throw new Error("Plugin apiVersion must be a positive integer.");let i=hn(t.requires,"Plugin requirements","Required services"),o=gn(t.provides,"Plugin provides","Provided features","Provided services"),s=new Set(["runtime","editor","renderer","tooling","agent"]),a=Object.entries(r);if(a.length===0)throw new Error(`Plugin manifest must declare at least one environment entry: ${n}`);for(let[f,R]of a){if(!s.has(f))throw new Error(`Unknown plugin environment entry: ${f}`);if(typeof R!="string"||!R.trim())throw new Error(`Plugin environment entry path is required: ${n} (${f})`)}let c=t.environmentContracts===void 0?void 0:K(t.environmentContracts,["runtime","editor","renderer","tooling","agent"],"Plugin environment contracts"),u=c?Object.freeze(Object.fromEntries(Object.entries(c).map(([f,R])=>{if(!Object.prototype.hasOwnProperty.call(r,f))throw new Error(`Plugin environment contract requires a matching entry: ${n} (${f})`);let v=K(R,["requires","provides","scopes"],`Plugin environment contract ${f}`),j=v.scopes===void 0?void 0:Object.freeze(Ne(v.scopes,`Plugin environment contract ${f}.scopes`).map(k=>{if(typeof k!="string"||!ma(k))throw new Error(`Unknown Plugin scope: ${String(k)}`);return k}));return[f,Object.freeze({requires:hn(v.requires,`Plugin environment contract ${f}.requires`),provides:gn(v.provides,`Plugin environment contract ${f}.provides`),...j?{scopes:Object.freeze([...new Set(j)])}:{}})]}))):void 0,p=t.deploymentConstraints===void 0?void 0:Ea(t.deploymentConstraints),y=t.testedAgainst===void 0?void 0:pa(t.testedAgainst),m=Object.freeze({id:n,version:t.version,apiVersion:t.apiVersion,requires:i,provides:o,entries:Object.freeze(Object.fromEntries(a.map(([f,R])=>[f,R.trim()]))),...u?{environmentContracts:u}:{},...p?{deploymentConstraints:p}:{},...y?{testedAgainst:y}:{}});for(let[f]of a)Ee(m,f),ye(m,f);return m}function pa(e){if(!e||typeof e!="object"||Array.isArray(e))throw new Error("Plugin testedAgainst must be an object.");let t=Object.getPrototypeOf(e);if(t!==Object.prototype&&t!==null)throw new Error("Plugin testedAgainst must be a plain object.");let r=Object.create(null);for(let n of Reflect.ownKeys(e)){if(typeof n!="string"||!/^(?:@[a-z0-9][a-z0-9._-]*\/)?[a-z0-9][a-z0-9._-]*$/.test(n))throw new Error(`Plugin testedAgainst package name is invalid: ${String(n)}`);let i=Object.getOwnPropertyDescriptor(e,n);if(!i?.enumerable||!("value"in i))throw new Error(`Plugin testedAgainst must contain enumerable data fields only: ${n}`);if(typeof i.value!="string"||!vn(i.value))throw new Error(`Plugin testedAgainst version must be exact semver: ${n}@${String(i.value)}`);r[n]=i.value}if(Object.keys(r).length===0)throw new Error("Plugin testedAgainst must not be empty when declared.");return Object.freeze(r)}function Ee(e,t){let r=e.environmentContracts?.[t]?.requires;return Object.freeze({...ha(e.requires.plugins,r?.plugins),...ct("services",e.requires.services,r?.services)})}function ye(e,t){let r=e.environmentContracts?.[t]?.provides;return Object.freeze({...ct("features",e.provides.features,r?.features),...ct("services",e.provides.services,r?.services)})}function lt(e,t){return e.environmentContracts?.[t]?.scopes??Object.freeze(["application"])}function ma(e){return["application","project","scene","document","preview","session"].includes(e)}function hn(e,t,r=`${t}.services`){let n=K(e,["plugins","services"],t),i=Object.prototype.hasOwnProperty.call(n,"plugins")?Ne(n.plugins,`${t}.plugins`).map(s=>{let a=K(s,["id","range"],"Plugin requirement");if(typeof a.id!="string")throw new Error("Required plugin id must be a string.");let c=oe(a.id,"Required plugin id");if(a.range!==void 0&&(typeof a.range!="string"||!wa(a.range)))throw new Error(`Required plugin range must be semver, got: ${c}@${String(a.range)}`);return Object.freeze({id:c,...a.range===void 0?{}:{range:a.range}})}):void 0,o=at(n,"services",r);return Object.freeze({...i?{plugins:Object.freeze(i)}:{},...o?{services:o}:{}})}function gn(e,t,r=`${t}.features`,n=`${t}.services`){let i=K(e,["features","services"],t),o=at(i,"features",r),s=at(i,"services",n);return Object.freeze({...o?{features:o}:{},...s?{services:s}:{}})}function ha(e,t){let r=new Map;for(let n of[...e??[],...t??[]]){let i=r.get(n.id);if(i&&i.range!==n.range)throw new Error(`Conflicting Plugin requirement ranges: ${n.id}`);r.set(n.id,n)}return r.size>0?{plugins:Object.freeze([...r.values()])}:{}}function ct(e,t,r){let n=[...new Set([...t??[],...r??[]])];return n.length>0?{[e]:Object.freeze(n)}:{}}function ga(e){return typeof e=="string"&&la.includes(e)}function Ea(e){let t=K(e,["allowedTargets"],"Plugin deployment constraints");if(!Object.prototype.hasOwnProperty.call(t,"allowedTargets"))throw new Error("Plugin deployment constraints.allowedTargets is required.");return Object.freeze({allowedTargets:ya(t.allowedTargets,"Plugin deployment constraints.allowedTargets")})}function ya(e,t){let r=Ne(e,t).map(n=>{if(!ga(n))throw new Error(`Unknown fps build target: ${String(n)}`);return n});if(r.length===0)throw new Error(`${t} must not be empty.`);if(new Set(r).size!==r.length)throw new Error(`${t} must not contain duplicates.`);return Object.freeze(r)}function Le(e){let t=K(e,["pluginId","environment","register","start","stop","dispose"],"Plugin entry");if(typeof t.pluginId!="string")throw new Error("Plugin entry id must be a string.");let r=oe(t.pluginId,"Plugin entry id");if(typeof t.environment!="string"||!["runtime","editor","renderer","tooling","agent"].includes(t.environment))throw new Error(`Unknown plugin entry environment: ${String(t.environment)}`);if(typeof t.register!="function")throw new Error(`Plugin entry register must be a function: ${r}`);for(let n of["start","stop","dispose"])if(t[n]!==void 0&&typeof t[n]!="function")throw new Error(`Plugin entry ${n} must be a function: ${r}`);return Object.freeze({pluginId:r,environment:t.environment,register:t.register,...t.start?{start:t.start}:{},...t.stop?{stop:t.stop}:{},...t.dispose?{dispose:t.dispose}:{}})}function dt(e){return Object.freeze({kind:"service",id:oe(e,"Service id")})}function U(e){return Object.freeze({kind:"event",id:fa(e,"Event id")})}function wn(e){let t=oe(e,"Plugin event owner id");return`fps.plugin.${t.length}.${t}.`}var{valid:vn,validRange:wa}=bn.default;var In=It(st(),1),{satisfies:ba,valid:On,validRange:va}=In.default;function we(e,t){let r=e.map(i=>i instanceof Error?i.message:String(i)).join("; "),n=new Error(`${t} ${r}`);return Object.assign(n,{errors:[...e]}),n}var ut=class{constructor(t){this.parent=t,this.values=new Map,this.active=!0}assertActive(){if(!this.active)throw new Error("Service registry is disposed.")}register(t,r){return this.registerOwned(t,r,"host")}registerOwned(t,r,n){if(this.assertActive(),this.values.has(t.id))throw new Error(`Service already registered in this scope: ${t.id}`);let i={value:r,owner:n};return this.values.set(t.id,i),()=>{this.values.get(t.id)===i&&this.values.delete(t.id)}}has(t){return this.assertActive(),this.hasId(t.id)}get(t){this.assertActive();let r=this.resolve(t.id);if(!r)throw new Error(`Service not registered: ${t.id}`);return r.value}getOptional(t){return this.assertActive(),this.resolve(t.id)?.value}resolve(t){return this.values.get(t)??this.parent?.resolve(t)}hasId(t){return this.resolve(t)!==void 0}hasLocalId(t,r){let n=this.values.get(t);return n!==void 0&&(r===void 0||n.owner===r)}deactivate(){this.values.clear(),this.active=!1}},ft=class{constructor(t,r,n){this.services=t,this.manifest=r;let i=Ee(r,n),o=ye(r,n);this.writable=new Set(o.services??[]),this.readable=new Set([...i.services??[],...this.writable])}assertReadable(t){if(!this.readable.has(t.id))throw new Error(`Plugin accessed undeclared service: ${this.manifest.id} -> ${t.id}`)}register(t,r){if(!this.writable.has(t.id))throw new Error(`Plugin registered undeclared service: ${this.manifest.id} -> ${t.id}`);return this.services.registerOwned(t,r,this.manifest.id)}has(t){return this.assertReadable(t),this.services.has(t)}get(t){return this.assertReadable(t),this.services.get(t)}getOptional(t){return this.assertReadable(t),this.services.getOptional(t)}},pt=class{constructor(t,r){this.parent=t,this.assertExecutionAvailable=r,this.handlers=new Map,this.activeExecutions=new Map,this.nextExecutionId=1,this.active=!0}assertActive(){if(!this.active)throw new Error("Command registry is disposed.")}register(t,r){if(this.assertActive(),this.handlers.has(t.id))throw new Error(`Command already registered in this scope: ${t.id}`);return this.handlers.set(t.id,r),()=>{this.handlers.get(t.id)===r&&this.handlers.delete(t.id)}}async execute(t,r){return this.executeWithAuthorization(t,r,!1)}async executeWithAuthorization(t,r,n){this.assertActive(),n||this.assertExecutionAvailable?.();let i=this.handlers.get(t.id);if(i){let o=this.nextExecutionId++;this.activeExecutions.set(o,t.id);try{return await i(r)}finally{this.activeExecutions.delete(o)}}if(this.parent)return this.parent.executeWithAuthorization(t,r,!0);throw new Error(`Command not registered: ${t.id}`)}listActiveExecutions(){return[...this.activeExecutions.values()]}deactivate(){this.handlers.clear(),this.active=!1}},mt=class{constructor(t,r){this.parent=t,this.report=r,this.listeners=new Map,this.active=!0}assertActive(){if(!this.active)throw new Error("Event registry is disposed.")}subscribe(t,r){this.assertActive();let n=this.listeners.get(t.id)??new Set;return n.add(r),this.listeners.set(t.id,n),()=>{n.delete(r),n.size||this.listeners.delete(t.id)}}async deliver(t,r,n){for(let i of[...this.listeners.get(t.id)??[]])try{await i(r)}catch(o){n.push(o)}await this.parent?.deliver(t,r,n)}async publish(t,r){this.assertActive();let n=[];if(await this.deliver(t,r,n),n.length===0)return;let i=n.map(s=>s instanceof Error?s.message:String(s));try{this.report({code:"plugin.event.deliveryFailed",message:`Event ${t.id} reported ${n.length} listener error(s).`,severity:"error",details:Object.freeze({eventId:t.id,listenerErrorCount:n.length,listenerErrorMessages:Object.freeze(i)})})}catch(s){n.push(s)}let o=we(n,`Event delivery failed: ${t.id}.`);throw o.name="FpsEventDeliveryError",o}deactivate(){this.listeners.clear(),this.active=!1}};function $a(e,t){let r=wn(t);return Object.freeze({subscribe(n,i){return e.subscribe(n,i)},publish(n,i){return n.ownerPluginId!==t||!n.id.startsWith(r)?Promise.reject(new Error(`Plugin ${t} may only publish events in namespace ${r}*; got ${n.id}`)):e.publish(n,i)}})}var ht=(e,t)=>e.id<t.id?-1:e.id>t.id?1:0;function $n(e,t,r,n){if(!On(e))throw new Error(`Invalid plugin version: ${n}@${e}`);let i=t??"*";if(!va(i))throw new Error(`Invalid plugin version range: ${r} requires ${n}@${i}`);if(!ba(e,i))throw new Error(`Plugin version mismatch: ${r} requires ${n}@${i}`)}function Ia(e,t,r,n){let i=new Map,o=new Map,s=new Map;for(let m of e){let f=n?.(m.id);if(f&&(f.version!==m.version||f.apiVersion!==m.apiVersion))throw new Error(`Plugin identity mismatch across scopes: ${m.id}`);if(i.has(m.id))throw new Error(`Duplicate plugin id: ${m.id}`);if(i.set(m.id,m),!m.entries[t])continue;if(!On(m.version))throw new Error(`Invalid plugin version: ${m.id}@${m.version}`);o.set(m.id,m);let R=ye(m,t);for(let v of R.services??[]){let j=s.get(v);if(j)throw new Error(`Duplicate service provider: ${v} (${j.id}, ${m.id})`);if(r?.hasLocalId(v)&&!r.hasLocalId(v,m.id))throw new Error(`Duplicate service provider: ${v} (host, ${m.id})`);s.set(v,m)}}let a=m=>{let f=new Map,R=Ee(m,t);for(let v of R.plugins??[]){let j=o.get(v.id);if(!j){let k=n?.(v.id);if(k){$n(k.version,v.range,m.id,v.id);continue}let Z=i.has(v.id)?` (${t} entry unavailable)`:"";throw new Error(`Missing plugin dependency: ${m.id} -> ${v.id}${Z}`)}$n(j.version,v.range,m.id,v.id),f.set(j.id,j)}for(let v of R.services??[]){let j=s.get(v);if(j)f.set(j.id,j);else if(!r?.hasId(v))throw new Error(`Missing required service: ${m.id} -> ${v}`)}return[...f.values()].sort(ht)},c=new Set,u=new Set,p=[],y=m=>{if(c.has(m.id))throw new Error(`Plugin dependency cycle at: ${m.id}`);if(!u.has(m.id)){c.add(m.id);for(let f of a(m))y(f);c.delete(m.id),u.add(m.id),p.push(m)}};for(let m of[...o.values()].sort(ht))y(m);return p}function Sn(e,t){let r=Object.freeze(Object.fromEntries(Object.entries(e.pluginConfigs??{}).map(([l,d])=>[l,En(d,`Plugin config ${l}`)])));e={...e,manifests:e.manifests.map(l=>yn(l)),pluginConfigs:r};let n=new ut(t?.services),i=new pt(t?.commands,()=>C()),o=[],s=[],a=new Map(e.manifests.map(l=>[l.id,l.entries[e.environment]?"discovered":"unavailable"])),c=[],u=e.scope??"application",p="created",y,m=!1,f=0,R=null,v,j=new Map(e.manifests.filter(l=>l.entries[e.environment]).map(l=>[l.id,l])),k=l=>j.get(l)??t?.resolvePlugin(l),Z=l=>{s.push(Object.freeze({code:l.code,message:l.message,severity:l.severity,...l.pluginId?{pluginId:l.pluginId}:{}})),s.length>200&&s.shift()},ee=(l,d=!0)=>{if(Z(l),!(!d||!e.report))try{e.report(l)}catch(O){Z({code:"plugin.report.observerFailed",message:O instanceof Error?O.message:String(O),severity:"error",...l.pluginId?{pluginId:l.pluginId}:{}})}},W=new mt(t?.events,l=>ee(l)),be=()=>m||c.some(l=>l.hasTransitionInTree()),J=()=>be()||t?.isTransitioningTree()===!0,X=()=>p==="cleanup-failed"||c.some(l=>l.hasCleanupFailureInTree()),te=()=>X()||t?.hasCleanupFailureInTree()===!0,de=()=>f>0||c.some(l=>l.hasTeardownReservationInTree()),h=()=>de()||t?.isTeardownReservedTree()===!0,b=()=>Object.freeze([...i.listActiveExecutions(),...c.flatMap(l=>l.listActiveCommandsInTree())]),w=()=>Object.freeze([...i.listActiveExecutions(),...t?.listActiveCommandsInLineage()??[]]),S=l=>{let d=Object.freeze([...t?.listActiveCommandsInLineage()??[],...b()]);if(d.length!==0)throw new Error(`Cannot ${l} Plugin Host while commands are active: ${d.join(", ")}`)};function C(){if(h())throw new Error("Plugin host disposal has been requested; command execution is unavailable.");if(te())throw new Error("Plugin host cleanup is incomplete; command execution is unavailable.");let l=J();if((p!=="started"||l)&&!(p==="registered"&&m&&R===null))throw new Error(`Plugin host command execution requires an idle started host, got: ${p}${l?" (transitioning)":""}.`)}let x=()=>{if(h())throw new Error("Plugin host disposal has been requested; public operations are unavailable.");if(te())throw new Error("Plugin host cleanup is incomplete; only stop or dispose may be retried.");let l=J();if(p!=="started"||l)throw new Error(`Plugin host public operations require an idle started host, got: ${p}${l?" (transitioning)":""}.`)},Q={register(l,d){return x(),n.register(l,d)},has(l){return x(),n.has(l)},get(l){return x(),n.get(l)},getOptional(l){return x(),n.getOptional(l)}},_={register(l,d){return x(),i.register(l,d)},execute(l,d){return x(),i.execute(l,d)}},F={subscribe(l,d){return x(),W.subscribe(l,d)},publish(l,d){return x(),W.publish(l,d)}},ue=()=>{let l=e.manifests.map(d=>{let O=a.get(d.id)??"unavailable";return Object.freeze({manifest:d,lifecycle:O,compatible:d.apiVersion===e.apiVersion})}).sort((d,O)=>ht(d.manifest,O.manifest));return Object.freeze({environment:e.environment,apiVersion:e.apiVersion,scope:u,state:X()?"cleanup-failed":p,transitioning:J()||h(),plugins:Object.freeze(l),diagnostics:Object.freeze([...s])})},V=async(l,d=!1)=>{if(m)throw new Error("Plugin host lifecycle transition already in progress.");if(!d&&t?.isTransitioningTree())throw new Error("Ancestor plugin scope lifecycle transition already in progress.");m=!0;try{return await l()}finally{m=!1}};for(let l of e.initialServices??[])n.register(l.token,l.value);let Xn=async(l,d)=>{if(!l.disposeCompleted)try{await l.entry.dispose?.(l.context),l.disposeCompleted=!0}catch(P){return d.push(P),!1}for(let P=l.disposers.length-1;P>=0;P-=1)try{await l.disposers[P](),l.disposers.splice(P,1)}catch(N){d.push(N);break}let O=l.disposeCompleted&&l.disposers.length===0;return O&&a.set(l.manifest.id,"disposed"),O},De=async l=>{for(let d of[...o].reverse())if(d.started)try{await d.entry.stop?.(d.context),d.started=!1,a.set(d.manifest.id,"stopped")}catch(O){l.push(O);break}},ke=async(l,d)=>{R="dispose";let O=[];for(let N of[...c].reverse())try{await N.disposeFromParent()}catch(B){O.push(B);break}if(O.length===0&&(await De(O),O.length===0))for(let N=o.length-1;N>=0;N-=1){let B=o[N];if(!B.started)if(await Xn(B,O))o.splice(N,1);else break}O.length===0?(n.deactivate(),i.deactivate(),W.deactivate(),p="disposed",R=null,t?.removeChild(y)):p="cleanup-failed";let P=[...l?[d]:[],...O];if(P.length===1)throw P[0];if(P.length>1)throw we(P,"Plugin host lifecycle failed and cleanup reported errors:")};return y={get state(){return X()?"cleanup-failed":p},get transitioning(){return J()||h()},scope:u,services:Q,commands:_,events:F,inspect:ue,createScope(l){if(h())throw new Error("Cannot create a child scope while Plugin Host teardown is reserved.");if(te())throw new Error("Cannot create a child scope while Plugin Host tree is cleanup-failed (cleanup is incomplete).");let d=J();if(p!=="started"||d)throw new Error(`Cannot create a child scope from plugin host state: ${p}${d?" (transitioning)":""}`);return Sn({...e,scope:l.scope,manifests:l.manifests??e.manifests,pluginConfigs:l.pluginConfigs??e.pluginConfigs,loadEntry:l.loadEntry??e.loadEntry,initialServices:l.initialServices},{services:n,commands:i,events:W,getState:()=>p,isTransitioningTree:J,hasCleanupFailureInTree:X,isTeardownReservedTree:h,listActiveCommandsInLineage:w,resolvePlugin:k,addChild:P=>c.push(P),removeChild:P=>{let N=c.findIndex(B=>B.host===P);N>=0&&c.splice(N,1)}})},start(){return V(async()=>{if(h())throw new Error("Plugin host cannot start while teardown is reserved.");if(p!=="created")throw new Error(`Plugin host cannot start from state: ${p}`);if(t&&t.getState()!=="started")throw new Error(`Child plugin scope cannot start while parent is: ${t.getState()}`);if(t?.hasCleanupFailureInTree())throw new Error("Child plugin scope cannot start while the Plugin Host tree cleanup is incomplete.");try{let l=Ia(e.manifests,e.environment,n,t?.resolvePlugin);for(let d of l){if(v=d.id,d.apiVersion!==e.apiVersion)throw new Error(`Plugin API mismatch: ${d.id}`);if(!d.entries[e.environment])continue;let O=await e.loadEntry(d,e.environment);if(!O)throw new Error(`Plugin entry could not be loaded: ${d.id} (${e.environment})`);let P=Le(O);if(P.pluginId!==d.id||P.environment!==e.environment)throw new Error(`Plugin entry mismatch: ${d.id}`);let N={manifest:d,entry:P,context:void 0,disposers:[],started:!1,disposeCompleted:!1};N.context={environment:e.environment,pluginId:d.id,config:e.pluginConfigs?.[d.id],scope:u,services:new ft(n,d,e.environment),commands:i,events:$a(W,d.id),report:re=>ee({...re,pluginId:d.id}),add:re=>N.disposers.push(re)},o.push(N);let B=await P.register(N.context);B&&N.disposers.push(B);let Bn=ye(d,e.environment);for(let re of Bn.services??[])if(!n.hasLocalId(re,d.id))throw new Error(`Plugin did not register declared service: ${d.id} -> ${re}`);a.set(d.id,"registered")}for(let d of l){if(!d.entries[e.environment])continue;let O=Ee(d,e.environment);for(let P of O.services??[])if(!n.hasId(P))throw new Error(`Required service not registered: ${d.id} -> ${P}`)}p="registered";for(let d of o)v=d.manifest.id,d.started=!0,await d.entry.start?.(d.context),a.set(d.manifest.id,"started");v=void 0,p="started"}catch(l){ee({code:"plugin.lifecycle.failed",message:l instanceof Error?l.message:String(l),severity:"error",...v?{pluginId:v}:{}},!1);let d=b();if(d.length>0)throw R="dispose",p="cleanup-failed",we([l,new Error(`Plugin start rollback is waiting for active commands: ${d.join(", ")}`)],"Plugin host start failed and cleanup is pending:");await ke(!0,l)}})},stop(){return S("stop"),V(async()=>{if(p!=="started"&&p!=="cleanup-failed")return;if(p==="cleanup-failed"&&R==="dispose")throw new Error("Plugin host disposal cleanup is incomplete; dispose must be retried.");R="stop";let l=c.find(O=>O.hasTransitionInTree());if(l)throw new Error(`Child plugin scope lifecycle transition already in progress: ${l.host.scope}`);let d=[];for(let O of[...c].reverse())try{await O.stopFromParent()}catch(P){d.push(P);break}if(d.length===0&&await De(d),d.length>0||o.some(O=>O.started)?p="cleanup-failed":(p="stopped",R=null),d.length===1)throw d[0];if(d.length>1)throw we(d,"Plugin host stop reported errors:")})},dispose(){return S("dispose"),V(async()=>{if(p==="disposed")return;let l=c.find(d=>d.hasTransitionInTree());if(l)throw new Error(`Child plugin scope lifecycle transition already in progress: ${l.host.scope}`);await ke(!1)})},reserveTeardown(){if(p==="disposed")return Object.assign(()=>{},{assertReady:()=>{}});f+=1;let l=!0;return Object.assign(()=>{l&&(l=!1,f-=1)},{assertReady:()=>S("reserve teardown for")})}},t?.addChild({host:y,hasTransitionInTree:be,hasCleanupFailureInTree:X,hasTeardownReservationInTree:de,listActiveCommandsInTree:b,stopFromParent:()=>V(async()=>{if(S("stop"),p!=="started"&&p!=="cleanup-failed")return;if(p==="cleanup-failed"&&R==="dispose")throw new Error("Plugin host disposal cleanup is incomplete; dispose must be retried.");R="stop";let l=c.find(O=>O.hasTransitionInTree());if(l)throw new Error(`Child plugin scope lifecycle transition already in progress: ${l.host.scope}`);let d=[];for(let O of[...c].reverse())try{await O.stopFromParent()}catch(P){d.push(P);break}if(d.length===0&&await De(d),d.length>0||o.some(O=>O.started)?p="cleanup-failed":(p="stopped",R=null),d.length===1)throw d[0];if(d.length>1)throw we(d,"Plugin host stop reported errors:")},!0),disposeFromParent:()=>V(async()=>{if(S("dispose"),p==="disposed")return;let l=c.find(d=>d.hasTransitionInTree());if(l)throw new Error(`Child plugin scope lifecycle transition already in progress: ${l.host.scope}`);await ke(!1)},!0)}),y}function Pn(e){return Sn(e)}var Rn=Symbol("fps.editor.event.route"),kc=U("fps.editor.lifecycle.changed"),_c=U("fps.editor.scope.opened"),Mc=U("fps.editor.scope.closed"),Hc=U("fps.editor.document.changed"),Uc=U("fps.editor.document.committed"),Vc=U("fps.editor.document.saveFailed"),Gc=U("fps.editor.selection.changed"),Jc=U("fps.editor.history.changed"),Xc=U("fps.editor.activeTool.changed"),Bc=U("fps.editor.preview.changed"),gt=U("fps.editor.diagnostic.reported");function Oa(e,t){try{e?.(t)}catch{}}function Tn(e){let t=e.now??Date.now,r=0,n=Promise.resolve(),i=o=>Object.freeze({[Rn]:e.captureRoute?.(o)??(()=>e.events)});return Object.freeze({captureRoute:i,publish(o,s,a,c=i(a)){let u=Object.freeze({version:1,sequence:++r,timestamp:t(),scope:a.scope,scopeId:a.scopeId,...a.traceId?{traceId:a.traceId}:{},...a.transactionId?{transactionId:a.transactionId}:{},...a.sourcePluginId?{sourcePluginId:a.sourcePluginId}:{},payload:s}),p=n.then(async()=>{let y=c[Rn]();try{await y.publish(o,u)}catch(m){Oa(e.report,{code:"editor.event.observerFailed",message:m instanceof Error?m.message:String(m),severity:"error",details:Object.freeze({eventId:o.id,sequence:u.sequence})})}});return n=p.catch(()=>{}),p}})}var jn=Object.freeze(["application.start","application.stop","application.dispose","project.open","project.close","mode.enterEdit","mode.recoverEdit","mode.exitEdit","document.load","document.markDirty","document.markClean","document.prepareSave","document.commit","document.saveFailed","document.discard","preview.create","preview.dispose"]),Wc={"application.start":z(e=>e.application==="created",{application:"starting"},{application:"ready"},{application:"failed"}),"application.stop":z(e=>(e.application==="ready"||e.application==="failed")&&e.project==="closed"&&e.mode==="play"&&e.preview==="absent",{application:"stopping"},{application:"disposed"},{application:"failed"}),"application.dispose":z(e=>e.application!=="disposed",{application:"stopping"},{application:"disposed",project:"closed",mode:"play",document:"unloaded",preview:"absent",scopes:Object.freeze([])},{application:"failed",project:"failed",mode:"failed",document:"failed",preview:"failed"}),"project.open":z(e=>e.application==="ready"&&e.project==="closed",{project:"opening"},{project:"open"},{project:"failed"}),"project.close":z(e=>(e.project==="open"||e.project==="failed")&&e.mode==="play"&&e.preview==="absent"&&(e.document==="clean"||e.document==="unloaded"),{project:"closing"},{project:"closed",document:"unloaded"},{project:"failed"}),"mode.enterEdit":z(e=>e.application==="ready"&&e.project==="open"&&e.mode==="play",{mode:"entering-edit"},{mode:"edit"},{mode:"failed",document:"failed"}),"mode.recoverEdit":z(e=>e.application==="ready"&&e.project==="open"&&e.mode==="failed",{mode:"entering-edit"},{mode:"edit"},{mode:"failed",document:"failed"}),"mode.exitEdit":z(e=>(e.mode==="edit"||e.mode==="failed")&&e.preview==="absent"&&(e.document==="clean"||e.document==="unloaded"),{mode:"exiting-edit"},{mode:"play",document:"unloaded"},{mode:"failed",document:"failed"}),"document.load":z(e=>e.project==="open"&&(e.document==="unloaded"||e.document==="failed"),{document:"loading"},{document:"clean"},{document:"failed"}),"document.markDirty":z(e=>e.project==="open"&&e.mode==="edit"&&(e.document==="clean"||e.document==="dirty"||e.document==="committing"||e.document==="failed"),{document:"dirty"},{document:"dirty"},{document:"failed"}),"document.markClean":z(e=>e.project==="open"&&e.mode==="edit"&&(e.document==="clean"||e.document==="dirty"||e.document==="failed"),{document:"clean"},{document:"clean"},{document:"failed"}),"document.prepareSave":z(e=>e.project==="open"&&e.mode==="edit"&&(e.document==="clean"||e.document==="dirty"||e.document==="failed"),{document:"preparing-save"},{document:"committing"},{document:"failed"}),"document.commit":z(e=>e.project==="open"&&e.mode==="edit"&&(e.document==="committing"||e.document==="failed"),{document:"committing"},{document:"clean"},{document:"failed"}),"document.saveFailed":z(e=>e.document==="preparing-save"||e.document==="committing",{document:"failed"},{document:"failed"},{document:"failed"}),"document.discard":z(e=>e.project==="open"&&e.mode==="edit"&&(e.document==="clean"||e.document==="dirty"||e.document==="failed"),{document:"loading"},{document:"clean"},{document:"failed"}),"preview.create":z(e=>e.mode==="edit"&&e.preview==="absent",{preview:"creating"},{preview:"active"},{preview:"failed"}),"preview.dispose":z(e=>e.preview==="active"||e.preview==="failed",{preview:"disposing"},{preview:"absent"},{preview:"failed"})};function z(e,t,r,n){return Object.freeze({assertAllowed:e,start:Object.freeze(t),settled:Object.freeze(r),failed:Object.freeze(n)})}var Sa=Object.freeze({application:Object.freeze([]),project:Object.freeze(["application"]),scene:Object.freeze(["project"]),document:Object.freeze(["project","scene"]),session:Object.freeze(["document"]),preview:Object.freeze(["document","session"])});function Cn(e,t){if(e.scope==="application"){if(e.parentId)throw new Error("Editor application lifecycle scope cannot have a parent.");if(t.some(i=>i.scope==="application"))throw new Error("Editor lifecycle can only have one application scope.");return}if(!e.parentId)throw new Error(`Editor ${e.scope} lifecycle scope requires a parent.`);let r=t.find(i=>i.id===e.parentId);if(!r||r.state!=="open")throw new Error(`Editor lifecycle scope parent is not open: ${e.parentId}`);if(!Sa[e.scope].includes(r.scope))throw new Error(`Editor ${e.scope} lifecycle scope cannot be parented by ${r.scope}.`)}var Qc=Object.freeze({state:"enabled"});function Fe(e){if(!e||typeof e!="object")throw new Error("Editor Tool registration must be an object.");if(typeof e.createRuntime!="function")throw new Error("Editor Tool registration requires createRuntime().");return Object.freeze({definition:Pa(e.definition),createRuntime:e.createRuntime})}function Pa(e){if(!e||typeof e!="object")throw new Error("Editor Tool definition must be an object.");let t=qe(e.id,"Editor Tool id"),r=ze(e.label,"Editor Tool label"),n=qe(e.group,"Editor Tool group");if(e.kind!=="primary"&&e.kind!=="action")throw new Error(`Unknown Editor Tool kind: ${String(e.kind)}`);let i=e.order??0;if(!Number.isFinite(i))throw new Error("Editor Tool order must be finite.");let o=Object.freeze((e.requiredCapabilities??[]).map(s=>qe(s,"Editor capability id")));if(new Set(o).size!==o.length)throw new Error(`Editor Tool required capabilities must be unique: ${t}`);return Object.freeze({id:t,label:r,group:n,order:i,kind:e.kind,requiredCapabilities:o,...e.icon===void 0?{}:{icon:ze(e.icon,"Editor Tool icon")},...e.shortcut===void 0?{}:{shortcut:ze(e.shortcut,"Editor Tool shortcut").toUpperCase()},...e.fallbackToolId===void 0?{}:{fallbackToolId:qe(e.fallbackToolId,"Editor Tool fallback id")}})}function qe(e,t){let r=ze(e,t);if(!/^[a-z0-9]+(?:[._-][a-z0-9]+)+$/.test(r))throw new Error(`${t} must be namespaced lowercase, got: ${e}`);return r}function ze(e,t){if(typeof e!="string"||!e.trim())throw new Error(`${t} must be a non-empty string.`);return e.trim()}function xn(e,t){let r=Ra(e,t);return se(r,t),r}function se(e,t){if(typeof e=="boolean")return;if(!ae(e))throw new Error(`Editor JSON Schema is invalid at ${t}.`);let r=e,n=new Set(["null","object","array","string","number","integer","boolean"]);if("type"in r){let i=typeof r.type=="string"?[r.type]:r.type;if(!Array.isArray(i)||i.length===0||i.some(o=>typeof o!="string"||!n.has(o))||new Set(i).size!==i.length)throw new Error(`Editor JSON Schema type is invalid at ${t}.type.`)}if("required"in r&&(!Array.isArray(r.required)||r.required.some(i=>typeof i!="string"||i.length===0)||new Set(r.required).size!==r.required.length))throw new Error(`Editor JSON Schema required is invalid at ${t}.required.`);if("properties"in r){if(!ae(r.properties))throw new Error(`Editor JSON Schema properties is invalid at ${t}.properties.`);for(let[i,o]of Object.entries(r.properties))se(o,`${t}.properties.${i}`)}if("additionalProperties"in r&&typeof r.additionalProperties!="boolean"&&!ae(r.additionalProperties))throw new Error(`Editor JSON Schema additionalProperties is invalid at ${t}.additionalProperties.`);ae(r.additionalProperties)&&se(r.additionalProperties,`${t}.additionalProperties`),"items"in r&&se(r.items,`${t}.items`);for(let i of["allOf","anyOf","oneOf"]){if(!(i in r))continue;let o=r[i];if(!Array.isArray(o)||o.length===0)throw new Error(`Editor JSON Schema ${i} is invalid at ${t}.${i}.`);o.forEach((s,a)=>se(s,`${t}.${i}[${a}]`))}if("not"in r&&se(r.not,`${t}.not`),"enum"in r&&(!Array.isArray(r.enum)||r.enum.length===0))throw new Error(`Editor JSON Schema enum is invalid at ${t}.enum.`);for(let i of["minLength","maxLength","minItems","maxItems","minProperties","maxProperties"])if(i in r&&(!Number.isSafeInteger(r[i])||r[i]<0))throw new Error(`Editor JSON Schema ${i} is invalid at ${t}.${i}.`);for(let i of["minimum","maximum","exclusiveMinimum","exclusiveMaximum"])if(i in r&&(typeof r[i]!="number"||!Number.isFinite(r[i])))throw new Error(`Editor JSON Schema ${i} is invalid at ${t}.${i}.`);if("multipleOf"in r&&(typeof r.multipleOf!="number"||!Number.isFinite(r.multipleOf)||r.multipleOf<=0))throw new Error(`Editor JSON Schema multipleOf is invalid at ${t}.multipleOf.`);if("uniqueItems"in r&&typeof r.uniqueItems!="boolean")throw new Error(`Editor JSON Schema uniqueItems is invalid at ${t}.uniqueItems.`);if("pattern"in r){if(typeof r.pattern!="string")throw new Error(`Editor JSON Schema pattern is invalid at ${t}.pattern.`);try{new RegExp(r.pattern)}catch{throw new Error(`Editor JSON Schema pattern is invalid at ${t}.pattern.`)}}}function Ra(e,t){let r=Et(e,t);if(!ae(r))throw new Error(`Editor JSON object is required at ${t}.`);return Object.freeze(r)}function Et(e,t){if(e===null||typeof e=="string"||typeof e=="boolean"||typeof e=="number"&&Number.isFinite(e))return e;if(Array.isArray(e))return Object.freeze(e.map((n,i)=>Et(n,`${t}[${i}]`)));if(!ae(e))throw new Error(`Editor JSON value must be compatible at ${t}.`);let r=Object.create(null);for(let[n,i]of Object.entries(e))i!==void 0&&(r[n]=Et(i,`${t}.${n}`));return Object.freeze(r)}function ae(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=Object.getPrototypeOf(e);return t===Object.prototype||t===null}var nl=128*1024;function Nn(e){if(!e||typeof e!="object")throw new Error("Editor command manifest is required.");if(e.schemaVersion!==1)throw new Error(`Unsupported Editor command schema version: ${String(e.schemaVersion)}`);let t=Aa(e.id);if(!Number.isInteger(e.version)||e.version<=0)throw new Error(`Editor command version must be a positive integer: ${t}`);let r=yt(e.title,`Editor command title is required: ${t}`);if(!new Set(["workspace-service","tooling","authoring","view","renderer"]).has(e.target))throw new Error(`Editor command target is invalid: ${t}`);if(e.access!=="read"&&e.access!=="write")throw new Error(`Editor command access is invalid: ${t}`);if(!new Set(["experimental","stable","deprecated"]).has(e.stability))throw new Error(`Editor command stability is invalid: ${t}`);if(!e.effects||typeof e.effects!="object")throw new Error(`Editor command effects are required: ${t}`);if(!new Set(["none","view","authoring","filesystem"]).has(e.effects.persistence))throw new Error(`Editor command persistence is invalid: ${t}`);if(typeof e.effects.undoable!="boolean"||typeof e.effects.idempotent!="boolean")throw new Error(`Editor command effects flags are invalid: ${t}`);if(e.transaction&&(e.transaction.compatible!==!0||e.transaction.sideEffects!=="authoring"||e.transaction.phase!=="mutation"||e.target!=="authoring"||e.access!=="write"||e.effects.persistence!=="authoring"))throw new Error(`Editor command transaction policy is invalid: ${t}`);let s=le(e.description),a={schemaVersion:1,id:t,version:e.version,title:r,...s?{description:s}:{},target:e.target,access:e.access,stability:e.stability,inputSchema:An(e.inputSchema,`${t}.inputSchema`),outputSchema:An(e.outputSchema,`${t}.outputSchema`),...e.requires?{requires:ja(e.requires,t)}:{},effects:Object.freeze({...e.effects}),...e.transaction?{transaction:Object.freeze({...e.transaction})}:{},...e.presentation?{presentation:Ca(e.presentation,t,e.inputSchema)}:{}};return Object.freeze(a)}function ja(e,t){for(let r of["editorReady","viewAttached","rendererAttached"])if(e[r]!==void 0&&typeof e[r]!="boolean")throw new Error(`Editor command requirement ${r} is invalid: ${t}`);return Object.freeze({...e.editorReady!==void 0?{editorReady:e.editorReady}:{},...e.viewAttached!==void 0?{viewAttached:e.viewAttached}:{},...e.rendererAttached!==void 0?{rendererAttached:e.rendererAttached}:{},...e.activeScope?{activeScope:Object.freeze(ce(e.activeScope,t))}:{},...e.permissions?{permissions:Object.freeze(ce(e.permissions,t))}:{}})}function Ca(e,t,r){let n=le(e.category),i=le(e.shortcut),o=new Set(["none","inline-json","schema-form"]);if(e.inputMode!==void 0&&!o.has(e.inputMode))throw new Error(`Editor command presentation input mode is invalid: ${t}`);let s=e.menu?Object.freeze({path:Object.freeze(ce(e.menu.path,t)),...le(e.menu.group)?{group:e.menu.group.trim()}:{},...e.menu.order!==void 0?{order:Na(e.menu.order,`${t}.menu.order`)}:{}}):void 0,a=e.selectionBinding?xa(e.selectionBinding,t,r):void 0;return Object.freeze({...n?{category:n}:{},...e.aliases?{aliases:Object.freeze(ce(e.aliases,t))}:{},...e.keywords?{keywords:Object.freeze(ce(e.keywords,t))}:{},...e.examples?{examples:Object.freeze(ce(e.examples,t))}:{},...i?{shortcut:i}:{},...s?{menu:s}:{},...e.inputMode?{inputMode:e.inputMode}:{},...a?{selectionBinding:a}:{}})}function xa(e,t,r){let n=le(e.activeId),i=le(e.selectedIds);if(!n&&!i)throw new Error(`Editor command selection binding is empty: ${t}`);let o=r.properties&&typeof r.properties=="object"?r.properties:{};if(n&&o[n]?.type!=="string")throw new Error(`Editor command active selection binding must target a string property: ${t}.${n}`);if(i&&(o[i]?.type!=="array"||o[i]?.items?.type!=="string"))throw new Error(`Editor command multi-selection binding must target a string array property: ${t}.${i}`);return Object.freeze({...n?{activeId:n}:{},...i?{selectedIds:i}:{}})}var il=Symbol("editor-command-aborted");function An(e,t){return xn(e,t)}function ce(e,t){if(!Array.isArray(e))throw new Error(`Editor command string list is invalid: ${t}`);return[...new Set(e.map(r=>yt(r,`Editor command string list contains an empty value: ${t}`)))]}function Aa(e){let t=yt(e,"Editor command id is required.");if(t.length>160||/\s/.test(t))throw new Error(`Editor command id is invalid: ${t}`);return t}function yt(e,t){if(typeof e!="string"||!e.trim())throw new Error(t);return e.trim()}function le(e){return typeof e=="string"&&e.trim()?e.trim():void 0}function Na(e,t){if(typeof e!="number"||!Number.isFinite(e))throw new Error(`Editor command number is invalid: ${t}`);return e}var La=Object.freeze({subscribe:()=>()=>{},publish:()=>Promise.resolve()}),Fn=new WeakMap,wt=new WeakMap,qa=new Set(["hierarchy","inspector","panel","command","capability","tool","lifecycle-participant"]),Dn=dt("fps.editor.contributions"),kn=new WeakMap;function Ln(e,t){let r=t.map(i=>i instanceof Error?i.message:String(i)).join("; "),n=new Error(`${e}: ${r}`);return n.errors=[...t],n}function fl(e){let t=kn.get(e);if(!t)throw new Error("Editor Plugin lifecycle scope host is unavailable.");return t()}var _n=new WeakMap;function pl(e,t,r){Mn(e),Hn(e);let n=_a(t);if(typeof r!="function")throw new Error(`Editor command handler is required: ${n.command.id}`);let i=Object.freeze({type:"editor.command",registration:n});_n.set(i,r),bt(e,{id:n.command.id,kind:"command",value:i})}function ml(e,t){let r=vt(t);return bt(e,{id:r.id,kind:"lifecycle-participant",value:r})}function hl(e,t,r=0){let n=Fe(t);return bt(e,{id:n.definition.id,kind:"tool",priority:r,value:Object.freeze({type:"editor.tool",registration:n})})}function gl(e){return Object.freeze(e.list("tool").map(t=>{let r=t.value;if(!Gn(r)||r.type!=="editor.tool"||!("registration"in r))throw new Error(`Invalid Editor Tool contribution: ${t.id}`);let n=Fe(r.registration);if(n.definition.id!==t.id)throw new Error(`Editor Tool contribution id mismatch: ${t.id} != ${n.definition.id}`);return n}))}function El(e,t){let r=new Map,n=o=>{let s=new Map(o.list("tool").map(a=>[a.id,a]));for(let[a,c]of[...r])s.get(a)!==c.contribution&&(c.unregister(),r.delete(a));for(let a of s.values()){if(r.has(a.id))continue;let c=Jn(a);r.set(a.id,{contribution:a,unregister:t.register(c)})}};n(e);let i=e.subscribe(n);return()=>{i();for(let o of[...r.values()].reverse())o.unregister();r.clear()}}function yl(e){return e.list("lifecycle-participant").map(t=>{let r=vt(t.value);if(r.id!==t.id)throw new Error(`Editor lifecycle participant contribution id mismatch: ${t.id} != ${r.id}`);return r})}function za(){let e=new Map,t=new Set,r=()=>{for(let i of[...t])i(n)},n={get:i=>e.get(i),list:i=>(i!==void 0&&zn(i),[...e.values()].filter(o=>i===void 0||o.kind===i).sort(Ha)),subscribe(i){return t.add(i),()=>{t.delete(i)}}};return Fn.set(n,(i,o)=>{let s=Un(o.id),a=zn(o.kind);if(e.has(s))throw new Error(`Duplicate editor contribution id: ${s}`);let c=Object.freeze({...o,id:s,kind:a,pluginId:i,priority:Vn(o.priority)});e.set(s,c),r();let u=!0;return()=>{u&&(u=!1,e.get(s)===c&&(e.delete(s),r()))}}),n}function bt(e,t){let r=Mn(e);if(Hn(e),e.services.get(Dn)!==r.registry)throw new Error("Editor contribution service does not belong to this Plugin Host.");let i=Fn.get(r.registry);if(!i)throw new Error("Editor contribution registry is not owned by this host.");t.kind==="lifecycle-participant"&&vt(t.value),t.kind==="tool"&&Jn(Object.freeze({...t,pluginId:r.pluginId,priority:Vn(t.priority)}));let o=i(r.pluginId,t);r.addDisposer(o);let s=!0;return()=>{if(!(!s||!r.registrationOpen))return s=!1,o()}}function Fa(e){let t=za(),r=new Map,n=1,i=!1,o=0,s=!1,a=null,c=new Map,u=new Set,p=[],y,m=(h,b,w={scope:"application",scopeId:"editor:application"})=>{p.push(Object.freeze({code:h.code,message:h.message,severity:h.severity,...h.pluginId?{pluginId:h.pluginId}:{}})),p.length>200&&p.shift();try{e.report?.(h)}catch{}!b||!y||h.details?.eventId===gt.id||y.publish(gt,Object.freeze({diagnostic:Object.freeze({code:h.code,message:h.message,severity:h.severity,...h.pluginId?{pluginId:h.pluginId}:{}})}),{...w,...w.sourcePluginId||!h.pluginId?{}:{sourcePluginId:h.pluginId}})},f=()=>s||u.size>0,R=e.manifests.filter(h=>lt(h,"editor").includes("application")),v=Pn({environment:"editor",apiVersion:1,scope:"application",manifests:R,initialServices:[{token:Dn,value:t},...e.initialServices??[]],pluginConfigs:e.pluginConfigs,loadEntry:async(h,b)=>{let w=await e.loadEntry(h,b);return w?Ma(Le(w),t):null},report:h=>m(h,!0)});y=Tn({events:v.events,captureRoute(h){let b=[],w=c.get(h.scopeId);for(;w;)b.push(w),w=w.input.parentId?c.get(w.input.parentId):void 0;return()=>{for(let S of b){if(c.get(S.input.id)!==S||S.closeRequested||S.closing)continue;let C=S.host??v;if(!(C.state!=="started"||C.transitioning))return C.events}return v.state==="started"&&!v.transitioning?v.events:La}},report:h=>m(h,!1)});let j=()=>i||o>0||v.transitioning,k=()=>{if(f())throw new Error("Editor Plugin Host cleanup is incomplete; only cleanup retry operations are available.");if(j())throw new Error("Editor Plugin Host observation is unavailable during a lifecycle transition.")},Z=Object.freeze({get(h){return k(),t.get(h)},list(h){return k(),t.list(h)},subscribe(h){return k(),t.subscribe(h)}}),ee=async h=>{o+=1;try{return await h()}finally{o-=1}},W=(h="anonymous")=>{let b=j();if(v.state!=="started"||b||f())throw new Error(`Editor Plugin Host consumers require an idle started host, got: ${f()?"cleanup-failed":v.state}${b?" (transitioning)":""}`);let w=n++;r.set(w,h);let S=!0;return()=>{S&&(S=!1,r.delete(w))}},be=async(h,b)=>{let w=c.get(b.id);if(w){if(w.input.scope!==b.scope||w.input.parentId!==b.parentId)throw new Error(`Editor Plugin lifecycle scope identity conflicts with the existing scope: ${b.id}`);if(w.owner!==h)throw new Error(`Editor Plugin lifecycle scope is owned by another controller: ${b.id}`);if(u.has(b.id))throw new Error(`Editor Plugin lifecycle scope cleanup is incomplete; close must be retried: ${b.id}`);if(w.closing)throw new Error(`Editor Plugin lifecycle scope is closing: ${b.id}`);return w.ready}let S=i||v.transitioning;if(v.state!=="started"||S||f())throw new Error(`Editor Plugin lifecycle scopes require an idle started host, got: ${f()?"cleanup-failed":v.state}${S?" (transitioning)":""}`);if(Cn(b,[...c.values()].map(F=>({id:F.input.id,scope:F.input.scope,state:F.closing?"failed":"open"}))),b.scope==="application"){c.set(b.id,{input:Object.freeze({...b}),owner:h,host:null,ready:Promise.resolve(),closing:null,closeRequested:!1,releaseTeardownReservation:null});return}let C=c.get(b.parentId);if(!C||C.closing)throw new Error(`Editor Plugin lifecycle parent scope is not open: ${b.parentId}`);if(C.owner!==h)throw new Error(`Editor Plugin lifecycle parent scope is owned by another controller: ${b.parentId}`);let x=b.scope,Q=e.manifests.filter(F=>lt(F,"editor").includes(x)),_={input:Object.freeze({...b}),owner:h,host:null,ready:Promise.resolve(),closing:null,closeRequested:!1,releaseTeardownReservation:null};c.set(b.id,_),_.ready=C.ready.then(async()=>{let F=(C.host??v).createScope({scope:x,manifests:Q});if(_.host=F,_.closeRequested){_.releaseTeardownReservation=F.reserveTeardown();return}await F.start()}).catch(async F=>{let ue;try{await _.host?.dispose()}catch(V){ue=V}if((!_.host||_.host.state==="disposed")&&c.get(b.id)===_&&c.delete(b.id),ue){u.add(b.id),a="dispose";let V=new Error("Editor Plugin lifecycle scope start and cleanup failed.");throw V.errors=[F,ue],V}throw F}),await _.ready},J=(h,b)=>{let w=c.get(h);if(!w)return null;if(b&&w.owner!==b)throw new Error(`Editor Plugin lifecycle scope is owned by another controller: ${h}`);w.closeRequested=!0,w.releaseTeardownReservation??(w.releaseTeardownReservation=w.input.scope==="application"?v.reserveTeardown():w.host?.reserveTeardown()??null);try{w.releaseTeardownReservation?.assertReady()}catch(S){throw u.add(h),a="dispose",S}return w},X=async(h,b)=>{let w=J(h,b);if(w)return w.closing||(w.closing=(async()=>{try{try{await w.ready}catch{}let S=[...c.values()].filter(x=>x.input.parentId===h).reverse(),C=[];for(let x of S)try{await X(x.input.id,b)}catch(Q){C.push(Q);break}if(C.length>0)throw Ln(`Editor Plugin lifecycle child scope cleanup failed: ${h}`,C);w.host?.state!=="disposed"&&await w.host?.dispose(),u.delete(h),c.delete(h)}catch(S){throw(w.host?.state==="cleanup-failed"||[...c.values()].some(x=>x.input.parentId===h&&u.has(x.input.id)))&&(u.add(h),a??(a="dispose")),S}finally{c.get(h)===w?w.closing=null:(w.releaseTeardownReservation?.(),w.releaseTeardownReservation=null)}})()),w.closing},te=async()=>{let h=[...c.values()].filter(w=>!w.input.parentId).reverse(),b=[];for(let w of h)try{await X(w.input.id)}catch(S){b.push(S)}if(b.length>0)throw Ln("Editor Plugin lifecycle root scope cleanup failed",b)},de={get state(){return f()?"cleanup-failed":v.state},get transitioning(){return j()},contributions:Z,eventPublisher:y,reportDiagnostic(h,b={scope:"application",scopeId:"editor:application"}){m(h,!0,b)},inspect:()=>{let h=v.inspect();return Object.freeze({...h,...f()?{state:"cleanup-failed"}:{},transitioning:j(),diagnostics:Object.freeze([...p])})},acquireConsumer:W,mountCommands(h){k();let b=[];try{for(let S of Da(t)){let{registration:C}=S,x=_n.get(S);if(!x)throw new Error(`Editor command handler is unavailable: ${C.command.id}`);b.push(h.registerCommand({manifest:C.manifest,available:()=>v.state==="started"&&!j()&&!f(),handler:async(Q,_)=>{let F=W(`command:${C.command.id}`);try{return{ok:!0,output:await x(Q,_)}}finally{F()}}}))}}catch(S){for(let C of b.reverse())C();throw S}let w=!0;return()=>{if(w){w=!1;for(let S of b.reverse())S()}}},start:()=>v.start(),stop:()=>{if(qn(r,"stop"),i)throw new Error("Editor Plugin Host lifecycle is already transitioning.");if(f()&&a==="dispose")throw new Error("Editor Plugin Host disposal cleanup is incomplete; dispose or the owning scope close must be retried.");return i=!0,a="stop",(async()=>{try{await te(),await v.stop(),s=!1,a=null}catch(h){throw s=!0,h}finally{i=!1}})()},dispose:()=>{if(qn(r,"dispose"),i)throw new Error("Editor Plugin Host lifecycle is already transitioning.");return i=!0,a="dispose",(async()=>{try{await te(),await v.dispose(),s=!1,a=null}catch(h){throw s=!0,h}finally{i=!1}})()}};return kn.set(de,()=>{let h=Object.freeze({});return Object.freeze({openScope:w=>ee(()=>be(h,w)),reserveScopeClose:w=>{J(w,h)},closeScope:w=>ee(async()=>{await X(w,h),!f()&&!i&&(a=null)})})}),de}function wl(e){if(e.module.environment!=="editor")throw new Error(`Editor Plugin Host requires an editor environment module, got: ${e.module.environment}`);let t=new Map;for(let r of e.module.entries){if(t.has(r.pluginId))throw new Error(`Duplicate Editor Plugin module entry: ${r.pluginId}`);t.set(r.pluginId,r)}return Fa({manifests:e.module.manifests,pluginConfigs:e.module.pluginConfigs,initialServices:e.initialServices,report:e.report,async loadEntry(r){let n=t.get(r.id);if(!n)throw new Error(`Editor Plugin module entry is missing: ${r.id}`);return n.load()}})}function Mn(e){let t=wt.get(e);if(!t)throw new Error("Editor contribution registration requires a host-authenticated Plugin context.");if(!t.registrationOpen)throw new Error("Editor contributions may only be registered during the Plugin register lifecycle.");return t}function Hn(e){if(e.scope!=="application")throw new Error(`Editor contributions are application-scope extension definitions; ${e.scope} scopes may own resources but cannot register global contributions.`)}function Da(e){return e.list("command").map(t=>{let r=t.value;if(!ka(r)||r.registration.command.id!==t.id)throw new Error(`Invalid Editor command contribution: ${t.id}`);return r})}function ka(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=e;return t.type==="editor.command"&&!!t.registration&&t.registration.command?.kind==="command"}function _a(e){if(e.command?.kind!=="command")throw new Error("Editor command registration requires a command token.");let t=Nn(e.manifest);if(t.id!==e.command.id)throw new Error(`Editor command token and manifest ids must match: ${e.command.id} != ${t.id}`);return Object.freeze({command:e.command,manifest:t})}function vt(e){if(!e||typeof e!="object"||Array.isArray(e))throw new Error("Editor lifecycle participant must be an object.");let t=e,r=Un(t.id??"");if(!Array.isArray(t.transitions)||t.transitions.length===0)throw new Error(`Editor lifecycle participant transitions are required: ${r}`);let n=new Set(jn),i=t.transitions.map(o=>{if(typeof o!="string"||!n.has(o))throw new Error(`Editor lifecycle participant transition is invalid: ${r} -> ${String(o)}`);return o});for(let o of["prepare","settled","failed"])if(t[o]!==void 0&&typeof t[o]!="function")throw new Error(`Editor lifecycle participant ${o} must be a function: ${r}`);return Object.freeze({id:r,transitions:Object.freeze([...new Set(i)]),...t.prepare?{prepare:t.prepare}:{},...t.settled?{settled:t.settled}:{},...t.failed?{failed:t.failed}:{}})}function qn(e,t){if(e.size!==0)throw new Error(`Cannot ${t} Editor Plugin Host with active consumers: ${[...e.values()].join(", ")}`)}function Ma(e,t){return{pluginId:e.pluginId,environment:e.environment,async register(r){let n={registry:t,pluginId:r.pluginId,registrationOpen:!0,addDisposer:r.add.bind(r)};wt.set(r,n);try{return await e.register(r)}finally{n.registrationOpen=!1}},...e.start?{start:r=>e.start(r)}:{},...e.stop?{stop:r=>e.stop(r)}:{},dispose:async r=>{try{await e.dispose?.(r)}finally{wt.delete(r)}}}}function Un(e){let t=e.trim();if(!/^[a-z0-9]+(?:[._-][a-z0-9]+)+$/.test(t))throw new Error(`Editor contribution id must be namespaced lowercase, got: ${e}`);return t}function Vn(e){if(e===void 0)return 0;if(!Number.isFinite(e))throw new Error("Editor contribution priority must be finite.");return e}function zn(e){if(typeof e!="string"||!qa.has(e))throw new Error(`Unknown editor contribution kind: ${String(e)}`);return e}function Ha(e,t){let r=(t.priority??0)-(e.priority??0);return r!==0?r:e.id<t.id?-1:e.id>t.id?1:0}function Gn(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function Jn(e){let t=e.value;if(!Gn(t)||t.type!=="editor.tool"||!("registration"in t))throw new Error(`Invalid Editor Tool contribution: ${e.id}`);let r=Fe(t.registration);if(r.definition.id!==e.id)throw new Error(`Editor Tool contribution id mismatch: ${e.id} != ${r.definition.id}`);return r}export{Dn as FPS_EDITOR_CONTRIBUTIONS,El as bindFpsEditorTools,za as createFpsEditorContributionRegistry,Fa as createFpsEditorPluginHost,wl as createFpsEditorPluginHostFromEnvironmentModule,fl as getFpsEditorPluginLifecycleScopeHost,pl as registerFpsEditorCommand,bt as registerFpsEditorContribution,ml as registerFpsEditorLifecycleParticipant,hl as registerFpsEditorTool,yl as resolveFpsEditorLifecycleParticipants,gl as resolveFpsEditorTools};
@@ -0,0 +1 @@
1
+ import{fC as he,fB as me,a3 as be,et as ye,ms as ge,iU as we,jL as Se,hV as Ee}from"./playable-standard-project-DkUozryX.js";import{registerFpsEditorContribution as Ie}from"@fps-games/editor-core/plugin-host";import"./hemisphericLight-C4swwL68.js";(function(){const t=document.createElement("link").relList;if(t&&t.supports&&t.supports("modulepreload"))return;for(const i of document.querySelectorAll('link[rel="modulepreload"]'))n(i);new MutationObserver(i=>{for(const r of i)if(r.type==="childList")for(const s of r.addedNodes)s.tagName==="LINK"&&s.rel==="modulepreload"&&n(s)}).observe(document,{childList:!0,subtree:!0});function o(i){const r={};return i.integrity&&(r.integrity=i.integrity),i.referrerPolicy&&(r.referrerPolicy=i.referrerPolicy),i.crossOrigin==="use-credentials"?r.credentials="include":i.crossOrigin==="anonymous"?r.credentials="omit":r.credentials="same-origin",r}function n(i){if(i.ep)return;i.ep=!0;const r=o(i);fetch(i.href,r)}})();const Me="0.2.3-beta.14",Z="fps.plugin.hierarchy";function je(){return he({id:Z,version:Me,apiVersion:1,requires:{},provides:{features:["fps.editor.hierarchy"]},entries:{editor:"./editor"},environmentContracts:{editor:{requires:{services:["fps.editor.contributions"]},provides:{}}},deploymentConstraints:{allowedTargets:["editor"]}})}const _e=me({pluginId:Z,environment:"editor",register(e){Ie(e,{id:be,kind:"hierarchy",value:ye()})}}),xe=256*1024,ee=1024*1024,Pe=new Set(["snapshot","list","search","describe","execute","executeBatch"]),B=new Set(["surfaceInstanceId","projectId","runtimeGeneration"]),Ae=new Set(["requestId","operation","payload","expected"]);function Oe(e){return typeof e=="string"&&Pe.has(e)}function $e(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;const t=e,o=Reflect.ownKeys(t);return o.length===B.size&&o.every(n=>B.has(n))&&C(t.surfaceInstanceId,128)&&C(t.projectId,256)&&C(t.runtimeGeneration,256)}function Te(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;const t=e;return ve(t,Ae)&&C(t.requestId,256)&&Oe(t.operation)&&$e(t.expected)}function te(e,t,o){let n;try{re(e,new Set,0),n=JSON.stringify(e)}catch{throw new Error(`${o} must be JSON-safe.`)}if(new TextEncoder().encode(n).byteLength>t)throw new Error(`${o} exceeds the ${t} byte limit.`)}function Fe(e,t){return e.surfaceInstanceId===t.surfaceInstanceId&&e.projectId===t.projectId&&e.runtimeGeneration===t.runtimeGeneration}function re(e,t,o){if(e===null||typeof e=="string"||typeof e=="boolean")return;if(typeof e=="number"){if(!Number.isFinite(e))throw new Error("Non-finite number.");return}if(typeof e!="object")throw new Error(`Unsupported ${typeof e}.`);if(o>=64)throw new Error("Maximum nesting depth exceeded.");if(t.has(e))throw new Error("Cyclic value.");const n=Object.getPrototypeOf(e);if(!Array.isArray(e)&&n!==Object.prototype&&n!==null)throw new Error("Non-plain object.");if(Reflect.ownKeys(e).some(i=>typeof i!="string"))throw new Error("Symbol-keyed value.");t.add(e);for(const i of Array.isArray(e)?e:Object.values(e))re(i,t,o+1);t.delete(e)}function C(e,t){return typeof e=="string"&&e.length>0&&e.length<=t}function ve(e,t){return Reflect.ownKeys(e).every(o=>t.has(o))}function Re(e){const t=ke(e.endpointBase),o=e.fetch??e.ownerWindow.fetch.bind(e.ownerWindow),n=Object.freeze({surfaceInstanceId:e.surfaceInstanceId?.trim()||Ue(e.ownerWindow),projectId:e.api.projectId,runtimeGeneration:e.api.runtimeGeneration}),i=Number.isSafeInteger(e.retryDelayMs)&&e.retryDelayMs>0?e.retryDelayMs:500,r=new AbortController;let s=null,a=!1,u=Promise.resolve();const b=async(c,h,w)=>(te(h,c==="result"?ee:xe,`Editor Surface ${c} payload`),o(`${t}/${c}`,{method:"POST",cache:"no-store",credentials:"same-origin",headers:{"content-type":"application/json"},body:JSON.stringify(h),signal:w})),d=async()=>{const c=await b("register",{identity:n},r.signal),h=await c.json().catch(()=>null);if(!c.ok||typeof h?.leaseId!="string"||!h.leaseId)throw new Error(`Editor Surface registration failed with HTTP ${c.status}.`);return h.leaseId};return u=(async()=>{for(;!a;)try{s||(s=await d());const c=await b("poll",{leaseId:s,identity:n},r.signal);if(c.status===204)continue;const h=await c.json().catch(()=>null);if(!c.ok||!Te(h?.request))throw new Error(`Editor Surface poll failed with HTTP ${c.status}.`);const w=h.request,m=await Ce(e.ownerWindow,e.api,n,w),l=await b("result",{leaseId:s,identity:n,result:m},r.signal);if(!l.ok&&l.status!==404)throw new Error(`Editor Surface receipt failed with HTTP ${l.status}.`)}catch{if(a||r.signal.aborted)return;s=null,await ze(i,r.signal).catch(()=>{})}})(),Object.freeze({identity:n,async dispose(){if(a)return;a=!0,r.abort();const c=s;s=null,c&&await b("dispose",{leaseId:c,identity:n}).catch(()=>{}),await u.catch(()=>{})}})}async function Ce(e,t,o,n){let i;try{if(!Fe(n.expected,o))throw R("editor.surfaceMismatch","Editor Surface identity changed before execution.",!0);if(e.__FPS_EDITOR_API__!==t)throw R("editor.surfaceDisposed","Editor Surface was disposed or refreshed.",!0);const r=await De(t,n.operation,n.payload);i=Object.freeze({requestId:n.requestId,ok:!0,result:r})}catch(r){i=Object.freeze({requestId:n.requestId,ok:!1,error:Ne(r)?r:R("editor.executionFailed",r instanceof Error?r.message:String(r),!1)})}try{return te(i,ee,"Editor Surface result"),i}catch{const r=n.operation==="execute"||n.operation==="executeBatch";return Object.freeze({requestId:n.requestId,ok:!1,error:R(r?"editor.outcomeUnknown":"editor.resultTooLarge",r?"Editor capability execution completed, but its result exceeds the Surface response budget. The Browser Draft may have changed; inspect current state and do not blindly retry.":"Editor capability result exceeds the Surface response budget.",!r,{requestId:n.requestId,operation:n.operation,...Le(n.payload),target:o})})}}async function De(e,t,o){switch(t){case"snapshot":return e.capabilities.snapshot();case"list":return e.capabilities.list(o);case"search":return e.capabilities.search(o);case"describe":if(typeof o!="string")throw R("editor.invalidRequest","describe requires a capabilityId string.",!0);return e.capabilities.describe(o);case"execute":return e.capabilities.execute(o);case"executeBatch":return e.capabilities.executeBatch(o)}}function R(e,t,o,n){return Object.freeze({code:e,message:t,retrySafe:o,...n!==void 0?{details:n}:{}})}function Ne(e){return!!e&&typeof e=="object"&&typeof e.code=="string"&&typeof e.message=="string"&&typeof e.retrySafe=="boolean"}function ke(e){const t=typeof e=="string"?e.trim().replace(/\/$/,""):"";if(!t)throw new Error("Editor Surface endpoint is required.");return t}function Ue(e){const t=e.crypto?.randomUUID?.bind(e.crypto);return t?t():`surface-${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}`}async function ze(e,t){t.aborted||await new Promise(o=>{let n=!1;const i=()=>{n||(n=!0,clearTimeout(r),t.removeEventListener("abort",i),o())},r=setTimeout(i,e);t.addEventListener("abort",i,{once:!0})})}function Le(e){if(!e||typeof e!="object"||Array.isArray(e))return Object.freeze({});const t=e.traceId;return typeof t=="string"&&t.length>0&&t.length<=256?Object.freeze({traceId:t}):Object.freeze({})}const Be=1e3,qe=5e3,Ve="Project I/O health request failed.";function He(e){const t=Je(e.endpointBase),o=q(e.pollIntervalMs,Be),n=q(e.requestTimeoutMs,qe);let i=We(e.initial),r=!1,s=null,a=null;const u=new Set,b=c=>{if(!Ke(i,c)){i=c;for(const h of u)h(c)}},d=()=>{r||(s=e.ownerWindow.setTimeout(f,o))},f=async()=>{if(s=null,r)return;const c=new AbortController;a=c;const h=e.ownerWindow.setTimeout(()=>c.abort(),n);try{const w=await e.fetchJson(`${t}/health`,{cache:"no-store",signal:c.signal});b(Ge(w))}catch{r||b(Object.freeze({ready:!1,generation:i.generation,reason:Ve}))}finally{e.ownerWindow.clearTimeout(h),a===c&&(a=null),d()}};return d(),Object.freeze({availability:Object.freeze({getAvailability:()=>i,subscribeAvailability(c){return r?()=>{}:(u.add(c),()=>u.delete(c))}}),stop(){r||(r=!0,s!==null&&e.ownerWindow.clearTimeout(s),s=null,a?.abort(),a=null,u.clear())}})}function Ge(e){if(!e||typeof e!="object"||Array.isArray(e))throw new Error("Project I/O health response must be an object.");const t=e;if(t.schemaVersion!==1||t.kind!=="project-io"||typeof t.ready!="boolean"||!Number.isSafeInteger(t.generation)||t.status!=="ready"&&t.status!=="unavailable")throw new Error("Project I/O health response is invalid.");const o=String(t.generation);return t.ready&&t.status==="ready"?Object.freeze({ready:!0,generation:o}):Object.freeze({ready:!1,generation:o,reason:typeof t.reason=="string"&&t.reason.trim()?t.reason:"Project I/O is unavailable."})}function We(e){const t=e.generation?.trim();if(!t)throw new Error("Project I/O initial generation is required.");return e.ready?Object.freeze({ready:!0,generation:t}):Object.freeze({ready:!1,generation:t,reason:e.reason?.trim()||"Project I/O is unavailable."})}function Ke(e,t){return e.ready===t.ready&&e.generation===t.generation&&(e.ready||t.ready||e.reason===t.reason)}function Je(e){const t=typeof e=="string"?e.trim().replace(/\/$/,""):"";if(!t)throw new Error("Project I/O endpoint is required.");return t}function q(e,t){return Number.isSafeInteger(e)&&e>0?e:t}async function Ye(e){let t=null,o=!1,n=Promise.resolve(),i=null,r=null;const s=e.container.ownerDocument,a=s.defaultView??window;let u=null;if(!e.projectIOAvailability&&e.projectIOInitialAvailability&&e.authoringEndpointBase){const l=e.authoringFetchJson??(async(p,y)=>{const g=await a.fetch(p,y),S=await g.json().catch(()=>null);if(!g.ok)throw new Error(`Project I/O health request failed (${g.status}).`);return S});u=He({endpointBase:e.authoringEndpointBase,initial:e.projectIOInitialAvailability,ownerWindow:a,fetchJson:l})}const b=e.projectIOAvailability??u?.availability,d=s.createElement("canvas");d.id="renderCanvas",d.style.cssText="display:block;width:100%;height:100%;touch-action:none;outline:none";const f=()=>{i?.(),i=null,d.remove()},c=l=>{const p=n.then(l,l);return n=p.catch(()=>{}),p},h=()=>{const l=a.__FPS_EDITOR_API__;if(!l)throw new Error("Browser Editor API is unavailable.");return l},w=async(l,p)=>{const y=t?.getHost();if(!y)throw new Error("Editor host is unavailable for asset import.");const g=p?y.harness.projectAssetDropPoint({space:"scene-view-normalized",x:p.x,y:p.y}):null,S=await h().capabilities.execute({capabilityId:"asset.importAndPlace",input:{...l,...g?{position:g}:{}}});if(S.outcome!=="applied"&&S.outcome!=="no-op")throw new Error(S.diagnostics[0]?.message??"Browser asset import and placement failed.")};async function m(){if(o)return;let l=null;try{const p=ge(e.projectDefinition);i?.(),i=Qe(a,e.runtimeAssetBaseUrl),d.parentNode!==e.container&&e.container.appendChild(d);const y=je(),g=Object.freeze({environment:"editor",buildTarget:"editor",manifests:Object.freeze([y]),entries:Object.freeze([{pluginId:y.id,config:null,load:async()=>_e}]),pluginConfigs:Object.freeze({...Object.fromEntries(p.plugins.map(I=>[I.pluginId,I.config])),[y.id]:null})});if(l=await we(p.project,{root:e.container,window:a,authoringEndpointBase:e.authoringEndpointBase,authoringFetchJson:e.authoringFetchJson,projectIOAvailability:b,onExternalAssetDrop:e.onExternalAssetDrop?async I=>{const v=await e.onExternalAssetDrop?.(I);v&&await w(v,{x:I.point.sceneX,y:I.point.sceneY})}:void 0,projectMode:{async enterEditorMode(){},...e.onEnterPlayMode?{enterPlayMode:e.onEnterPlayMode}:{}},pluginModule:g,getCanvas:()=>d,...e.materialShaderDefinitions?{materialShaderDefinitions:e.materialShaderDefinitions}:{},...e.materialProjectionAdapters?{materialProjectionAdapters:e.materialProjectionAdapters}:{}}),o){await l.dispose(),f();return}t=l,await l.enterEditor(),e.surfaceEndpointBase&&(r=Re({endpointBase:e.surfaceEndpointBase,ownerWindow:a,api:h()}));const S=a.__FPS_EDITOR_SYSTEM_FUNCTIONAL_REGISTER__;typeof S=="function"&&S(Object.freeze({readDraft(){const I=t?.getHost()?.harness,v=I?.getWorkingDocument(),z=I?.getPersistedDocument(),L=I?.getDocumentState();return v&&z&&L?Object.freeze({summary:L,workingDocument:v,persistedDocument:z}):null}}))}catch(p){t===l&&(t=null);let y=null;try{const g=r;r=null,await g?.dispose(),await l?.dispose()}catch(g){y=g}finally{f()}if(y){const g=y instanceof Error?y.message:String(y),S=new Error(`Editor mount failed and cleanup also failed: ${g}`);throw Object.assign(S,{cause:p,cleanupError:y}),S}throw p}}try{await c(m)}catch(l){throw u?.stop(),u=null,l}return{async save(){if(!t?.getHost())return!1;const l=await h().capabilities.execute({capabilityId:"document.save",input:{}});return l.outcome==="applied"||l.outcome==="no-op"},reload(){return c(async()=>{const l=t,p=r;t=null,r=null;try{await p?.dispose(),await l?.dispose()}finally{f()}await m()})},async importAsset({point:l,...p}){await w(p,l)},dispose(){return o=!0,u?.stop(),u=null,c(async()=>{a.__FPS_EDITOR_SYSTEM_FUNCTIONAL_REGISTER__?.(null);const l=t,p=r;t=null,r=null;try{await p?.dispose(),await l?.dispose()}finally{f()}})}}}function Qe(e,t){const o=e,n=Object.getOwnPropertyDescriptor(o,"__FPS_EDITOR_RUNTIME_URL__");t&&(o.__FPS_EDITOR_RUNTIME_URL__=t);let i=!1;return()=>{i||(i=!0,t&&o.__FPS_EDITOR_RUNTIME_URL__===t&&(n?Object.defineProperty(o,"__FPS_EDITOR_RUNTIME_URL__",n):delete o.__FPS_EDITOR_RUNTIME_URL__))}}const M=(e,t)=>({kind:"number",...e!=null?{min:e}:{},...t!=null?{max:t}:{}}),x={kind:"texture"},V={kind:"color"},Xe={kind:"enum",values:["lit","unlit"]},Ze={kind:"enum",values:["opaque","mask","blend"]},ne={lightingModel:Xe,baseColor:{kind:"object",properties:{color:V,texture:x,brightness:M(0),saturation:M(0),contrast:M(0),hue:M(-180,180)}},normal:{kind:"object",properties:{texture:x,strength:M(0)}},emission:{kind:"object",properties:{color:V,intensity:M(0),texture:x,maskTexture:x}},alpha:{kind:"object",properties:{mode:Ze,opacity:M(0,1),cutoff:M(0,1),texture:x}}},et={kind:"object",properties:{...ne,metallic:M(0,1),roughness:M(0,1),metallicRoughness:{kind:"object",properties:{texture:x}},occlusion:{kind:"object",properties:{texture:x,strength:M(0)}}}},tt={kind:"object",properties:ne},rt={lightingModel:"lit",baseColor:{color:{r:1,g:1,b:1},brightness:1,saturation:1,contrast:1,hue:0},metallic:0,roughness:1,emission:{color:{r:0,g:0,b:0},intensity:0}},nt={lightingModel:"lit",baseColor:{color:{r:1,g:1,b:1},brightness:1,saturation:1,contrast:1,hue:0},emission:{color:{r:0,g:0,b:0},intensity:0}},H=[{id:"surface",title:"Surface",order:40},{id:"geometry",title:"Geometry",order:50},{id:"emission",title:"Emission",order:60},{id:"alpha",title:"Alpha",order:70}],P={path:"properties.lightingModel",operator:"equals",value:"lit",inactiveReasonKey:"litMaterial"},oe=[$("properties.lightingModel","surface",1,"enum","assetLightingModel","lightingModel","lit",{options:[{value:"lit",labelKey:"assetLightingModelLit"},{value:"unlit",labelKey:"assetLightingModelUnlit"}],binding:"lightingModel",updateClass:"define"}),$("properties.baseColor.color","surface",2,"color","assetBaseColor","baseColor",{r:1,g:1,b:1},{binding:"baseColor.color"}),T("properties.baseColor.texture.textureAssetId","properties.baseColor.texture","surface",3,"assetBaseTexture","baseTexture","baseColor.texture"),j("properties.baseColor.brightness","surface",4,"assetBrightness","brightness",1,{softMin:0,softMax:4,step:.05,conditions:[A("properties.baseColor.texture.textureAssetId","baseTexture")]}),j("properties.baseColor.saturation","surface",5,"assetSaturation","saturation",1,{softMin:0,softMax:2,step:.05,conditions:[A("properties.baseColor.texture.textureAssetId","baseTexture")]}),j("properties.baseColor.contrast","surface",6,"assetContrast","contrast",1,{softMin:0,softMax:2,step:.05,conditions:[A("properties.baseColor.texture.textureAssetId","baseTexture")]}),j("properties.baseColor.hue","surface",7,"assetHue","hue",0,{step:1,conditions:[A("properties.baseColor.texture.textureAssetId","baseTexture")]}),T("properties.normal.texture.textureAssetId","properties.normal.texture","geometry",10,"assetNormalTexture","normalTexture","normal.texture",[P]),j("properties.normal.strength","geometry",11,"assetNormalStrength","normalStrength",1,{softMin:0,softMax:4,step:.05,conditions:[P,A("properties.normal.texture.textureAssetId","normalTexture")]}),$("properties.emission.color","emission",50,"color","assetEmissionColor","emissionColor",{r:0,g:0,b:0},{binding:"emission.color"}),j("properties.emission.intensity","emission",51,"assetEmissionIntensity","emissionIntensity",0,{softMin:0,softMax:8,step:.05}),T("properties.emission.texture.textureAssetId","properties.emission.texture","emission",52,"assetEmissionTexture","emissionTexture","emission.texture"),$("properties.alpha.mode","alpha",60,"enum","assetAlphaMode","alphaMode","opaque",{options:[{value:"opaque",labelKey:"assetAlphaModeOpaque"},{value:"mask",labelKey:"assetAlphaModeMask"},{value:"blend",labelKey:"assetAlphaModeBlend"}],binding:"alpha.mode",updateClass:"pipeline"}),j("properties.alpha.opacity","alpha",61,"assetAlphaOpacity","alphaOpacity",1,{step:.05,conditions:[{path:"properties.alpha.mode",operator:"equals",value:"blend",inactiveReasonKey:"alphaBlend"}]}),j("properties.alpha.cutoff","alpha",62,"assetAlphaCutoff","alphaCutoff",.5,{step:.01,conditions:[{path:"properties.alpha.mode",operator:"equals",value:"mask",inactiveReasonKey:"alphaMask"}]}),T("properties.alpha.texture.textureAssetId","properties.alpha.texture","alpha",63,"assetAlphaTexture","alphaTexture","alpha.texture",[{path:"properties.alpha.mode",operator:"not-equals",value:"opaque",inactiveReasonKey:"alphaTransparency"}])],ot=[...oe,j("properties.metallic","geometry",20,"assetMetallic","metallic",0,{step:.05,conditions:[P]}),j("properties.roughness","geometry",21,"assetRoughness","roughness",1,{step:.05,conditions:[P]}),T("properties.metallicRoughness.texture.textureAssetId","properties.metallicRoughness.texture","geometry",22,"assetMetallicRoughnessTexture","metallicRoughnessTexture","metallicRoughness.texture",[P]),T("properties.occlusion.texture.textureAssetId","properties.occlusion.texture","geometry",23,"assetOcclusionTexture","occlusionTexture","occlusion.texture",[P]),j("properties.occlusion.strength","geometry",24,"assetOcclusionStrength","occlusionStrength",1,{softMin:0,softMax:4,step:.05,conditions:[P,A("properties.occlusion.texture.textureAssetId","occlusionTexture")]})],ie=[{shaderId:"fps.builtin.pbr",version:1,runtimeKind:"pbr",displayName:"PBR",propertiesSchema:et,defaultProperties:rt,inspector:{sections:H,fields:ot}},{shaderId:"fps.builtin.standard",version:1,runtimeKind:"standard",displayName:"Standard",propertiesSchema:tt,defaultProperties:nt,inspector:{sections:H,fields:oe}}];ae(ie);function ae(e){const t=new Map;for(const n of e){it(n,t);const i=at(n);t.set(n.shaderId,de(i))}const o=Object.freeze([...t.values()]);return Object.freeze({get(n){return typeof n=="string"?t.get(n)??null:null},list(){return o}})}function $(e,t,o,n,i,r,s,a){return{path:e,sectionId:t,order:o,control:n,labelKey:i,tooltipKey:r,defaultValue:s,updateClass:"uniform",...a}}function j(e,t,o,n,i,r,s={}){return $(e,t,o,"number",n,i,r,{binding:e.replace(/^properties\./,""),step:s.step??.05,displayPrecision:2,precision:2,...s})}function T(e,t,o,n,i,r,s,a){return $(e,o,n,"texture",i,r,"",{schemaPath:t,binding:s,updateClass:"texture",conditions:a})}function A(e,t){return{path:e,operator:"truthy",inactiveReasonKey:t}}function it(e,t){if(!Se(e.shaderId)&&!Ee(e.shaderId))throw new Error("Material Shader Definition shaderId must be a supported built-in id or a lowercase namespaced project id.");if(!Number.isInteger(e.version)||e.version<=0)throw new Error(`Material Shader Definition ${e.shaderId} must use a positive integer version.`);if(t.has(e.shaderId))throw new Error(`Duplicate Material Shader Definition: ${e.shaderId}`);if(e.sourceFile!=null&&!ct(e.sourceFile))throw new Error(`Material Shader Definition ${e.shaderId} sourceFile must be a safe project-relative path.`);se(e.shaderId,e.propertiesSchema,"properties");const o=[];if(le(e.propertiesSchema,e.defaultProperties,"properties",o),o.length>0){const r=o[0];throw new Error(`Material Shader Definition ${e.shaderId} default ${r.path} ${r.message}.`)}const n=new Set;for(const r of e.inspector.sections){if(!r.id.trim()||n.has(r.id))throw new Error(`Material Shader Definition ${e.shaderId} contains an invalid or duplicate section: ${r.id}`);n.add(r.id)}const i=new Set;for(const r of e.inspector.fields){if(!r.path.startsWith("properties.")||i.has(r.path))throw new Error(`Material Shader Definition ${e.shaderId} contains an invalid or duplicate field: ${r.path}`);if(!n.has(r.sectionId))throw new Error(`Material Shader Definition ${e.shaderId} field ${r.path} references an unknown section.`);st(e,r),i.add(r.path)}}function at(e){const t=structuredClone(e);return{...t,inspector:{...t.inspector,fields:t.inspector.fields.map(o=>{if(o.control!=="number")return o;const n=ce(t.propertiesSchema,o.schemaPath??o.path);return n?.kind!=="number"?o:{...o,...n.min!=null?{min:n.min}:{},...n.max!=null?{max:n.max}:{}}})}}}function st(e,t){const o=[["min",t.min],["max",t.max],["softMin",t.softMin],["softMax",t.softMax]];for(const[i,r]of o)if(r!=null&&!Number.isFinite(r))throw new Error(`Material Shader Definition ${e.shaderId} field ${t.path} ${i} must be finite.`);if(t.control!=="number"){if(o.some(([,i])=>i!=null))throw new Error(`Material Shader Definition ${e.shaderId} field ${t.path} uses numeric ranges with a non-number control.`);return}const n=ce(e.propertiesSchema,t.schemaPath??t.path);if(n?.kind!=="number")throw new Error(`Material Shader Definition ${e.shaderId} field ${t.path} must reference a number schema.`);for(const[i,r,s]of[["min",t.min,n.min],["max",t.max,n.max]])if(r!=null&&r!==s)throw new Error(`Material Shader Definition ${e.shaderId} field ${t.path} ${i} must match propertiesSchema.`);if(t.softMin!=null&&t.softMax!=null&&t.softMin>t.softMax)throw new Error(`Material Shader Definition ${e.shaderId} field ${t.path} softMin must not exceed softMax.`);if(n.min!=null&&t.softMin!=null&&t.softMin<n.min)throw new Error(`Material Shader Definition ${e.shaderId} field ${t.path} softMin must not be below the schema minimum.`);if(n.max!=null&&t.softMax!=null&&t.softMax>n.max)throw new Error(`Material Shader Definition ${e.shaderId} field ${t.path} softMax must not exceed the schema maximum.`)}function se(e,t,o){if(t.kind==="object"){for(const[n,i]of Object.entries(t.properties))se(e,i,`${o}.${n}`);return}if(t.kind==="number"){if(t.min!=null&&!Number.isFinite(t.min))throw new Error(`Material Shader Definition ${e} number field ${o} min must be finite.`);if(t.max!=null&&!Number.isFinite(t.max))throw new Error(`Material Shader Definition ${e} number field ${o} max must be finite.`);if(t.min!=null&&t.max!=null&&t.min>t.max)throw new Error(`Material Shader Definition ${e} number field ${o} min must not exceed max.`);return}if(t.kind==="color"&&t.channels!=null&&t.channels!==3&&t.channels!==4)throw new Error(`Material Shader Definition ${e} color field ${o} channels must be 3 or 4.`)}function ct(e){const t=e.trim();return!t||t.startsWith("/")||t.includes("\\")||t.includes(":")?!1:!t.split("/").includes("..")}function lt(e){const t=e.trim();return t.startsWith("properties.")?t:`properties.${t}`}function ce(e,t){const o=lt(t).replace(/^properties\./,"").split(".").filter(Boolean);if(o.length===0)return null;let n=e;for(const i of o){if(n.kind!=="object")return null;const r=n.properties[i];if(!r)return null;n=r}return n}function le(e,t,o,n){if(e.kind==="object"){if(!N(t)){n.push({path:o,message:"must be an object"});return}for(const r of Object.keys(t))Object.prototype.hasOwnProperty.call(e.properties,r)||n.push({path:`${o}.${r}`,message:"is not supported by the selected shader"});for(const[r,s]of Object.entries(e.properties))t[r]!==void 0&&le(s,t[r],`${o}.${r}`,n);return}if(e.kind==="number"){if(typeof t!="number"||!Number.isFinite(t)){n.push({path:o,message:"must be a finite number"});return}e.min!=null&&t<e.min&&n.push({path:o,message:`must be greater than or equal to ${e.min}`}),e.max!=null&&t>e.max&&n.push({path:o,message:`must be less than or equal to ${e.max}`});return}if(e.kind==="boolean"){typeof t!="boolean"&&n.push({path:o,message:"must be a boolean"});return}if(e.kind==="string"){t!==null&&typeof t!="string"?n.push({path:o,message:"must be a string"}):t===null&&!e.nullable&&n.push({path:o,message:"must not be null"});return}if(e.kind==="enum"){(typeof t!="string"||!e.values.includes(t))&&n.push({path:o,message:`must be one of: ${e.values.join(", ")}`});return}if(e.kind==="color"){const r=e.channels===4?["r","g","b","a"]:["r","g","b"];G(t,o,r,n,e.channels===4?"an RGBA object":"an RGB object");return}if(e.kind==="vec2"||e.kind==="vec3"){G(t,o,e.kind==="vec2"?["x","y"]:["x","y","z"],n,`a ${e.kind} object`);return}if(t===null)return;if(!N(t)){n.push({path:o,message:"must be a texture reference object or null"});return}Object.keys(t).some(r=>r!=="url"&&r!=="textureAssetId")&&n.push({path:o,message:"must contain only url or textureAssetId"});for(const r of["url","textureAssetId"]){const s=t[r];s!==void 0&&(typeof s!="string"||!s.trim())&&n.push({path:`${o}.${r}`,message:"must be a non-empty string"})}}function G(e,t,o,n,i){if(!N(e)){n.push({path:t,message:`must be ${i}`});return}Object.keys(e).some(r=>!o.includes(r))&&n.push({path:t,message:`must contain only ${o.join(", ")}`});for(const r of o)(typeof e[r]!="number"||!Number.isFinite(e[r]))&&n.push({path:`${t}.${r}`,message:"must be a finite number"})}function de(e){if(e&&typeof e=="object"&&!Object.isFrozen(e)){Object.freeze(e);for(const t of Object.values(e))de(t)}return e}function N(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}const dt=Object.freeze([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]),ut=Object.freeze([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]);function k(e){return ft(new TextEncoder().encode(e))}function pt(e){return`sha256:${k(JSON.stringify(e))}`}function ft(e){const t=Math.ceil((e.length+9)/64)*64,o=new Uint8Array(t);o.set(e),o[e.length]=128;const n=new DataView(o.buffer);n.setUint32(t-8,Math.floor(e.length/536870912),!1),n.setUint32(t-4,e.length*8>>>0,!1);const i=[...dt],r=new Uint32Array(64);for(let s=0;s<o.length;s+=64){for(let m=0;m<16;m+=1)r[m]=n.getUint32(s+m*4,!1);for(let m=16;m<64;m+=1){const l=r[m-15],p=r[m-2],y=_(l,7)^_(l,18)^l>>>3,g=_(p,17)^_(p,19)^p>>>10;r[m]=r[m-16]+y+r[m-7]+g>>>0}let[a,u,b,d,f,c,h,w]=i;for(let m=0;m<64;m+=1){const l=_(f,6)^_(f,11)^_(f,25),p=f&c^~f&h,y=w+l+p+ut[m]+r[m]>>>0,g=_(a,2)^_(a,13)^_(a,22),S=a&u^a&b^u&b,I=g+S>>>0;w=h,h=c,c=f,f=d+y>>>0,d=b,b=u,u=a,a=y+I>>>0}i[0]=i[0]+a>>>0,i[1]=i[1]+u>>>0,i[2]=i[2]+b>>>0,i[3]=i[3]+d>>>0,i[4]=i[4]+f>>>0,i[5]=i[5]+c>>>0,i[6]=i[6]+h>>>0,i[7]=i[7]+w>>>0}return i.map(s=>s.toString(16).padStart(8,"0")).join("")}function _(e,t){return e>>>t|e<<32-t}const ht="fps.plugin.materials";function mt(e){const t=e?.[ht];if(t==null)return null;if(!O(t)||t.schemaVersion!==1||typeof t.snapshotId!="string"||!Array.isArray(t.shaders))throw new Error("Materials Plugin snapshot is invalid. Run fps-editor-prepare again.");const o=structuredClone(t);return bt(o),pe(o)}function ue(e){return ae([...ie,...e?.shaders.map(t=>t.definition)??[]])}function bt(e){if(!/^sha256:[a-f0-9]{64}$/.test(e.snapshotId)||e.shaders.length===0)throw new Error("Materials Plugin snapshot identity is invalid. Run fps-editor-prepare again.");for(const o of e.shaders)if(!O(o)||!O(o.definition)||!O(o.program))throw new Error("Materials Plugin Shader snapshot is invalid. Run fps-editor-prepare again.");ue(e);for(const o of e.shaders){const{definition:n,program:i}=o;if(i.shaderId!==n.shaderId||i.definitionVersion!==n.version)throw new Error(`Material snapshot Definition identity does not match its program: ${n.shaderId}`);if(i.language!=="glsl"||!W(i.vertexSourcePath)||!W(i.fragmentSourcePath)||!/^[a-f0-9]{64}$/.test(i.vertexSourceHash)||!/^[a-f0-9]{64}$/.test(i.fragmentSourceHash)||typeof i.vertexSource!="string"||!i.vertexSource.trim()||typeof i.fragmentSource!="string"||!i.fragmentSource.trim())throw new Error(`Material snapshot program is invalid: ${n.shaderId}`);if(k(i.vertexSource)!==i.vertexSourceHash||k(i.fragmentSource)!==i.fragmentSourceHash)throw new Error(`Material snapshot source hash does not match its GLSL content: ${n.shaderId}`);if(!Array.isArray(i.attributes)||i.attributes.length===0||i.attributes.some(r=>!/^[A-Za-z_][A-Za-z0-9_]*$/.test(r))||new Set(i.attributes).size!==i.attributes.length)throw new Error(`Material snapshot attributes are invalid: ${n.shaderId}`);if(!["opaque","combine","add"].includes(i.alphaMode)||!O(i.enumUniformValues)||!O(i.frame)||!["on-demand","continuous"].includes(i.frame.mode))throw new Error(`Material snapshot rendering policy is invalid: ${n.shaderId}`)}const t={schemaVersion:e.schemaVersion,shaders:e.shaders};if(pt(t)!==e.snapshotId)throw new Error("Materials Plugin snapshot payload does not match its identity. Run fps-editor-prepare again.")}function W(e){return typeof e=="string"&&!!e&&!e.startsWith("/")&&!e.includes("\\")&&!e.includes(":")&&e.split("/").every(t=>!!t&&t!=="."&&t!=="..")}function pe(e){if(!e||typeof e!="object"||Object.isFrozen(e))return e;for(const t of Object.values(e))pe(t);return Object.freeze(e)}function O(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}function yt(e){let t=0;const o=new WeakMap;return Object.freeze(e.shaders.map(({definition:n,program:i})=>Object.freeze({shaderId:n.shaderId,definitionVersion:n.version,snapshotId:e.snapshotId,createMaterial(r){const s=r.babylon,a=`${Mt(n.shaderId)}-${t+=1}`;if(!s.Effect?.ShadersStore||!s.ShaderMaterial||!s.StandardMaterial||!s.Color3)throw new Error(`Babylon ShaderMaterial is unavailable for ${n.shaderId}.`);K(n,r.definitionVersion),s.Effect.ShadersStore[`${a}VertexShader`]=i.vertexSource,s.Effect.ShadersStore[`${a}FragmentShader`]=i.fragmentSource;const u=n.inspector.fields.filter(l=>l.updateClass==="uniform").map(l=>l.binding),b=[...new Set(["world","worldViewProjection",...i.frame.timeUniform?[i.frame.timeUniform]:[],...i.frame.cameraPositionUniform?[i.frame.cameraPositionUniform]:[],...u])];let d;try{d=new s.ShaderMaterial(a,r.scene,{vertex:a,fragment:a},{attributes:i.attributes,uniforms:b,needAlphaBlending:i.alphaMode!=="opaque"}),d.backFaceCulling=i.alphaMode==="opaque",d.alphaMode=i.alphaMode==="add"?s.Constants.ALPHA_ADD:i.alphaMode==="combine"?s.Constants.ALPHA_COMBINE:s.Constants.ALPHA_DISABLE,J(s,d,n,i,r.properties)}catch(l){throw delete s.Effect.ShadersStore[`${a}VertexShader`],delete s.Effect.ShadersStore[`${a}FragmentShader`],d?.dispose?.(),l}const f=gt(s,r.scene,a),c={material:d,mesh:r.mesh,setMaterial:r.setMaterial,placeholder:f,compiled:!1,disposed:!1,failed:!1,failure:null,compilation:null,invalidateFrameParticipant:null,shaderName:a,shadersStore:s.Effect.ShadersStore};o.set(f,c),o.set(d,c);const h=()=>{c.disposed||c.failed||c.compiled||(c.compiled=!0,c.setMaterial(c.material),St(c.mesh))},w=l=>{c.disposed||c.failed||(c.failed=!0,c.failure=l,c.invalidateFrameParticipant?.(),c.setMaterial(c.placeholder),wt(c.mesh,{code:"material.shaderCompilationFailed",severity:"error",shaderId:n.shaderId,definitionVersion:n.version,snapshotId:e.snapshotId,message:String(l??"Shader compilation failed.").slice(0,2048)}))};d.onCompiled=()=>{queueMicrotask(()=>{h()})},d.onError=(l,p)=>{w(p)};try{if(typeof d.forceCompilationAsync!="function")throw new Error("Babylon ShaderMaterial.forceCompilationAsync() is unavailable.");c.compilation=Promise.resolve(d.forceCompilationAsync(c.mesh)).then(()=>{if(c.failed)throw c.failure;h()}).catch(l=>{throw w(l),l})}catch(l){w(l),c.compilation=Promise.reject(l)}c.compilation.catch(()=>{}),f.forceCompilationAsync=()=>c.compilation;const m=f.dispose.bind(f);return f.dispose=(...l)=>{c.disposed||(c.disposed=!0,c.invalidateFrameParticipant?.(),delete c.shadersStore[`${c.shaderName}VertexShader`],delete c.shadersStore[`${c.shaderName}FragmentShader`],c.material.dispose?.(),m(...l))},f},updateMaterial(r){const s=r.babylon,a=Y(r.material)?o.get(r.material):void 0;return!a||a.disposed||a.failed?!1:(K(n,r.definitionVersion),J(s,a.material,n,i,r.properties),!0)},...i.frame.mode==="continuous"?{createFrameParticipant(r){const s=r.babylon,a=Y(r.material)?o.get(r.material):void 0;if(!a)throw new Error(`ShaderMaterial state is unavailable for ${n.shaderId}.`);let u=!1;const b=new Set;return a.invalidateFrameParticipant=()=>{for(const d of[...b])d()},{frameMode:"continuous",resolveFrameMode(){return a.failed||a.disposed||u?"on-demand":"continuous"},isActive(){return!a.failed&&!a.disposed&&!u},onFrameModeChanged(d){return b.add(d),()=>b.delete(d)},updateFrame(d){if(!(a.failed||a.disposed||u)&&(i.frame.timeUniform&&a.material.setFloat(i.frame.timeUniform,d.elapsedSeconds),i.frame.cameraPositionUniform)){const f=r.scene.activeCamera;a.material.setVector3(i.frame.cameraPositionUniform,f?.globalPosition??f?.position??s.Vector3.Zero())}},dispose(){u||(u=!0,b.clear(),a.invalidateFrameParticipant&&(a.invalidateFrameParticipant=null))}}}}:{}})))}function K(e,t){if(t!==e.version)throw Object.assign(new Error(`Material Definition version mismatch for ${e.shaderId}: expected ${e.version}, received ${String(t)}.`),{code:"material.shaderDefinitionVersionMismatch",shaderId:e.shaderId,expectedVersion:e.version,actualVersion:t})}function gt(e,t,o){const n=new e.StandardMaterial(`${o}.diagnostic`,t);return n.diffuseColor=new e.Color3(.8,.02,.45),n.emissiveColor=new e.Color3(.35,0,.12),n.specularColor=new e.Color3(0,0,0),n.backFaceCulling=!1,n}function wt(e,t){const o=F(e.metadata)?e.metadata:{},n=F(o.editorProjection)?o.editorProjection:{};e.metadata={...o,editorProjection:{...n,materialDiagnostic:Object.freeze({...t})}}}function St(e){if(!F(e.metadata)||!F(e.metadata.editorProjection)||!Object.prototype.hasOwnProperty.call(e.metadata.editorProjection,"materialDiagnostic"))return;const t={...e.metadata.editorProjection};delete t.materialDiagnostic,e.metadata={...e.metadata,editorProjection:t}}function J(e,t,o,n,i){for(const r of o.inspector.fields){if(r.updateClass!=="uniform")continue;const s=It(i,r.path.replace(/^properties\./,""));if(r.control==="number")t.setFloat(r.binding,E(s,r.path));else if(r.control==="boolean")t.setFloat(r.binding,s===!0?1:0);else if(r.control==="enum"){const a=n.enumUniformValues[r.path],u=typeof s=="string"?a?.[s]:void 0;if(!Number.isFinite(u))throw new Error(`Enum uniform value is not mapped: ${r.path}=${String(s)}`);t.setFloat(r.binding,u)}else if(r.control==="color"){const a=D(s,r.path);Et(o,r.path)===4?t.setColor4(r.binding,new e.Color4(E(a.r,`${r.path}.r`),E(a.g,`${r.path}.g`),E(a.b,`${r.path}.b`),E(a.a,`${r.path}.a`))):t.setColor3(r.binding,new e.Color3(E(a.r,`${r.path}.r`),E(a.g,`${r.path}.g`),E(a.b,`${r.path}.b`)))}else if(r.control==="vec2"){const a=D(s,r.path);t.setVector2(r.binding,new e.Vector2(E(a.x,`${r.path}.x`),E(a.y,`${r.path}.y`)))}else if(r.control==="vec3"){const a=D(s,r.path);t.setVector3(r.binding,new e.Vector3(E(a.x,`${r.path}.x`),E(a.y,`${r.path}.y`),E(a.z,`${r.path}.z`)))}else throw new Error(`Unsupported ShaderMaterial uniform control: ${r.path} (${r.control})`)}}function Et(e,t){let o=e.propertiesSchema;for(const n of t.replace(/^properties\./,"").split(".")){if(o.kind!=="object"||!o.properties[n])return 3;o=o.properties[n]}return o.kind==="color"&&o.channels===4?4:3}function It(e,t){let o=e;for(const n of t.split(".").filter(Boolean)){if(!F(o))return;o=o[n]}return o}function D(e,t){if(!F(e))throw new Error(`Material property must be an object: ${t}`);return e}function E(e,t){if(typeof e!="number"||!Number.isFinite(e))throw new Error(`Material property must be a finite number: ${t}`);return e}function Mt(e){return e.replace(/[^a-z0-9_-]/gi,"_")}function Y(e){return!!e&&typeof e=="object"}function F(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}const fe=window.__FPS_EDITOR_PROJECT_DEFINITION__;if(!fe)throw new Error("Editor Project definition was not provided by the control plane.");const U=mt(window.__FPS_EDITOR_PLUGIN_SNAPSHOTS__),jt=ue(U),Q=U?yt(U):void 0,X=()=>{const e=window.__FPS_EDITOR_PROJECT_IO__,t=String(e?.generation??0);return e?.status==="ready"?{ready:!0,generation:t}:{ready:!1,generation:t,reason:e?.reason??"Project I/O is unavailable."}},_t=await Ye({container:document.body,projectDefinition:fe,surfaceEndpointBase:window.__FPS_EDITOR_SURFACE__?.endpointBase,runtimeAssetBaseUrl:window.location.origin,projectIOAvailability:{getAvailability:X,subscribeAvailability(e){const t=()=>e(X());return window.addEventListener("fps-editor:project-io-availability-changed",t),()=>window.removeEventListener("fps-editor:project-io-availability-changed",t)}},async onEnterPlayMode(){const e=window.__FPS_EDITOR_RUNTIME_URL__;if(!e)throw new Error("Editor Runtime URL was not provided by the control plane.");window.location.assign(e)},materialShaderDefinitions:jt,...Q?{materialProjectionAdapters:Q}:{}});window.addEventListener("pagehide",()=>void _t.dispose(),{once:!0});