@elyx-code/project-logic-tree 0.0.6951 → 0.0.6952

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -599,10 +599,10 @@ The entities of type '${bt(_,"', '","' and '")}' can only have one 'data-type' c
599
599
  The entities of type '${bt(_,"', '","' and '")}' can only have one 'data-type' child under the 'dataType' property. You can inspect the existing data-type entity with the 'describe_entity' action. Like so:
600
600
  ${fp({describe_entity:P})}
601
601
  Alternatively you can update the entity with 'update' action. Or replace it by first removing it and then creating a new one.`}))}A===d.DataType&&(!a.parentRelationType||!(a.parentRelationType===ze.AndDataTypeGroup||a.parentRelationType===ze.OrDataTypeGroup))&&e.push(new we({id:`${i.id}--${Te.InvalidParentRelationType}`,code:Te.InvalidParentRelationType,severity:ve.Error,message:`The entity with id '${i.id}' and type '${i.type}', must have a 'parentRelationType' property set to either 'or-data-type-group' or 'and-data-type-group' when being added as a child to an entity of type 'data-type'.`}))}return{errors:e,explanations:c,modifiedData:a}}get isGroup(){const i=[...this.andChildrenGroup||[],...this.orChildrenGroup||[]];if(i.length>1){let r=0;for(const a of i)if(a.isResolved&&(r++,r>1))return!0}return!1}get isResolved(){return[d.BuiltInBaseEntity,d.ActionDescriptor].includes(this.parent.type)||pu(this.parent)?!0:!(!this.entity&&!this.isGroup&&!this.foreignKeyRef&&!this.foreignKeyAllowed)}validateGeneratedUpdate(i){return{errors:[],explanations:[],modifiedData:i}}subscribeDependents(i){return i.forEach(r=>{this.detachedDependents[r.entity.id]||(this.detachedDependents[r.entity.id]=r)}),this}unsubscribeDependents(i){return i.forEach(r=>{this.detachedDependents[r.entity.id]&&delete this.detachedDependents[r.entity.id]}),this}syncDependents(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"sync-dependents"))){const r=[],a=[],c=[],e=[];return Object.values(this.detachedDependents).forEach(f=>{const h=f.entity.afterAllChildrenInitialized(i);r.push(...h.updated),a.push(...h.added),c.push(...h.removed),e.push(...h.affected)}),i==null||i.attemptAutoclose("sync-dependents",this.id),{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}onDetachedDependencyRemoved(i,r,a){const c=[],e=[],f=[],h=[];return r==="entity-field"&&this.setEntity(null,a),r==="foreign-key-ref-field"&&this.setForeignKeyRef(null,a),{updated:C(c),added:C(e),removed:C(f),affected:C(h),self:this}}onDetachedDependencyRestored(i,r,a){const c=[],e=[],f=[],h=[];return r==="entity-field"&&this.setEntity(i,a),r==="foreign-key-ref-field"&&this.setForeignKeyRef(i,a),{updated:C(c),added:C(e),removed:C(f),affected:C(h),self:this}}unsubscribeFromDependencies(){var i,r,a,c;return(r=(i=this.entity)==null?void 0:i.unsubscribeDependents)==null||r.call(i,[{entity:this,field:"entity-field"}]),(c=(a=this.foreignKeyRef)==null?void 0:a.unsubscribeDependents)==null||c.call(a,[{entity:this,field:"foreign-key-ref-field"}]),this}subscribeToDependencies(){var i,r,a,c;return(r=(i=this.entity)==null?void 0:i.subscribeDependents)==null||r.call(i,[{entity:this,field:"entity-field"}]),(c=(a=this.foreignKeyRef)==null?void 0:a.subscribeDependents)==null||c.call(a,[{entity:this,field:"foreign-key-ref-field"}]),this}increaseVersion(i){var r;if(this.project.diggestedBuiltInBaseEntitiesIds.has(this.id))return this;if(i&&!B(i).isValid())throw new Error(`The shared timestamp '${i}' is not a valid ISO 8601 date string.`);if(i&&B(i).isSame(B(this.createdAt)))return this;if(!((r=this.knownVersions)!=null&&r.has(this.version))&&this.project.initialized)throw new Error(`The current ${this.type} ${this.id} version '${this.version}' is not captured in the 'knownVersions' map. Capture the current version before increasing it to avoid losing data.`);if(!this.activeVersion)throw new Error(`Only active versions can be increased. Entity with id '${this.id}' and version '${this.version}' is not active.`);return this.previousVersion=this.version,this.version=x.UUID.uuid(),this.createdAt=B(i).toISOString()||B().toISOString(),this}captureVersion(){var r;const i=((r=this.knownVersions)==null?void 0:r.get(this.version))||new Pi(this,this.project);if(!this.activeVersion)throw new Error(`Only active versions can be captured. Entity of type ${this.type} with id '${this.id}' and version '${this.version}' is not active.`);if(this.version!==i.version)throw new Error(`Captured ${this.type} with id '${this.id}', version '${i.version}' does not match current entity version '${this.version}'.`);return this.knownVersions=this.knownVersions?this.knownVersions.set(this.version,i):new Map().set(this.version,i),this.apply(i),this}snapshot(){const i=new Pi(this,this.project);return this.apply(i)}apply(i){const r=this.toMeta();return i.metaSync(r,null),i.entity=this.entity,i.foreignKeyRef=this.foreignKeyRef,i.andChildrenGroup=this.andChildrenGroup?[...this.andChildrenGroup]:this.andChildrenGroup,i.orChildrenGroup=this.orChildrenGroup?[...this.orChildrenGroup]:this.orChildrenGroup,i.parent=this.parent,i}recursiveCaptureUpstreamVersions(i){const r=[],a=[],c=[],e=[];if(this.parent&&this.parent.type!==d.BuiltInBaseEntity){this.parent.increaseVersion(i);const f=this.parent.recursiveCaptureUpstreamVersions(i);r.push(this.parent,...f.updated),a.push(...f.added),c.push(...f.removed)}return{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}async restoreVersion(i,r){var m;const a=[],c=[],e=[],f=[];if(this.version===i&&(r!=null&&r.skipIfSameVersion))return{updated:C(a),added:C(c),removed:C(e),affected:C(f),self:this};if(!this.knownVersions){const E=new Map;for(const[b,A]of this.knownVersions||new Map){if(E.set(b,A),A.activeVersion=!1,A.knownVersions)for(const[_,P]of A.knownVersions)E.set(_,P);A.knownVersions=null}}let h=(m=this.knownVersions)==null?void 0:m.get(i);if(!h){const E=await this.APILoadVersion({},i);if(!E)throw new Error(`Version with id '${i}' for entity with id '${this.id}' not found.`);h=new Pi(E,this.project)}return this.metaSync(h.toShallowJSON(),null),this.previousVersion=h.previousVersion,this.version=h.version,this.createdAt=h.createdAt,this.author=h.author,this.deleted=h.deleted,this.entity=h.entity,this.foreignKeyRef=h.foreignKeyRef,this.andChildrenGroup=h.andChildrenGroup?[...h.andChildrenGroup]:null,this.orChildrenGroup=h.orChildrenGroup?[...h.orChildrenGroup]:null,this.parent=h.parent,{updated:C(a),added:C(c),removed:C(e),affected:C(f),self:this}}updateWithShallowTransfer(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.UpdateWithShallowTransfer))){var a,c;if(!this.checkCanEdit(this,r))return Y.Logger.warn(`[updateWithShallowTransfer] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.UpdateWithShallowTransfer,this.id),this;if(this.metaSync(i,r),this.version=i.version,this.createdAt=i.createdAt,this.author=i.author,this.deleted=i.deleted,this.previousVersion=i.previousVersion,this.unsubscribeFromDependencies(),i.parent){const e=ie(i.parent),f=this.project.get(e),h=this.parent;if(h&&h.id!==(f==null?void 0:f.id)&&this.removeFromParent(r),f)this.setParent(f,r),this.addSelfToProject(r);else throw r==null||r.attemptAutoclose(w.UpdateWithShallowTransfer,this.id),new Error(`${this.type} with id '${this.id}' has a 'parent' reference '${e}' that isn't found in the project`)}else throw r==null||r.attemptAutoclose(w.UpdateWithShallowTransfer,this.id),new Error(`${this.type} with id '${this.id}' must have a 'parent'`);if(i.entity){const e=ie(i.entity),f=this.project.get(e);f&&(this.setEntity(f,r),this.metaSync({inferred:!1},r))}else this.setEntity(null,r);if(i.foreignKeyRef){const e=ie(i.foreignKeyRef),f=this.project.get(e);f&&this.setForeignKeyRef(f,r)}else this.setForeignKeyRef(null,r);return(a=i.andChildrenGroup)==null||a.forEach(e=>{const f=ie(e),h=this.project.get(f);h&&(this.addToAndGroup(h,r),h.setParent(this,r))}),[...this.andChildrenGroup||[]].forEach(e=>{var h;((h=i.andChildrenGroup)==null?void 0:h.find(m=>ie(m)===e.id))||(this.removeChildGroup(e,r),e.removeFromParent(r))}),(c=i.orChildrenGroup)==null||c.forEach(e=>{const f=ie(e),h=this.project.get(f);h&&(this.addToOrGroup(h,r),h.setParent(this,r))}),[...this.orChildrenGroup||[]].forEach(e=>{var h;((h=i.orChildrenGroup)==null?void 0:h.find(m=>ie(m)===e.id))||(this.removeChildGroup(e,r),e.removeFromParent(r))}),this.captureVersion(),this.subscribeToDependencies(),r==null||r.attemptAutoclose(w.UpdateWithShallowTransfer,this.id),this}updateWithGenerationTarget(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.UpdateWithGenerationTarget))){if(!this.checkCanEdit(this,r))return Y.Logger.warn(`[updateWithGenerationTarget] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.UpdateWithGenerationTarget,this.id),this;if(this.metaSync(i,r),i.parent){const a=ie(i.parent),c=this.project.get(a),e=this.parent;if(e&&e.id!==(c==null?void 0:c.id)&&this.removeFromParent(r),c)this.setParent(c,r),this.addSelfToProject(r);else throw r==null||r.attemptAutoclose(w.UpdateWithGenerationTarget,this.id),new Error(`${this.type} with id '${this.id}' has a 'parent' reference '${a}' that isn't found in the project`)}if(i.entity){const a=ie(i.entity),c=this.project.get(a);if(c)this.setEntity(c,r),this.metaSync({inferred:!1},r);else throw new Error(`${this.type} with id '${this.id}' has an 'entity' reference '${a}' that isn't found in the project`)}else i.entity==null&&this.setEntity(null,r);if(i.foreignKeyRef){const a=ie(i.foreignKeyRef),c=this.project.get(a);if(c)this.setForeignKeyRef(c,r);else throw new Error(`${this.type} with id '${this.id}' has a 'foreignKeyRef' reference '${a}' that isn't found in the project`)}else i.foreignKeyRef==null&&this.setForeignKeyRef(null,r);return this.captureVersion(),this.subscribeToDependencies(),r==null||r.attemptAutoclose(w.UpdateWithGenerationTarget,this.id),this}hydrateAncestors(){const i=[],r=[],a=[],c=[];if(this.initialData.parent){const e=ie(this.initialData.parent),f=this.project.get(e);if(f)this.setParent(f,null),i.push(f);else throw new Error(`${this.type} with id '${this.id}' has a 'parent' reference '${e}' that isn't found in the project`)}else throw new Error(`${this.type} with id '${this.id}' must have a 'parent'`);if(this.initialData.entity){const e=ie(this.initialData.entity),f=this.project.get(e);f&&(f.type===d.DefinitionEntity&&f.parent===this||(this.setEntity(f,null),f.type!==d.BuiltInBaseEntity&&f.type!==d.PrimitiveEntity&&i.push(f)))}if(this.initialData.foreignKeyRef){const e=ie(this.initialData.foreignKeyRef),f=this.project.get(e);f&&this.setForeignKeyRef(f,null)}return{updated:C(i),added:C(r),removed:C(a),affected:C(c),self:this}}afterAllChildrenInitialized(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.AfterAllChildrenInitialized))){var f,h,m,E,b;if(!this.checkCanEdit(this,i))return Y.Logger.warn(`[afterAllChildrenInitialized] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),i==null||i.attemptAutoclose(w.AfterAllChildrenInitialized,this.id),{updated:[],added:[],removed:[],affected:[],self:this};const r=[],a=[],c=[],e=[];if(this.initialized=!0,((f=this.parent)==null?void 0:f.type)===d.DataType){let A=this.index||0;const _=(this.parentRelationType===ze.AndDataTypeGroup?this.parent.andChildrenGroup||[]:this.parent.orChildrenGroup||[]).filter(V=>!V.deleted&&V.id!==this.id);_.length&&(A>_.length+1?A=_.length:A<0&&(A=0)),_.find(V=>(V.index||0)===A&&!V.deleted)&&_.filter(V=>(V.index||0)>=A&&!V.deleted).forEach(V=>{V.metaSync({index:(V.index||0)+1},i),i==null||i.add(V,W.Updated),r.push(V)}),this.metaSync({index:A},i)}return(h=this.andChildrenGroup)!=null&&h.length&&this.andChildrenGroup.sort((A,_)=>(A.index||0)-(_.index||0)),(m=this.orChildrenGroup)!=null&&m.length&&this.orChildrenGroup.sort((A,_)=>(A.index||0)-(_.index||0)),this.entity&&this.entity.type===d.DefinitionEntity&&((E=this.entity.parent)==null?void 0:E.id)!==this.id&&this.metaSync({inferred:!1},i),this.bestEffortClearIncompatibleProperties(i),this.entity&&this.entity.type===d.DefinitionEntity&&((b=this.entity.parent)==null?void 0:b.id)===this.id&&this.entity.afterAllChildrenInitialized(i),i==null||i.attemptAutoclose(w.AfterAllChildrenInitialized,this.id),{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}addSelfToProject(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"add-self-to-project"))){const r=[this],a=[],c=[],e=[];return this.parent.type===d.DataType?(this.parentRelationType===ze.AndDataTypeGroup?this.parent.addToAndGroup(this,i):this.parentRelationType===ze.OrDataTypeGroup&&this.parent.addToOrGroup(this,i),e.push(this.parent)):this.parent.type===d.DefinitionEntity?(this.parent.setAdditionalPropertiesDataType(this,i),e.push(this.parent)):this.parent.type!==d.BuiltInBaseEntity&&this.parent.setDataType(this,i),this.subscribe(),this.subscribeToDependencies(),i==null||i.attemptAutoclose("add-self-to-project",this.id),{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}setParent(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.SetParent))){var a;return this.checkCanEditWithCounterpartAndSideEffects(this,i,w.SetParent,r)?(((a=this.parent)==null?void 0:a.id)!==(i==null?void 0:i.id)&&(this.parent=i,r&&(r==null||r.add(this,W.Updated))),r==null||r.attemptAutoclose(w.SetParent,this.id),this):this}removeChildGroup(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.RemoveChildGroup))){if(!this.checkCanEdit(this,r))return Y.Logger.warn(`[removeChildGroup] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.RemoveChildGroup,this.id),this;if(this.andChildrenGroup){const a=this.andChildrenGroup.findIndex(c=>c.id===i.id);a!==-1&&(this.andChildrenGroup[a].remove({ignoreUpstream:!0},r),this.andChildrenGroup.splice(a,1))}if(this.orChildrenGroup){const a=this.orChildrenGroup.findIndex(c=>c.id===i.id);if(a!==-1){const c=this.orChildrenGroup[a];this.orChildrenGroup.splice(a,1),c.remove({ignoreUpstream:!0},r)}}return r==null||r.attemptAutoclose(w.RemoveChildGroup,this.id),this}initChildren(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"init-children"))){var r,a,c,e,f,h,m,E,b,A;if(this.initialized||this.startedInitialization)return this;if(this.startedInitialization=!0,this.initialData.entity)if(this.initialData.entity.type===d.GenericReference){const _=this.project.findSubscribedInstanceFromReference(this.initialData.entity);this.entity=_}else this.entity=Re(this.initialData.entity,this.project),(((a=(r=this.initialData.entity)==null?void 0:r.parent)==null?void 0:a.id)===this.id||((e=(c=this.initialData.entity)==null?void 0:c.parent)==null?void 0:e.type)===d.GenericReference&&((h=(f=this.initialData.entity)==null?void 0:f.parent)==null?void 0:h.entityId)==this.id)&&this.entity.setParent(this,null),(E=(m=this.entity).initChildren)==null||E.call(m,i);if(this.initialData.foreignKeyRef)if(this.initialData.foreignKeyRef.type===d.GenericReference){const _=this.project.findSubscribedInstanceFromReference(this.initialData.foreignKeyRef);this.foreignKeyRef=_}else this.foreignKeyRef=Re(this.initialData.foreignKeyRef,this.project),(A=(b=this.foreignKeyRef).initChildren)==null||A.call(b,i);return this.initialData.andChildrenGroup&&(this.andChildrenGroup=this.initialData.andChildrenGroup.map(_=>{const P=Re(_,this.project);return P.setParent(this,null),P.initChildren(i),P})),this.initialData.orChildrenGroup&&(this.orChildrenGroup=this.initialData.orChildrenGroup.map(_=>{const P=Re(_,this.project);return P.setParent(this,null),P.initChildren(i),P})),this.subscribeToDependencies(),this.afterAllChildrenInitialized(i),i==null||i.attemptAutoclose("init-children",this.id),this}subscribe(){var i;return this.activeVersion=!0,(i=this.knownVersions)==null||i.forEach(r=>{r.version!==this.version&&(r.activeVersion=!1)}),this.project.subscribeInstance(this),this}unsubscribe(){return this.project.unsubscribeInstance(this),this}metaSync(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"meta-sync"))){const a=tn(this,i,r),c=en(this,a),e=this.toMeta();return this.options=a.options||e.options,this.parentRelationType=a.parentRelationType||e.parentRelationType,this.isList=a.isList!==void 0?a.isList:e.isList,this.inferred=a.inferred!==void 0?a.inferred:e.inferred,this.like=a.like!==void 0?a.like:e.like,this.asType=a.asType!==void 0?a.asType:e.asType,this.index=a.index!==void 0?a.index:e.index,this.implementationChooseOne=a.implementationChooseOne!==void 0?a.implementationChooseOne:e.implementationChooseOne,this.staticEntities=a.staticEntities!==void 0?a.staticEntities:e.staticEntities,this.interactiveEntities=a.interactiveEntities!==void 0?a.interactiveEntities:e.interactiveEntities,this.actionEntities=a.actionEntities!==void 0?a.actionEntities:e.actionEntities,super.baseMetaSync(a,this,r),a.deleted===!0&&!e.deleted?r==null||r.add(this,W.Removed):a.deleted===!1&&e.deleted?r==null||r.add(this,W.Added):c&&(r==null||r.add(this,W.Updated)),r==null||r.attemptAutoclose("meta-sync",this.id),this}async APILoad(i=Ke,...r){return await Pi.repository.APILoad(this.id,...r),this}async APICreate(i=Ke,...r){return await Pi.repository.APICreate(this.toShallowJSON(),...r),this}async APIUpdate(i=Ke,...r){return await Pi.repository.APIUpdate(this.toShallowJSON(),...r),this}async APIDelete(i=Ke,...r){return await Pi.repository.APIDelete(this.toShallowJSON(),...r),this}async APIClone(i=Ke,...r){return await Pi.repository.APIClone(this.id,...r),this}async APILoadVersion(i=Ke,r,...a){return await Pi.repository.APILoadVersion(this.id,r,...a)}removeFromParent(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.RemoveFromParent))){var f,h;if(!this.checkCanEdit(this,i))return Y.Logger.warn(`[removeFromParent] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),i==null||i.attemptAutoclose(w.RemoveFromParent,this.id),{added:[],updated:[],removed:[],affected:[],self:this};const r=[],a=[],c=[],e=[];if(((f=this.parent)==null?void 0:f.type)===d.DataType)this.parent.removeChildGroup(this,i);else if(((h=this.parent)==null?void 0:h.type)===d.DefinitionEntity)this.parent.removeAdditionalPropertiesDataType(i);else{const m=this.parent;m==null||m.removeDataType(i)}return this.parent&&this.parent.type!==d.BuiltInBaseEntity&&r.push(this.parent),i==null||i.attemptAutoclose(w.RemoveFromParent,this.id),{added:C(c),updated:C(r),removed:C(a),affected:C(e),self:this}}remove({ignoreUpstream:i}={ignoreUpstream:!1},r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.RemoveEntity))){const a=[],c=[],e=[],f=[];if(r!=null&&r.hasRemoved(this.id))return r==null||r.attemptAutoclose(w.RemoveEntity,this.id),{added:[],updated:[],removed:[],affected:[],self:this};if(c.push(this),this.unsubscribe(),this.unsubscribeFromDependencies(),this.project.subscribeDeletedInstance(this),this.metaSync({deleted:!0},r),Object.values(this.detachedDependents).forEach(h=>{const{updated:m,removed:E,added:b}=h.entity.onDetachedDependencyRemoved(this,h.field,r);a.push(...m),c.push(...E),e.push(...b)}),this.entity&&this.entity.type===d.DefinitionEntity&&this.entity.parent===this){const{updated:h,removed:m}=this.entity.remove({ignoreUpstream:!0},r);a.push(...h),c.push(...m)}if(this.andChildrenGroup&&this.andChildrenGroup.forEach(h=>{const{removed:m,updated:E}=h.remove({ignoreUpstream:!0},r);c.push(...m),a.push(...E)}),this.orChildrenGroup&&this.orChildrenGroup.forEach(h=>{const{removed:m,updated:E}=h.remove({ignoreUpstream:!0},r);c.push(...m),a.push(...E)}),!i){const h=this.removeFromParent(r);e.push(...h.added),a.push(...h.updated),c.push(...h.removed),f.push(...h.affected)}return r==null||r.attemptAutoclose(w.RemoveEntity,this.id),{added:C(e),updated:C(a),removed:C(c),affected:C(f),self:this}}restore({}={},i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.RestoreEntity))){if(!this.checkCanEdit(this,i))return Y.Logger.warn(`[restore] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),i==null||i.attemptAutoclose(w.RestoreEntity,this.id),{added:[],updated:[],removed:[],affected:[],self:this};const r=[],a=[],c=[],e=[];if(i!=null&&i.hasAdded(this.id))return i==null||i.attemptAutoclose(w.RestoreEntity,this.id),{added:[],updated:[],removed:[],affected:[],self:this};if(this.subscribe(),this.project.unsubscribeDeletedInstance(this),this.metaSync({deleted:!1},i),Object.values(this.detachedDependents).forEach(f=>{const{updated:h,removed:m,added:E}=f.entity.onDetachedDependencyRestored(this,f.field,i);a.push(...h),c.push(...m),r.push(...E)}),this.entity&&this.entity.type===d.DefinitionEntity&&this.entity.parent===this){const{updated:f}=this.entity.restore({},i);a.push(...f)}if(this.andChildrenGroup&&this.andChildrenGroup.forEach(f=>{const{updated:h,added:m}=f.restore({},i);a.push(...h),r.push(...m)}),this.orChildrenGroup&&this.orChildrenGroup.forEach(f=>{const{updated:h,added:m}=f.restore({},i);a.push(...h),r.push(...m)}),this.parent.type===d.DataType){const f=this.parent;Array.isArray(f.andChildrenGroup)&&f.andChildrenGroup.push(this)}if(this.parent.type===d.DataType){const f=this.parent;this.parentRelationType===ze.AndDataTypeGroup?Array.isArray(f.andChildrenGroup)&&f.andChildrenGroup.push(this):this.parentRelationType===ze.OrDataTypeGroup&&Array.isArray(f.orChildrenGroup)&&f.orChildrenGroup.push(this)}else if(this.parent.type===d.DefinitionEntity){const f=this.parent;f.setAdditionalPropertiesDataType(this,i),a.push(f)}else{const f=this.parent;f.setDataType(this,i),a.push(f)}return i==null||i.attemptAutoclose(w.RestoreEntity,this.id),{added:C(r),updated:C(a),removed:C(c),affected:C(e),self:this}}toFlat(i=new Set){var a,c,e,f;return i.has(this.id)?[]:(i.add(this.id),[this,...((a=this.andChildrenGroup)==null?void 0:a.flatMap(h=>h.toFlat(i)))||[],...((c=this.orChildrenGroup)==null?void 0:c.flatMap(h=>h.toFlat(i)))||[],...((e=this.entity)==null?void 0:e.toFlat(i))||[],...((f=this.foreignKeyRef)==null?void 0:f.toFlat(i))||[]])}toFlatIds(i=new Set){var a,c,e,f;return i.has(this.id)?[]:(i.add(this.id),[this.id,...((a=this.andChildrenGroup)==null?void 0:a.flatMap(h=>h.toFlatIds(i)))||[],...((c=this.orChildrenGroup)==null?void 0:c.flatMap(h=>h.toFlatIds(i)))||[],...((e=this.entity)==null?void 0:e.toFlatIds(i))||[],...((f=this.foreignKeyRef)==null?void 0:f.toFlatIds(i))||[]])}toMeta(){return{id:this.id,version:this.version,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,like:this.like,isList:this.isList,inferred:this.inferred,index:this.index,foreignKeyAllowed:this.foreignKeyAllowed,parentRelationType:this.parentRelationType,implementationChooseOne:this.implementationChooseOne,staticEntities:this.staticEntities,interactiveEntities:this.interactiveEntities,actionEntities:this.actionEntities,options:this.options,asType:this.asType,type:this.type,editable:this.editable,deletable:this.deletable}}toJSON(i=new Set){var r,a,c,e,f;return i.has(this.id)?this.toReference():(i.add(this.id),{id:this.id,version:this.version,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,type:this.type,editable:this.editable,deletable:this.deletable,options:this.options,isList:this.isList,asType:this.asType,index:this.index,like:this.like,foreignKeyAllowed:this.foreignKeyAllowed,inferred:this.inferred,parentRelationType:this.parentRelationType,implementationChooseOne:this.implementationChooseOne,staticEntities:this.staticEntities,interactiveEntities:this.interactiveEntities,actionEntities:this.actionEntities,foreignKeyRef:((r=this.foreignKeyRef)==null?void 0:r.toJSON(i))||null,andChildrenGroup:((a=this.andChildrenGroup)==null?void 0:a.map(h=>h.toJSON(i)))||null,orChildrenGroup:((c=this.orChildrenGroup)==null?void 0:c.map(h=>h.toJSON(i)))||null,entity:((e=this.entity)==null?void 0:e.parent)===this?this.entity.toJSON(i):((f=this.entity)==null?void 0:f.toReference())||null,parent:this.parent.toReference()})}toJSONClone(i=at){var a,c,e,f,h,m,E,b,A,_;let r;return(a=i.seenEntityMaps)!=null&&a.has(this.id)?r=i.seenEntityMaps.get(this.id):(r=i.newId||dn(this,this.project,i.uuidStrategy),i.seenEntityMaps&&i.seenEntityMaps.set(this.id,r)),(c=i.seenEntities)!=null&&c.has(r)||(e=i.seenEntities)!=null&&e.has(this.id)?this.toReference({seenEntityMaps:i.seenEntityMaps}):((f=i.seenEntities)==null||f.add(r),(h=i.seenEntities)==null||h.add(this.id),{id:r,version:x.UUID.uuid(),createdAt:i.timestamp||B().toISOString(),previousVersion:null,author:this.author,deleted:this.deleted,type:this.type,editable:this.editable,deletable:this.deletable,options:this.options,isList:this.isList,asType:this.asType,like:this.like,index:this.index,inferred:this.inferred,foreignKeyAllowed:this.foreignKeyAllowed,parentRelationType:this.parentRelationType,implementationChooseOne:this.implementationChooseOne,staticEntities:this.staticEntities,interactiveEntities:this.interactiveEntities,actionEntities:this.actionEntities,foreignKeyRef:((m=this.foreignKeyRef)==null?void 0:m.toJSONClone({...i,newId:null}))||null,andChildrenGroup:((E=this.andChildrenGroup)==null?void 0:E.map(P=>P.toJSONClone({...i,newId:null})))||null,orChildrenGroup:((b=this.orChildrenGroup)==null?void 0:b.map(P=>P.toJSONClone({...i,newId:null})))||null,entity:((A=this.entity)==null?void 0:A.parent)===this?this.entity.toJSONClone({...i,newId:null}):((_=this.entity)==null?void 0:_.toReference({seenEntityMaps:i.seenEntityMaps}))||null,parent:this.parent.toReference({seenEntityMaps:i.seenEntityMaps})})}toReference(i=at){var a;let r=this.id;return(a=i.seenEntityMaps)!=null&&a.has(this.id)&&(r=i.seenEntityMaps.get(this.id)),{id:r+"--"+x.UUID.uuid()+"--ref",type:d.GenericReference,entityId:r,version:this.version,entityType:this.type}}toShallowJSON(i=at){var a,c,e,f,h;let r=this.id;return(a=i.seenEntityMaps)!=null&&a.has(this.id)&&(r=i.seenEntityMaps.get(this.id)),{id:r,version:this.version,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,type:this.type,editable:this.editable,deletable:this.deletable,isList:this.isList,options:this.options,asType:this.asType,index:this.index,parentRelationType:this.parentRelationType,like:this.like,inferred:this.inferred,foreignKeyAllowed:this.foreignKeyAllowed,implementationChooseOne:this.implementationChooseOne,staticEntities:this.staticEntities,interactiveEntities:this.interactiveEntities,actionEntities:this.actionEntities,foreignKeyRef:((c=this.foreignKeyRef)==null?void 0:c.toReference(i))||null,andChildrenGroup:((e=this.andChildrenGroup)==null?void 0:e.map(m=>m.toReference(i)))||null,orChildrenGroup:((f=this.orChildrenGroup)==null?void 0:f.map(m=>m.toReference(i)))||null,entity:((h=this.entity)==null?void 0:h.toReference(i))||null,parent:this.parent.toReference(i)}}toFlatJSON(i=new Set){var a,c,e;return i.has(this.id)?[]:(i.add(this.id),[this.toShallowJSON(),...((a=this.andChildrenGroup)==null?void 0:a.flatMap(f=>f.toFlatJSON(i)))||[],...((c=this.orChildrenGroup)==null?void 0:c.flatMap(f=>f.toFlatJSON(i)))||[],...((e=this.entity)==null?void 0:e.toFlatJSON(i))||[]])}toGenerationTarget(i=at){var a,c,e;let r=this.id;return(a=i.seenEntityMaps)!=null&&a.has(this.id)&&(r=i.seenEntityMaps.get(this.id)),{id:r,type:this.type,options:this.options||void 0,isList:this.isList,like:this.like,parentRelationType:this.parentRelationType||void 0,foreignKeyRef:((c=this.foreignKeyRef)==null?void 0:c.id)||null,asType:this.asType,entity:((e=this.entity)==null?void 0:e.id)||null,parent:this.parent.id}}toFlatGenerationTarget(i=new Set){var a,c;return i.has(this.id)?[]:(i.add(this.id),[this.toGenerationTarget(),...((a=this.andChildrenGroup)==null?void 0:a.flatMap(e=>e.toFlatGenerationTarget(i)))||[],...((c=this.orChildrenGroup)==null?void 0:c.flatMap(e=>e.toFlatGenerationTarget(i)))||[],...this.entity&&this.entity.type==d.DefinitionEntity&&this.entity.parent===this&&this.entity.toFlatGenerationTarget(i)||[]])}clearErrors(){var i,r,a,c;return this.errors=[],(i=this.andChildrenGroup)==null||i.forEach(e=>e.clearErrors()),(r=this.orChildrenGroup)==null||r.forEach(e=>e.clearErrors()),this.inferred&&this.entity&&this.entity.type===d.DefinitionEntity&&((a=this.entity)==null?void 0:a.parent)===this&&((c=this.entity)==null||c.clearErrors()),this}validate(){return this.errors=Sje(this),{success:!0}}async validateAsync(i={}){const r=Y.YieldTracker.from(i);return this.errors=await qje(this,{tracker:r}),{success:!0}}getErrors(){var r,a;return[...this.errors,...((r=this.andChildrenGroup)==null?void 0:r.flatMap(c=>c.getErrors()))||[],...((a=this.orChildrenGroup)==null?void 0:a.flatMap(c=>c.getErrors()))||[]]}async getErrorsAsync(i={}){const r=Y.YieldTracker.from(i),a=[...this.errors];await r.tick();for(const c of this.andChildrenGroup||[]){const e=await c.getErrorsAsync({tracker:r});a.push(...e)}for(const c of this.orChildrenGroup||[]){const e=await c.getErrorsAsync({tracker:r});a.push(...e)}return a}getShallowErrors(){return this.errors}clone(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.CloneEntity)),r=null,a=null,c=!0){var _,P,V,M;const e=Fr(r,this),f=r||this.parent,m={id:a||x.UUID.uuid(),version:x.UUID.uuid(),createdAt:(i==null?void 0:i.timestamp)||B().toISOString(),author:(i==null?void 0:i.author)||"1",previousVersion:null,deleted:!1,deletable:!0,editable:!0,type:d.DataType,isList:this.isList,asType:this.asType,options:this.options,index:this.index,parentRelationType:this.parentRelationType,staticEntities:this.staticEntities,foreignKeyAllowed:this.foreignKeyAllowed,interactiveEntities:this.interactiveEntities,actionEntities:this.actionEntities,like:this.like,inferred:this.inferred,implementationChooseOne:this.implementationChooseOne,foreignKeyRef:((_=this.foreignKeyRef)==null?void 0:_.toReference())||null,andChildrenGroup:null,orChildrenGroup:null,entity:null,parent:f.toReference()},E=lr(m,e);E.hydrateAncestors(),E.setParent(f,null),c&&(E.subscribe(),E.addSelfToProject(i)),E.initChildren(i),i==null||i.add(E,W.Added);const b=(P=this.andChildrenGroup)==null?void 0:P.map(G=>this.project.diggestedBuiltInBaseEntitiesIds.has(G.id)?e.getBuiltIn(G.id):G.clone(i,E,x.UUID.uuid(),c)),A=(V=this.orChildrenGroup)==null?void 0:V.map(G=>this.project.diggestedBuiltInBaseEntitiesIds.has(G.id)?e.getBuiltIn(G.id):G.clone(i,E,x.UUID.uuid(),c));if(E.andChildrenGroup=b||null,E.orChildrenGroup=A||null,this.entity&&this.entity.type===d.DefinitionEntity&&((M=this.entity)==null?void 0:M.parent)===this)if(this.project.diggestedBuiltInBaseEntitiesIds.has(this.entity.id))E.setEntity(this.entity,i);else{const G=this.entity.clone(i,E,x.UUID.uuid(),c);E.setEntity(G,i)}else if(this.entity){const G=e.get(this.entity.id)||e.getBuiltIn(this.entity.id);E.setEntity(G,i)}return i||E.captureVersion(),i==null||i.attemptAutoclose(w.CloneEntity,this.id),E}merge(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.MergeDataTypes)),a){var P,V,M,G,k,q,ne;const c=[],e=[],f=[],h=[],m={implementSource:!1,...a},E=J=>J?J.entity||J.foreignKeyRef?J:Array.isArray(J.andChildrenGroup)&&J.andChildrenGroup.length===1&&(!J.orChildrenGroup||J.orChildrenGroup.length===0)?E(J.andChildrenGroup[0]):Array.isArray(J.orChildrenGroup)&&J.orChildrenGroup.length===1&&(!J.andChildrenGroup||J.andChildrenGroup.length===0)?E(J.orChildrenGroup[0]):J:null,b=E(this),A=!!(b!=null&&b.entity)||!!(b!=null&&b.foreignKeyRef);if(!this.checkCanEdit(this,r))return Y.Logger.warn(`[${w.MergeDataTypes}] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.MergeDataTypes,this.id),{added:[],updated:[],removed:[],affected:[],self:this};if(this.asType!==(i==null?void 0:i.asType)&&(m.implementSource?(i==null?void 0:i.asType)!==null&&this.metaSync({asType:i==null?void 0:i.asType},r):this.metaSync({asType:i==null?void 0:i.asType},r),c.push(this)),this.index!==(i==null?void 0:i.index)&&!m.implementSource&&(this.metaSync({index:i==null?void 0:i.index},r),r==null||r.add(this,W.Updated),c.push(this)),this.options&&!(i!=null&&i.options)||!this.options&&(i!=null&&i.options)||!((P=i==null?void 0:i.options)!=null&&P.every(J=>{var se;return(se=this.options)==null?void 0:se.includes(J)}))){if(m.implementSource){if(((V=i==null?void 0:i.entity)==null?void 0:V.id)===re["primitive-entity"].enum.id){const J=new Set(this.options||[]);((i==null?void 0:i.options)||[]).forEach(se=>J.add(se)),this.metaSync({options:Array.from(J)},r)}}else this.metaSync({options:i==null?void 0:i.options},r);r==null||r.add(this,W.Updated),c.push(this)}if(this.foreignKeyAllowed!==(i==null?void 0:i.foreignKeyAllowed)&&(m.implementSource?(i==null?void 0:i.foreignKeyAllowed)!==null&&(this.metaSync({foreignKeyAllowed:i==null?void 0:i.foreignKeyAllowed},r),c.push(this)):(this.metaSync({foreignKeyAllowed:i==null?void 0:i.foreignKeyAllowed},r),c.push(this))),this.isList!==(i==null?void 0:i.isList)&&(m.implementSource?(i==null?void 0:i.isList)!==null&&(this.metaSync({isList:i==null?void 0:i.isList},r),c.push(this)):(this.metaSync({isList:i==null?void 0:i.isList},r),c.push(this))),this.like!==(i==null?void 0:i.like)&&(m.implementSource?(i==null?void 0:i.like)!==null&&(this.metaSync({like:i==null?void 0:i.like},r),c.push(this)):(this.metaSync({like:i==null?void 0:i.like},r),c.push(this))),((M=i==null?void 0:i.foreignKeyRef)==null?void 0:M.id)!==((G=this.foreignKeyRef)==null?void 0:G.id)&&(m.implementSource&&this.foreignKeyRef?ni(this,i).compatible||(this.setForeignKeyRef((i==null?void 0:i.foreignKeyRef)||null,r),r==null||r.add(this,W.Updated),c.push(this),[...this.andChildrenGroup||[],...this.orChildrenGroup||[]].forEach(se=>{this.removeChildGroup(se,r),f.push(se)}),this.setEntity(null,r)):(this.setForeignKeyRef((i==null?void 0:i.foreignKeyRef)||null,r),r==null||r.add(this,W.Updated),c.push(this),[...this.andChildrenGroup||[],...this.orChildrenGroup||[]].forEach(J=>{this.removeChildGroup(J,r),f.push(J)}),this.setEntity(null,r))),i!=null&&i.entity&&(i==null?void 0:i.entity.type)===d.DefinitionEntity&&(i==null?void 0:i.entity).parent===i)if(((k=this.entity)==null?void 0:k.type)===d.DefinitionEntity&&this.entity.parent===this)ev(this.entity,i.entity)||(Vg(this.entity,i.entity,r),c.push(this.entity),[...this.andChildrenGroup||[],...this.orChildrenGroup||[]].forEach(J=>{this.removeChildGroup(J,r),f.push(J)}),this.andChildrenGroup=null,this.orChildrenGroup=null,this.setForeignKeyRef(null,r));else{const J=i.entity.clone(r,this,x.UUID.uuid(),!0);this.setEntity(J,r),e.push(J),[...this.andChildrenGroup||[],...this.orChildrenGroup||[]].forEach(se=>{this.removeChildGroup(se,r),f.push(se)}),this.andChildrenGroup=null,this.orChildrenGroup=null,this.setForeignKeyRef(null,r)}else((q=i==null?void 0:i.entity)==null?void 0:q.id)!==((ne=this.entity)==null?void 0:ne.id)&&(m.implementSource&&this.entity?ni(this,i).compatible||(this.setEntity((i==null?void 0:i.entity)||null,r),r==null||r.add(this,W.Updated),c.push(this),[...this.andChildrenGroup||[],...this.orChildrenGroup||[]].forEach(se=>{this.removeChildGroup(se,r),f.push(se)}),this.andChildrenGroup=null,this.orChildrenGroup=null,this.setForeignKeyRef(null,r)):A&&!(i!=null&&i.entity)&&ni(this,i).compatible||(this.setEntity((i==null?void 0:i.entity)||null,r),r==null||r.add(this,W.Updated),c.push(this),[...this.andChildrenGroup||[],...this.orChildrenGroup||[]].forEach(se=>{this.removeChildGroup(se,r),f.push(se)}),this.andChildrenGroup=null,this.orChildrenGroup=null,this.setForeignKeyRef(null,r)));this.inferred!==(i==null?void 0:i.inferred)&&(m.implementSource?(i==null?void 0:i.inferred)!==null&&(this.metaSync({inferred:(i==null?void 0:i.inferred)??!1},r),c.push(this)):(this.metaSync({inferred:(i==null?void 0:i.inferred)??!1},r),c.push(this)));const _=ni(this,i);if(m.implementSource&&_.compatible&&A)return r==null||r.attemptAutoclose(w.MergeDataTypes,this.id),{added:C(e),updated:C(c),removed:C(f),affected:C(h),self:this};if(i!=null&&i.orChildrenGroup&&Array.isArray(i==null?void 0:i.orChildrenGroup)&&!A){let J=!1;if(m.implementSource&&i!=null&&i.implementationChooseOne&&(this.metaSync({implementationChooseOne:!1},r),J=!0,i.orChildrenGroup.find(te=>ni(this,te).exact)||(this.orChildrenGroup=null,this.chooseOneFromOrGroupAndApply(i,r))),!J){const se=[...i==null?void 0:i.orChildrenGroup];this.orChildrenGroup=this.orChildrenGroup||[];const te=[...this.orChildrenGroup||[]];for(;se.length>0;){const le=se.shift();let ue=te==null?void 0:te.find(z=>ni(z,le).exact);if(ue||(ue=te==null?void 0:te.find(z=>ni(z,le).compatible)),!ue){const z=se.findIndex(Q=>te==null?void 0:te.some(de=>ni(de,Q).exact));if(z!==-1){const[Q]=se.splice(z,1);ue=te==null?void 0:te.find(de=>ni(de,Q).exact)}}if(ue){const z=te.indexOf(ue);z!==-1&&te.splice(z,1);const Q=ue.merge(le,r,{implementSource:m.implementSource});c.push(...Q.updated),e.push(...Q.added),f.push(...Q.removed),h.push(...Q.affected)}else if(m.implementSource){const z=le.implement(this,r,x.UUID.uuid(),ze.OrDataTypeGroup);this.addToOrGroup(z,r),e.push(z)}else{const z=le.clone(r,this,x.UUID.uuid(),!0);this.addToOrGroup(z,r),e.push(z)}}[...this.orChildrenGroup||[]].forEach(le=>{((i==null?void 0:i.orChildrenGroup)||[]).find(z=>ni(le,z).compatible)||(le.remove({ignoreUpstream:!1},r),f.push(le))})}}return i!=null&&i.andChildrenGroup&&Array.isArray(i==null?void 0:i.andChildrenGroup)&&!A&&(i==null||i.andChildrenGroup.forEach(J=>{var te;if(!((te=this.andChildrenGroup)==null?void 0:te.find(le=>ni(le,J).compatible))){const le=J.clone(r,this,x.UUID.uuid(),!0);this.addToAndGroup(le,r),e.push(le)}}),[...this.andChildrenGroup||[]].forEach(J=>{((i==null?void 0:i.andChildrenGroup)||[]).find(te=>ni(J,te).compatible)||(J.remove({ignoreUpstream:!1},r),f.push(J))})),r==null||r.attemptAutoclose(w.MergeDataTypes,this.id),{updated:C(c),added:C(e),removed:C(f),affected:C(h),self:this}}addToAndGroup(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.AddToAndGroup))){return this.checkCanEdit(this,r)?(this.andChildrenGroup||(this.andChildrenGroup=[]),this.andChildrenGroup.includes(i)||(this.andChildrenGroup.push(i),r==null||r.add(i,W.Affected),this.entity&&this.setEntity(null,r),this.foreignKeyRef&&this.setForeignKeyRef(null,r)),r==null||r.attemptAutoclose(w.AddToAndGroup,this.id),this):(Y.Logger.warn(`[${w.AddToAndGroup}] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.AddToAndGroup,this.id),this)}addToOrGroup(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.AddToOrGroup))){return this.checkCanEdit(this,r)?(this.orChildrenGroup||(this.orChildrenGroup=[]),this.orChildrenGroup.includes(i)||(this.orChildrenGroup.push(i),r==null||r.add(i,W.Affected),this.entity&&this.setEntity(null,r),this.foreignKeyRef&&this.setForeignKeyRef(null,r)),r==null||r.attemptAutoclose(w.AddToOrGroup,this.id),this):(Y.Logger.warn(`[${w.AddToOrGroup}] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.AddToOrGroup,this.id),this)}setForeignKeyRef(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.SetDataTypeForeignKeyRef))){if(!this.checkCanEdit(this,r))return Y.Logger.warn(`[${w.SetDataTypeForeignKeyRef}] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.SetDataTypeForeignKeyRef,this.id),this;const a=this.foreignKeyRef;return(a==null?void 0:a.id)!==(i==null?void 0:i.id)&&(this.foreignKeyRef=i,this.foreignKeyRef&&this.setEntity(null,r),r==null||r.add(this,W.Updated)),r==null||r.attemptAutoclose(w.SetDataTypeForeignKeyRef,this.id),this}setEntity(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.SetDataTypeEntityValue))){var c,e,f;if(!this.checkCanEdit(this,r))return console.warn(`[${w.SetDataTypeEntityValue}] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.SetDataTypeEntityValue,this.id),this;const a=this.entity;return(a==null?void 0:a.id)!==(i==null?void 0:i.id)&&(this.entity=i,r==null||r.add(this,W.Updated),a&&(a.type===d.DefinitionEntity||a.type===d.LiteralValue||a.type===d.ActionDescriptor)&&((c=a.parent)==null?void 0:c.id)===this.id&&(a==null||a.remove({ignoreUpstream:!0},r)),(e=this.orChildrenGroup)!=null&&e.length&&this.entity&&(this.orChildrenGroup.forEach(h=>{this.removeChildGroup(h,r)}),this.orChildrenGroup=null),(f=this.andChildrenGroup)!=null&&f.length&&this.entity&&(this.andChildrenGroup.forEach(h=>{this.removeChildGroup(h,r)}),this.andChildrenGroup=null),this.foreignKeyRef&&this.entity&&this.setForeignKeyRef(null,r)),r==null||r.attemptAutoclose(w.SetDataTypeEntityValue,this.id),this}isObject(){return!!this.entity&&(this.entity.type===d.DefinitionEntity||this.entity.type===d.BuiltInBaseEntity||this.entity.name===ye.KeyValue)&&!this.isList}canBeObject(){var a;let i=!1,r=!1;if(this.parent.type!==d.DataType&&this.parent.type!==d.ActionDescriptor&&this.parent.type!==d.BuiltInBaseEntity&&this.parent.type!==d.DefinitionEntity&&this.parent.type!==d.FunctionDeclaration){r=!0;const c=(a=this.project.requestActiveDynamicValue(this.parent))==null?void 0:a.value;c?!c.valueAsType&&(c.value===""||c.value===null||sn(c))&&(i=!0):i=!0}return(this.isObject()||!this.entity||this.entity.name===ye.Untyped)&&(!r||r&&i)}hasStrictObjectStructure(){var i;return this.isObject()&&((i=this.entity)==null?void 0:i.type)===d.DefinitionEntity}isInlineDeclaredEntity(){var i,r;return((i=this.entity)==null?void 0:i.type)===d.DefinitionEntity&&((r=this.entity.parent)==null?void 0:r.id)===(this==null?void 0:this.id)}isIndependentlyUserDeclaredEntity(){var i,r;return((i=this.entity)==null?void 0:i.type)===d.DefinitionEntity&&((r=this.entity)==null?void 0:r.parent)!==this}canModifyObjectStructure(){var r;const i=this.isIndependentlyUserDeclaredEntity();return(this.isInlineDeclaredEntity()||this.canBeObject()||((r=this.entity)==null?void 0:r.name)===ye.KeyValue)&&!i}inferFromInputs(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"infer-data-type-from-inputs"))){var m;const a=[],c=[],e=[],f=[];if(!this.inferred)return r==null||r.attemptAutoclose("infer-data-type-from-inputs",this.id),{updated:[],added:[],removed:[],affected:[],self:this};let h=!1;if(!this.entity&&i.length){const E=ce(this.parent,this.project)+" data type definition",b={id:x.UUID.uuid(),deletable:!0,editable:!0,type:d.DefinitionEntity,version:x.UUID.uuid(),createdAt:(r==null?void 0:r.timestamp)||B().toISOString(),author:x.sessionAuthor,previousVersion:null,deleted:!1,name:E,description:((m=this.parent)==null?void 0:m.description)||null,codeName:null,static:!0,abstract:!1,properties:[],methods:[],extends:null,implements:[],abstractMethods:[],allPropertiesImplement:null,additionalPropertiesDataType:null,additionalProperties:!0,x:0,y:0,parent:this.toReference()},A=Re(b,this.project);A.hydrateAncestors(),A.setParent(this,r),A.initChildren(r),r==null||r.add(A,W.Added),A.metaSync(b,r),this.setEntity(A,r),r||A.captureVersion(),r==null||r.add(this,W.Updated),h=!0}if(this.entity){const{updated:E,added:b,removed:A,affected:_}=this.entity.inferFromInputs(i,r);c.push(...E),a.push(...b),e.push(...A),f.push(..._),h&&(r||this.entity.captureVersion())}return this.like||this.metaSync({like:!0},r),r==null||r.attemptAutoclose("infer-data-type-from-inputs",this.id),{updated:C(c),added:C(a),removed:C(e),affected:C(f),self:this}}bestEffortClearIncompatibleProperties(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"best-effort-clear-incompatible-properties"))){var f,h,m,E;const r=[],a=[],c=[],e=[];if(this.entity&&this.andChildrenGroup&&this.andChildrenGroup.length===0&&this.orChildrenGroup&&this.orChildrenGroup.length===0?([...this.andChildrenGroup,...this.orChildrenGroup].forEach(b=>{this.removeChildGroup(b,i)}),this.andChildrenGroup=null,this.orChildrenGroup=null,i==null||i.add(this,W.Updated),a.push(this)):!this.entity&&this.andChildrenGroup&&this.orChildrenGroup&&(((f=this.andChildrenGroup)==null?void 0:f.length)>0&&((h=this.orChildrenGroup)==null?void 0:h.length)===0?this.orChildrenGroup=null:((m=this.orChildrenGroup)==null?void 0:m.length)>0&&((E=this.andChildrenGroup)==null?void 0:E.length)===0&&(this.andChildrenGroup=null)),this.entity&&this.foreignKeyRef)return i==null||i.attemptAutoclose("best-effort-clear-incompatible-properties",this.id),{updated:C(a),added:C(r),removed:C(c),affected:C(e),self:this};if((this.entity||this.foreignKeyRef)&&this.orChildrenGroup&&this.orChildrenGroup.length>0){for(const b of this.orChildrenGroup)if(ni(this,b).compatible){[...this.orChildrenGroup].forEach(_=>{this.removeChildGroup(_,i)}),this.orChildrenGroup=null,i==null||i.add(this,W.Updated),a.push(this);break}}return i==null||i.attemptAutoclose("best-effort-clear-incompatible-properties",this.id),{updated:C(a),added:C(r),removed:C(c),affected:C(e),self:this}}chooseOneFromOrGroupAndApply(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"choose-one-from-or-group-and-apply"))){var c;if(!i.orChildrenGroup||!Array.isArray(i.orChildrenGroup)||i.orChildrenGroup.length===0)return r==null||r.attemptAutoclose("choose-one-from-or-group-and-apply",this.id),null;const a=i.orChildrenGroup.some(e=>e.foreignKeyAllowed);if(((c=this.entity)==null?void 0:c.type)===d.DefinitionEntity&&di(this.entity,ge.PERSISTED_ENTITY)&&a){const e=vKe(this.entity);e&&this.setForeignKeyRef(e,r),this.setEntity(null,r)}else{const e=i.orChildrenGroup.find(f=>{var h;return((h=f.entity)==null?void 0:h.id)===re["primitive-entity"].string.id});if(e)this.setEntity(e.entity,r);else{const f=i.orChildrenGroup.filter(m=>m.isResolved),h=f.filter(m=>{var E;return((E=m.entity)==null?void 0:E.type)===d.PrimitiveEntity});h.length?this.setEntity(h[0].entity,r):f.length&&this.setEntity(f[0].entity,r)}}return r==null||r.attemptAutoclose("choose-one-from-or-group-and-apply",this.id),this}implement(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"implement-self-as-data-type")),a=null,c=null){const e=Fr(i,this),f=a||x.UUID.uuid(),h=Pi.new(r);h.id=f,h.like=this.like,h.asType=this.asType,h.isList=this.isList,h.options=this.options,h.parentRelationType=this.parentRelationType,h.foreignKeyAllowed=this.foreignKeyAllowed,h.staticEntities=this.staticEntities,h.interactiveEntities=this.interactiveEntities,h.actionEntities=this.actionEntities,h.parent=i.toReference(),h.parentRelationType=c;const m=Re(h,e);return m.hydrateAncestors(),m.addSelfToProject(r),r==null||r.add(m,W.Added),m.initChildren(r),m.merge(this,r,{implementSource:!0}),r||m.captureVersion(),r==null||r.attemptAutoclose("implement-self-as-data-type",this.id),m}};R(Pi,"repository",{APICreate:async(i,...r)=>i,APIUpdate:async(i,...r)=>i,APIDelete:async(i,...r)=>i,APIClone:async(i,...r)=>{},APILoad:async(i,...r)=>null,APILoadVersion:async(i,r,...a)=>null}),R(Pi,"type",d.DataType),R(Pi,"USER_MANAGED_PARENT_TYPES",[...CV]),R(Pi,"PARENT_TYPES",[...VF]),R(Pi,"MUTABLE_BASE_PROPERTIES",["isList","asType","options","foreignKeyAllowed","like","implementationChooseOne","staticEntities","interactiveEntities","actionEntities"]),R(Pi,"INMUTABLE_BASE_PROPERTIES",["id","type","version","createdAt","index","author","previousVersion","parentRelationType"]),R(Pi,"BASE_PROPERTIES",[...Pi.MUTABLE_BASE_PROPERTIES,...Pi.INMUTABLE_BASE_PROPERTIES]),R(Pi,"MUTABLE_META_PROPERTIES",[...Pi.MUTABLE_BASE_PROPERTIES,"inferred"]),R(Pi,"INMUTABLE_META_PROPERTIES",[...Pi.INMUTABLE_BASE_PROPERTIES]),R(Pi,"META_PROPERTIES",[...Pi.MUTABLE_META_PROPERTIES,...Pi.INMUTABLE_META_PROPERTIES]),R(Pi,"MUTABLE_UPSTREAM_PROPERTIES",["entity","foreignKeyRef","parent"]),R(Pi,"INMUTABLE_UPSTREAM_PROPERTIES",[]),R(Pi,"UPSTREAM_PROPERTIES",[...Pi.MUTABLE_UPSTREAM_PROPERTIES,...Pi.INMUTABLE_UPSTREAM_PROPERTIES]),R(Pi,"MUTABLE_DOWNSTREAM_PROPERTIES",[]),R(Pi,"INMUTABLE_DOWNSTREAM_PROPERTIES",["andChildrenGroup","orChildrenGroup"]),R(Pi,"DOWNSTREAM_PROPERTIES",[...Pi.MUTABLE_DOWNSTREAM_PROPERTIES,...Pi.INMUTABLE_DOWNSTREAM_PROPERTIES]),R(Pi,"PROPERTIES",[...Pi.META_PROPERTIES,...Pi.UPSTREAM_PROPERTIES,...Pi.DOWNSTREAM_PROPERTIES]);let vr=Pi;async function Zje(s,p={}){var c;const i=Y.YieldTracker.from(p),a=[...s.implements.flatMap(e=>AL(s,e)),...Rn(s),...gL(s),...Xa(s)];return await i.tick(),await((c=s.dataType)==null?void 0:c.validateAsync({tracker:i})),a}function Hje(s){var r;const p=s.implements.flatMap(a=>AL(s,a));return(r=s.dataType)==null||r.validate(),[...p,...Rn(s),...gL(s),...Xa(s)]}function AL(s,p){const i=[];if(!s.implements)return i;if(!p.abstract){const a=It({id:`${s.id}--${Ae.PropertyImplementsNonAbstact}`,message:`Property "${ce(s,s.project)}" with id "${s.id}" implements a non-abstract property "${ce(p,s.project)}" with id "${p.id}".`,severity:ve.Error,code:Ae.PropertyImplementsNonAbstact,entity:s,firstRelationship:p});i.push(a.error)}if(s.static&&!p.static){const a=It({id:`${s.id}--${Ae.NonStaticPropertyImplementsStatic}`,message:`Static property "${ce(s,s.project)}" with id "${s.id}" implements a non-static property "${ce(p,s.project)}" with id "${p.id}".`,severity:ve.Error,code:Ae.NonStaticPropertyImplementsStatic,entity:s,firstRelationship:p});i.push(a.error)}if(!s.static&&p.static){const a=It({id:`${s.id}--${Ae.StaticPropertyImplementsNonStatic}`,message:`Non-static property "${ce(s,s.project)}" with id "${s.id}" implements a static property "${ce(p,s.project)}" with id "${p.id}".`,severity:ve.Error,code:Ae.StaticPropertyImplementsNonStatic,entity:s,firstRelationship:p});i.push(a.error)}if(!ni(s.dataType,p.dataType)){const a=It({id:`${s.id}--${Ae.PropertyImplementsIncompatibleType}`,message:`Property "${ce(s,s.project)}" with id "${s.id}" implements a property "${ce(p,s.project)}" with id "${p.id}" that has an incompatible data type.`,severity:ve.Error,code:Ae.PropertyImplementsIncompatibleType,entity:s,firstRelationship:p});i.push(a.error)}return qt(s.errors,i)}function gL(s,p){const r=[...s.parent.allProperties].filter(a=>{var c;return a.id!==s.id&&!s.implements.find(e=>e.id===a.id)&&a.id!==((c=s.extends)==null?void 0:c.id)});return JE(s,[ir],r,p)}const VVi=Object.freeze(Object.defineProperty({__proto__:null,validate:Hje,validateAsync:Zje,validateImplementation:AL,validatePropertyEntityName:gL},Symbol.toStringTag,{value:"Module"}));function PVi(s,p){const i=[],r=[],a=Mje(s,p);if(s.parent){const e=p.get(s.parent);if(!e)r.push(new we({id:`${s.id}--${s.parent}--${Te.ReferencedEntityNotFound}`,code:Te.ReferencedEntityNotFound,severity:ve.Error,message:`Entity of type "${s.type}" with id "${s.id}", is referencing an entity with id "${s.parent}" at 'parent' that isn't yet found in the project. Perhaps it should be created first. Or perhaps the ID is incorrect.`}));else{const f=pu(e);if(f){const h=e!==f?`The entity of type '${s.type}' with id '${s.id}' have 'parent' with id '${s.parent}' because the entity belongs to a built-in '${f.type}' entity with id '${f.id}' (${ce(f,e.project)}) higher up in the tree.`:`The entity of type '${s.type}' with id '${s.id}' have 'parent' with id '${s.parent}' because it is a built-in entity of type ${f.type}.`;r.push(new we({id:`${s.id}--${Te.InvalidBuiltInEntityReference}`,code:Te.InvalidBuiltInEntityReference,severity:ve.Error,message:h}))}else if(![d.DefinitionEntity].includes(e.type))r.push(new we({id:`${s.id}--${s.parent}--${Te.InvalidParentReference}`,code:Te.InvalidParentReference,severity:ve.Error,message:`Entity of type "${s.type}" with id "${s.id}", has a parent reference which is of type ${e.type}, and therefore that isn't pointing to the following valid types for this reference: 'definition-entity'.`}));else{const m=ea(e).filter(E=>!E.interactive);if(m.length){let E=m.length>1?`The entity of type '${s.type}' with id '${s.id}' can't be added to the 'parent' entity with id '${e.id}' because it extends or implements multiple '${d.BuiltInBaseEntity}' entities that are non-interactive ("${bt(m.map(b=>ce(b,b.project)),'", "','" and "')}").`:`The entity of type '${s.type}' with id '${s.id}' can't be added to the 'parent' entity with id '${e.id}' because it extends or implements a '${d.BuiltInBaseEntity}' entity that is non-interactive ("${ce(m[0],m[0].project)}").`;i.push({id:Qi.NonInteractiveBaseEntities,message:uu}),r.push(new we({id:`${s.id}--${Te.NonInteractiveEntityReferenced}`,code:Te.NonInteractiveEntityReferenced,severity:ve.Error,message:E}))}else s.implements&&s.implements.forEach(E=>{const b=p.get(E);if(E===s.id)return r.push(new we({id:`${s.id}--${E}--${Te.SelfReference}`,code:Te.SelfReference,severity:ve.Error,message:`Entity of type "${s.type}" with id "${s.id}", has a reference to itself at 'implements'. This is not allowed. Change the reference string or the 'entityId' property of the reference object.`})),r;b?[d.Property].includes(b.type)?b.abstract||r.push(new we({id:`${s.id}--${E}--${Te.InvalidImplementsReference}`,code:Te.InvalidImplementsReference,severity:ve.Error,message:`Entity of type "${s.type}" with id "${s.id}", has an 'implements' reference that isn't pointing to an abstract entity.`})):r.push(new we({id:`${s.id}--${E}--${Te.InvalidImplementsReference}`,code:Te.InvalidImplementsReference,severity:ve.Error,message:`Entity of type "${s.type}" with id "${s.id}", has an 'implements' reference which is of type ${b.type}, and therefore that isn't pointing to the following valid types for this reference: 'property'.`})):r.push(new we({id:`${s.id}--${E}--${Te.ReferencedEntityNotFound}`,code:Te.ReferencedEntityNotFound,severity:ve.Error,message:`Entity of type "${s.type}" with id "${s.id}", is referencing an entity with id "${E}" at 'implements' that isn't yet found in the project. Perhaps it should be created first. Or perhaps the ID is incorrect.`}))})}}}else r.push(new we({id:`${s.id}--${Ce.InvalidObjectStructure}`,code:Ce.InvalidObjectStructure,severity:ve.Error,message:`Entity of type "${s.type}" with id "${s.id}" is missing a 'parent' reference. The 'parent' of a 'property' entity must be a reference to an entity of type 'definition-entity'.`}));const c=Bn(s,{},p);return i.push(...c.explanations),r.length>0&&i.push(...a.explanations),r.push(...c.errors),{errors:r,explanations:i}}function hF(s){var p,i,r,a,c,e,f,h,m,E,b,A;if(((i=(p=s.dataType)==null?void 0:p.entity)==null?void 0:i.type)===d.PrimitiveEntity&&((a=(r=s.dataType)==null?void 0:r.entity)==null?void 0:a.id)===((c=re["primitive-entity"].enum)==null?void 0:c.id)){if(((e=s.dataType.options)==null?void 0:e.length)===1){const _=s.dataType.options[0];if(_)return{result:!0,value:_,name:ye.String}}}else if(((h=(f=s.dataType)==null?void 0:f.entity)==null?void 0:h.type)===d.LiteralValue&&[ye.String,ye.Number,ye.UUID,ye.Boolean,ye.Date,ye.Bytes].includes((E=(m=s.dataType)==null?void 0:m.entity)==null?void 0:E.name)&&typeof((A=(b=s.dataType)==null?void 0:b.entity)==null?void 0:A.value)=="string")return{result:!0,value:s.dataType.entity.value,name:s.dataType.entity.name};return{result:!1,value:null,name:null}}function NVi(s){return!!s.implements.find(p=>p.id===re["built-in-base-entity"].BUILT_IN_PERSISTED_ENTITY_ENTITY.properties.database.id)}function mF(s,p){const i=[],r=[],a=[],c=[];let e=!1;if(s.implements.find(f=>f.id===re["built-in-base-entity"].BUILT_IN_PERSISTED_ENTITY_ENTITY.properties.database.id)){let f=s.defaultValue;if(!s.defaultValue){const h=Lr.new(p);h.name=ye.EntityTemplate,h.parent=s.toReference();const m=Re(h,s.project);m.hydrateAncestors(),m.addSelfToProject(p),p==null||p.add(m,W.Added),r.push(m),m.initChildren(p),f=m,e=!0}if(!f.valueAsTypeSingle){const h=AKe(s.project);h&&f.setValueAsTypeSingle(h,p)}e&&(p||f==null||f.captureVersion())}return{updated:C(i),added:C(r),removed:C(a),affected:C(c),self:s}}var Wje=(s=>(s.PropertyImplements="property-implements-field",s.PropertyExtends="property-extends-field",s.PropertyDataTypeEntity="property-data-type-entity-field",s.PropertyDataType="property-data-type-field",s))(Wje||{});const mi=class mi extends un{constructor(i,r){super(i);R(this,"initialData");R(this,"id");R(this,"name");R(this,"codeName",null);R(this,"description",null);R(this,"private");R(this,"abstract");R(this,"index");R(this,"static");R(this,"unique");R(this,"required");R(this,"constant",!1);R(this,"interactive",!1);R(this,"type",d.Property);R(this,"hidden",!1);R(this,"parentRelationType",null);R(this,"defaultValue",null);R(this,"dataType",null);R(this,"implements",[]);R(this,"extends",null);R(this,"project");R(this,"errors",[]);R(this,"parent");R(this,"detachedDependents",{});R(this,"knownVersions",null);R(this,"activeVersion",!1);R(this,"initialized",!1);R(this,"startedInitialization",!1);R(this,"suggestion",!1);R(this,"_codeNativeValueValidation",null);this.initialData=i,this.project=r,this.id=i.id,this.name=i.name,this.description=i.description,this.private=i.private,this.abstract=i.abstract,this.index=i.index,this.static=i.static,this.required=i.required||!1,this.unique=i.unique||!1,this.codeName=i.codeName,this.hidden=i.hidden||!1,this.constant=i.constant||!1,this.interactive=i.interactive||!1,this.onProjectInitialized=this.onProjectInitialized.bind(this)}static new(i=null){return{id:x.UUID.uuid(),version:x.UUID.uuid(),createdAt:(i==null?void 0:i.timestamp)||B().toISOString(),author:(i==null?void 0:i.author)||x.sessionAuthor,previousVersion:null,deleted:!1,deletable:!0,editable:!0,unique:!1,type:d.Property,parentRelationType:null,name:"",codeName:null,description:"",dataType:null,implements:[],extends:null,private:!1,abstract:!1,static:!1,constant:!1,interactive:!0,hidden:!1,index:0,required:!0,defaultValue:null,parent:null}}static fromGenerationTarget(i,r,a){const c=a===void 0?r.addChangeSet(new S(r,x.sessionAuthor,B().toISOString(),r,!0,w.CreateFromGenerationTarget)):a,e=ie(i.parent),f=r.get(e),h=[];i.implements&&i.implements.forEach(A=>{h.push(r.get(A)||r.getBuiltIn(A))});let m=null;if(i.extends){const A=ie(i.extends);m=r.get(A)}const E={id:i.id,version:x.UUID.uuid(),createdAt:(c==null?void 0:c.timestamp)||B().toISOString(),author:(c==null?void 0:c.author)||x.sessionAuthor,previousVersion:null,deleted:!1,name:i.name,deletable:!0,editable:!0,type:d.Property,index:f.properties.length,unique:i.unique??!1,parentRelationType:i.parentRelationType??null,private:i.private??!1,abstract:i.abstract??!1,static:i.static??!1,required:i.required??!1,constant:i.constant??!1,interactive:i.interactive??!0,hidden:!1,codeName:i.codeName||null,description:i.description||null,defaultValue:null,implements:h,extends:(m==null?void 0:m.toShallowJSON())||null,dataType:null,parent:f.toReference()},b=Re(E,r);return b.hydrateAncestors(),b.setParent(f,c),b.addSelfToProject(c),c==null||c.add(b,W.Added),b.initChildren(c),c||b.captureVersion(),b}static validateGenerationTarget(i,r){let a=JSON.parse(JSON.stringify(i));const c=[],e=[],f=PVi(a,r),h=Lx(a,r),m=Xr(a);return e.push(...f.errors,...h,...m.errors),c.push(...f.explanations,...m.explanations),{errors:e,explanations:c,modifiedData:a}}get isExtendedProperty(){const i=this.parent.allBasePropertiesFromExtendedAndImplementedEntities.find(r=>{var a;return r.id===((a=this.extends)==null?void 0:a.id)});return!!i&&i.id!==this.id&&!i.abstract}get codeNativeValueValidation(){const i=[...this.implements].filter(a=>!this.implements.filter(f=>f.id!==a.id).some(f=>!!f.implements.find(h=>h.id===a.id)));return this._codeNativeValueValidation||(i==null?void 0:i.some(a=>a.codeNativeValueValidation))?(a,c)=>{const e=[];let f=c;if(this._codeNativeValueValidation){const h=this._codeNativeValueValidation(a,c);h&&(e.push(...h.errors),f=h.override)}return i.forEach(h=>{const m=h.codeNativeValueValidation;if(m){const E=m(a,c);E&&(e.push(...E.errors),f=E.override)}}),{errors:AE(e),override:f}}:null}validateGeneratedUpdate(i){const r=[],a=[];return i.parent&&r.push(new we({id:`${this.id}--${Te.InvalidParentUpdate}`,code:Te.InvalidParentUpdate,severity:ve.Error,message:`Entity of type '${this.type}' with id '${this.id}' cannot have the 'parent' property updated, as it would mean moving the '${this.type}' entity to another parent entity.
602
- This is likely an incorrect strategy, either the '${this.type}' entity doesn't need to be updated or it should be deleted and a new one created in the desired parent.`})),(i.readsValue||i.writesValue)&&(r.push(new we({id:`${this.id}--${Ce.InvalidObjectStructure}`,code:Ce.InvalidObjectStructure,severity:ve.Error,message:`Entity of type '${this.type}' with id '${this.id}' is not a value reading or writing entity.`})),a.push({id:Qi.EntitiesWithValues,message:Nh})),{errors:r,explanations:a,modifiedData:i}}onProjectInitialized(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,new Date().toISOString(),this,!0,"on-property-received-project-initialized"))){return r?(mF(this,r),r==null||r.attemptAutoclose("on-property-received-project-initialized",this.id),this):this}subscribeDependents(i){return i.forEach(r=>{this.detachedDependents[r.entity.id]||(this.detachedDependents[r.entity.id]=r)}),this}unsubscribeDependents(i){return i.forEach(r=>{this.detachedDependents[r.entity.id]&&delete this.detachedDependents[r.entity.id]}),this}syncDependents(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"sync-dependents"))){const r=[],a=[],c=[],e=[];return Object.values(this.detachedDependents).forEach(f=>{const h=f.entity.afterAllChildrenInitialized(i);r.push(...h.updated),a.push(...h.added),c.push(...h.removed),e.push(...h.affected)}),i==null||i.attemptAutoclose("sync-dependents",this.id),{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}onDetachedDependencyRemoved(i,r,a){const c=[],e=[],f=[],h=[];if(r==="property-implements-field"&&(this.removeImplementation(i,a),c.push(this)),r==="property-extends-field"){const{updated:m,added:E,removed:b,affected:A}=this.remove({ignoreUpstream:!1},a);c.push(...m),e.push(...E),f.push(...b),h.push(...A)}return{updated:C(c),added:C(e),removed:C(f),affected:C(h),self:this}}onDetachedDependencyRestored(i,r,a){const c=[],e=[],f=[],h=[];if(r==="property-implements-field"&&(this.addImplementation(i,a),c.push(this)),r==="property-extends-field"){const{updated:m,added:E,removed:b,affected:A}=this.restore({},a);c.push(...m),e.push(...E),f.push(...b),h.push(...A)}return{updated:C(c),added:C(e),removed:C(f),affected:C(h),self:this}}unsubscribeFromDependencies(){var i,r,a,c,e,f,h;return this.implements.forEach(m=>{this.project.getBuiltIn(m.id)||m.unsubscribeDependents([{entity:this,field:"property-implements-field"}])}),(r=(i=this.extends)==null?void 0:i.unsubscribeDependents)==null||r.call(i,[{entity:this,field:"property-extends-field"}]),(e=(c=(a=this.dataType)==null?void 0:a.entity)==null?void 0:c.unsubscribeDependents)==null||e.call(c,[{entity:this,field:"property-data-type-entity-field"}]),(h=(f=this.dataType)==null?void 0:f.unsubscribeDependents)==null||h.call(f,[{entity:this,field:"property-data-type-field"}]),this.project.off(pi.PROJECT_INITIALIZED,this.onProjectInitialized),this}subscribeToDependencies(){var i,r,a,c,e,f,h;return this.implements.forEach(m=>{this.project.getBuiltIn(m.id)||m.subscribeDependents([{entity:this,field:"property-implements-field"}])}),(r=(i=this.extends)==null?void 0:i.subscribeDependents)==null||r.call(i,[{entity:this,field:"property-extends-field"}]),(e=(c=(a=this.dataType)==null?void 0:a.entity)==null?void 0:c.subscribeDependents)==null||e.call(c,[{entity:this,field:"property-data-type-entity-field"}]),(h=(f=this.dataType)==null?void 0:f.subscribeDependents)==null||h.call(f,[{entity:this,field:"property-data-type-field"}]),NVi(this)&&this.project.on(pi.PROJECT_INITIALIZED,this.onProjectInitialized),this}increaseVersion(i){var r;if(this.project.diggestedBuiltInBaseEntitiesIds.has(this.id))return this;if(i&&!B(i).isValid())throw new Error(`The shared timestamp '${i}' is not a valid ISO 8601 date string.`);if(i&&B(i).isSame(B(this.createdAt)))return this;if(!((r=this.knownVersions)!=null&&r.has(this.version))&&this.project.initialized)throw new Error(`The current ${this.type} ${this.id} version '${this.version}' is not captured in the 'knownVersions' map. Capture the current version before increasing it to avoid losing data.`);if(!this.activeVersion)throw new Error(`Only active versions can be increased. Entity with id '${this.id}' and version '${this.version}' is not active.`);return this.previousVersion=this.version,this.version=x.UUID.uuid(),this.createdAt=B(i).toISOString()||B().toISOString(),this}captureVersion(){var r;const i=((r=this.knownVersions)==null?void 0:r.get(this.version))||new mi(this,this.project);if(!this.activeVersion)throw new Error(`Only active versions can be captured. Entity of type ${this.type} with id '${this.id}' and version '${this.version}' is not active.`);if(this.version!==i.version)throw new Error(`Captured ${this.type} with id '${this.id}', version '${i.version}' does not match current entity version '${this.version}'.`);return this.knownVersions=this.knownVersions?this.knownVersions.set(this.version,i):new Map().set(this.version,i),this.apply(i),this}snapshot(){const i=new mi(this,this.project);return this.apply(i)}apply(i){const r=this.toMeta();return i.metaSync(r,null),i.defaultValue=this.defaultValue,i.dataType=this.dataType,i.implements=[...this.implements],i.extends=this.extends,i.parent=this.parent,i}recursiveCaptureUpstreamVersions(i){const r=[],a=[],c=[],e=[];if(this.parent&&this.parent.type!==d.PrimitiveEntity&&this.parent.type!==d.BuiltInBaseEntity){this.parent.increaseVersion(i);const f=this.parent.recursiveCaptureUpstreamVersions(i);r.push(this.parent,...f.updated),a.push(...f.added),c.push(...f.removed)}return{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}async restoreVersion(i,r){var m;const a=[],c=[],e=[],f=[];if(this.version===i&&(r!=null&&r.skipIfSameVersion))return{updated:C(a),added:C(c),removed:C(e),affected:C(f),self:this};if(!this.knownVersions){const E=new Map;for(const[b,A]of this.knownVersions||new Map){if(E.set(b,A),A.activeVersion=!1,A.knownVersions)for(const[_,P]of A.knownVersions)E.set(_,P);A.knownVersions=null}}let h=(m=this.knownVersions)==null?void 0:m.get(i);if(!h){const E=await this.APILoadVersion({},i);if(!E)throw new Error(`Version with id '${i}' for entity with id '${this.id}' not found.`);h=new mi(E,this.project)}return this.metaSync(h.toShallowJSON(),null),this.previousVersion=h.previousVersion,this.version=h.version,this.createdAt=h.createdAt,this.author=h.author,this.deleted=h.deleted,this.defaultValue=h.defaultValue,this.dataType=h.dataType,this.implements=[...h.implements],this.parent=h.parent,{updated:C(a),added:C(c),removed:C(e),affected:C(f),self:this}}updateWithShallowTransfer(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.UpdateWithShallowTransfer))){if(!this.checkCanEdit(this,r))return Y.Logger.warn(`[updateWithShallowTransfer] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.UpdateWithShallowTransfer,this.id),this;if(this.metaSync(i,r),this.version=i.version,this.createdAt=i.createdAt,this.author=i.author,this.deleted=i.deleted,this.previousVersion=i.previousVersion,this.unsubscribeFromDependencies(),i.parent){const c=ie(i.parent),e=this.project.get(c),f=this.parent;if(f&&f.id!==(e==null?void 0:e.id)&&this.removeFromParent(r),e)this.setParent(e,r),this.addSelfToProject(r);else throw r==null||r.attemptAutoclose(w.UpdateWithShallowTransfer,this.id),new Error(`${this.type} with id '${this.id}' has a 'parent' reference '${c}' that isn't found in the project`)}else throw r==null||r.attemptAutoclose(w.UpdateWithShallowTransfer,this.id),new Error(`${this.type} with id '${this.id}' must have a 'parent'`);if(i.implements.forEach(c=>{const e=ie(c),f=this.project.get(e);if(f)this.addImplementation(f,r);else throw new Error(`${fr(this.type)} with id '${this.id}' has a 'implements' reference "${e}" which is missing in the project`)}),this.implements.filter(c=>{const e=ie(c);return!i.implements.find(f=>ie(f)===e)}).forEach(c=>{this.removeImplementation(c,r)}),i.extends){const c=ie(i.extends),e=this.project.get(c);if(e)this.setExtends(e,r);else if(c)throw new Error(`${fr(this.type)} with id '${this.id}' has a 'extends' reference "${c}" which is missing in the project`)}else this.setExtends(null,r);if(i.dataType){const c=ie(i.dataType),e=this.project.get(c);e&&this.setDataType(e,r)}else this.setDataType(null,r);if(i.defaultValue){const c=ie(i.defaultValue),e=this.project.get(c);e&&this.setDefaultValue(e,r)}else this.setDefaultValue(null,r);return this.captureVersion(),this.subscribeToDependencies(),r==null||r.attemptAutoclose(w.UpdateWithShallowTransfer,this.id),this}updateWithGenerationTarget(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.UpdateWithGenerationTarget))){var a;if(!this.checkCanEdit(this,r))return Y.Logger.warn(`[updateWithGenerationTarget] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.UpdateWithGenerationTarget,this.id),this;if(this.metaSync(i,r),i.parent){const c=ie(i.parent),e=this.project.get(c),f=this.parent;if(f&&f.id!==(e==null?void 0:e.id)&&this.removeFromParent(r),e)this.setParent(e,r),this.addSelfToProject(r);else throw r==null||r.attemptAutoclose(w.UpdateWithGenerationTarget,this.id),new Error(`${this.type} with id '${this.id}' has a 'parent' reference '${c}' that isn't found in the project`)}if((a=i.implements)==null||a.forEach(c=>{const e=ie(c),f=this.project.get(e);if(f)this.addImplementation(f,r);else throw new Error(`${fr(this.type)} with id '${this.id}' has a 'implements' reference "${e}" which is missing in the project`)}),i.implements&&this.implements.filter(e=>{const f=ie(e);return!(i.implements||[]).find(h=>ie(h)===f)}).forEach(e=>{this.removeImplementation(e,r)}),i.extends){const c=ie(i.extends),e=this.project.get(c);if(e)this.setExtends(e,r);else if(c)throw new Error(`${fr(this.type)} with id '${this.id}' has a 'extends' reference "${c}" which is missing in the project`)}else i.extends===null&&this.setExtends(null,r);return this.captureVersion(),this.subscribeToDependencies(),r==null||r.attemptAutoclose(w.UpdateWithGenerationTarget,this.id),this}hydrateAncestors(){const i=[],r=[],a=[],c=[];if(this.initialData.parent){const e=ie(this.initialData.parent),f=this.project.get(e);if(f)this.setParent(f,null);else throw new Error(`${this.type} with id '${this.id}' has a 'parent' reference '${e}' that isn't found in the project`)}else throw new Error(`${this.type} with id '${this.id}' must have a 'parent'`);if((this.initialData.implements||[]).forEach(e=>{const f=ie(e),h=this.project.get(f);if(h)this.addImplementation(h,null),i.push(h);else throw new Error(`${fr(this.type)} with id '${this.id}' has a 'implements' reference "${f}" which is missing in the project`)}),this.initialData.extends){const e=ie(this.initialData.extends),f=this.project.get(e);if(f)this.setExtends(f,null),i.push(f);else if(e)throw new Error(`${fr(this.type)} with id '${this.id}' has a 'extends' reference "${e}" which is missing in the project`)}return{updated:C(i),added:C(r),removed:C(a),affected:C(c),self:this}}afterAllChildrenInitialized(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.AfterAllChildrenInitialized))){var q;if(!this.checkCanEdit(this,i))return Y.Logger.warn(`[afterAllChildrenInitialized] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),i==null||i.attemptAutoclose(w.AfterAllChildrenInitialized,this.id),{updated:[],added:[],removed:[],affected:[],self:this};const r=[],a=[],c=[],e=[];if(this.initialized=!0,this.parent.type===d.DefinitionEntity&&this.parentRelationType!==Xd.AllPropertiesImplementationTarget){let ne=this.index||0;const J=this.parent.properties.filter(te=>!te.deleted&&te.id!==this.id);J.length&&(ne>J.length+1?ne=J.length:ne<0&&(ne=0)),J.find(te=>(te.index||0)===ne&&!te.deleted)&&J.filter(te=>(te.index||0)>=ne&&!te.deleted).forEach(te=>{te.metaSync({index:(te.index||0)+1},i),i==null||i.add(te,W.Updated),r.push(te)}),this.metaSync({index:ne},i)}if(this.defaultValue&&!this.project.diggestedBuiltInBaseEntitiesIds.has(this.id)&&this.project.diggestedBuiltInBaseEntitiesIds.has(this.defaultValue.id)){const ne=this.defaultValue.clone(i,this);this.setDefaultValue(ne,i)}const{updated:f,added:h,removed:m,affected:E}=this.syncWithImplementation(i);r.push(...f),a.push(...h),c.push(...m),e.push(...E);const{updated:b,added:A,removed:_,affected:P}=mF(this,i);r.push(...b),a.push(...A),c.push(..._),e.push(...P);const{updated:V,added:M,removed:G,affected:k}=this.syncWithExtension(i);return r.push(...V),a.push(...M),c.push(...G),e.push(...k),!this.project.diggestedBuiltInBaseEntitiesIds.has(this.id)&&this.project.initialized&&(this.extends&&((q=this.extends)==null?void 0:q.interactive)===!0&&(this.interactive||(this.metaSync({interactive:!0},i),r.push(this))),this.implements.every(ne=>ne.interactive===!0)&&(this.interactive||(this.metaSync({interactive:!0},i),r.push(this)))),i==null||i.attemptAutoclose(w.AfterAllChildrenInitialized,this.id),{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}addSelfToProject(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"add-self-to-project"))){const r=[this],a=[],c=[],e=[];return this.parentRelationType===Xd.AllPropertiesImplementationTarget?this.parent.setAllPropertiesImplement(this,i):this.parent.addProperty(this,i),r.push(this.parent),this.subscribe(),this.subscribeToDependencies(),i==null||i.attemptAutoclose("add-self-to-project",this.id),{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}setParent(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.SetParent))){var a;return this.checkCanEditWithCounterpartAndSideEffects(this,i,w.SetParent,r)?(((a=this.parent)==null?void 0:a.id)!==(i==null?void 0:i.id)&&(this.parent=i,r&&(r==null||r.add(this,W.Updated))),r==null||r.attemptAutoclose(w.SetParent,this.id),this):this}addImplementation(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.AddImplementation))){return this.checkCanEdit(this,r)?(this.implements.includes(i)||(this.implements.push(i),r==null||r.add(this,W.Updated)),r==null||r.attemptAutoclose(w.AddImplementation,this.id),this):(Y.Logger.warn(`[addImplementation] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.AddImplementation,this.id),this)}removeImplementation(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.RemoveImplementation))){return this.checkCanEdit(this,r)?(this.implements.includes(i)&&(this.implements=this.implements.filter(a=>a.id!==i.id),r==null||r.add(this,W.Updated)),r==null||r.attemptAutoclose(w.RemoveImplementation,this.id),this):(Y.Logger.warn(`[removeImplementation] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.RemoveImplementation,this.id),this)}setExtends(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.SetExtends))){var a;return this.checkCanEdit(this,r)?(((a=this.extends)==null?void 0:a.id)!==(i==null?void 0:i.id)&&(this.extends=i,this.subscribeToDependencies(),r&&(r==null||r.add(this,W.Updated))),r==null||r.attemptAutoclose(w.SetExtends,this.id),this):(Y.Logger.warn(`[setExtends] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.SetExtends,this.id),this)}initChildren(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"init-children"))){if(this.initialized||this.startedInitialization)return this;if(this.startedInitialization=!0,this.initialData.defaultValue&&(this.defaultValue=Re(this.initialData.defaultValue,this.project),this.defaultValue.setParent(this,null),this.defaultValue.initChildren(i)),this.initialData.dataType){const r=Re(this.initialData.dataType,this.project);r.setParent(this,null),r.initChildren(i),this.dataType=r}if(this.implements=this.initialData.implements.map(r=>Re(r,this.project)),this.initialData.extends){const r=Re(this.initialData.extends,this.project);this.setExtends(r,null)}return this.subscribeToDependencies(),this.afterAllChildrenInitialized(i),i==null||i.attemptAutoclose("init-children",this.id),this}subscribe(){var i;return this.activeVersion=!0,(i=this.knownVersions)==null||i.forEach(r=>{r.version!==this.version&&(r.activeVersion=!1)}),this.project.subscribeInstance(this),this}unsubscribe(){return this.project.unsubscribeInstance(this),this}metaSync(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"meta-sync"))){const a=tn(this,i,r),c=en(this,a),e=this.toMeta();return this.name=a.name!==void 0?a.name:e.name,this.codeName=a.codeName!==void 0?a.codeName:e.codeName,this.description=a.description!==void 0?a.description:e.description,this.abstract=a.abstract!==void 0?a.abstract:e.abstract,this.private=a.private!==void 0?a.private:e.private,this.index=a.index||(a.index!==0?e.index:0),this.static=a.static!==void 0?a.static:e.static,this.hidden=a.hidden!==void 0?a.hidden:e.hidden,this.constant=a.constant!==void 0?a.constant:e.constant,this.interactive=a.interactive!==void 0?a.interactive:e.interactive,this.required=a.required!==void 0?a.required:e.required,this.unique=a.unique!==void 0?a.unique:e.unique,super.baseMetaSync(a,this,r),a.deleted===!0&&!e.deleted?r==null||r.add(this,W.Removed):a.deleted===!1&&e.deleted?r==null||r.add(this,W.Added):c&&(r==null||r.add(this,W.Updated)),r==null||r.attemptAutoclose("meta-sync",this.id),this}async APILoad(i=Ke,...r){return await mi.repository.APILoad(this.id,...r),this}async APICreate(i=Ke,...r){return await mi.repository.APICreate(this.toShallowJSON(),...r),this}async APIUpdate(i=Ke,...r){return await mi.repository.APIUpdate(this.toShallowJSON(),...r),this}async APIDelete(i=Ke,...r){return await mi.repository.APIDelete(this.toShallowJSON(),...r),this}async APIClone(i=Ke,...r){return await mi.repository.APIClone(this.id,...r),this}async APILoadVersion(i=Ke,r,...a){return await mi.repository.APILoadVersion(this.id,r,...a)}removeFromParent(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.RemoveFromParent))){if(!this.checkCanEdit(this,i))return Y.Logger.warn(`[removeFromParent] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),i==null||i.attemptAutoclose(w.RemoveFromParent,this.id),{added:[],updated:[],removed:[],affected:[],self:this};const r=[],a=[],c=[],e=[];return this.parent.type===d.DefinitionEntity&&(this.parentRelationType===Xd.AllPropertiesImplementationTarget?this.parent.removeAllPropertiesImplement(i):this.parent.removeProperty(this,i),e.push(this.parent)),i==null||i.attemptAutoclose(w.RemoveFromParent,this.id),{added:C(c),updated:C(r),removed:C(a),affected:C(e),self:this}}remove({ignoreUpstream:i}={ignoreUpstream:!1},r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.RemoveEntity))){var h;if(!this.checkCanDelete(this,r))return Y.Logger.warn(`[remove] User is not allowed to delete or edit this ${this.type} entity with id: ${this.id}`),r==null||r.event({id:`${w.RemoveEntity}-${this.id}--${Me.ActionOwnerEntityNonDeletable}`,action:w.RemoveEntity,owner:this,errorReason:Me.ActionOwnerEntityNonDeletable,rootAction:((h=r==null?void 0:r.self)==null?void 0:h.id)===this.id&&(r==null?void 0:r.actionName)===w.RemoveEntity}),r==null||r.attemptAutoclose(w.RemoveEntity,this.id),{added:[],updated:[],removed:[],affected:[],self:this};const a=[],c=[],e=[],f=[];if(r!=null&&r.hasRemoved(this.id))return r==null||r.attemptAutoclose(w.RemoveEntity,this.id),{added:[],updated:[],removed:[],affected:[],self:this};if(c.push(this),this.unsubscribe(),this.unsubscribeFromDependencies(),this.project.subscribeDeletedInstance(this),this.metaSync({deleted:!0},r),Object.values(this.detachedDependents).forEach(m=>{const{updated:E,removed:b,added:A}=m.entity.onDetachedDependencyRemoved(this,m.field,r);a.push(...E),c.push(...b),e.push(...A)}),this.defaultValue){const{updated:m,removed:E}=this.defaultValue.remove({ignoreUpstream:!0},r);a.push(...m),c.push(...E)}if(this.dataType){const{updated:m,removed:E}=this.dataType.remove({ignoreUpstream:!0},r);a.push(...m),c.push(...E)}if(!i){const m=this.removeFromParent(r);e.push(...m.added),a.push(...m.updated),c.push(...m.removed),f.push(...m.affected)}return r==null||r.attemptAutoclose(w.RemoveEntity,this.id),{added:C(e),updated:C(a),removed:C(c),affected:C(f),self:this}}restore({}={},i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.RestoreEntity))){if(!this.checkCanEdit(this,i))return Y.Logger.warn(`[restore] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),i==null||i.attemptAutoclose(w.RestoreEntity,this.id),{added:[],updated:[],removed:[],affected:[],self:this};const r=[],a=[],c=[],e=[];if(i!=null&&i.hasAdded(this.id))return i==null||i.attemptAutoclose(w.RestoreEntity,this.id),{added:[],updated:[],removed:[],affected:[],self:this};if(this.subscribe(),this.project.unsubscribeDeletedInstance(this),this.metaSync({deleted:!1},i),Object.values(this.detachedDependents).forEach(f=>{const{updated:h,removed:m,added:E}=f.entity.onDetachedDependencyRestored(this,f.field,i);a.push(...h),c.push(...m),r.push(...E)}),this.defaultValue){const{updated:f}=this.defaultValue.restore({},i);a.push(...f)}if(this.dataType){const{updated:f}=this.dataType.restore({},i);a.push(...f)}return this.parent.type===d.DefinitionEntity&&(this.parentRelationType===Xd.AllPropertiesImplementationTarget?this.parent.removeAllPropertiesImplement(i):this.parent.addProperty(this,i),e.push(this.parent)),i==null||i.attemptAutoclose(w.RestoreEntity,this.id),{added:C(r),updated:C(a),removed:C(c),affected:C(e),self:this}}toFlat(i=new Set){var a,c;return i.has(this.id)?[]:(i.add(this.id),[this,...((a=this.defaultValue)==null?void 0:a.toFlat(i))||[],...((c=this.dataType)==null?void 0:c.toFlat(i))||[],...this.parent.toFlat(i)])}toFlatIds(i=new Set){var a,c;if(i.has(this.id))return[];if(i.add(this.id),!this.parent)throw new Error(`Property with id '${this.id}' has no parent and cannot be flattened`);return[this.id,...((a=this.defaultValue)==null?void 0:a.toFlatIds(i))||[],...((c=this.dataType)==null?void 0:c.toFlatIds(i))||[],...this.parent.toFlatIds(i)]}toMeta(){return{id:this.id,version:this.version,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,codeName:this.codeName,description:this.description,index:this.index,hidden:this.hidden,private:this.private,abstract:this.abstract,required:this.required,unique:this.unique,constant:this.constant,interactive:this.interactive,static:this.static,type:this.type,editable:this.editable,deletable:this.deletable,name:this.name}}toJSON(i=new Set){var r,a,c;return i.has(this.id)?this.toReference():(i.add(this.id),{id:this.id,version:this.version,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,type:this.type,editable:this.editable,deletable:this.deletable,name:this.name,codeName:this.codeName,description:this.description,index:this.index,private:this.private,unique:this.unique,required:this.required,static:this.static,constant:this.constant,interactive:this.interactive,abstract:this.abstract,hidden:this.hidden,parentRelationType:this.parentRelationType,defaultValue:((r=this.defaultValue)==null?void 0:r.toJSON(i))||null,dataType:((a=this.dataType)==null?void 0:a.toJSON(i))||null,implements:this.implements.map(e=>e.toJSON(i)),extends:((c=this.extends)==null?void 0:c.toJSON(i))||null,parent:this.parent.toReference()})}toJSONClone(i=at){var a,c,e,f,h,m,E;let r;return(a=i.seenEntityMaps)!=null&&a.has(this.id)?r=i.seenEntityMaps.get(this.id):(r=i.newId||dn(this,this.project,i.uuidStrategy),i.seenEntityMaps&&i.seenEntityMaps.set(this.id,r)),(c=i.seenEntities)!=null&&c.has(r)||(e=i.seenEntities)!=null&&e.has(this.id)?this.toReference({seenEntityMaps:i.seenEntityMaps}):((f=i.seenEntities)==null||f.add(r),(h=i.seenEntities)==null||h.add(this.id),{id:r,version:x.UUID.uuid(),createdAt:i.timestamp||B().toISOString(),author:x.sessionAuthor,previousVersion:null,deleted:!1,type:this.type,editable:this.editable,deletable:this.deletable,name:this.name,codeName:this.codeName,description:this.description,index:this.index,unique:this.unique,private:this.private,required:this.required,static:this.static,constant:this.constant,interactive:this.interactive,abstract:this.abstract,hidden:this.hidden,parentRelationType:this.parentRelationType,defaultValue:((m=this.defaultValue)==null?void 0:m.toJSONClone({...i,newId:null}))||null,dataType:((E=this.dataType)==null?void 0:E.toJSONClone({...i,newId:null}))||null,implements:this.implements.map(b=>this.project.getBuiltIn(b.id)?b.toJSON(i.seenEntities):b.toJSONClone({...i,newId:null})),extends:(()=>{var b;return this.extends&&this.project.getBuiltIn(this.extends.id)?this.extends.toJSON():((b=this.extends)==null?void 0:b.toJSONClone({...i,newId:null}))||null})(),parent:this.parent.toReference({seenEntityMaps:i.seenEntityMaps})})}toReference(i=at){var a;let r=this.id;return(a=i.seenEntityMaps)!=null&&a.has(this.id)&&(r=i.seenEntityMaps.get(this.id)),{id:r+"--"+x.UUID.uuid()+"--ref",type:d.GenericReference,entityId:r,version:this.version,entityType:this.type}}toShallowJSON(i=at){var a,c,e,f;let r=this.id;return(a=i.seenEntityMaps)!=null&&a.has(this.id)&&(r=i.seenEntityMaps.get(this.id)),{id:r,version:this.version,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,name:this.name,codeName:this.codeName,description:this.description,type:this.type,editable:this.editable,deletable:this.deletable,index:this.index,private:this.private,required:this.required,unique:this.unique,abstract:this.abstract,static:this.static,constant:this.constant,interactive:this.interactive,hidden:this.hidden,parentRelationType:this.parentRelationType,defaultValue:((c=this.defaultValue)==null?void 0:c.toReference(i))||null,dataType:((e=this.dataType)==null?void 0:e.toReference(i))||null,implements:this.implements.map(h=>h.toReference(i)),extends:((f=this.extends)==null?void 0:f.toReference(i))||null,parent:this.parent.toReference(i)}}toFlatJSON(i=new Set){var a,c;return i.has(this.id)?[]:(i.add(this.id),[this.toShallowJSON(),...((a=this.defaultValue)==null?void 0:a.toFlatJSON(i))||[],...((c=this.dataType)==null?void 0:c.toFlatJSON(i))||[],...this.implements.flatMap(e=>e.toFlatJSON(i)),...this.parent.toFlatJSON(i)])}toGenerationTarget(i=at){var a,c;let r=this.id;return(a=i.seenEntityMaps)!=null&&a.has(this.id)&&(r=i.seenEntityMaps.get(this.id)),{id:r,name:this.name,description:this.description,type:this.type,private:this.private,required:this.required,abstract:this.abstract,static:this.static,parentRelationType:this.parentRelationType,implements:this.implements.map(e=>e.id),extends:(c=this.extends)==null?void 0:c.id,parent:this.parent.id}}toFlatGenerationTarget(i=new Set){var a,c;return i.has(this.id)?[]:(i.add(this.id),[this.toGenerationTarget(),...((a=this.defaultValue)==null?void 0:a.toFlatGenerationTarget(i))||[],...((c=this.dataType)==null?void 0:c.toFlatGenerationTarget(i))||[],...this.implements.flatMap(e=>e.toFlatGenerationTarget(i))])}clearErrors(){var i,r;return this.errors=[],(i=this.defaultValue)==null||i.clearErrors(),(r=this.dataType)==null||r.clearErrors(),this}validate(){return this.errors=Hje(this),{success:!0}}async validateAsync(i={}){const r=Y.YieldTracker.from(i);return this.errors=await Zje(this,{tracker:r}),{success:!0}}getErrors(){var r,a;return[...this.errors,...((r=this.defaultValue)==null?void 0:r.getErrors())||[],...((a=this.dataType)==null?void 0:a.getErrors())||[]]}async getErrorsAsync(i={}){const r=Y.YieldTracker.from(i),a=[...this.errors];if(await r.tick(),this.defaultValue){const c=await this.defaultValue.getErrorsAsync({tracker:r});a.push(...c)}if(this.dataType){const c=await this.dataType.getErrorsAsync({tracker:r});a.push(...c)}return a}getShallowErrors(){return this.errors}implement(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"implement-self-as-property")),a=null){var E,b,A;const c=a||x.UUID.uuid(),e=mi.new(r);e.id=c,e.name=this.name,e.description=this.description,e.index=this.index,e.private=this.private,e.required=this.required,e.static=this.static,e.constant=this.constant,e.unique=this.unique,e.hidden=this.hidden,e.interactive=this.interactive,e.parent=i.toReference(),e.implements=[this.toJSON()];const f=Re(e,this.project);f.hydrateAncestors(),f.addSelfToProject(r),r==null||r.add(f,W.Added),f.initChildren(r);const h=(E=this.defaultValue)==null?void 0:E.clone(r,f,x.UUID.uuid());h&&(h.editable=!0,h.deletable=!0);const m=hF(this);if(m.result){let _=!1;if(!f.defaultValue){const P=Lr.new(r);P.value=m.value,P.name=m.name,P.parent=f.toReference();const V=Re(P,this.project);V.hydrateAncestors(),V.addSelfToProject(r),V.initChildren(r),f.setDefaultValue(V,r),_=!0}(b=this.defaultValue)==null||b.metaSync({value:m.value},r),_&&(r||(A=this.defaultValue)==null||A.captureVersion())}return r||f.captureVersion(),f}clone(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.CloneEntity)),r=null,a=null,c=!0){var b,A;const e=Fr(r,this),f=a||x.UUID.uuid(),h=r||this.parent,m={hidden:!1,id:f,version:x.UUID.uuid(),createdAt:(i==null?void 0:i.timestamp)||B().toISOString(),author:(i==null?void 0:i.author)||"1",previousVersion:null,deleted:!1,type:this.type,editable:!0,deletable:!0,name:this.name,codeName:this.codeName,description:this.description,index:this.index,private:this.private,constant:this.constant,unique:this.unique,interactive:this.interactive,required:this.required,abstract:this.abstract,static:this.static,parentRelationType:this.parentRelationType,defaultValue:null,dataType:null,implements:this.implements.map(_=>_.toJSON()),extends:this.extends,parent:h.toReference()},E=lr(m,e);if(E.hydrateAncestors(),E.setParent(h,i),c&&(E.subscribe(),E.addSelfToProject(i)),E.initChildren(i),i==null||i.add(E,W.Added),this.dataType&&this.project.diggestedBuiltInBaseEntitiesIds.has(this.dataType.id))E.setDataType(e.getBuiltIn(this.dataType.id),i);else{const _=((b=this.dataType)==null?void 0:b.implement(E,i,x.UUID.uuid()))||null;_&&E.setDataType(_,i)}if(this.defaultValue){const _=(A=this.defaultValue)==null?void 0:A.clone(i,E,x.UUID.uuid(),c);E.setDefaultValue(_||null,i)}return this.implements.length&&this.implements.forEach(_=>{const P=e.get(_.id)||e.getBuiltIn(_.id);if(P){E.addImplementation(P,i);return}}),E.addSelfToProject(null),i||E.captureVersion(),i==null||i.attemptAutoclose(w.CloneEntity,this.id),E}setDataType(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.SetDataType))){if(!this.checkCanEdit(this,r))return Y.Logger.warn(`[setDataType] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.SetDataType,this.id),this;const a=this.dataType;return(a==null?void 0:a.id)!==(i==null?void 0:i.id)&&(a==null||a.remove({ignoreUpstream:!0},r),this.dataType=i,this.subscribeToDependencies(),r==null||r.add(this,W.Affected)),r==null||r.attemptAutoclose(w.SetDataType,this.id),this}removeDataType(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.RemoveDataType))){return this.checkCanEdit(this,i)?(this.dataType&&(this.dataType.remove({ignoreUpstream:!0},i),i==null||i.add(this,W.Affected),this.dataType=null),i==null||i.attemptAutoclose(w.RemoveDataType,this.id),this):(Y.Logger.warn(`[removeDataType] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),i==null||i.attemptAutoclose(w.RemoveDataType,this.id),this)}getDataType(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"get-data-type"))){return i==null||i.attemptAutoclose("get-data-type",this.id),this.dataType}getDefaultValue(){var c;let i=null;for(const e of this.implements){const f=e.getDefaultValue();(!i||Vn(i))&&f&&(i=f)}let r=this.defaultValue;const a=(c=this.extends)==null?void 0:c.getDefaultValue();return Vn(r)&&a&&!Vn(a)&&(r=a),Vn(r)&&i&&!Vn(i)&&(r=i),r}setDefaultValue(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"set-default-value"))){if(!this.checkCanEdit(this,r))return Y.Logger.warn(`[setDefaultValue] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose("set-default-value",this.id),this;const a=this.defaultValue;return(a==null?void 0:a.id)!==(i==null?void 0:i.id)&&(a==null||a.remove({ignoreUpstream:!0},r),this.defaultValue=i,r==null||r.add(this,W.Affected)),r==null||r.attemptAutoclose("set-default-value",this.id),this}syncWithImplementation(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"sync-with-implementation"))){var _,P,V,M;if(!this.checkCanEdit(this,i))return Y.Logger.warn(`[syncWithImplementation] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),i==null||i.attemptAutoclose("sync-with-implementation",this.id),{added:[],updated:[],removed:[],affected:[],self:this};const r=[],a=[],c=[],e=[];this.parent.type!==d.PrimitiveEntity&&this.interactive&&this.parent.getAllPropertiesImplements().filter(k=>k.id!==this.id).forEach(k=>{this.addImplementation(k,i)}),this.implements.find(G=>G.id===this.id)&&this.removeImplementation(this,i);let f=null,h=this.implements.filter(G=>{var J;if(!G.dataType||!((J=G.dataType)!=null&&J.isResolved))return!1;const k=this.implements.filter(se=>se.id!==G.id);if(!k.length)return!0;const q=El(Sa(G.dataType),{removeDuplicates:!0,removeNulls:!0}).filter(se=>se.isResolved);return!!k.every(se=>!se.dataType||!se.dataType.isResolved?!0:El(Sa(se.dataType),{removeDuplicates:!0,removeNulls:!0}).filter(le=>le.isResolved).length>q.length)});if(h.length>1&&this.parent.type!==d.PrimitiveEntity){const G=this.parent.getAllPropertiesImplements()[0]||null;h=h.filter(k=>k.id!==(G==null?void 0:G.id))}if(!h.length&&this.parent.type!==d.PrimitiveEntity){const G=this.parent.getAllPropertiesImplements()[0]||null;G&&h.push(G)}for(const G of h)(_=G.dataType)!=null&&_.isResolved&&(f?((P=G.dataType.orChildrenGroup)!=null&&P.length&&G.dataType.implementationChooseOne||(V=G.dataType.orChildrenGroup)!=null&&V.length&&!G.dataType.implementationChooseOne)&&(f=G.dataType):f=G.dataType);if(f||this.parent.type!==d.PrimitiveEntity&&this.parent.additionalPropertiesDataType&&(f=this.parent.additionalPropertiesDataType),f&&!this.dataType){const G=f.implement(this,i,x.UUID.uuid());this.setDataType(G,i),a.push(G)}if((M=this.dataType)==null||M.merge(f,i,{implementSource:!0}),!this.defaultValue){let G=null;for(const k of this.implements){const q=k.getDefaultValue();q&&(G=q)}if(G){const k=G.clone(i,this,x.UUID.uuid(),!0);this.setDefaultValue(k,i),a.push(k)}}if(!this.defaultValue){const G=hF(this);if(G.result){const k=Lr.new(i);k.name=G.name,k.value=G.value,k.parent=this.toReference();const q=Re(k,this.project);q.hydrateAncestors(),q.addSelfToProject(i),q.initChildren(i),i==null||i.add(q,W.Added),i||q.captureVersion(),this.setDefaultValue(q,i),a.push(q)}}let m=!1,E=!1,b=!1,A=!1;return this.implements.forEach(G=>{G.required&&(m=!0),G.constant&&(b=!0),G.unique&&(E=!0),G.static&&(A=!0)}),this.metaSync({required:m||this.required,constant:b||this.constant,unique:E||this.unique,static:A||this.static},i),i==null||i.attemptAutoclose("sync-with-implementation",this.id),{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}syncWithExtension(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"sync-with-extension"))){var E,b,A;if(!this.checkCanEdit(this,i))return Y.Logger.warn(`[syncWithExtension] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),i==null||i.attemptAutoclose("sync-with-extension",this.id),{added:[],updated:[],removed:[],affected:[],self:this};const r=[],a=[],c=[],e=[];if(!this.extends)return i==null||i.attemptAutoclose("sync-with-extension",this.id),{added:[],updated:[],removed:[],affected:[],self:this};const f={...this.extends.toMeta()};if(delete f.id,delete f.version,delete f.createdAt,delete f.previousVersion,delete f.author,delete f.index,this.metaSync(f,i),r.push(this),!this.extends.dataType)return i==null||i.attemptAutoclose("sync-with-extension",this.id),{added:[],updated:[],removed:[],affected:[],self:this};let h=!1;if(!this.dataType){const _=vr.new(i);_.parent=this.toReference();const P=Re(_,this.project);P.hydrateAncestors(),P.addSelfToProject(i),i==null||i.add(P,W.Added),P.afterAllChildrenInitialized(i),h=!0}const m=ni(this.dataType,this.extends.dataType);if((!m.compatible||!m.exact)&&((E=this.dataType)==null||E.merge(this.extends.dataType,i)),h&&(i||(b=this.dataType)==null||b.captureVersion()),this.extends.defaultValue&&!this.defaultValue){const _=this.extends.defaultValue.clone(i,this,x.UUID.uuid(),!0);this.setDefaultValue(_,i),a.push(_)}else this.extends.defaultValue?this.extends.defaultValue&&this.defaultValue&&!PFe(this.defaultValue,this.extends.defaultValue)&&(this.defaultValue.merge(this.extends.defaultValue,i),r.push(this.defaultValue)):((A=this.defaultValue)==null||A.remove({ignoreUpstream:!0},i),this.defaultValue=null,e.push(this));return i==null||i.attemptAutoclose("sync-with-extension",this.id),{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}implementAsInputMap(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"implement-as-input-map")),r,a){const c=Ts.new(i);c.id=a||c.id,c.name=this.name,c.description=this.description,c.parent=r.toReference(),c.declaration=this.toJSON();const e=lr(c,this.project);if(e.hydrateAncestors(),e.addSelfToProject(i),i==null||i.add(e,W.Added),e.initChildren(i),this.dataType)if(this.project.diggestedBuiltInBaseEntitiesIds.has(this.dataType.id))e.setDataType(this.dataType,i),i==null||i.add(e,W.Affected);else{const f=this.dataType.clone(i,e);e.setDataType(f,i)}if(this.defaultValue){const f=this.defaultValue.clone(i,e);e.setDefaultValue(f,i)}return i||e.captureVersion(),i==null||i.attemptAutoclose("implement-as-input-map",this.id),e}};R(mi,"repository",{APICreate:async(i,...r)=>i,APIUpdate:async(i,...r)=>i,APIDelete:async(i,...r)=>i,APIClone:async(i,...r)=>{},APILoad:async(i,...r)=>null,APILoadVersion:async(i,r,...a)=>null}),R(mi,"type",d.Property),R(mi,"USER_MANAGED_PARENT_TYPES",[d.DefinitionEntity]),R(mi,"PARENT_TYPES",[...mi.USER_MANAGED_PARENT_TYPES,d.PrimitiveEntity,d.BuiltInBaseEntity]),R(mi,"MUTABLE_BASE_PROPERTIES",["name","codeName","description","private","abstract","static","required","constant","unique","interactive"]),R(mi,"INMUTABLE_BASE_PROPERTIES",["id","type","version","createdAt","author","previousVersion","parentRelationType"]),R(mi,"BASE_PROPERTIES",[...mi.MUTABLE_BASE_PROPERTIES,...mi.INMUTABLE_BASE_PROPERTIES]),R(mi,"MUTABLE_META_PROPERTIES",[...mi.MUTABLE_BASE_PROPERTIES,"index"]),R(mi,"INMUTABLE_META_PROPERTIES",[...mi.INMUTABLE_BASE_PROPERTIES]),R(mi,"META_PROPERTIES",[...mi.MUTABLE_META_PROPERTIES,...mi.INMUTABLE_META_PROPERTIES]),R(mi,"MUTABLE_UPSTREAM_PROPERTIES",[]),R(mi,"INMUTABLE_UPSTREAM_PROPERTIES",["parent","implements","extends"]),R(mi,"UPSTREAM_PROPERTIES",[...mi.MUTABLE_UPSTREAM_PROPERTIES,...mi.INMUTABLE_UPSTREAM_PROPERTIES]),R(mi,"MUTABLE_DOWNSTREAM_PROPERTIES",["dataType","defaultValue"]),R(mi,"INMUTABLE_DOWNSTREAM_PROPERTIES",[]),R(mi,"DOWNSTREAM_PROPERTIES",[...mi.MUTABLE_DOWNSTREAM_PROPERTIES,...mi.INMUTABLE_DOWNSTREAM_PROPERTIES]),R(mi,"PROPERTIES",[...mi.META_PROPERTIES,...mi.UPSTREAM_PROPERTIES,...mi.DOWNSTREAM_PROPERTIES]);let Es=mi;async function zje(s,p={}){var E,b;const i=Y.YieldTracker.from(p),r=s.implements.flatMap(A=>Xje(s,A)),a=eUe(s,s.extends),c=iUe(s),e=tUe(s),f=IL(s),h=[...r,...a,...c,...e,...f],m=qt(s.errors,h);await i.tick();for(const A of s.properties)await A.validateAsync({tracker:i});for(const A of s.methods)await A.validateAsync({tracker:i});for(const A of s.abstractMethods)await A.validateAsync({tracker:i});return await((E=s.allPropertiesImplement)==null?void 0:E.validateAsync({tracker:i})),await((b=s.additionalPropertiesDataType)==null?void 0:b.validateAsync({tracker:i})),m}function Yje(s){var h,m;const p=s.implements.flatMap(E=>Xje(s,E)),i=eUe(s,s.extends),r=iUe(s),a=tUe(s),c=IL(s);s.properties.forEach(E=>{E.validate()}),s.methods.flatMap(E=>E.validate()),s.abstractMethods.flatMap(E=>E.validate()),(h=s.allPropertiesImplement)==null||h.validate(),(m=s.additionalPropertiesDataType)==null||m.validate();const e=[...p,...i,...r,...a,...c];return qt(s.errors,e)}function Jje(s,p){const i=p.properties.filter(c=>c.abstract),r=[];let a=[...s.properties];return i.forEach(c=>{const e=a.find(f=>!!f.implements.find(h=>h.id===c.id));e?a=a.filter(f=>f.id!==e.id):r.push(c)}),r}function Qje(s,p){const i=p.abstractMethods,r=[];let a=[...s.methods];return i.forEach(c=>{const e=a.find(f=>{var h;return((h=f.implements)==null?void 0:h.id)===c.id});e?a=a.filter(f=>f.id!==e.id):r.push(c)}),r}function Xje(s,p){const i=[];if(!p.abstract){const E=It({id:s.id+"--"+Ae.ImplementingNonAbstractEntity,message:`Entity "${s.name}" with id "${s.id}" is implementing a non-abstract entity "${p.name}" with id "${p.id}"`,severity:ve.Error,code:Ae.ImplementingNonAbstractEntity,entity:s});return i.push(E.error),i}const r=p.properties.filter(E=>E.abstract),a=[];let c=[...s.properties];r.forEach(E=>{const b=c.find(A=>!!A.implements.find(_=>_.id===E.id));b?c=c.filter(A=>A.id!==b.id):a.push(E)}),a.length&&a.forEach(E=>{const b=It({id:s.id+"--"+Ae.MissingPropertyImplementation+"--"+E.id,message:`Property "${E.name}" with id "${E.id}" of entity "${p.name}" with id "${p.id}" is not implemented when entity "${s.name}" with id "${s.id}" implements it`,severity:ve.Error,code:Ae.MissingPropertyImplementation,entity:s});i.push(b.error)});const e=[];let f=[...s.methods];p.abstractMethods.forEach(E=>{const b=f.find(A=>{var _;return((_=A.implements)==null?void 0:_.id)===E.id});b?f=f.filter(A=>A.id!==b.id):e.push(E)}),e.length&&e.forEach(E=>{const b=It({id:s.id+"--"+Ae.MissingMethodImplementation+"--"+E.id,message:`Method "${E.name}" with id "${E.id}" of entity "${p.name}" with id "${p.id}" is not implemented when entity "${s.name}" with id "${s.id}" implements it`,severity:ve.Error,code:Ae.MissingMethodImplementation,entity:s});i.push(b.error)});const h=[];p.properties.forEach(E=>{const b=c.find(A=>A.name===E.name);b&&h.push([b,E])}),h.length&&h.forEach(([E])=>{const b=It({id:s.id+"--"+Ce.PropertyOverwritesOtherSiblingWithSameName+"--"+E.id,message:`Property "${E.name}" with id "${E.id}" of entity "${s.name}" with id "${s.id}" overwrites the property with the same name from the base entity "${p.name}" with id "${p.id}"`,severity:ve.Error,code:Ce.PropertyOverwritesOtherSiblingWithSameName,entity:s});i.push(b.error)});const m=[];return p.methods.forEach(E=>{const b=f.find(A=>A.name===E.name);b&&m.push([b,E])}),m.length&&m.forEach(([E])=>{const b=It({id:s.id+"--"+Ce.MethodOverwritesOtherSiblingWithSameName+"--"+E.id,message:`Method "${E.name}" with id "${E.id}" of entity "${s.name}" with id "${s.id}" overwrites the method with the same name from the base entity "${p.name}" with id "${p.id}"`,severity:ve.Error,code:Ce.MethodOverwritesOtherSiblingWithSameName,entity:s});i.push(b.error)}),i}function eUe(s,p){const i=[];if(!p)return i;const r=[];if(!s.abstract&&p.abstract){const c=It({id:s.id+"--"+p.id+"--"+Ae.NonAbstractExtendingAbstractEntity,message:`Entity "${s.name}" with id "${s.id}" is not-abstract but is extending an abstract entity "${p.name}" with id "${p.id}"`,severity:ve.Error,code:Ae.NonAbstractExtendingAbstractEntity,entity:s,firstRelationship:p});return i.push(c.error),i}if(s.abstract&&!p.abstract){const c=It({id:s.id+"--"+p.id+"--"+Ae.AbstractExtendingNonAbstractEntity,message:`Entity "${s.name}" with id "${s.id}" is abstract but is extending an non-abstract entity "${p.name}" with id "${p.id}"`,severity:ve.Error,code:Ae.AbstractExtendingNonAbstractEntity,entity:s,firstRelationship:p});return i.push(c.error),i}s.properties.forEach(c=>{const e=p.properties.find(f=>{var h;return f.name===c.name&&((h=c.extends)==null?void 0:h.id)!==f.id});c.implements.find(f=>f.id===(e==null?void 0:e.id))||e&&r.push(c)}),r.length&&r.forEach(c=>{const e=It({id:s.id+"--"+Ce.PropertyOverwritesOtherSiblingWithSameName,message:`Property "${c.name}" with id "${c.id}" of entity "${s.name}" with id "${s.id}" overwrites the property with the same name from the extended entity "${p.name}" with id "${p.id}"`,severity:ve.Error,code:Ce.PropertyOverwritesOtherSiblingWithSameName,entity:s});i.push(e.error)});const a=[];return s.methods.forEach(c=>{var f;const e=p.methods.find(h=>{var m;return h.name===c.name&&((m=c.extends)==null?void 0:m.id)!==h.id});((f=c.implements)==null?void 0:f.id)!==(e==null?void 0:e.id)&&e&&a.push(c)}),a.length&&a.forEach(c=>{const e=It({id:s.id+"--"+Ce.MethodOverwritesOtherSiblingWithSameName,message:`Method "${c.name}" with id "${c.id}" of entity "${s.name}" with id "${s.id}" overwrites the method with the same name from the extended entity "${p.name}" with id "${p.id}"`,severity:ve.Error,code:Ce.MethodOverwritesOtherSiblingWithSameName,entity:s});i.push(e.error)}),i}function tUe(s){const p=[];if(!s.properties.length){const i=It({id:s.id+"--"+Ae.NoProperties,message:"No properties implemented",severity:ve.Warning,code:Ae.NoProperties,entity:s});p.push(i.error)}return p}function iUe(s){const p=[];if(s.abstract){if(s.methods.length){const i=It({id:s.id+"--"+Ae.AbstractEntityWithNonAbstractMethods,message:`Entity "${s.name}" with id "${s.id}" is marked as abstract but has non-abstract methods`,severity:ve.Error,code:Ae.AbstractEntityWithNonAbstractMethods,entity:s});p.push(i.error)}if(s.properties.some(i=>!i.abstract)){const i=It({id:s.id+"--"+Ae.AbstractEntityWithNonAbstractProperties,message:`Entity "${s.name}" with id "${s.id}" is marked as abstract but has non-abstract properties`,severity:ve.Error,code:Ae.AbstractEntityWithNonAbstractProperties,entity:s});p.push(i.error),s.properties.forEach(r=>{if(!r.abstract){const a=It({id:s.id+"--"+Ae.StaticEntityWithNonStaticProperties+"--"+r.id,message:`Property "${r.name}" with id "${r.id}" of entity "${s.name}" with id "${s.id}" is not marked as abstract but the entity is marked as abstract`,severity:ve.Error,code:Ae.StaticEntityWithNonStaticProperties,entity:s});p.push(a.error)}})}}else{if(s.abstractMethods.length){const i=It({id:s.id+"--"+Ae.AbstractPropertyInNonAbstractEntity,message:`Entity "${s.name}" with id "${s.id}" is not marked as abstract but has abstract methods`,severity:ve.Error,code:Ae.AbstractPropertyInNonAbstractEntity,entity:s});p.push(i.error)}s.properties.some(i=>i.abstract)&&s.properties.forEach(i=>{if(i.abstract){const r=It({id:s.id+"--"+Ae.AbstractPropertyInNonAbstractEntity+"--"+i.id,message:`Property "${i.name}" with id "${i.id}" of entity "${s.name}" with id "${s.id}" is marked as abstract but the entity is not marked as abstract`,severity:ve.Error,code:Ae.AbstractPropertyInNonAbstractEntity,entity:s,firstRelationship:i});p.push(r.error)}})}return s.static&&s.properties.some(i=>!i.static)&&s.properties.forEach(i=>{if(!i.static){const r=It({id:s.id+"--"+Ae.NonStaticPropertyInStaticEntity+"--"+i.id,message:`Property "${i.name}" with id "${i.id}" of entity "${s.name}" with id "${s.id}" is not marked as static but the entity is marked as static`,severity:ve.Error,code:Ae.NonStaticPropertyInStaticEntity,entity:s,firstRelationship:i});p.push(r.error)}}),p}function xVi(s,p){const i=[],r=ea(p);if(!p.abstract){const e=new qi({id:s.id+"--"+p.id+"--"+Ae.ImplementingNonAbstractEntity,message:`Entity "${s.name}" with id "${s.id}" is implementing a non-abstract built-in entity "${p.name}" with id "${p.id}"`,severity:ve.Error,code:Ae.ImplementingNonAbstractEntity,entity:s,firstRelationship:p});i.push(e)}const a=s.implements.filter(e=>e.id!==p.id);if(s.abstract){const e=new qi({id:s.id+"--"+p.id+"--"+Ae.AbstractEntityImplements,message:`Entity "${s.name}" with id "${s.id}" is marked as abstract and cannot implement built-in entity "${p.name}" with id "${p.id}"`,severity:ve.Error,code:Ae.AbstractEntityImplements,entity:s,firstRelationship:p});i.push(e)}if(s.static&&!p.static){const e=new qi({id:s.id+"--"+p.id+"--"+Ae.StaticImplementingNonStaticEntity,message:`Entity "${s.name}" with id "${s.id}" is marked as static and cannot implement non-static built-in entity "${p.name}" with id "${p.id}"`,severity:ve.Error,code:Ae.StaticImplementingNonStaticEntity,entity:s,firstRelationship:p});i.push(e)}if(!s.static&&p.static){const e=new qi({id:s.id+"--"+p.id+"--"+Ae.NonStaticImplementingStaticEntity,message:`Entity "${s.name}" with id "${s.id}" is not marked as static and cannot implement static built-in entity "${p.name}" with id "${p.id}"`,severity:ve.Error,code:Ae.NonStaticImplementingStaticEntity,entity:s,firstRelationship:p});i.push(e)}return a.length&&a.forEach(e=>{if(e.type===d.BuiltInBaseEntity){const f=r.filter(h=>h.id!==e.id);f.length&&f.forEach(h=>{if(h.id!==e.id){const m=new qi({id:s.id+"--"+h.id+"--"+e.id+"--"+Ae.ImplementsIncompatibleEntities,message:`Entity "${s.name}" with id "${s.id}" is implementing built-in entity "${h.name}" with id "${h.id}" but also implements entity "${e.name}" with id "${e.id}" which is incompatible`,severity:ve.Error,code:Ae.ImplementsIncompatibleEntities,entity:s,firstRelationship:h,secondRelationship:e});i.push(m)}})}else{ea(e).forEach(E=>{const b=r.filter(A=>A.id!==E.id);b.length&&b.forEach(A=>{if(A.id!==E.id){const _=new qi({id:s.id+"--"+A.id+"--"+E.id+"--"+Ae.ImplementsIncompatibleEntities,message:`Entity "${s.name}" with id "${s.id}" is implementing built-in entity "${A.name}" with id "${A.id}" but also implements entity "${E.name}" with id "${E.id}" which is incompatible`,severity:ve.Error,code:Ae.ImplementsIncompatibleEntities,entity:s,firstRelationship:A,secondRelationship:E});i.push(_)}})});const h=Jd(p.ownDeclaredProperties,e.ownDeclaredProperties,Ce.PropertyOverwritesOtherImplementedEntitysPropertyWithSameImplementation,Ce.PropertyOverwritesOtherImplementedEntitysPropertyWithSameName);i.push(...h.errors);const m=Jd(p.abstractMethods,[...e.abstractMethods,...e.methods],Ce.MethodOverwritesOtherImplementedEntitysMethodWithSameImplementation,Ce.MethodOverwritesOtherImplementedEntitysMethodWithSameName);i.push(...m.errors)}}),C(s.extends?ea(s.extends):[]).forEach(e=>{if(!r.find(f=>f.id===e.id)){const f=new qi({id:s.id+"--"+p.id+"--"+e.id+"--"+Ae.ExtendsIncompatibleEntities,message:`Entity "${s.name}" with id "${s.id}" is implementing built-in entity "${p.name}" with id "${p.id}" but also extends entity "${e.name}" with id "${e.id}" which is incompatible`,severity:ve.Error,code:Ae.ExtendsIncompatibleEntities,entity:s,firstRelationship:p,secondRelationship:e});i.push(f)}}),i}function $Vi(s,p,i=!1){var m,E;const r=[],a=ea(p);if(!s.abstract&&p.abstract){const b=It({id:s.id+"--"+p.id+"--"+Ae.NonAbstractExtendingAbstractEntity,message:`Entity "${s.name}" with id "${s.id}" is not-abstract but is extending an abstract entity "${p.name}" with id "${p.id}"`,severity:ve.Error,code:Ae.NonAbstractExtendingAbstractEntity,entity:s,firstRelationship:p});r.push(b.error)}if(s.abstract&&!p.abstract){const b=It({id:s.id+"--"+p.id+"--"+Ae.AbstractExtendingNonAbstractEntity,message:`Entity "${s.name}" with id "${s.id}" is abstract but is extending an non-abstract entity "${p.name}" with id "${p.id}"`,severity:ve.Error,code:Ae.AbstractExtendingNonAbstractEntity,entity:s,firstRelationship:p});r.push(b.error)}if(!s.static&&p.static){const b=It({id:s.id+"--"+p.id+"--"+Ae.NonStaticExtendingStaticEntity,message:`Entity "${s.name}" with id "${s.id}" is not static but is extending a static entity "${p.name}" with id "${p.id}"`,severity:ve.Error,code:Ae.NonStaticExtendingStaticEntity,entity:s,firstRelationship:p});r.push(b.error)}if(s.static&&!p.static){const b=It({id:s.id+"--"+p.id+"--"+Ae.StaticExtendingNonStaticEntity,message:`Entity "${s.name}" with id "${s.id}" is static but is extending an non-static entity "${p.name}" with id "${p.id}"`,severity:ve.Error,code:Ae.StaticExtendingNonStaticEntity,entity:s,firstRelationship:p});r.push(b.error)}if(!bl(p)){const b=It({id:s.id+"--"+p.id+"--"+Ae.ExtendingNonInteractiveEntity,message:`Entity "${s.name}" with id "${s.id}" is extending an non-interactive entity "${p.name}" with id "${p.id}"`,severity:ve.Error,code:Ae.ExtendingNonInteractiveEntity,entity:s,firstRelationship:p});r.push(b.error)}if(s.extends&&((m=s.extends)==null?void 0:m.id)!==p.id)if(((E=s.extends)==null?void 0:E.type)===d.BuiltInBaseEntity){const b=a.filter(A=>{var _;return A.id!==((_=s.extends)==null?void 0:_.id)});b.length&&b.forEach(A=>{var _,P,V,M;if(A.id!==((_=s.extends)==null?void 0:_.id)){const G=It({id:s.id+"--"+A.id+"--"+((P=s.extends)==null?void 0:P.id)+"--"+Ae.ExtendsIncompatibleEntities,message:`Entity "${s.name}" with id "${s.id}" is extending built-in entity "${A.name}" with id "${A.id}" but also extends entity "${(V=s.extends)==null?void 0:V.name}" with id "${(M=s.extends)==null?void 0:M.id}" which is incompatible`,severity:ve.Error,code:Ae.ExtendsIncompatibleEntities,entity:s,firstRelationship:A,secondRelationship:s.extends});r.push(G.error)}})}else{ea(s.extends).forEach(G=>{const k=a.filter(q=>q.id!==G.id);k.length&&k.forEach(q=>{if(q.id!==G.id){const ne=new qi({id:s.id+"--"+q.id+"--"+G.id+"--"+Ae.ImplementsIncompatibleEntities,message:`Entity "${s.name}" with id "${s.id}" is extending built-in entity "${q.name}" with id "${q.id}" but also extends or implements entity "${G.name}" with id "${G.id}" which is incompatible`,severity:ve.Error,code:Ae.ImplementsIncompatibleEntities,entity:s,firstRelationship:q,secondRelationship:G});r.push(ne)}})});const A=!!ea(s.extends).find(G=>G.id===p.id);let _=[...s.extends.properties];A&&(_=_.filter(G=>!p.properties.find(k=>k.id===G.id||k.name===G.name||!!G.implements.find(q=>q.id===k.id))));let P=[...s.extends.methods];A&&(P=P.filter(G=>!p.methods.find(k=>{var q;return k.id===G.id||k.name===G.name||k.id===((q=G.implements)==null?void 0:q.id)})));const V=Jd(p.ownDeclaredProperties,_,Ce.PropertyOverwritesOtherExtendedEntitysPropertyWithSameImplementation,Ce.PropertyOverwritesOtherExtendedEntitysPropertyWithSameName);r.push(...V.errors);const M=Jd(p.abstractMethods,P,Ce.MethodOverwritesOtherExtendedEntitysMethodWithSameImplementation,Ce.MethodOverwritesOtherExtendedEntitysMethodWithSameName);r.push(...M.errors)}i&&Y.Logger.log("self.implements.length",s.implements.length),s.implements.length&&s.implements.forEach(b=>{if(b.type===d.BuiltInBaseEntity){const A=a.filter(_=>_.id!==b.id);A.length&&A.forEach(_=>{if(_.id!==b.id){const P=new qi({id:s.id+"--"+_.id+"--"+b.id+"--"+Ae.ImplementsIncompatibleEntities,message:`Entity "${s.name}" with id "${s.id}" is implementing built-in entity "${_.name}" with id "${_.id}" but also implements entity "${b.name}" with id "${b.id}" which is incompatible`,severity:ve.Error,code:Ae.ImplementsIncompatibleEntities,entity:s,firstRelationship:_,secondRelationship:b});r.push(P)}})}else{ea(b).forEach(V=>{const M=a.filter(G=>G.id!==V.id);M.length&&M.forEach(G=>{if(G.id!==V.id){const k=new qi({id:s.id+"--"+G.id+"--"+V.id+"--"+Ae.ImplementsIncompatibleEntities,message:`Entity "${s.name}" with id "${s.id}" is implementing built-in entity "${G.name}" with id "${G.id}" but also implements entity "${V.name}" with id "${V.id}" which is incompatible`,severity:ve.Error,code:Ae.ImplementsIncompatibleEntities,entity:s,firstRelationship:G,secondRelationship:V});r.push(k)}})});const _=Jd(p.ownDeclaredProperties,b.ownDeclaredProperties,Ce.PropertyOverwritesOtherImplementedEntitysPropertyWithSameImplementation,Ce.PropertyOverwritesOtherImplementedEntitysPropertyWithSameName);r.push(..._.errors);const P=Jd(p.abstractMethods,[...b.abstractMethods,...b.methods],Ce.MethodOverwritesOtherImplementedEntitysMethodWithSameImplementation,Ce.MethodOverwritesOtherImplementedEntitysMethodWithSameName);r.push(...P.errors)}});const e=Jd(s.ownDeclaredProperties,p.ownDeclaredProperties,Ce.PropertyOverwritesOtherSiblingWithSameImplementation,Ce.PropertyOverwritesOtherSiblingWithSameName);r.push(...e.errors);const f=Jd(p.methods,p.abstractMethods,Ce.MethodOverwritesOtherSiblingWithSameImplementation,Ce.MethodOverwritesOtherSiblingWithSameName);return r.push(...f.errors),C(s.extends?ea(s.extends):[]).forEach(b=>{if(!a.find(A=>A.id===b.id)){const A=new qi({id:s.id+"--"+p.id+"--"+b.id+"--"+Ae.ImplementsIncompatibleEntities,message:`Entity "${s.name}" with id "${s.id}" is extending built-in entity "${p.name}" with id "${p.id}" but also extends entity "${b.name}" with id "${b.id}" which is incompatible`,severity:ve.Error,code:Ae.ImplementsIncompatibleEntities,entity:s,firstRelationship:p,secondRelationship:b});r.push(A)}}),r}function LVi(s){const p=[];if(s.implements.forEach(i=>{if(!i.static){const r=new qi({id:s.id+"--"+i.id+"--"+Ae.StaticImplementingNonStaticEntity,message:`Entity "${s.name}" with id "${s.id}" is static but implements entity "${i.name}" with id "${i.id}" which is non-static`,severity:ve.Error,code:Ae.StaticImplementingNonStaticEntity,entity:s,firstRelationship:i});p.push(r)}}),s.extends&&!s.extends.static){const i=new qi({id:s.id+"--"+s.extends.id+"--"+Ae.StaticExtendingNonStaticEntity,message:`Entity "${s.name}" with id "${s.id}" is static but extends entity "${s.extends.name}" with id "${s.extends.id}" which is non-static`,severity:ve.Error,code:Ae.StaticExtendingNonStaticEntity,entity:s,firstRelationship:s.extends});p.push(i)}return p}function BVi(s){const p=[];if(s.implements.length){const i=new qi({id:s.id+"--"+Ae.AbstractEntityImplements,message:`Entity "${s.name}" with id "${s.id}" cannot be marked as abstract because it implements other entities`,severity:ve.Error,code:Ae.AbstractEntityImplements,entity:s});p.push(i)}if(s.extends&&!s.extends.abstract){const i=new qi({id:s.id+"--"+s.extends.id+"--"+Ae.AbstractExtendingNonAbstractEntity,message:`Entity "${s.name}" with id "${s.id}" is abstract but extends entity "${s.extends.name}" with id "${s.extends.id}" which is non-abstract`,severity:ve.Error,code:Ae.AbstractExtendingNonAbstractEntity,entity:s,firstRelationship:s.extends});p.push(i)}return p}function MVi(s){const p=[];if(s.extends&&s.extends.static){const i=new qi({id:s.id+"--"+s.extends.id+"--"+Ae.NonStaticExtendingStaticEntity,message:`Entity "${s.name}" with id "${s.id}" is non-static but extends entity "${s.extends.name}" with id "${s.extends.id}" which is static`,severity:ve.Error,code:Ae.NonStaticExtendingStaticEntity,entity:s,firstRelationship:s.extends});p.push(i)}return p}function GVi(s){const p=[];if(s.extends&&s.extends.abstract){const i=new qi({id:s.id+"--"+s.extends.id+"--"+Ae.NonAbstractExtendingAbstractEntity,message:`Entity "${s.name}" with id "${s.id}" is non-abstract but extends entity "${s.extends.name}" with id "${s.extends.id}" which is abstract`,severity:ve.Error,code:Ae.NonAbstractExtendingAbstractEntity,entity:s,firstRelationship:s.extends});p.push(i)}return p}function IL(s,p){const r=[...s.project.getDefinitionEntities()].filter(a=>a.id!==s.id);return JE(s,[ir,hd],r,p)}const kVi=Object.freeze(Object.defineProperty({__proto__:null,getBaseMethodsNotImplemented:Qje,getBasePropertiesNotImplemented:Jje,validate:Yje,validateAsync:zje,validateCanBecomeAbstract:BVi,validateCanBecomeNonAbstract:GVi,validateCanBecomeNonStatic:MVi,validateCanBecomeStatic:LVi,validateCanExtendEntity:$Vi,validateCanImplementEntity:xVi,validateDefinitionEntityName:IL},Symbol.toStringTag,{value:"Module"}));function jVi(s,p){const i=[],r=[];if(s.parent)if(s.id===s.parent)r.push(new we({id:`${s.id}--${s.parent}--${Te.SelfReference}`,code:Te.SelfReference,severity:ve.Error,message:`Entity of type "${s.type}" with id "${s.id}", has a reference to itself at 'parent'. This is not allowed. Change the reference string or the 'entityId' property of the reference object.`}));else{const a=p.get(s.parent);a?[d.Project,d.DataType].includes(a.type)||r.push(new we({id:`${s.id}--${s.parent}--${Te.InvalidParentReference}`,code:Te.InvalidParentReference,severity:ve.Error,message:`Entity of type "${s.type}" with id "${s.id}", has a parent reference which is of type ${a.type}, and therefore that isn't pointing to the following valid types for this reference: 'project' or 'data-type'.`})):r.push(new we({id:`${s.id}--${s.parent}--${Te.ReferencedEntityNotFound}`,code:Te.ReferencedEntityNotFound,severity:ve.Error,message:`Entity of type "${s.type}" with id "${s.id}", is referencing an entity with id "${s.parent}" at 'parent' that isn't yet found in the project. Perhaps it should be created first. Or perhaps the ID is incorrect.`}))}return s.implements&&Array.isArray(s.implements)?s.implements.forEach(a=>{if(s.id===a){r.push(new we({id:`${s.id}--${a}--${Te.SelfReference}`,code:Te.SelfReference,severity:ve.Error,message:`Entity of type "${s.type}" with id "${s.id}", has a reference to itself at one of the 'implements' references. This is not allowed. Change the reference string or the 'entityId' property of the reference object.`}));return}const c=p.get(a);c?[d.DefinitionEntity,d.BuiltInBaseEntity].includes(c.type)?c.abstract||r.push(new we({id:`${s.id}--${a}--${Te.InvalidImplementsReference}`,code:Te.InvalidImplementsReference,severity:ve.Error,message:`Entity of type "${s.type}" with id "${s.id}", has an 'implements' reference that isn't pointing to an abstract entity.`})):r.push(new we({id:`${s.id}--${a}--${Te.InvalidImplementsReference}`,code:Te.InvalidImplementsReference,severity:ve.Error,message:`Entity of type "${s.type}" with id "${s.id}", has an 'implements' reference which is of type ${c.type}, and therefore that isn't pointing to the following valid types for this reference: 'definition-entity' or 'built-in-base-entity'.`})):r.push(new we({id:`${s.id}--${a}--${Te.ReferencedEntityNotFound}`,code:Te.ReferencedEntityNotFound,severity:ve.Error,message:`Entity of type "${s.type}" with id "${s.id}", is referencing an entity with id "${a}" at 'implements' that isn't yet found in the project. Perhaps it should be created first. Or perhaps the ID is incorrect.`}))}):r.push(new we({id:`${s.id}--${Ce.InvalidObjectStructure}`,code:Ce.InvalidObjectStructure,severity:ve.Error,message:`Entity of type "${s.type}" with id "${s.id}", has an 'implements' property that isn't an array.`})),s.extends&&Array.isArray(s.extends)&&s.extends.forEach(a=>{const c=p.get(a);c?[d.DefinitionEntity,d.BuiltInBaseEntity].includes(c.type)?c.abstract&&r.push(new we({id:`${s.id}--${a}--${Te.InvalidExtendsReference}`,code:Te.InvalidExtendsReference,severity:ve.Error,message:`Entity of type "${s.type}" with id "${s.id}", has an 'extends' reference that isn't pointing to a non-abstract entity. Did you want to use the property 'implements', which holds a list of references to absract entities, instead?`})):r.push(new we({id:`${s.id}--${a}--${Te.InvalidExtendsReference}`,code:Te.InvalidExtendsReference,severity:ve.Error,message:`Entity of type "${s.type}" with id "${s.id}", has an 'extends' reference which is of type ${c.type}, and therefore that isn't pointing to the following valid types for this reference: 'definition-entity' or 'built-in-base-entity'.`})):r.push(new we({id:`${s.id}--${a}--${Te.ReferencedEntityNotFound}`,code:Te.ReferencedEntityNotFound,severity:ve.Error,message:`Entity of type "${s.type}" with id "${s.id}", is referencing an entity with id "${a}" at 'extends' that isn't yet found in the project. Perhaps it should be created first. Or perhaps the ID is incorrect.`}))}),{errors:r,explanations:i}}var zg=(s=>(s.Extends="extends",s.Implements="implements",s))(zg||{});const Ni=class Ni extends un{constructor(i,r){super(i);R(this,"initialData");R(this,"id");R(this,"name");R(this,"codeName",null);R(this,"description",null);R(this,"x");R(this,"y");R(this,"static");R(this,"abstract");R(this,"type",d.DefinitionEntity);R(this,"additionalProperties",!1);R(this,"properties",[]);R(this,"allPropertiesImplement",null);R(this,"additionalPropertiesDataType",null);R(this,"methods",[]);R(this,"abstractMethods",[]);R(this,"extends",null);R(this,"implements",[]);R(this,"project");R(this,"errors",[]);R(this,"parent");R(this,"detachedDependents",{});R(this,"knownVersions",null);R(this,"activeVersion",!1);R(this,"initialized",!1);R(this,"startedInitialization",!1);R(this,"suggestedProperties",[]);R(this,"suggestedMethods",[]);this.initialData=i,this.project=r,this.id=i.id,this.name=i.name,this.description=i.description,this.x=i.x,this.y=i.y,this.codeName=i.codeName,this.static=i.static,this.abstract=i.abstract}static new(i=null){return{id:x.UUID.uuid(),version:x.UUID.uuid(),createdAt:(i==null?void 0:i.timestamp)||B().toISOString(),author:(i==null?void 0:i.author)||x.sessionAuthor,previousVersion:null,deleted:!1,deletable:!0,editable:!0,type:d.DefinitionEntity,additionalProperties:!1,additionalPropertiesDataType:null,allPropertiesImplement:null,name:"",codeName:null,description:"",static:!1,abstract:!1,properties:[],methods:[],abstractMethods:[],extends:null,implements:[],x:0,y:0,parent:null}}static fromGenerationTarget(i,r,a){const c=a===void 0?r.addChangeSet(new S(r,x.sessionAuthor,B().toISOString(),r,!0,w.CreateFromGenerationTarget)):a;let e=r;if(i.parent){const b=ie(i.parent);e=r.get(b)}const f=[];i.implements&&i.implements.forEach(b=>{f.push(r.get(b)||r.getBuiltIn(b))});let h=null;i.extends&&(h=r.get(i.extends)||r.getBuiltIn(i.extends));const m={id:i.id,version:x.UUID.uuid(),createdAt:(c==null?void 0:c.timestamp)||B().toISOString(),author:(c==null?void 0:c.author)||x.sessionAuthor,previousVersion:null,deleted:!1,name:i.name,deletable:!0,editable:!0,type:d.DefinitionEntity,codeName:i.codeName||null,description:i.description||null,static:i.static??!1,abstract:i.abstract??!1,additionalProperties:i.additionalProperties??!1,allPropertiesImplement:null,additionalPropertiesDataType:null,properties:[],methods:[],abstractMethods:[],extends:h,implements:f,x:0,y:0,parent:e.toReference()},E=Re(m,r);return E.hydrateAncestors(),E.setParent(e,c),E.addSelfToProject(c),c==null||c.add(E,W.Added),E.initChildren(c),c||E.captureVersion(),E}static validateGenerationTarget(i,r){var b;let a=JSON.parse(JSON.stringify(i));const c=[],e=[],f=jVi(a,r),h=Nx(a,r),m=Xr(a);e.push(...f.errors,...h,...m.errors),c.push(...f.explanations,...m.explanations);const E=a.parent?r.get(a.parent):null;if(E&&E.type===d.DataType){const A=E;A.entity&&A.entity.type===d.DefinitionEntity&&((b=A.entity.parent)==null?void 0:b.id)!==A.id&&e.push(new we({id:`${i.id}--${Te.NewEntityWouldOverriteExisting}`,code:Te.NewEntityWouldOverriteExisting,severity:ve.Error,message:`The entity of type '${i.type}' with id '${i.id}' can't be added to the 'parent' entity with id '${A.id}' because it already has an 'entity' child. Data type entities can only have one 'entity' as children.
602
+ This is likely an incorrect strategy, either the '${this.type}' entity doesn't need to be updated or it should be deleted and a new one created in the desired parent.`})),(i.readsValue||i.writesValue)&&(r.push(new we({id:`${this.id}--${Ce.InvalidObjectStructure}`,code:Ce.InvalidObjectStructure,severity:ve.Error,message:`Entity of type '${this.type}' with id '${this.id}' is not a value reading or writing entity.`})),a.push({id:Qi.EntitiesWithValues,message:Nh})),{errors:r,explanations:a,modifiedData:i}}onProjectInitialized(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,new Date().toISOString(),this,!0,"on-property-received-project-initialized"))){return r?(mF(this,r),r==null||r.attemptAutoclose("on-property-received-project-initialized",this.id),this):this}subscribeDependents(i){return i.forEach(r=>{this.detachedDependents[r.entity.id]||(this.detachedDependents[r.entity.id]=r)}),this}unsubscribeDependents(i){return i.forEach(r=>{this.detachedDependents[r.entity.id]&&delete this.detachedDependents[r.entity.id]}),this}syncDependents(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"sync-dependents"))){const r=[],a=[],c=[],e=[];return Object.values(this.detachedDependents).forEach(f=>{const h=f.entity.afterAllChildrenInitialized(i);r.push(...h.updated),a.push(...h.added),c.push(...h.removed),e.push(...h.affected)}),i==null||i.attemptAutoclose("sync-dependents",this.id),{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}onDetachedDependencyRemoved(i,r,a){const c=[],e=[],f=[],h=[];if(r==="property-implements-field"&&(this.removeImplementation(i,a),c.push(this)),r==="property-extends-field"){const{updated:m,added:E,removed:b,affected:A}=this.remove({ignoreUpstream:!1},a);c.push(...m),e.push(...E),f.push(...b),h.push(...A)}return{updated:C(c),added:C(e),removed:C(f),affected:C(h),self:this}}onDetachedDependencyRestored(i,r,a){const c=[],e=[],f=[],h=[];if(r==="property-implements-field"&&(this.addImplementation(i,a),c.push(this)),r==="property-extends-field"){const{updated:m,added:E,removed:b,affected:A}=this.restore({},a);c.push(...m),e.push(...E),f.push(...b),h.push(...A)}return{updated:C(c),added:C(e),removed:C(f),affected:C(h),self:this}}unsubscribeFromDependencies(){var i,r,a,c,e,f,h;return this.implements.forEach(m=>{this.project.getBuiltIn(m.id)||m.unsubscribeDependents([{entity:this,field:"property-implements-field"}])}),(r=(i=this.extends)==null?void 0:i.unsubscribeDependents)==null||r.call(i,[{entity:this,field:"property-extends-field"}]),(e=(c=(a=this.dataType)==null?void 0:a.entity)==null?void 0:c.unsubscribeDependents)==null||e.call(c,[{entity:this,field:"property-data-type-entity-field"}]),(h=(f=this.dataType)==null?void 0:f.unsubscribeDependents)==null||h.call(f,[{entity:this,field:"property-data-type-field"}]),this.project.off(pi.PROJECT_INITIALIZED,this.onProjectInitialized),this}subscribeToDependencies(){var i,r,a,c,e,f,h;return this.implements.forEach(m=>{this.project.getBuiltIn(m.id)||m.subscribeDependents([{entity:this,field:"property-implements-field"}])}),(r=(i=this.extends)==null?void 0:i.subscribeDependents)==null||r.call(i,[{entity:this,field:"property-extends-field"}]),(e=(c=(a=this.dataType)==null?void 0:a.entity)==null?void 0:c.subscribeDependents)==null||e.call(c,[{entity:this,field:"property-data-type-entity-field"}]),(h=(f=this.dataType)==null?void 0:f.subscribeDependents)==null||h.call(f,[{entity:this,field:"property-data-type-field"}]),NVi(this)&&this.project.on(pi.PROJECT_INITIALIZED,this.onProjectInitialized),this}increaseVersion(i){var r;if(this.project.diggestedBuiltInBaseEntitiesIds.has(this.id))return this;if(i&&!B(i).isValid())throw new Error(`The shared timestamp '${i}' is not a valid ISO 8601 date string.`);if(i&&B(i).isSame(B(this.createdAt)))return this;if(!((r=this.knownVersions)!=null&&r.has(this.version))&&this.project.initialized)throw new Error(`The current ${this.type} ${this.id} version '${this.version}' is not captured in the 'knownVersions' map. Capture the current version before increasing it to avoid losing data.`);if(!this.activeVersion)throw new Error(`Only active versions can be increased. Entity with id '${this.id}' and version '${this.version}' is not active.`);return this.previousVersion=this.version,this.version=x.UUID.uuid(),this.createdAt=B(i).toISOString()||B().toISOString(),this}captureVersion(){var r;const i=((r=this.knownVersions)==null?void 0:r.get(this.version))||new mi(this,this.project);if(!this.activeVersion)throw new Error(`Only active versions can be captured. Entity of type ${this.type} with id '${this.id}' and version '${this.version}' is not active.`);if(this.version!==i.version)throw new Error(`Captured ${this.type} with id '${this.id}', version '${i.version}' does not match current entity version '${this.version}'.`);return this.knownVersions=this.knownVersions?this.knownVersions.set(this.version,i):new Map().set(this.version,i),this.apply(i),this}snapshot(){const i=new mi(this,this.project);return this.apply(i)}apply(i){const r=this.toMeta();return i.metaSync(r,null),i.defaultValue=this.defaultValue,i.dataType=this.dataType,i.implements=[...this.implements],i.extends=this.extends,i.parent=this.parent,i}recursiveCaptureUpstreamVersions(i){const r=[],a=[],c=[],e=[];if(this.parent&&this.parent.type!==d.PrimitiveEntity&&this.parent.type!==d.BuiltInBaseEntity){this.parent.increaseVersion(i);const f=this.parent.recursiveCaptureUpstreamVersions(i);r.push(this.parent,...f.updated),a.push(...f.added),c.push(...f.removed)}return{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}async restoreVersion(i,r){var m;const a=[],c=[],e=[],f=[];if(this.version===i&&(r!=null&&r.skipIfSameVersion))return{updated:C(a),added:C(c),removed:C(e),affected:C(f),self:this};if(!this.knownVersions){const E=new Map;for(const[b,A]of this.knownVersions||new Map){if(E.set(b,A),A.activeVersion=!1,A.knownVersions)for(const[_,P]of A.knownVersions)E.set(_,P);A.knownVersions=null}}let h=(m=this.knownVersions)==null?void 0:m.get(i);if(!h){const E=await this.APILoadVersion({},i);if(!E)throw new Error(`Version with id '${i}' for entity with id '${this.id}' not found.`);h=new mi(E,this.project)}return this.metaSync(h.toShallowJSON(),null),this.previousVersion=h.previousVersion,this.version=h.version,this.createdAt=h.createdAt,this.author=h.author,this.deleted=h.deleted,this.defaultValue=h.defaultValue,this.dataType=h.dataType,this.implements=[...h.implements],this.parent=h.parent,{updated:C(a),added:C(c),removed:C(e),affected:C(f),self:this}}updateWithShallowTransfer(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.UpdateWithShallowTransfer))){if(!this.checkCanEdit(this,r))return Y.Logger.warn(`[updateWithShallowTransfer] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.UpdateWithShallowTransfer,this.id),this;if(this.metaSync(i,r),this.version=i.version,this.createdAt=i.createdAt,this.author=i.author,this.deleted=i.deleted,this.previousVersion=i.previousVersion,this.unsubscribeFromDependencies(),i.parent){const c=ie(i.parent),e=this.project.get(c),f=this.parent;if(f&&f.id!==(e==null?void 0:e.id)&&this.removeFromParent(r),e)this.setParent(e,r),this.addSelfToProject(r);else throw r==null||r.attemptAutoclose(w.UpdateWithShallowTransfer,this.id),new Error(`${this.type} with id '${this.id}' has a 'parent' reference '${c}' that isn't found in the project`)}else throw r==null||r.attemptAutoclose(w.UpdateWithShallowTransfer,this.id),new Error(`${this.type} with id '${this.id}' must have a 'parent'`);if(i.implements.forEach(c=>{const e=ie(c),f=this.project.get(e);if(f)this.addImplementation(f,r);else throw new Error(`${fr(this.type)} with id '${this.id}' has a 'implements' reference "${e}" which is missing in the project`)}),this.implements.filter(c=>{const e=ie(c);return!i.implements.find(f=>ie(f)===e)}).forEach(c=>{this.removeImplementation(c,r)}),i.extends){const c=ie(i.extends),e=this.project.get(c);if(e)this.setExtends(e,r);else if(c)throw new Error(`${fr(this.type)} with id '${this.id}' has a 'extends' reference "${c}" which is missing in the project`)}else this.setExtends(null,r);if(i.dataType){const c=ie(i.dataType),e=this.project.get(c);e&&this.setDataType(e,r)}else this.setDataType(null,r);if(i.defaultValue){const c=ie(i.defaultValue),e=this.project.get(c);e&&this.setDefaultValue(e,r)}else this.setDefaultValue(null,r);return this.captureVersion(),this.subscribeToDependencies(),r==null||r.attemptAutoclose(w.UpdateWithShallowTransfer,this.id),this}updateWithGenerationTarget(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.UpdateWithGenerationTarget))){var a;if(!this.checkCanEdit(this,r))return Y.Logger.warn(`[updateWithGenerationTarget] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.UpdateWithGenerationTarget,this.id),this;if(this.metaSync(i,r),i.parent){const c=ie(i.parent),e=this.project.get(c),f=this.parent;if(f&&f.id!==(e==null?void 0:e.id)&&this.removeFromParent(r),e)this.setParent(e,r),this.addSelfToProject(r);else throw r==null||r.attemptAutoclose(w.UpdateWithGenerationTarget,this.id),new Error(`${this.type} with id '${this.id}' has a 'parent' reference '${c}' that isn't found in the project`)}if((a=i.implements)==null||a.forEach(c=>{const e=ie(c),f=this.project.get(e);if(f)this.addImplementation(f,r);else throw new Error(`${fr(this.type)} with id '${this.id}' has a 'implements' reference "${e}" which is missing in the project`)}),i.implements&&this.implements.filter(e=>{const f=ie(e);return!(i.implements||[]).find(h=>ie(h)===f)}).forEach(e=>{this.removeImplementation(e,r)}),i.extends){const c=ie(i.extends),e=this.project.get(c);if(e)this.setExtends(e,r);else if(c)throw new Error(`${fr(this.type)} with id '${this.id}' has a 'extends' reference "${c}" which is missing in the project`)}else i.extends===null&&this.setExtends(null,r);return this.captureVersion(),this.subscribeToDependencies(),r==null||r.attemptAutoclose(w.UpdateWithGenerationTarget,this.id),this}hydrateAncestors(){const i=[],r=[],a=[],c=[];if(this.initialData.parent){const e=ie(this.initialData.parent),f=this.project.get(e);if(f)this.setParent(f,null);else throw new Error(`${this.type} with id '${this.id}' has a 'parent' reference '${e}' that isn't found in the project`)}else throw new Error(`${this.type} with id '${this.id}' must have a 'parent'`);if((this.initialData.implements||[]).forEach(e=>{const f=ie(e),h=this.project.get(f);if(h)this.addImplementation(h,null),i.push(h);else throw new Error(`${fr(this.type)} with id '${this.id}' has a 'implements' reference "${f}" which is missing in the project`)}),this.initialData.extends){const e=ie(this.initialData.extends),f=this.project.get(e);if(f)this.setExtends(f,null),i.push(f);else if(e)throw new Error(`${fr(this.type)} with id '${this.id}' has a 'extends' reference "${e}" which is missing in the project`)}return{updated:C(i),added:C(r),removed:C(a),affected:C(c),self:this}}afterAllChildrenInitialized(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.AfterAllChildrenInitialized))){var q;if(!this.checkCanEdit(this,i))return Y.Logger.warn(`[afterAllChildrenInitialized] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),i==null||i.attemptAutoclose(w.AfterAllChildrenInitialized,this.id),{updated:[],added:[],removed:[],affected:[],self:this};const r=[],a=[],c=[],e=[];if(this.initialized=!0,this.parent.type===d.DefinitionEntity&&this.parentRelationType!==Xd.AllPropertiesImplementationTarget){let ne=this.index||0;const J=this.parent.properties.filter(te=>!te.deleted&&te.id!==this.id);J.length&&(ne>J.length+1?ne=J.length:ne<0&&(ne=0)),J.find(te=>(te.index||0)===ne&&!te.deleted)&&J.filter(te=>(te.index||0)>=ne&&!te.deleted).forEach(te=>{te.metaSync({index:(te.index||0)+1},i),i==null||i.add(te,W.Updated),r.push(te)}),this.metaSync({index:ne},i)}if(this.defaultValue&&!this.project.diggestedBuiltInBaseEntitiesIds.has(this.id)&&this.project.diggestedBuiltInBaseEntitiesIds.has(this.defaultValue.id)){const ne=this.defaultValue.clone(i,this);this.setDefaultValue(ne,i)}const{updated:f,added:h,removed:m,affected:E}=this.syncWithImplementation(i);r.push(...f),a.push(...h),c.push(...m),e.push(...E);const{updated:b,added:A,removed:_,affected:P}=mF(this,i);r.push(...b),a.push(...A),c.push(..._),e.push(...P);const{updated:V,added:M,removed:G,affected:k}=this.syncWithExtension(i);return r.push(...V),a.push(...M),c.push(...G),e.push(...k),!this.project.diggestedBuiltInBaseEntitiesIds.has(this.id)&&this.project.initialized&&(this.extends&&((q=this.extends)==null?void 0:q.interactive)===!0&&(this.interactive||(this.metaSync({interactive:!0},i),r.push(this))),this.implements.every(ne=>ne.interactive===!0)&&(this.interactive||(this.metaSync({interactive:!0},i),r.push(this)))),this.parent.static&&!this.static&&this.metaSync({static:!0},i),i==null||i.attemptAutoclose(w.AfterAllChildrenInitialized,this.id),{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}addSelfToProject(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"add-self-to-project"))){const r=[this],a=[],c=[],e=[];return this.parentRelationType===Xd.AllPropertiesImplementationTarget?this.parent.setAllPropertiesImplement(this,i):this.parent.addProperty(this,i),r.push(this.parent),this.subscribe(),this.subscribeToDependencies(),i==null||i.attemptAutoclose("add-self-to-project",this.id),{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}setParent(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.SetParent))){var a;return this.checkCanEditWithCounterpartAndSideEffects(this,i,w.SetParent,r)?(((a=this.parent)==null?void 0:a.id)!==(i==null?void 0:i.id)&&(this.parent=i,r&&(r==null||r.add(this,W.Updated))),r==null||r.attemptAutoclose(w.SetParent,this.id),this):this}addImplementation(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.AddImplementation))){return this.checkCanEdit(this,r)?(this.implements.includes(i)||(this.implements.push(i),r==null||r.add(this,W.Updated)),r==null||r.attemptAutoclose(w.AddImplementation,this.id),this):(Y.Logger.warn(`[addImplementation] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.AddImplementation,this.id),this)}removeImplementation(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.RemoveImplementation))){return this.checkCanEdit(this,r)?(this.implements.includes(i)&&(this.implements=this.implements.filter(a=>a.id!==i.id),r==null||r.add(this,W.Updated)),r==null||r.attemptAutoclose(w.RemoveImplementation,this.id),this):(Y.Logger.warn(`[removeImplementation] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.RemoveImplementation,this.id),this)}setExtends(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.SetExtends))){var a;return this.checkCanEdit(this,r)?(((a=this.extends)==null?void 0:a.id)!==(i==null?void 0:i.id)&&(this.extends=i,this.subscribeToDependencies(),r&&(r==null||r.add(this,W.Updated))),r==null||r.attemptAutoclose(w.SetExtends,this.id),this):(Y.Logger.warn(`[setExtends] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.SetExtends,this.id),this)}initChildren(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"init-children"))){if(this.initialized||this.startedInitialization)return this;if(this.startedInitialization=!0,this.initialData.defaultValue&&(this.defaultValue=Re(this.initialData.defaultValue,this.project),this.defaultValue.setParent(this,null),this.defaultValue.initChildren(i)),this.initialData.dataType){const r=Re(this.initialData.dataType,this.project);r.setParent(this,null),r.initChildren(i),this.dataType=r}if(this.implements=this.initialData.implements.map(r=>Re(r,this.project)),this.initialData.extends){const r=Re(this.initialData.extends,this.project);this.setExtends(r,null)}return this.subscribeToDependencies(),this.afterAllChildrenInitialized(i),i==null||i.attemptAutoclose("init-children",this.id),this}subscribe(){var i;return this.activeVersion=!0,(i=this.knownVersions)==null||i.forEach(r=>{r.version!==this.version&&(r.activeVersion=!1)}),this.project.subscribeInstance(this),this}unsubscribe(){return this.project.unsubscribeInstance(this),this}metaSync(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"meta-sync"))){const a=tn(this,i,r),c=en(this,a),e=this.toMeta();return this.name=a.name!==void 0?a.name:e.name,this.codeName=a.codeName!==void 0?a.codeName:e.codeName,this.description=a.description!==void 0?a.description:e.description,this.abstract=a.abstract!==void 0?a.abstract:e.abstract,this.private=a.private!==void 0?a.private:e.private,this.index=a.index||(a.index!==0?e.index:0),this.static=a.static!==void 0?a.static:e.static,this.hidden=a.hidden!==void 0?a.hidden:e.hidden,this.constant=a.constant!==void 0?a.constant:e.constant,this.interactive=a.interactive!==void 0?a.interactive:e.interactive,this.required=a.required!==void 0?a.required:e.required,this.unique=a.unique!==void 0?a.unique:e.unique,super.baseMetaSync(a,this,r),a.deleted===!0&&!e.deleted?r==null||r.add(this,W.Removed):a.deleted===!1&&e.deleted?r==null||r.add(this,W.Added):c&&(r==null||r.add(this,W.Updated)),r==null||r.attemptAutoclose("meta-sync",this.id),this}async APILoad(i=Ke,...r){return await mi.repository.APILoad(this.id,...r),this}async APICreate(i=Ke,...r){return await mi.repository.APICreate(this.toShallowJSON(),...r),this}async APIUpdate(i=Ke,...r){return await mi.repository.APIUpdate(this.toShallowJSON(),...r),this}async APIDelete(i=Ke,...r){return await mi.repository.APIDelete(this.toShallowJSON(),...r),this}async APIClone(i=Ke,...r){return await mi.repository.APIClone(this.id,...r),this}async APILoadVersion(i=Ke,r,...a){return await mi.repository.APILoadVersion(this.id,r,...a)}removeFromParent(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.RemoveFromParent))){if(!this.checkCanEdit(this,i))return Y.Logger.warn(`[removeFromParent] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),i==null||i.attemptAutoclose(w.RemoveFromParent,this.id),{added:[],updated:[],removed:[],affected:[],self:this};const r=[],a=[],c=[],e=[];return this.parent.type===d.DefinitionEntity&&(this.parentRelationType===Xd.AllPropertiesImplementationTarget?this.parent.removeAllPropertiesImplement(i):this.parent.removeProperty(this,i),e.push(this.parent)),i==null||i.attemptAutoclose(w.RemoveFromParent,this.id),{added:C(c),updated:C(r),removed:C(a),affected:C(e),self:this}}remove({ignoreUpstream:i}={ignoreUpstream:!1},r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.RemoveEntity))){var h;if(!this.checkCanDelete(this,r))return Y.Logger.warn(`[remove] User is not allowed to delete or edit this ${this.type} entity with id: ${this.id}`),r==null||r.event({id:`${w.RemoveEntity}-${this.id}--${Me.ActionOwnerEntityNonDeletable}`,action:w.RemoveEntity,owner:this,errorReason:Me.ActionOwnerEntityNonDeletable,rootAction:((h=r==null?void 0:r.self)==null?void 0:h.id)===this.id&&(r==null?void 0:r.actionName)===w.RemoveEntity}),r==null||r.attemptAutoclose(w.RemoveEntity,this.id),{added:[],updated:[],removed:[],affected:[],self:this};const a=[],c=[],e=[],f=[];if(r!=null&&r.hasRemoved(this.id))return r==null||r.attemptAutoclose(w.RemoveEntity,this.id),{added:[],updated:[],removed:[],affected:[],self:this};if(c.push(this),this.unsubscribe(),this.unsubscribeFromDependencies(),this.project.subscribeDeletedInstance(this),this.metaSync({deleted:!0},r),Object.values(this.detachedDependents).forEach(m=>{const{updated:E,removed:b,added:A}=m.entity.onDetachedDependencyRemoved(this,m.field,r);a.push(...E),c.push(...b),e.push(...A)}),this.defaultValue){const{updated:m,removed:E}=this.defaultValue.remove({ignoreUpstream:!0},r);a.push(...m),c.push(...E)}if(this.dataType){const{updated:m,removed:E}=this.dataType.remove({ignoreUpstream:!0},r);a.push(...m),c.push(...E)}if(!i){const m=this.removeFromParent(r);e.push(...m.added),a.push(...m.updated),c.push(...m.removed),f.push(...m.affected)}return r==null||r.attemptAutoclose(w.RemoveEntity,this.id),{added:C(e),updated:C(a),removed:C(c),affected:C(f),self:this}}restore({}={},i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.RestoreEntity))){if(!this.checkCanEdit(this,i))return Y.Logger.warn(`[restore] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),i==null||i.attemptAutoclose(w.RestoreEntity,this.id),{added:[],updated:[],removed:[],affected:[],self:this};const r=[],a=[],c=[],e=[];if(i!=null&&i.hasAdded(this.id))return i==null||i.attemptAutoclose(w.RestoreEntity,this.id),{added:[],updated:[],removed:[],affected:[],self:this};if(this.subscribe(),this.project.unsubscribeDeletedInstance(this),this.metaSync({deleted:!1},i),Object.values(this.detachedDependents).forEach(f=>{const{updated:h,removed:m,added:E}=f.entity.onDetachedDependencyRestored(this,f.field,i);a.push(...h),c.push(...m),r.push(...E)}),this.defaultValue){const{updated:f}=this.defaultValue.restore({},i);a.push(...f)}if(this.dataType){const{updated:f}=this.dataType.restore({},i);a.push(...f)}return this.parent.type===d.DefinitionEntity&&(this.parentRelationType===Xd.AllPropertiesImplementationTarget?this.parent.removeAllPropertiesImplement(i):this.parent.addProperty(this,i),e.push(this.parent)),i==null||i.attemptAutoclose(w.RestoreEntity,this.id),{added:C(r),updated:C(a),removed:C(c),affected:C(e),self:this}}toFlat(i=new Set){var a,c;return i.has(this.id)?[]:(i.add(this.id),[this,...((a=this.defaultValue)==null?void 0:a.toFlat(i))||[],...((c=this.dataType)==null?void 0:c.toFlat(i))||[],...this.parent.toFlat(i)])}toFlatIds(i=new Set){var a,c;if(i.has(this.id))return[];if(i.add(this.id),!this.parent)throw new Error(`Property with id '${this.id}' has no parent and cannot be flattened`);return[this.id,...((a=this.defaultValue)==null?void 0:a.toFlatIds(i))||[],...((c=this.dataType)==null?void 0:c.toFlatIds(i))||[],...this.parent.toFlatIds(i)]}toMeta(){return{id:this.id,version:this.version,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,codeName:this.codeName,description:this.description,index:this.index,hidden:this.hidden,private:this.private,abstract:this.abstract,required:this.required,unique:this.unique,constant:this.constant,interactive:this.interactive,static:this.static,type:this.type,editable:this.editable,deletable:this.deletable,name:this.name}}toJSON(i=new Set){var r,a,c;return i.has(this.id)?this.toReference():(i.add(this.id),{id:this.id,version:this.version,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,type:this.type,editable:this.editable,deletable:this.deletable,name:this.name,codeName:this.codeName,description:this.description,index:this.index,private:this.private,unique:this.unique,required:this.required,static:this.static,constant:this.constant,interactive:this.interactive,abstract:this.abstract,hidden:this.hidden,parentRelationType:this.parentRelationType,defaultValue:((r=this.defaultValue)==null?void 0:r.toJSON(i))||null,dataType:((a=this.dataType)==null?void 0:a.toJSON(i))||null,implements:this.implements.map(e=>e.toJSON(i)),extends:((c=this.extends)==null?void 0:c.toJSON(i))||null,parent:this.parent.toReference()})}toJSONClone(i=at){var a,c,e,f,h,m,E;let r;return(a=i.seenEntityMaps)!=null&&a.has(this.id)?r=i.seenEntityMaps.get(this.id):(r=i.newId||dn(this,this.project,i.uuidStrategy),i.seenEntityMaps&&i.seenEntityMaps.set(this.id,r)),(c=i.seenEntities)!=null&&c.has(r)||(e=i.seenEntities)!=null&&e.has(this.id)?this.toReference({seenEntityMaps:i.seenEntityMaps}):((f=i.seenEntities)==null||f.add(r),(h=i.seenEntities)==null||h.add(this.id),{id:r,version:x.UUID.uuid(),createdAt:i.timestamp||B().toISOString(),author:x.sessionAuthor,previousVersion:null,deleted:!1,type:this.type,editable:this.editable,deletable:this.deletable,name:this.name,codeName:this.codeName,description:this.description,index:this.index,unique:this.unique,private:this.private,required:this.required,static:this.static,constant:this.constant,interactive:this.interactive,abstract:this.abstract,hidden:this.hidden,parentRelationType:this.parentRelationType,defaultValue:((m=this.defaultValue)==null?void 0:m.toJSONClone({...i,newId:null}))||null,dataType:((E=this.dataType)==null?void 0:E.toJSONClone({...i,newId:null}))||null,implements:this.implements.map(b=>this.project.getBuiltIn(b.id)?b.toJSON(i.seenEntities):b.toJSONClone({...i,newId:null})),extends:(()=>{var b;return this.extends&&this.project.getBuiltIn(this.extends.id)?this.extends.toJSON():((b=this.extends)==null?void 0:b.toJSONClone({...i,newId:null}))||null})(),parent:this.parent.toReference({seenEntityMaps:i.seenEntityMaps})})}toReference(i=at){var a;let r=this.id;return(a=i.seenEntityMaps)!=null&&a.has(this.id)&&(r=i.seenEntityMaps.get(this.id)),{id:r+"--"+x.UUID.uuid()+"--ref",type:d.GenericReference,entityId:r,version:this.version,entityType:this.type}}toShallowJSON(i=at){var a,c,e,f;let r=this.id;return(a=i.seenEntityMaps)!=null&&a.has(this.id)&&(r=i.seenEntityMaps.get(this.id)),{id:r,version:this.version,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,name:this.name,codeName:this.codeName,description:this.description,type:this.type,editable:this.editable,deletable:this.deletable,index:this.index,private:this.private,required:this.required,unique:this.unique,abstract:this.abstract,static:this.static,constant:this.constant,interactive:this.interactive,hidden:this.hidden,parentRelationType:this.parentRelationType,defaultValue:((c=this.defaultValue)==null?void 0:c.toReference(i))||null,dataType:((e=this.dataType)==null?void 0:e.toReference(i))||null,implements:this.implements.map(h=>h.toReference(i)),extends:((f=this.extends)==null?void 0:f.toReference(i))||null,parent:this.parent.toReference(i)}}toFlatJSON(i=new Set){var a,c;return i.has(this.id)?[]:(i.add(this.id),[this.toShallowJSON(),...((a=this.defaultValue)==null?void 0:a.toFlatJSON(i))||[],...((c=this.dataType)==null?void 0:c.toFlatJSON(i))||[],...this.implements.flatMap(e=>e.toFlatJSON(i)),...this.parent.toFlatJSON(i)])}toGenerationTarget(i=at){var a,c;let r=this.id;return(a=i.seenEntityMaps)!=null&&a.has(this.id)&&(r=i.seenEntityMaps.get(this.id)),{id:r,name:this.name,description:this.description,type:this.type,private:this.private,required:this.required,abstract:this.abstract,static:this.static,parentRelationType:this.parentRelationType,implements:this.implements.map(e=>e.id),extends:(c=this.extends)==null?void 0:c.id,parent:this.parent.id}}toFlatGenerationTarget(i=new Set){var a,c;return i.has(this.id)?[]:(i.add(this.id),[this.toGenerationTarget(),...((a=this.defaultValue)==null?void 0:a.toFlatGenerationTarget(i))||[],...((c=this.dataType)==null?void 0:c.toFlatGenerationTarget(i))||[],...this.implements.flatMap(e=>e.toFlatGenerationTarget(i))])}clearErrors(){var i,r;return this.errors=[],(i=this.defaultValue)==null||i.clearErrors(),(r=this.dataType)==null||r.clearErrors(),this}validate(){return this.errors=Hje(this),{success:!0}}async validateAsync(i={}){const r=Y.YieldTracker.from(i);return this.errors=await Zje(this,{tracker:r}),{success:!0}}getErrors(){var r,a;return[...this.errors,...((r=this.defaultValue)==null?void 0:r.getErrors())||[],...((a=this.dataType)==null?void 0:a.getErrors())||[]]}async getErrorsAsync(i={}){const r=Y.YieldTracker.from(i),a=[...this.errors];if(await r.tick(),this.defaultValue){const c=await this.defaultValue.getErrorsAsync({tracker:r});a.push(...c)}if(this.dataType){const c=await this.dataType.getErrorsAsync({tracker:r});a.push(...c)}return a}getShallowErrors(){return this.errors}implement(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"implement-self-as-property")),a=null){var E,b,A;const c=a||x.UUID.uuid(),e=mi.new(r);e.id=c,e.name=this.name,e.description=this.description,e.index=this.index,e.private=this.private,e.required=this.required,e.static=this.static,e.constant=this.constant,e.unique=this.unique,e.hidden=this.hidden,e.interactive=this.interactive,e.parent=i.toReference(),e.implements=[this.toJSON()];const f=Re(e,this.project);f.hydrateAncestors(),f.addSelfToProject(r),r==null||r.add(f,W.Added),f.initChildren(r);const h=(E=this.defaultValue)==null?void 0:E.clone(r,f,x.UUID.uuid());h&&(h.editable=!0,h.deletable=!0);const m=hF(this);if(m.result){let _=!1;if(!f.defaultValue){const P=Lr.new(r);P.value=m.value,P.name=m.name,P.parent=f.toReference();const V=Re(P,this.project);V.hydrateAncestors(),V.addSelfToProject(r),V.initChildren(r),f.setDefaultValue(V,r),_=!0}(b=this.defaultValue)==null||b.metaSync({value:m.value},r),_&&(r||(A=this.defaultValue)==null||A.captureVersion())}return r||f.captureVersion(),f}clone(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.CloneEntity)),r=null,a=null,c=!0){var b,A;const e=Fr(r,this),f=a||x.UUID.uuid(),h=r||this.parent,m={hidden:!1,id:f,version:x.UUID.uuid(),createdAt:(i==null?void 0:i.timestamp)||B().toISOString(),author:(i==null?void 0:i.author)||"1",previousVersion:null,deleted:!1,type:this.type,editable:!0,deletable:!0,name:this.name,codeName:this.codeName,description:this.description,index:this.index,private:this.private,constant:this.constant,unique:this.unique,interactive:this.interactive,required:this.required,abstract:this.abstract,static:this.static,parentRelationType:this.parentRelationType,defaultValue:null,dataType:null,implements:this.implements.map(_=>_.toJSON()),extends:this.extends,parent:h.toReference()},E=lr(m,e);if(E.hydrateAncestors(),E.setParent(h,i),c&&(E.subscribe(),E.addSelfToProject(i)),E.initChildren(i),i==null||i.add(E,W.Added),this.dataType&&this.project.diggestedBuiltInBaseEntitiesIds.has(this.dataType.id))E.setDataType(e.getBuiltIn(this.dataType.id),i);else{const _=((b=this.dataType)==null?void 0:b.implement(E,i,x.UUID.uuid()))||null;_&&E.setDataType(_,i)}if(this.defaultValue){const _=(A=this.defaultValue)==null?void 0:A.clone(i,E,x.UUID.uuid(),c);E.setDefaultValue(_||null,i)}return this.implements.length&&this.implements.forEach(_=>{const P=e.get(_.id)||e.getBuiltIn(_.id);if(P){E.addImplementation(P,i);return}}),E.addSelfToProject(null),i||E.captureVersion(),i==null||i.attemptAutoclose(w.CloneEntity,this.id),E}setDataType(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.SetDataType))){if(!this.checkCanEdit(this,r))return Y.Logger.warn(`[setDataType] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.SetDataType,this.id),this;const a=this.dataType;return(a==null?void 0:a.id)!==(i==null?void 0:i.id)&&(a==null||a.remove({ignoreUpstream:!0},r),this.dataType=i,this.subscribeToDependencies(),r==null||r.add(this,W.Affected)),r==null||r.attemptAutoclose(w.SetDataType,this.id),this}removeDataType(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.RemoveDataType))){return this.checkCanEdit(this,i)?(this.dataType&&(this.dataType.remove({ignoreUpstream:!0},i),i==null||i.add(this,W.Affected),this.dataType=null),i==null||i.attemptAutoclose(w.RemoveDataType,this.id),this):(Y.Logger.warn(`[removeDataType] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),i==null||i.attemptAutoclose(w.RemoveDataType,this.id),this)}getDataType(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"get-data-type"))){return i==null||i.attemptAutoclose("get-data-type",this.id),this.dataType}getDefaultValue(){var c;let i=null;for(const e of this.implements){const f=e.getDefaultValue();(!i||Vn(i))&&f&&(i=f)}let r=this.defaultValue;const a=(c=this.extends)==null?void 0:c.getDefaultValue();return Vn(r)&&a&&!Vn(a)&&(r=a),Vn(r)&&i&&!Vn(i)&&(r=i),r}setDefaultValue(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"set-default-value"))){if(!this.checkCanEdit(this,r))return Y.Logger.warn(`[setDefaultValue] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose("set-default-value",this.id),this;const a=this.defaultValue;return(a==null?void 0:a.id)!==(i==null?void 0:i.id)&&(a==null||a.remove({ignoreUpstream:!0},r),this.defaultValue=i,r==null||r.add(this,W.Affected)),r==null||r.attemptAutoclose("set-default-value",this.id),this}syncWithImplementation(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"sync-with-implementation"))){var _,P,V,M;if(!this.checkCanEdit(this,i))return Y.Logger.warn(`[syncWithImplementation] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),i==null||i.attemptAutoclose("sync-with-implementation",this.id),{added:[],updated:[],removed:[],affected:[],self:this};const r=[],a=[],c=[],e=[];this.parent.type!==d.PrimitiveEntity&&this.interactive&&this.parent.getAllPropertiesImplements().filter(k=>k.id!==this.id).forEach(k=>{this.addImplementation(k,i)}),this.implements.find(G=>G.id===this.id)&&this.removeImplementation(this,i);let f=null,h=this.implements.filter(G=>{var J;if(!G.dataType||!((J=G.dataType)!=null&&J.isResolved))return!1;const k=this.implements.filter(se=>se.id!==G.id);if(!k.length)return!0;const q=El(Sa(G.dataType),{removeDuplicates:!0,removeNulls:!0}).filter(se=>se.isResolved);return!!k.every(se=>!se.dataType||!se.dataType.isResolved?!0:El(Sa(se.dataType),{removeDuplicates:!0,removeNulls:!0}).filter(le=>le.isResolved).length>q.length)});if(h.length>1&&this.parent.type!==d.PrimitiveEntity){const G=this.parent.getAllPropertiesImplements()[0]||null;h=h.filter(k=>k.id!==(G==null?void 0:G.id))}if(!h.length&&this.parent.type!==d.PrimitiveEntity){const G=this.parent.getAllPropertiesImplements()[0]||null;G&&h.push(G)}for(const G of h)(_=G.dataType)!=null&&_.isResolved&&(f?((P=G.dataType.orChildrenGroup)!=null&&P.length&&G.dataType.implementationChooseOne||(V=G.dataType.orChildrenGroup)!=null&&V.length&&!G.dataType.implementationChooseOne)&&(f=G.dataType):f=G.dataType);if(f||this.parent.type!==d.PrimitiveEntity&&this.parent.additionalPropertiesDataType&&(f=this.parent.additionalPropertiesDataType),f&&!this.dataType){const G=f.implement(this,i,x.UUID.uuid());this.setDataType(G,i),a.push(G)}if((M=this.dataType)==null||M.merge(f,i,{implementSource:!0}),!this.defaultValue){let G=null;for(const k of this.implements){const q=k.getDefaultValue();q&&(G=q)}if(G){const k=G.clone(i,this,x.UUID.uuid(),!0);this.setDefaultValue(k,i),a.push(k)}}if(!this.defaultValue){const G=hF(this);if(G.result){const k=Lr.new(i);k.name=G.name,k.value=G.value,k.parent=this.toReference();const q=Re(k,this.project);q.hydrateAncestors(),q.addSelfToProject(i),q.initChildren(i),i==null||i.add(q,W.Added),i||q.captureVersion(),this.setDefaultValue(q,i),a.push(q)}}let m=!1,E=!1,b=!1,A=!1;return this.implements.forEach(G=>{G.required&&(m=!0),G.constant&&(b=!0),G.unique&&(E=!0),G.static&&(A=!0)}),this.metaSync({required:m||this.required,constant:b||this.constant,unique:E||this.unique,static:A||this.static},i),i==null||i.attemptAutoclose("sync-with-implementation",this.id),{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}syncWithExtension(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"sync-with-extension"))){var E,b,A;if(!this.checkCanEdit(this,i))return Y.Logger.warn(`[syncWithExtension] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),i==null||i.attemptAutoclose("sync-with-extension",this.id),{added:[],updated:[],removed:[],affected:[],self:this};const r=[],a=[],c=[],e=[];if(!this.extends)return i==null||i.attemptAutoclose("sync-with-extension",this.id),{added:[],updated:[],removed:[],affected:[],self:this};const f={...this.extends.toMeta()};if(delete f.id,delete f.version,delete f.createdAt,delete f.previousVersion,delete f.author,delete f.index,this.metaSync(f,i),r.push(this),!this.extends.dataType)return i==null||i.attemptAutoclose("sync-with-extension",this.id),{added:[],updated:[],removed:[],affected:[],self:this};let h=!1;if(!this.dataType){const _=vr.new(i);_.parent=this.toReference();const P=Re(_,this.project);P.hydrateAncestors(),P.addSelfToProject(i),i==null||i.add(P,W.Added),P.afterAllChildrenInitialized(i),h=!0}const m=ni(this.dataType,this.extends.dataType);if((!m.compatible||!m.exact)&&((E=this.dataType)==null||E.merge(this.extends.dataType,i)),h&&(i||(b=this.dataType)==null||b.captureVersion()),this.extends.defaultValue&&!this.defaultValue){const _=this.extends.defaultValue.clone(i,this,x.UUID.uuid(),!0);this.setDefaultValue(_,i),a.push(_)}else this.extends.defaultValue?this.extends.defaultValue&&this.defaultValue&&!PFe(this.defaultValue,this.extends.defaultValue)&&(this.defaultValue.merge(this.extends.defaultValue,i),r.push(this.defaultValue)):((A=this.defaultValue)==null||A.remove({ignoreUpstream:!0},i),this.defaultValue=null,e.push(this));return i==null||i.attemptAutoclose("sync-with-extension",this.id),{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}implementAsInputMap(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"implement-as-input-map")),r,a){const c=Ts.new(i);c.id=a||c.id,c.name=this.name,c.description=this.description,c.parent=r.toReference(),c.declaration=this.toJSON();const e=lr(c,this.project);if(e.hydrateAncestors(),e.addSelfToProject(i),i==null||i.add(e,W.Added),e.initChildren(i),this.dataType)if(this.project.diggestedBuiltInBaseEntitiesIds.has(this.dataType.id))e.setDataType(this.dataType,i),i==null||i.add(e,W.Affected);else{const f=this.dataType.clone(i,e);e.setDataType(f,i)}if(this.defaultValue){const f=this.defaultValue.clone(i,e);e.setDefaultValue(f,i)}return i||e.captureVersion(),i==null||i.attemptAutoclose("implement-as-input-map",this.id),e}};R(mi,"repository",{APICreate:async(i,...r)=>i,APIUpdate:async(i,...r)=>i,APIDelete:async(i,...r)=>i,APIClone:async(i,...r)=>{},APILoad:async(i,...r)=>null,APILoadVersion:async(i,r,...a)=>null}),R(mi,"type",d.Property),R(mi,"USER_MANAGED_PARENT_TYPES",[d.DefinitionEntity]),R(mi,"PARENT_TYPES",[...mi.USER_MANAGED_PARENT_TYPES,d.PrimitiveEntity,d.BuiltInBaseEntity]),R(mi,"MUTABLE_BASE_PROPERTIES",["name","codeName","description","private","abstract","static","required","constant","unique","interactive"]),R(mi,"INMUTABLE_BASE_PROPERTIES",["id","type","version","createdAt","author","previousVersion","parentRelationType"]),R(mi,"BASE_PROPERTIES",[...mi.MUTABLE_BASE_PROPERTIES,...mi.INMUTABLE_BASE_PROPERTIES]),R(mi,"MUTABLE_META_PROPERTIES",[...mi.MUTABLE_BASE_PROPERTIES,"index"]),R(mi,"INMUTABLE_META_PROPERTIES",[...mi.INMUTABLE_BASE_PROPERTIES]),R(mi,"META_PROPERTIES",[...mi.MUTABLE_META_PROPERTIES,...mi.INMUTABLE_META_PROPERTIES]),R(mi,"MUTABLE_UPSTREAM_PROPERTIES",[]),R(mi,"INMUTABLE_UPSTREAM_PROPERTIES",["parent","implements","extends"]),R(mi,"UPSTREAM_PROPERTIES",[...mi.MUTABLE_UPSTREAM_PROPERTIES,...mi.INMUTABLE_UPSTREAM_PROPERTIES]),R(mi,"MUTABLE_DOWNSTREAM_PROPERTIES",["dataType","defaultValue"]),R(mi,"INMUTABLE_DOWNSTREAM_PROPERTIES",[]),R(mi,"DOWNSTREAM_PROPERTIES",[...mi.MUTABLE_DOWNSTREAM_PROPERTIES,...mi.INMUTABLE_DOWNSTREAM_PROPERTIES]),R(mi,"PROPERTIES",[...mi.META_PROPERTIES,...mi.UPSTREAM_PROPERTIES,...mi.DOWNSTREAM_PROPERTIES]);let Es=mi;async function zje(s,p={}){var E,b;const i=Y.YieldTracker.from(p),r=s.implements.flatMap(A=>Xje(s,A)),a=eUe(s,s.extends),c=iUe(s),e=tUe(s),f=IL(s),h=[...r,...a,...c,...e,...f],m=qt(s.errors,h);await i.tick();for(const A of s.properties)await A.validateAsync({tracker:i});for(const A of s.methods)await A.validateAsync({tracker:i});for(const A of s.abstractMethods)await A.validateAsync({tracker:i});return await((E=s.allPropertiesImplement)==null?void 0:E.validateAsync({tracker:i})),await((b=s.additionalPropertiesDataType)==null?void 0:b.validateAsync({tracker:i})),m}function Yje(s){var h,m;const p=s.implements.flatMap(E=>Xje(s,E)),i=eUe(s,s.extends),r=iUe(s),a=tUe(s),c=IL(s);s.properties.forEach(E=>{E.validate()}),s.methods.flatMap(E=>E.validate()),s.abstractMethods.flatMap(E=>E.validate()),(h=s.allPropertiesImplement)==null||h.validate(),(m=s.additionalPropertiesDataType)==null||m.validate();const e=[...p,...i,...r,...a,...c];return qt(s.errors,e)}function Jje(s,p){const i=p.properties.filter(c=>c.abstract),r=[];let a=[...s.properties];return i.forEach(c=>{const e=a.find(f=>!!f.implements.find(h=>h.id===c.id));e?a=a.filter(f=>f.id!==e.id):r.push(c)}),r}function Qje(s,p){const i=p.abstractMethods,r=[];let a=[...s.methods];return i.forEach(c=>{const e=a.find(f=>{var h;return((h=f.implements)==null?void 0:h.id)===c.id});e?a=a.filter(f=>f.id!==e.id):r.push(c)}),r}function Xje(s,p){const i=[];if(!p.abstract){const E=It({id:s.id+"--"+Ae.ImplementingNonAbstractEntity,message:`Entity "${s.name}" with id "${s.id}" is implementing a non-abstract entity "${p.name}" with id "${p.id}"`,severity:ve.Error,code:Ae.ImplementingNonAbstractEntity,entity:s});return i.push(E.error),i}const r=p.properties.filter(E=>E.abstract),a=[];let c=[...s.properties];r.forEach(E=>{const b=c.find(A=>!!A.implements.find(_=>_.id===E.id));b?c=c.filter(A=>A.id!==b.id):a.push(E)}),a.length&&a.forEach(E=>{const b=It({id:s.id+"--"+Ae.MissingPropertyImplementation+"--"+E.id,message:`Property "${E.name}" with id "${E.id}" of entity "${p.name}" with id "${p.id}" is not implemented when entity "${s.name}" with id "${s.id}" implements it`,severity:ve.Error,code:Ae.MissingPropertyImplementation,entity:s});i.push(b.error)});const e=[];let f=[...s.methods];p.abstractMethods.forEach(E=>{const b=f.find(A=>{var _;return((_=A.implements)==null?void 0:_.id)===E.id});b?f=f.filter(A=>A.id!==b.id):e.push(E)}),e.length&&e.forEach(E=>{const b=It({id:s.id+"--"+Ae.MissingMethodImplementation+"--"+E.id,message:`Method "${E.name}" with id "${E.id}" of entity "${p.name}" with id "${p.id}" is not implemented when entity "${s.name}" with id "${s.id}" implements it`,severity:ve.Error,code:Ae.MissingMethodImplementation,entity:s});i.push(b.error)});const h=[];p.properties.forEach(E=>{const b=c.find(A=>A.name===E.name);b&&h.push([b,E])}),h.length&&h.forEach(([E])=>{const b=It({id:s.id+"--"+Ce.PropertyOverwritesOtherSiblingWithSameName+"--"+E.id,message:`Property "${E.name}" with id "${E.id}" of entity "${s.name}" with id "${s.id}" overwrites the property with the same name from the base entity "${p.name}" with id "${p.id}"`,severity:ve.Error,code:Ce.PropertyOverwritesOtherSiblingWithSameName,entity:s});i.push(b.error)});const m=[];return p.methods.forEach(E=>{const b=f.find(A=>A.name===E.name);b&&m.push([b,E])}),m.length&&m.forEach(([E])=>{const b=It({id:s.id+"--"+Ce.MethodOverwritesOtherSiblingWithSameName+"--"+E.id,message:`Method "${E.name}" with id "${E.id}" of entity "${s.name}" with id "${s.id}" overwrites the method with the same name from the base entity "${p.name}" with id "${p.id}"`,severity:ve.Error,code:Ce.MethodOverwritesOtherSiblingWithSameName,entity:s});i.push(b.error)}),i}function eUe(s,p){const i=[];if(!p)return i;const r=[];if(!s.abstract&&p.abstract){const c=It({id:s.id+"--"+p.id+"--"+Ae.NonAbstractExtendingAbstractEntity,message:`Entity "${s.name}" with id "${s.id}" is not-abstract but is extending an abstract entity "${p.name}" with id "${p.id}"`,severity:ve.Error,code:Ae.NonAbstractExtendingAbstractEntity,entity:s,firstRelationship:p});return i.push(c.error),i}if(s.abstract&&!p.abstract){const c=It({id:s.id+"--"+p.id+"--"+Ae.AbstractExtendingNonAbstractEntity,message:`Entity "${s.name}" with id "${s.id}" is abstract but is extending an non-abstract entity "${p.name}" with id "${p.id}"`,severity:ve.Error,code:Ae.AbstractExtendingNonAbstractEntity,entity:s,firstRelationship:p});return i.push(c.error),i}s.properties.forEach(c=>{const e=p.properties.find(f=>{var h;return f.name===c.name&&((h=c.extends)==null?void 0:h.id)!==f.id});c.implements.find(f=>f.id===(e==null?void 0:e.id))||e&&r.push(c)}),r.length&&r.forEach(c=>{const e=It({id:s.id+"--"+Ce.PropertyOverwritesOtherSiblingWithSameName,message:`Property "${c.name}" with id "${c.id}" of entity "${s.name}" with id "${s.id}" overwrites the property with the same name from the extended entity "${p.name}" with id "${p.id}"`,severity:ve.Error,code:Ce.PropertyOverwritesOtherSiblingWithSameName,entity:s});i.push(e.error)});const a=[];return s.methods.forEach(c=>{var f;const e=p.methods.find(h=>{var m;return h.name===c.name&&((m=c.extends)==null?void 0:m.id)!==h.id});((f=c.implements)==null?void 0:f.id)!==(e==null?void 0:e.id)&&e&&a.push(c)}),a.length&&a.forEach(c=>{const e=It({id:s.id+"--"+Ce.MethodOverwritesOtherSiblingWithSameName,message:`Method "${c.name}" with id "${c.id}" of entity "${s.name}" with id "${s.id}" overwrites the method with the same name from the extended entity "${p.name}" with id "${p.id}"`,severity:ve.Error,code:Ce.MethodOverwritesOtherSiblingWithSameName,entity:s});i.push(e.error)}),i}function tUe(s){const p=[];if(!s.properties.length){const i=It({id:s.id+"--"+Ae.NoProperties,message:"No properties implemented",severity:ve.Warning,code:Ae.NoProperties,entity:s});p.push(i.error)}return p}function iUe(s){const p=[];if(s.abstract){if(s.methods.length){const i=It({id:s.id+"--"+Ae.AbstractEntityWithNonAbstractMethods,message:`Entity "${s.name}" with id "${s.id}" is marked as abstract but has non-abstract methods`,severity:ve.Error,code:Ae.AbstractEntityWithNonAbstractMethods,entity:s});p.push(i.error)}if(s.properties.some(i=>!i.abstract)){const i=It({id:s.id+"--"+Ae.AbstractEntityWithNonAbstractProperties,message:`Entity "${s.name}" with id "${s.id}" is marked as abstract but has non-abstract properties`,severity:ve.Error,code:Ae.AbstractEntityWithNonAbstractProperties,entity:s});p.push(i.error),s.properties.forEach(r=>{if(!r.abstract){const a=It({id:s.id+"--"+Ae.StaticEntityWithNonStaticProperties+"--"+r.id,message:`Property "${r.name}" with id "${r.id}" of entity "${s.name}" with id "${s.id}" is not marked as abstract but the entity is marked as abstract`,severity:ve.Error,code:Ae.StaticEntityWithNonStaticProperties,entity:s});p.push(a.error)}})}}else{if(s.abstractMethods.length){const i=It({id:s.id+"--"+Ae.AbstractPropertyInNonAbstractEntity,message:`Entity "${s.name}" with id "${s.id}" is not marked as abstract but has abstract methods`,severity:ve.Error,code:Ae.AbstractPropertyInNonAbstractEntity,entity:s});p.push(i.error)}s.properties.some(i=>i.abstract)&&s.properties.forEach(i=>{if(i.abstract){const r=It({id:s.id+"--"+Ae.AbstractPropertyInNonAbstractEntity+"--"+i.id,message:`Property "${i.name}" with id "${i.id}" of entity "${s.name}" with id "${s.id}" is marked as abstract but the entity is not marked as abstract`,severity:ve.Error,code:Ae.AbstractPropertyInNonAbstractEntity,entity:s,firstRelationship:i});p.push(r.error)}})}return s.static&&s.properties.some(i=>!i.static)&&s.properties.forEach(i=>{if(!i.static){const r=It({id:s.id+"--"+Ae.NonStaticPropertyInStaticEntity+"--"+i.id,message:`Property "${i.name}" with id "${i.id}" of entity "${s.name}" with id "${s.id}" is not marked as static but the entity is marked as static`,severity:ve.Error,code:Ae.NonStaticPropertyInStaticEntity,entity:s,firstRelationship:i});p.push(r.error)}}),p}function xVi(s,p){const i=[],r=ea(p);if(!p.abstract){const e=new qi({id:s.id+"--"+p.id+"--"+Ae.ImplementingNonAbstractEntity,message:`Entity "${s.name}" with id "${s.id}" is implementing a non-abstract built-in entity "${p.name}" with id "${p.id}"`,severity:ve.Error,code:Ae.ImplementingNonAbstractEntity,entity:s,firstRelationship:p});i.push(e)}const a=s.implements.filter(e=>e.id!==p.id);if(s.abstract){const e=new qi({id:s.id+"--"+p.id+"--"+Ae.AbstractEntityImplements,message:`Entity "${s.name}" with id "${s.id}" is marked as abstract and cannot implement built-in entity "${p.name}" with id "${p.id}"`,severity:ve.Error,code:Ae.AbstractEntityImplements,entity:s,firstRelationship:p});i.push(e)}if(s.static&&!p.static){const e=new qi({id:s.id+"--"+p.id+"--"+Ae.StaticImplementingNonStaticEntity,message:`Entity "${s.name}" with id "${s.id}" is marked as static and cannot implement non-static built-in entity "${p.name}" with id "${p.id}"`,severity:ve.Error,code:Ae.StaticImplementingNonStaticEntity,entity:s,firstRelationship:p});i.push(e)}if(!s.static&&p.static){const e=new qi({id:s.id+"--"+p.id+"--"+Ae.NonStaticImplementingStaticEntity,message:`Entity "${s.name}" with id "${s.id}" is not marked as static and cannot implement static built-in entity "${p.name}" with id "${p.id}"`,severity:ve.Error,code:Ae.NonStaticImplementingStaticEntity,entity:s,firstRelationship:p});i.push(e)}return a.length&&a.forEach(e=>{if(e.type===d.BuiltInBaseEntity){const f=r.filter(h=>h.id!==e.id);f.length&&f.forEach(h=>{if(h.id!==e.id){const m=new qi({id:s.id+"--"+h.id+"--"+e.id+"--"+Ae.ImplementsIncompatibleEntities,message:`Entity "${s.name}" with id "${s.id}" is implementing built-in entity "${h.name}" with id "${h.id}" but also implements entity "${e.name}" with id "${e.id}" which is incompatible`,severity:ve.Error,code:Ae.ImplementsIncompatibleEntities,entity:s,firstRelationship:h,secondRelationship:e});i.push(m)}})}else{ea(e).forEach(E=>{const b=r.filter(A=>A.id!==E.id);b.length&&b.forEach(A=>{if(A.id!==E.id){const _=new qi({id:s.id+"--"+A.id+"--"+E.id+"--"+Ae.ImplementsIncompatibleEntities,message:`Entity "${s.name}" with id "${s.id}" is implementing built-in entity "${A.name}" with id "${A.id}" but also implements entity "${E.name}" with id "${E.id}" which is incompatible`,severity:ve.Error,code:Ae.ImplementsIncompatibleEntities,entity:s,firstRelationship:A,secondRelationship:E});i.push(_)}})});const h=Jd(p.ownDeclaredProperties,e.ownDeclaredProperties,Ce.PropertyOverwritesOtherImplementedEntitysPropertyWithSameImplementation,Ce.PropertyOverwritesOtherImplementedEntitysPropertyWithSameName);i.push(...h.errors);const m=Jd(p.abstractMethods,[...e.abstractMethods,...e.methods],Ce.MethodOverwritesOtherImplementedEntitysMethodWithSameImplementation,Ce.MethodOverwritesOtherImplementedEntitysMethodWithSameName);i.push(...m.errors)}}),C(s.extends?ea(s.extends):[]).forEach(e=>{if(!r.find(f=>f.id===e.id)){const f=new qi({id:s.id+"--"+p.id+"--"+e.id+"--"+Ae.ExtendsIncompatibleEntities,message:`Entity "${s.name}" with id "${s.id}" is implementing built-in entity "${p.name}" with id "${p.id}" but also extends entity "${e.name}" with id "${e.id}" which is incompatible`,severity:ve.Error,code:Ae.ExtendsIncompatibleEntities,entity:s,firstRelationship:p,secondRelationship:e});i.push(f)}}),i}function $Vi(s,p,i=!1){var m,E;const r=[],a=ea(p);if(!s.abstract&&p.abstract){const b=It({id:s.id+"--"+p.id+"--"+Ae.NonAbstractExtendingAbstractEntity,message:`Entity "${s.name}" with id "${s.id}" is not-abstract but is extending an abstract entity "${p.name}" with id "${p.id}"`,severity:ve.Error,code:Ae.NonAbstractExtendingAbstractEntity,entity:s,firstRelationship:p});r.push(b.error)}if(s.abstract&&!p.abstract){const b=It({id:s.id+"--"+p.id+"--"+Ae.AbstractExtendingNonAbstractEntity,message:`Entity "${s.name}" with id "${s.id}" is abstract but is extending an non-abstract entity "${p.name}" with id "${p.id}"`,severity:ve.Error,code:Ae.AbstractExtendingNonAbstractEntity,entity:s,firstRelationship:p});r.push(b.error)}if(!s.static&&p.static){const b=It({id:s.id+"--"+p.id+"--"+Ae.NonStaticExtendingStaticEntity,message:`Entity "${s.name}" with id "${s.id}" is not static but is extending a static entity "${p.name}" with id "${p.id}"`,severity:ve.Error,code:Ae.NonStaticExtendingStaticEntity,entity:s,firstRelationship:p});r.push(b.error)}if(s.static&&!p.static){const b=It({id:s.id+"--"+p.id+"--"+Ae.StaticExtendingNonStaticEntity,message:`Entity "${s.name}" with id "${s.id}" is static but is extending an non-static entity "${p.name}" with id "${p.id}"`,severity:ve.Error,code:Ae.StaticExtendingNonStaticEntity,entity:s,firstRelationship:p});r.push(b.error)}if(!bl(p)){const b=It({id:s.id+"--"+p.id+"--"+Ae.ExtendingNonInteractiveEntity,message:`Entity "${s.name}" with id "${s.id}" is extending an non-interactive entity "${p.name}" with id "${p.id}"`,severity:ve.Error,code:Ae.ExtendingNonInteractiveEntity,entity:s,firstRelationship:p});r.push(b.error)}if(s.extends&&((m=s.extends)==null?void 0:m.id)!==p.id)if(((E=s.extends)==null?void 0:E.type)===d.BuiltInBaseEntity){const b=a.filter(A=>{var _;return A.id!==((_=s.extends)==null?void 0:_.id)});b.length&&b.forEach(A=>{var _,P,V,M;if(A.id!==((_=s.extends)==null?void 0:_.id)){const G=It({id:s.id+"--"+A.id+"--"+((P=s.extends)==null?void 0:P.id)+"--"+Ae.ExtendsIncompatibleEntities,message:`Entity "${s.name}" with id "${s.id}" is extending built-in entity "${A.name}" with id "${A.id}" but also extends entity "${(V=s.extends)==null?void 0:V.name}" with id "${(M=s.extends)==null?void 0:M.id}" which is incompatible`,severity:ve.Error,code:Ae.ExtendsIncompatibleEntities,entity:s,firstRelationship:A,secondRelationship:s.extends});r.push(G.error)}})}else{ea(s.extends).forEach(G=>{const k=a.filter(q=>q.id!==G.id);k.length&&k.forEach(q=>{if(q.id!==G.id){const ne=new qi({id:s.id+"--"+q.id+"--"+G.id+"--"+Ae.ImplementsIncompatibleEntities,message:`Entity "${s.name}" with id "${s.id}" is extending built-in entity "${q.name}" with id "${q.id}" but also extends or implements entity "${G.name}" with id "${G.id}" which is incompatible`,severity:ve.Error,code:Ae.ImplementsIncompatibleEntities,entity:s,firstRelationship:q,secondRelationship:G});r.push(ne)}})});const A=!!ea(s.extends).find(G=>G.id===p.id);let _=[...s.extends.properties];A&&(_=_.filter(G=>!p.properties.find(k=>k.id===G.id||k.name===G.name||!!G.implements.find(q=>q.id===k.id))));let P=[...s.extends.methods];A&&(P=P.filter(G=>!p.methods.find(k=>{var q;return k.id===G.id||k.name===G.name||k.id===((q=G.implements)==null?void 0:q.id)})));const V=Jd(p.ownDeclaredProperties,_,Ce.PropertyOverwritesOtherExtendedEntitysPropertyWithSameImplementation,Ce.PropertyOverwritesOtherExtendedEntitysPropertyWithSameName);r.push(...V.errors);const M=Jd(p.abstractMethods,P,Ce.MethodOverwritesOtherExtendedEntitysMethodWithSameImplementation,Ce.MethodOverwritesOtherExtendedEntitysMethodWithSameName);r.push(...M.errors)}i&&Y.Logger.log("self.implements.length",s.implements.length),s.implements.length&&s.implements.forEach(b=>{if(b.type===d.BuiltInBaseEntity){const A=a.filter(_=>_.id!==b.id);A.length&&A.forEach(_=>{if(_.id!==b.id){const P=new qi({id:s.id+"--"+_.id+"--"+b.id+"--"+Ae.ImplementsIncompatibleEntities,message:`Entity "${s.name}" with id "${s.id}" is implementing built-in entity "${_.name}" with id "${_.id}" but also implements entity "${b.name}" with id "${b.id}" which is incompatible`,severity:ve.Error,code:Ae.ImplementsIncompatibleEntities,entity:s,firstRelationship:_,secondRelationship:b});r.push(P)}})}else{ea(b).forEach(V=>{const M=a.filter(G=>G.id!==V.id);M.length&&M.forEach(G=>{if(G.id!==V.id){const k=new qi({id:s.id+"--"+G.id+"--"+V.id+"--"+Ae.ImplementsIncompatibleEntities,message:`Entity "${s.name}" with id "${s.id}" is implementing built-in entity "${G.name}" with id "${G.id}" but also implements entity "${V.name}" with id "${V.id}" which is incompatible`,severity:ve.Error,code:Ae.ImplementsIncompatibleEntities,entity:s,firstRelationship:G,secondRelationship:V});r.push(k)}})});const _=Jd(p.ownDeclaredProperties,b.ownDeclaredProperties,Ce.PropertyOverwritesOtherImplementedEntitysPropertyWithSameImplementation,Ce.PropertyOverwritesOtherImplementedEntitysPropertyWithSameName);r.push(..._.errors);const P=Jd(p.abstractMethods,[...b.abstractMethods,...b.methods],Ce.MethodOverwritesOtherImplementedEntitysMethodWithSameImplementation,Ce.MethodOverwritesOtherImplementedEntitysMethodWithSameName);r.push(...P.errors)}});const e=Jd(s.ownDeclaredProperties,p.ownDeclaredProperties,Ce.PropertyOverwritesOtherSiblingWithSameImplementation,Ce.PropertyOverwritesOtherSiblingWithSameName);r.push(...e.errors);const f=Jd(p.methods,p.abstractMethods,Ce.MethodOverwritesOtherSiblingWithSameImplementation,Ce.MethodOverwritesOtherSiblingWithSameName);return r.push(...f.errors),C(s.extends?ea(s.extends):[]).forEach(b=>{if(!a.find(A=>A.id===b.id)){const A=new qi({id:s.id+"--"+p.id+"--"+b.id+"--"+Ae.ImplementsIncompatibleEntities,message:`Entity "${s.name}" with id "${s.id}" is extending built-in entity "${p.name}" with id "${p.id}" but also extends entity "${b.name}" with id "${b.id}" which is incompatible`,severity:ve.Error,code:Ae.ImplementsIncompatibleEntities,entity:s,firstRelationship:p,secondRelationship:b});r.push(A)}}),r}function LVi(s){const p=[];if(s.implements.forEach(i=>{if(!i.static){const r=new qi({id:s.id+"--"+i.id+"--"+Ae.StaticImplementingNonStaticEntity,message:`Entity "${s.name}" with id "${s.id}" is static but implements entity "${i.name}" with id "${i.id}" which is non-static`,severity:ve.Error,code:Ae.StaticImplementingNonStaticEntity,entity:s,firstRelationship:i});p.push(r)}}),s.extends&&!s.extends.static){const i=new qi({id:s.id+"--"+s.extends.id+"--"+Ae.StaticExtendingNonStaticEntity,message:`Entity "${s.name}" with id "${s.id}" is static but extends entity "${s.extends.name}" with id "${s.extends.id}" which is non-static`,severity:ve.Error,code:Ae.StaticExtendingNonStaticEntity,entity:s,firstRelationship:s.extends});p.push(i)}return p}function BVi(s){const p=[];if(s.implements.length){const i=new qi({id:s.id+"--"+Ae.AbstractEntityImplements,message:`Entity "${s.name}" with id "${s.id}" cannot be marked as abstract because it implements other entities`,severity:ve.Error,code:Ae.AbstractEntityImplements,entity:s});p.push(i)}if(s.extends&&!s.extends.abstract){const i=new qi({id:s.id+"--"+s.extends.id+"--"+Ae.AbstractExtendingNonAbstractEntity,message:`Entity "${s.name}" with id "${s.id}" is abstract but extends entity "${s.extends.name}" with id "${s.extends.id}" which is non-abstract`,severity:ve.Error,code:Ae.AbstractExtendingNonAbstractEntity,entity:s,firstRelationship:s.extends});p.push(i)}return p}function MVi(s){const p=[];if(s.extends&&s.extends.static){const i=new qi({id:s.id+"--"+s.extends.id+"--"+Ae.NonStaticExtendingStaticEntity,message:`Entity "${s.name}" with id "${s.id}" is non-static but extends entity "${s.extends.name}" with id "${s.extends.id}" which is static`,severity:ve.Error,code:Ae.NonStaticExtendingStaticEntity,entity:s,firstRelationship:s.extends});p.push(i)}return p}function GVi(s){const p=[];if(s.extends&&s.extends.abstract){const i=new qi({id:s.id+"--"+s.extends.id+"--"+Ae.NonAbstractExtendingAbstractEntity,message:`Entity "${s.name}" with id "${s.id}" is non-abstract but extends entity "${s.extends.name}" with id "${s.extends.id}" which is abstract`,severity:ve.Error,code:Ae.NonAbstractExtendingAbstractEntity,entity:s,firstRelationship:s.extends});p.push(i)}return p}function IL(s,p){const r=[...s.project.getDefinitionEntities()].filter(a=>a.id!==s.id);return JE(s,[ir,hd],r,p)}const kVi=Object.freeze(Object.defineProperty({__proto__:null,getBaseMethodsNotImplemented:Qje,getBasePropertiesNotImplemented:Jje,validate:Yje,validateAsync:zje,validateCanBecomeAbstract:BVi,validateCanBecomeNonAbstract:GVi,validateCanBecomeNonStatic:MVi,validateCanBecomeStatic:LVi,validateCanExtendEntity:$Vi,validateCanImplementEntity:xVi,validateDefinitionEntityName:IL},Symbol.toStringTag,{value:"Module"}));function jVi(s,p){const i=[],r=[];if(s.parent)if(s.id===s.parent)r.push(new we({id:`${s.id}--${s.parent}--${Te.SelfReference}`,code:Te.SelfReference,severity:ve.Error,message:`Entity of type "${s.type}" with id "${s.id}", has a reference to itself at 'parent'. This is not allowed. Change the reference string or the 'entityId' property of the reference object.`}));else{const a=p.get(s.parent);a?[d.Project,d.DataType].includes(a.type)||r.push(new we({id:`${s.id}--${s.parent}--${Te.InvalidParentReference}`,code:Te.InvalidParentReference,severity:ve.Error,message:`Entity of type "${s.type}" with id "${s.id}", has a parent reference which is of type ${a.type}, and therefore that isn't pointing to the following valid types for this reference: 'project' or 'data-type'.`})):r.push(new we({id:`${s.id}--${s.parent}--${Te.ReferencedEntityNotFound}`,code:Te.ReferencedEntityNotFound,severity:ve.Error,message:`Entity of type "${s.type}" with id "${s.id}", is referencing an entity with id "${s.parent}" at 'parent' that isn't yet found in the project. Perhaps it should be created first. Or perhaps the ID is incorrect.`}))}return s.implements&&Array.isArray(s.implements)?s.implements.forEach(a=>{if(s.id===a){r.push(new we({id:`${s.id}--${a}--${Te.SelfReference}`,code:Te.SelfReference,severity:ve.Error,message:`Entity of type "${s.type}" with id "${s.id}", has a reference to itself at one of the 'implements' references. This is not allowed. Change the reference string or the 'entityId' property of the reference object.`}));return}const c=p.get(a);c?[d.DefinitionEntity,d.BuiltInBaseEntity].includes(c.type)?c.abstract||r.push(new we({id:`${s.id}--${a}--${Te.InvalidImplementsReference}`,code:Te.InvalidImplementsReference,severity:ve.Error,message:`Entity of type "${s.type}" with id "${s.id}", has an 'implements' reference that isn't pointing to an abstract entity.`})):r.push(new we({id:`${s.id}--${a}--${Te.InvalidImplementsReference}`,code:Te.InvalidImplementsReference,severity:ve.Error,message:`Entity of type "${s.type}" with id "${s.id}", has an 'implements' reference which is of type ${c.type}, and therefore that isn't pointing to the following valid types for this reference: 'definition-entity' or 'built-in-base-entity'.`})):r.push(new we({id:`${s.id}--${a}--${Te.ReferencedEntityNotFound}`,code:Te.ReferencedEntityNotFound,severity:ve.Error,message:`Entity of type "${s.type}" with id "${s.id}", is referencing an entity with id "${a}" at 'implements' that isn't yet found in the project. Perhaps it should be created first. Or perhaps the ID is incorrect.`}))}):r.push(new we({id:`${s.id}--${Ce.InvalidObjectStructure}`,code:Ce.InvalidObjectStructure,severity:ve.Error,message:`Entity of type "${s.type}" with id "${s.id}", has an 'implements' property that isn't an array.`})),s.extends&&Array.isArray(s.extends)&&s.extends.forEach(a=>{const c=p.get(a);c?[d.DefinitionEntity,d.BuiltInBaseEntity].includes(c.type)?c.abstract&&r.push(new we({id:`${s.id}--${a}--${Te.InvalidExtendsReference}`,code:Te.InvalidExtendsReference,severity:ve.Error,message:`Entity of type "${s.type}" with id "${s.id}", has an 'extends' reference that isn't pointing to a non-abstract entity. Did you want to use the property 'implements', which holds a list of references to absract entities, instead?`})):r.push(new we({id:`${s.id}--${a}--${Te.InvalidExtendsReference}`,code:Te.InvalidExtendsReference,severity:ve.Error,message:`Entity of type "${s.type}" with id "${s.id}", has an 'extends' reference which is of type ${c.type}, and therefore that isn't pointing to the following valid types for this reference: 'definition-entity' or 'built-in-base-entity'.`})):r.push(new we({id:`${s.id}--${a}--${Te.ReferencedEntityNotFound}`,code:Te.ReferencedEntityNotFound,severity:ve.Error,message:`Entity of type "${s.type}" with id "${s.id}", is referencing an entity with id "${a}" at 'extends' that isn't yet found in the project. Perhaps it should be created first. Or perhaps the ID is incorrect.`}))}),{errors:r,explanations:i}}var zg=(s=>(s.Extends="extends",s.Implements="implements",s))(zg||{});const Ni=class Ni extends un{constructor(i,r){super(i);R(this,"initialData");R(this,"id");R(this,"name");R(this,"codeName",null);R(this,"description",null);R(this,"x");R(this,"y");R(this,"static");R(this,"abstract");R(this,"type",d.DefinitionEntity);R(this,"additionalProperties",!1);R(this,"properties",[]);R(this,"allPropertiesImplement",null);R(this,"additionalPropertiesDataType",null);R(this,"methods",[]);R(this,"abstractMethods",[]);R(this,"extends",null);R(this,"implements",[]);R(this,"project");R(this,"errors",[]);R(this,"parent");R(this,"detachedDependents",{});R(this,"knownVersions",null);R(this,"activeVersion",!1);R(this,"initialized",!1);R(this,"startedInitialization",!1);R(this,"suggestedProperties",[]);R(this,"suggestedMethods",[]);this.initialData=i,this.project=r,this.id=i.id,this.name=i.name,this.description=i.description,this.x=i.x,this.y=i.y,this.codeName=i.codeName,this.static=i.static,this.abstract=i.abstract}static new(i=null){return{id:x.UUID.uuid(),version:x.UUID.uuid(),createdAt:(i==null?void 0:i.timestamp)||B().toISOString(),author:(i==null?void 0:i.author)||x.sessionAuthor,previousVersion:null,deleted:!1,deletable:!0,editable:!0,type:d.DefinitionEntity,additionalProperties:!1,additionalPropertiesDataType:null,allPropertiesImplement:null,name:"",codeName:null,description:"",static:!1,abstract:!1,properties:[],methods:[],abstractMethods:[],extends:null,implements:[],x:0,y:0,parent:null}}static fromGenerationTarget(i,r,a){const c=a===void 0?r.addChangeSet(new S(r,x.sessionAuthor,B().toISOString(),r,!0,w.CreateFromGenerationTarget)):a;let e=r;if(i.parent){const b=ie(i.parent);e=r.get(b)}const f=[];i.implements&&i.implements.forEach(b=>{f.push(r.get(b)||r.getBuiltIn(b))});let h=null;i.extends&&(h=r.get(i.extends)||r.getBuiltIn(i.extends));const m={id:i.id,version:x.UUID.uuid(),createdAt:(c==null?void 0:c.timestamp)||B().toISOString(),author:(c==null?void 0:c.author)||x.sessionAuthor,previousVersion:null,deleted:!1,name:i.name,deletable:!0,editable:!0,type:d.DefinitionEntity,codeName:i.codeName||null,description:i.description||null,static:i.static??!1,abstract:i.abstract??!1,additionalProperties:i.additionalProperties??!1,allPropertiesImplement:null,additionalPropertiesDataType:null,properties:[],methods:[],abstractMethods:[],extends:h,implements:f,x:0,y:0,parent:e.toReference()},E=Re(m,r);return E.hydrateAncestors(),E.setParent(e,c),E.addSelfToProject(c),c==null||c.add(E,W.Added),E.initChildren(c),c||E.captureVersion(),E}static validateGenerationTarget(i,r){var b;let a=JSON.parse(JSON.stringify(i));const c=[],e=[],f=jVi(a,r),h=Nx(a,r),m=Xr(a);e.push(...f.errors,...h,...m.errors),c.push(...f.explanations,...m.explanations);const E=a.parent?r.get(a.parent):null;if(E&&E.type===d.DataType){const A=E;A.entity&&A.entity.type===d.DefinitionEntity&&((b=A.entity.parent)==null?void 0:b.id)!==A.id&&e.push(new we({id:`${i.id}--${Te.NewEntityWouldOverriteExisting}`,code:Te.NewEntityWouldOverriteExisting,severity:ve.Error,message:`The entity of type '${i.type}' with id '${i.id}' can't be added to the 'parent' entity with id '${A.id}' because it already has an 'entity' child. Data type entities can only have one 'entity' as children.
603
603
  You can inspect the existing 'entity' field with the 'describe_entity' action. Like so:
604
604
  ${fp({describe_entity:A.entity.id})}
605
- Alternatively you can update the parent data-type entity with 'update' action to remove the existing value of the field.`}))}return{errors:e,explanations:c,modifiedData:a}}get interactive(){return this.implements.length?this.implements.every(i=>i.interactive):!0}get allMethods(){return C([...this.ownDeclaredMethods,...this.allBaseMethodsFromOriginalParents])}get allProperties(){return C([...this.ownDeclaredProperties,...this.allBasePropertiesFromOriginalParents])}get allBaseMethodsFromOriginalParents(){var a;const i=((a=this.extends)==null?void 0:a.type)===d.DefinitionEntity?this.extends.allMethods:[],r=[...i].filter(c=>!i.some(e=>{var f,h;return e.id!==c.id&&(((f=e.implements)==null?void 0:f.id)===c.id||((h=e.extends)==null?void 0:h.id)===c.id)}));return C([...r,...this.implements.flatMap(c=>{const e=c.type===d.DefinitionEntity?[...c.allMethods]:[];return[...e].filter(h=>!e.some(m=>{var E,b;return m.id!==h.id&&(((E=m.implements)==null?void 0:E.id)===h.id||((b=m.extends)==null?void 0:b.id)===h.id)}))})])}get allBasePropertiesFromOriginalParents(){var c;const i=((c=this.extends)==null?void 0:c.allProperties)||[],r=[...i].filter(e=>!i.some(f=>{var h;return f.id!==e.id&&(!!f.implements.find(m=>m.id===e.id)||((h=f.extends)==null?void 0:h.id)===e.id)}));return C([...r,...this.implements.flatMap(e=>{const f=[...e.allProperties];return[...f].filter(m=>!f.some(E=>{var b;return E.id!==m.id&&(!!E.implements.find(A=>A.id===m.id)||((b=E.extends)==null?void 0:b.id)===m.id)}))})])}get allBasePropertiesFromExtendedAndImplementedEntities(){var c,e;const i=[...((c=this.extends)==null?void 0:c.ownDeclaredProperties)||[],...((e=this.extends)==null?void 0:e.allBasePropertiesFromExtendedAndImplementedEntities)||[]].filter(f=>!f.abstract),r=[...i].filter(f=>!i.some(h=>{var m;return h.id!==f.id&&(!!h.implements.find(E=>E.id===f.id)||((m=h.extends)==null?void 0:m.id)===f.id)})),a=this.implements.reduce((f,h)=>{const m=h.implementedPropertiesFromOriginalParents,E=[...h.ownDeclaredProperties].filter(_=>!_.abstract),b=[...m,...E,...f];return[...b].filter(_=>!!!b.find(V=>{var M;return!!V.implements.find(G=>G.id===_.id)||((M=V.extends)==null?void 0:M.id)===_.id}))},[]);return C([...r,...a])}get allBaseMethodsFromExtendedAndImplementedEntities(){return C([...(this.extends?[this.extends]:[]).reduce((i,r)=>r.type!==d.DefinitionEntity?[]:[...[...r.ownDeclaredMethods,...r.allBaseMethodsFromExtendedAndImplementedEntities].filter(c=>c.type!==d.ActionDescriptor),...i],[]),...this.implements.reduce((i,r)=>r.type!==d.DefinitionEntity?r.abstractMethods:[...[...r.ownDeclaredMethods,...r.allBaseMethodsFromExtendedAndImplementedEntities].filter(c=>c.type!==d.ActionDescriptor),...i],[])])}get extendedPropertiesFromOriginalParents(){var a,c;const i=[...((a=this.extends)==null?void 0:a.ownDeclaredProperties)||[],...((c=this.extends)==null?void 0:c.extendedPropertiesFromOriginalParents)||[]].filter(e=>!e.abstract),r=[...i].filter(e=>!i.some(f=>{var h;return f.id!==e.id&&(!!f.implements.find(m=>m.id===e.id)||((h=f.extends)==null?void 0:h.id)===e.id)}));return C(r)}get implementedPropertiesFromOriginalParents(){return C([...(this.extends?[this.extends]:[]).reduce((i,r)=>{const a=r.implementedPropertiesFromOriginalParents,c=[...r.ownDeclaredProperties].filter(h=>!!h.abstract),e=[...a,...c,...i];return[...e].filter(h=>!!!e.find(E=>{var b;return((b=E.extends)==null?void 0:b.id)===h.id||!!E.implements.find(A=>A.id===h.id)}))},[]),...this.implements.reduce((i,r)=>{const a=r.implementedPropertiesFromOriginalParents,c=[...r.ownDeclaredProperties].filter(h=>!!h.abstract),e=[...a,...c,...i];return[...e].filter(h=>!!!e.find(E=>{var b;return!!E.implements.find(A=>A.id===h.id)||((b=E.extends)==null?void 0:b.id)===h.id}))},[])].filter(i=>!!i.abstract))}get extendedMethodsFromOriginalParents(){return C((this.extends?[this.extends]:[]).reduce((i,r)=>{if(r.type!==d.DefinitionEntity)return[];const a=[...r.ownDeclaredMethods,...r.extendedMethodsFromOriginalParents].filter(c=>c.type!==d.ActionDescriptor);return[...i,...a]},[]))}get implementedMethodsFromOriginalParents(){return C([...(this.extends?[this.extends]:[]).reduce((i,r)=>{const a=r.type===d.DefinitionEntity?r.methods:[],c=[...r.abstractMethods].filter(e=>!a.find(f=>f.name===e.name));return[...a,...c,...i]},[]),...this.implements.reduce((i,r)=>[...r.abstractMethods,...i],[])].filter(i=>i.type===d.ActionDescriptor))}get extendedProperties(){return this.properties.filter(i=>i.isExtendedProperty)}get ownDeclaredProperties(){return this.properties.filter(r=>!r.isExtendedProperty)}get extendedMethods(){return this.methods.filter(i=>i.isExtendedMethod)}get ownDeclaredMethods(){return this.methods.filter(i=>!i.isExtendedMethod)}validateGeneratedUpdate(i){const r=[],a=[];return i.parent&&r.push(new we({id:`${this.id}--${Te.InvalidParentUpdate}`,code:Te.InvalidParentUpdate,severity:ve.Error,message:`Entity of type '${this.type}' with id '${this.id}' cannot have the 'parent' property updated. The 'parent' on an '${this.type}', must be the root project as it is a globally declared entity.`})),{errors:r,explanations:a,modifiedData:i}}subscribeDependents(i){return i.forEach(r=>{this.detachedDependents[r.entity.id]||(this.detachedDependents[r.entity.id]=r)}),this}unsubscribeDependents(i){return i.forEach(r=>{this.detachedDependents[r.entity.id]&&delete this.detachedDependents[r.entity.id]}),this}syncDependents(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"sync-dependents"))){const r=[],a=[],c=[],e=[];return Object.values(this.detachedDependents).forEach(f=>{const h=f.entity.afterAllChildrenInitialized(i);r.push(...h.updated),a.push(...h.added),c.push(...h.removed),e.push(...h.affected)}),i==null||i.attemptAutoclose("sync-dependents",this.id),{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}onDetachedDependencyRemoved(i,r,a){const c=[],e=[],f=[],h=[];return r==="implements"&&(this.removeImplementation(i,a),c.push(this)),r==="extends"&&(this.setExtension(null,a),c.push(this)),{updated:C(c),added:C(e),removed:C(f),affected:C(h),self:this}}onDetachedDependencyRestored(i,r,a){const c=[],e=[],f=[],h=[];return r==="implements"&&(this.addImplementation(i,a),c.push(this)),r==="extends"&&(this.setExtension(i,a),c.push(this)),{updated:C(c),added:C(e),removed:C(f),affected:C(h),self:this}}unsubscribeFromDependencies(){return this.implements.forEach(i=>{ma.includes(i.type)||i.unsubscribeDependents([{entity:this,field:"implements"}])}),this.extends&&(ma.includes(this.extends.type)||this.extends.unsubscribeDependents([{entity:this,field:"extends"}])),this}subscribeToDependencies(){return this.implements.forEach(i=>{ma.includes(i.type)||i.subscribeDependents([{entity:this,field:"implements"}])}),this.extends&&(ma.includes(this.extends.type)||this.extends.subscribeDependents([{entity:this,field:"extends"}])),this}increaseVersion(i){var r;if(this.project.diggestedBuiltInBaseEntitiesIds.has(this.id))return this;if(i&&!B(i).isValid())throw new Error(`The shared timestamp '${i}' is not a valid ISO 8601 date string.`);if(i&&B(i).isSame(B(this.createdAt)))return this;if(!((r=this.knownVersions)!=null&&r.has(this.version))&&this.project.initialized)throw new Error(`The current ${this.type} ${this.id} version '${this.version}' is not captured in the 'knownVersions' map. Capture the current version before increasing it to avoid losing data.`);if(!this.activeVersion)throw new Error(`Only active versions can be increased. Entity with id '${this.id}' and version '${this.version}' is not active.`);return this.previousVersion=this.version,this.version=x.UUID.uuid(),this.createdAt=B(i).toISOString()||B().toISOString(),this}captureVersion(){var r;const i=((r=this.knownVersions)==null?void 0:r.get(this.version))||new Ni(this,this.project);if(!this.activeVersion)throw new Error(`Only active versions can be captured. Entity of type ${this.type} with id '${this.id}' and version '${this.version}' is not active.`);if(this.version!==i.version)throw new Error(`Captured ${this.type} with id '${this.id}', version '${i.version}' does not match current entity version '${this.version}'.`);return this.knownVersions=this.knownVersions?this.knownVersions.set(this.version,i):new Map().set(this.version,i),this.apply(i),this}snapshot(){const i=new Ni(this,this.project);return this.apply(i)}apply(i){const r=this.toMeta();return i.metaSync(r,null),i.properties=[...this.properties],i.methods=[...this.methods],i.abstractMethods=[...this.abstractMethods],i.extends=this.extends,i.implements=[...this.implements],i.allPropertiesImplement=this.allPropertiesImplement,i.additionalPropertiesDataType=this.additionalPropertiesDataType,i.parent=this.parent,i}recursiveCaptureUpstreamVersions(i){const r=[],a=[],c=[],e=[];if(this.parent){this.parent.increaseVersion(i);const f=this.parent.recursiveCaptureUpstreamVersions(i);r.push(this.parent,...f.updated),a.push(...f.added),c.push(...f.removed)}return{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}async restoreVersion(i,r){var m;const a=[],c=[],e=[],f=[];if(this.version===i&&(r!=null&&r.skipIfSameVersion))return{updated:C(a),added:C(c),removed:C(e),affected:C(f),self:this};if(!this.knownVersions){const E=new Map;for(const[b,A]of this.knownVersions||new Map){if(E.set(b,A),A.activeVersion=!1,A.knownVersions)for(const[_,P]of A.knownVersions)E.set(_,P);A.knownVersions=null}}let h=(m=this.knownVersions)==null?void 0:m.get(i);if(!h){const E=await this.APILoadVersion({},i);if(!E)throw new Error(`Version with id '${i}' for entity with id '${this.id}' not found.`);h=new Ni(E,this.project)}return this.metaSync(h.toShallowJSON(),null),this.previousVersion=h.previousVersion,this.version=h.version,this.createdAt=h.createdAt,this.author=h.author,this.deleted=h.deleted,this.properties=[...h.properties],this.methods=[...h.methods],this.abstractMethods=[...h.abstractMethods],this.extends=h.extends,this.implements=[...h.implements],this.allPropertiesImplement=h.allPropertiesImplement,this.additionalPropertiesDataType=h.additionalPropertiesDataType,this.parent=h.parent,{updated:C(a),added:C(c),removed:C(e),affected:C(f),self:this}}updateWithShallowTransfer(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.UpdateWithShallowTransfer))){if(!this.checkCanEdit(this,r))return Y.Logger.warn(`[updateWithShallowTransfer] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.UpdateWithShallowTransfer,this.id),this;if(this.metaSync(i,r),this.version=i.version,this.createdAt=i.createdAt,this.author=i.author,this.deleted=i.deleted,this.previousVersion=i.previousVersion,this.unsubscribeFromDependencies(),i.parent){const f=ie(i.parent),h=this.project.get(f),m=this.parent;if(m&&m.id!==(h==null?void 0:h.id)&&this.removeFromParent(r),h)this.setParent(h,r),this.addSelfToProject(r);else throw r==null||r.attemptAutoclose(w.UpdateWithShallowTransfer,this.id),new Error(`${this.type} with id '${this.id}' has a 'parent' reference '${f}' that isn't found in the project`)}else throw r==null||r.attemptAutoclose(w.UpdateWithShallowTransfer,this.id),new Error(`${this.type} with id '${this.id}' must have a 'parent'`);if(i.extends){const f=ie(i.extends),h=this.project.get(f);h&&this.setExtension(h,r)}else this.setExtension(null,r);if(i.implements.forEach(f=>{const h=ie(f),m=this.project.get(h);if(m)this.addImplementation(m,r);else throw new Error(`${fr(this.type)} with id '${this.id}' has a 'implements' reference "${h}" which is missing in the project`)}),this.implements.filter(f=>{const h=ie(f);return!i.implements.find(m=>ie(m)===h)}).forEach(f=>{this.removeImplementation(f,r)}),i.methods.forEach(f=>{const h=ie(f),m=this.project.get(h);m&&this.addMethod(m,r)}),this.methods.filter(f=>{const h=ie(f);return!i.methods.find(m=>ie(m)===h)}).forEach(f=>{this.removeMethod(f,r)}),i.properties.forEach(f=>{const h=ie(f),m=this.project.get(h);m&&this.addProperty(m,r)}),this.properties.filter(f=>{const h=ie(f);return!i.properties.find(m=>ie(m)===h)}).forEach(f=>{this.removeProperty(f,r)}),i.allPropertiesImplement){const f=ie(i.allPropertiesImplement),h=this.project.get(f);h&&this.setAllPropertiesImplement(h,r)}else this.setAllPropertiesImplement(null,r);if(i.additionalPropertiesDataType){const f=ie(i.additionalPropertiesDataType),h=this.project.get(f);h&&this.setAdditionalPropertiesDataType(h,r)}else this.setAdditionalPropertiesDataType(null,r);return this.captureVersion(),this.subscribeToDependencies(),r==null||r.attemptAutoclose(w.UpdateWithShallowTransfer,this.id),this}updateWithGenerationTarget(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.UpdateWithGenerationTarget))){var a;if(!this.checkCanEdit(this,r))return Y.Logger.warn(`[updateWithGenerationTarget] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.UpdateWithGenerationTarget,this.id),this;if(this.metaSync(i,r),i.parent){const c=ie(i.parent),e=this.project.get(c),f=this.parent;if(f&&f.id!==(e==null?void 0:e.id)&&this.removeFromParent(r),e)this.setParent(e,r),this.addSelfToProject(r);else throw r==null||r.attemptAutoclose(w.UpdateWithGenerationTarget,this.id),new Error(`${this.type} with id '${this.id}' has a 'parent' reference '${c}' that isn't found in the project`)}if(i.extends){const c=ie(i.extends),e=this.project.get(c);if(e)this.setExtension(e,r);else throw new Error(`${fr(this.type)} with id '${this.id}' has an 'extends' reference "${c}" which is missing in the project`)}else i.extends===null&&this.setExtension(null,r);return(a=i.implements)==null||a.forEach(c=>{const e=ie(c),f=this.project.get(e);if(f)this.addImplementation(f,r);else throw new Error(`${fr(this.type)} with id '${this.id}' has a 'implements' reference "${e}" which is missing in the project`)}),i.implements&&this.implements.filter(e=>{const f=ie(e);return!(i.implements||[]).find(h=>ie(h)===f)}).forEach(e=>{this.removeImplementation(e,r)}),this.captureVersion(),this.subscribeToDependencies(),r==null||r.attemptAutoclose(w.UpdateWithGenerationTarget,this.id),this}hydrateAncestors(){const i=[],r=[],a=[],c=[];if(this.initialData.parent){const e=ie(this.initialData.parent),f=this.project.get(e);if(f)this.setParent(f,null),i.push(f);else throw new Error(`${this.type} with id '${this.id}' has a 'parent' reference '${e}' that isn't found in the project`)}else throw new Error(`${this.type} with id '${this.id}' must have a 'parent'`);if(this.initialData.extends){const e=ie(this.initialData.extends),f=this.project.get(e);f&&(this.setExtension(f,null),f.type!==d.BuiltInBaseEntity&&i.push(f))}return this.initialData.implements.forEach(e=>{const f=ie(e),h=this.project.get(f);if(h)this.addImplementation(h,null),h.type!==d.BuiltInBaseEntity&&i.push(h);else throw new Error(`${fr(this.type)} with id '${this.id}' has a 'implements' reference "${f}" which is missing in the project`)}),{updated:C(i),added:C(r),removed:C(a),affected:C(c),self:this}}afterAllChildrenInitialized(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.AfterAllChildrenInitialized))){if(!this.checkCanEdit(this,i))return Y.Logger.warn(`[afterAllChildrenInitialized] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),i==null||i.attemptAutoclose(w.AfterAllChildrenInitialized,this.id),{updated:[],added:[],removed:[],affected:[],self:this};const r=[],a=[],c=[],e=[];this.initialized=!0;const{updated:f,added:h,removed:m,affected:E}=this.syncImplementationProperties(i);r.push(...f),a.push(...h),c.push(...m),e.push(...E);const{updated:b,added:A,removed:_,affected:P}=this.addExtendedProperties(i);r.push(...b),a.push(...A),c.push(..._),e.push(...P);const{updated:V,added:M,removed:G}=this.removeUnrecognizedProperties(i);r.push(...V),a.push(...M),c.push(...G);const{updated:k,added:q,removed:ne,affected:J}=this.syncImplementationMethods(i);r.push(...k),a.push(...q),c.push(...ne),e.push(...J);const{updated:se,added:te,removed:le,affected:ue}=this.addExtendedMethods(i);r.push(...se),a.push(...te),c.push(...le),e.push(...ue);const{updated:z,added:Q,removed:de}=this.removeUnrecognizedMethods(i);r.push(...z),a.push(...Q),c.push(...de),this.addSuggestions(),this.properties.sort((fe,be)=>fe.index-be.index);let he=this.project.getDefinitionEntities(new Set([this.id])).filter(fe=>fe.id!==this.id&&fe.name.toLowerCase()===this.name.toLowerCase());if(he.length&&(this.parent.type===d.Project&&(he.filter(be=>be.parent.type!==d.Project).forEach(be=>{N_e(be,i)}),he=he.filter(be=>be.name.toLowerCase()===this.name.toLowerCase())),he.length)){const fe=su(this.name,he);this.metaSync({name:fe},i)}return i==null||i.attemptAutoclose(w.AfterAllChildrenInitialized,this.id),{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}addSelfToProject(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"add-self-to-project"))){const r=[this],a=[],c=[],e=[];if(this.parent.type===d.DataType){const f=this.parent;f.entity=this,r.push(f)}else this.project.addDefinitionEntity(this);return this.subscribe(),this.subscribeToDependencies(),i==null||i.attemptAutoclose("add-self-to-project",this.id),{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}setParent(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.SetParent))){var a;return this.checkCanEditWithCounterpartAndSideEffects(this,i,w.SetParent,r)?(((a=this.parent)==null?void 0:a.id)!==(i==null?void 0:i.id)&&(this.parent=i,r&&(r==null||r.add(this,W.Updated))),r==null||r.attemptAutoclose(w.SetParent,this.id),this):this}setExtension(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.SetExtension))){var a;return this.checkCanEdit(this,r)?(((a=this.extends)==null?void 0:a.id)!==(i==null?void 0:i.id)&&(this.extends=i,this.subscribeToDependencies(),r&&(r==null||r.add(this,W.Updated))),r==null||r.attemptAutoclose(w.SetExtension,this.id),this):(Y.Logger.warn(`[setExtension] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.SetExtension,this.id),this)}addImplementation(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.AddImplementation))){return this.checkCanEdit(this,r)?(this.implements.includes(i)||(this.implements.push(i),this.subscribeToDependencies(),r==null||r.add(this,W.Updated)),r==null||r.attemptAutoclose(w.AddImplementation,this.id),this):(Y.Logger.warn(`[addImplementation] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.AddImplementation,this.id),this)}removeImplementation(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.RemoveImplementation))){return this.checkCanEdit(this,r)?(this.implements.includes(i)&&(this.implements=this.implements.filter(a=>a.id!==i.id),r==null||r.add(this,W.Updated)),r==null||r.attemptAutoclose(w.RemoveImplementation,this.id),this):(Y.Logger.warn(`[removeImplementation] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.RemoveImplementation,this.id),this)}removeProperty(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.RemoveProperty))){return this.checkCanEdit(this,r)?(this.properties.includes(i)&&(this.properties=this.properties.filter(a=>a.id!==i.id),r==null||r.add(this,W.Updated)),r==null||r.attemptAutoclose(w.RemoveProperty,this.id),this):(Y.Logger.warn(`[removeProperty] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.RemoveProperty,this.id),this)}addMethod(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.AddMethod))){return this.checkCanEdit(this,r)?(this.methods.includes(i)||(this.methods.push(i),this.suggestedMethods=this.suggestedMethods.filter(a=>a.name!==i.name),r==null||r.add(this,W.Updated)),r==null||r.attemptAutoclose(w.AddMethod,this.id),this):(Y.Logger.warn(`[addMethod] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.AddMethod,this.id),this)}removeMethod(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.RemoveMethod))){return this.checkCanEdit(this,r)?(this.methods.includes(i)&&(this.methods=this.methods.filter(a=>a.id!==i.id),r==null||r.add(this,W.Updated)),r==null||r.attemptAutoclose(w.RemoveMethod,this.id),this):(Y.Logger.warn(`[removeMethod] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.RemoveMethod,this.id),this)}addProperty(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.AddProperty))){return this.checkCanEdit(this,r)?(this.properties.includes(i)||(this.properties.push(i),this.suggestedProperties=this.suggestedProperties.filter(a=>a.name!==i.name),r==null||r.add(this,W.Updated)),r==null||r.attemptAutoclose(w.AddProperty,this.id),this):(Y.Logger.warn(`[addProperty] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.AddProperty,this.id),this)}addSuggestedProperty(i){return this.suggestedProperties.includes(i)||this.suggestedProperties.push(i),this}addSuggestedMethod(i){return this.suggestedMethods.includes(i)||this.suggestedMethods.push(i),this}removeSuggestedProperty(i){return this.suggestedProperties=this.suggestedProperties.filter(r=>r.id!==i.id),this}removeSuggestedMethod(i){return this.suggestedMethods=this.suggestedMethods.filter(r=>r.id!==i.id),this}addAbstractMethod(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.AddAbstractMethod))){return this.checkCanEdit(this,r)?(this.abstractMethods.includes(i)||(this.abstractMethods.push(i),r==null||r.add(this,W.Updated)),r==null||r.attemptAutoclose(w.AddAbstractMethod,this.id),this):(Y.Logger.warn(`[addAbstractMethod] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.AddAbstractMethod,this.id),this)}removeAbstractMethod(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.RemoveAbstractMethod))){return this.checkCanEdit(this,r)?(this.abstractMethods.includes(i)&&(this.abstractMethods=this.abstractMethods.filter(a=>a.id!==i.id),r==null||r.add(this,W.Updated)),r==null||r.attemptAutoclose(w.RemoveAbstractMethod,this.id),this):(Y.Logger.warn(`[removeAbstractMethod] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.RemoveAbstractMethod,this.id),this)}initChildren(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"init-children"))){if(this.initialized||this.startedInitialization)return this;if(this.startedInitialization=!0,this.properties=this.initialData.properties.map(r=>{const a=Re(r,this.project);return a.setParent(this,null),a.initChildren(i),a}),this.methods=this.initialData.methods.map(r=>{const a=Re(r,this.project);return a.setParent(this,null),a.initChildren(i),a}),this.abstractMethods=this.initialData.abstractMethods.map(r=>{const a=Re(r,this.project);return a.setParent(this,null),a.initChildren(i),a}),this.initialData.extends&&(this.extends=Re(this.initialData.extends,this.project)),this.implements=this.initialData.implements.map(r=>Re(r,this.project)),this.initialData.allPropertiesImplement){const r=Re(this.initialData.allPropertiesImplement,this.project);r.setParent(this,null),r.initChildren(null),this.setAllPropertiesImplement(r,i)}if(this.initialData.additionalPropertiesDataType){const r=Re(this.initialData.additionalPropertiesDataType,this.project);r.setParent(this,null),r.initChildren(null),this.setAdditionalPropertiesDataType(r,i)}return this.subscribeToDependencies(),this.afterAllChildrenInitialized(i),i==null||i.attemptAutoclose("init-children",this.id),this}removeUnrecognizedProperties(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"remove-unrecognized-properties"))){const r=[],a=[],c=[],e=[];let f=[...this.properties];f=f.filter(b=>b.parent.id===this.id),f=f.filter(b=>!b.isExtendedProperty);const h=this.implementedPropertiesFromOriginalParents,m=this.getAllPropertiesImplements();return f.filter(b=>this.interactive&&!b.implements.length?!1:!b.implements.find(_=>!!h.find(P=>P.id===_.id)||!!m.find(P=>P.id===_.id))).forEach(b=>{const A=b.remove({ignoreUpstream:!1},i);c.push(...A.removed),r.push(...A.updated)}),i==null||i.attemptAutoclose("remove-unrecognized-properties",this.id),{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}removeUnrecognizedMethods(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"remove-unrecognized-methods"))){const r=[],a=[],c=[],e=[];let f=[...this.methods];f=f.filter(m=>m.parent.id===this.id),f=f.filter(m=>!m.isExtendedMethod);const h=this.implementedMethodsFromOriginalParents;return f=f.filter(m=>this.interactive&&!m.implements?!1:!h.find(E=>{var b;return E.id===((b=m.implements)==null?void 0:b.id)})),f.forEach(m=>{const E=m.remove({ignoreUpstream:!1},i);c.push(...E.removed),r.push(...E.updated)}),i==null||i.attemptAutoclose("remove-unrecognized-methods",this.id),{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}syncImplementationMethods(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"sync-implementation-methods"))){const r=[],a=[],c=[],e=[],f=this.methods,h=this.implementedMethodsFromOriginalParents,m=[...this.allBaseMethodsFromExtendedAndImplementedEntities,...f];return h.filter(b=>!m.find(_=>{var P;return((P=_.implements)==null?void 0:P.id)===b.id})).forEach(b=>{if(this.methods.find(V=>{var M;return((M=V.implements)==null?void 0:M.id)===b.id}))return;const _=this.methods.find(V=>{var ne,J;if(V.name===b.name&&!V.implements)return!0;const M=di(this,ge.CRON_JOB),G=di(this,ge.HTTP_ENDPOINT),k=((ne=V.implements)==null?void 0:ne.id)===re["built-in-base-entity"].BUILT_IN_HTTP_ENDPOINT_ENTITY.methods.handler.id,q=((J=V.implements)==null?void 0:J.id)===re["built-in-base-entity"].BUILT_IN_CRON_JOB_ENTITY.methods.handler.id;return!!(M&&!q&&!G&&k||G&&!k&&!M&&q)});if(_&&_.type===d.FunctionDeclaration){_.setImplements(b,i),_.metaSync({name:b.name},i),i==null||i.add(_,W.Updated),i==null||i.add(this,W.Updated);return}const P=b.implementAsFunctionDeclaration(i,this);a.push(P),i==null||i.add(P,W.Added),this.addMethod(P,i)}),this.methods.sort((b,A)=>b.index-A.index).forEach(b=>{b.afterAllChildrenInitialized(i)}),i==null||i.attemptAutoclose("sync-implementation-methods",this.id),{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}syncImplementationProperties(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"sync-implementation-properties"))){const r=[],a=[],c=[],e=[],f=this.properties,h=this.implementedPropertiesFromOriginalParents.filter(E=>!this.allBasePropertiesFromExtendedAndImplementedEntities.find(A=>!!A.implements.find(_=>_.id===E.id))),m=[...this.allBasePropertiesFromExtendedAndImplementedEntities,...f];return h.forEach(E=>{const b=m.find(V=>!!V.implements.find(M=>M.id===E.id));if(b){const{updated:V,added:M,removed:G,affected:k}=b.syncWithImplementation(i);r.push(...V),a.push(...M),c.push(...G),e.push(...k);return}if(this.properties.find(V=>!!V.implements.find(M=>M.id===E.id)))return;const _=this.properties.find(V=>V.name===E.name&&!!V.abstract&&!V.implements);if(_){_.addImplementation(E,i),_.metaSync({abstract:!1},i),_.afterAllChildrenInitialized(i);return}const P=E.implement(this,i,x.UUID.uuid());a.push(P),i==null||i.add(P,W.Added)}),this.properties.find(E=>{var b;return E.id===((b=this.allPropertiesImplement)==null?void 0:b.id)})&&this.removeAllPropertiesImplement(i),i==null||i.attemptAutoclose("sync-implementation-properties",this.id),{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}addExtendedMethods(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"add-extended-methods"))){const r=[],a=[],c=[],e=[],f=this.methods,m=this.extendedMethodsFromOriginalParents.filter(b=>b.type===d.FunctionDeclaration),E=new Set(f.filter(b=>{var A;return!!((A=b.extends)!=null&&A.id)}).map(b=>b.extends.id));return m.forEach(b=>{if(E.has(b.id))return;E.add(b.id);const A=b.clone(i,this,x.UUID.uuid());A.setExtends(b,i),A.initChildren(i),a.push(A),i==null||i.add(A,W.Added),this.addMethod(A,i)}),i==null||i.attemptAutoclose("add-extended-methods",this.id),{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}addExtendedProperties(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"add-extended-properties"))){const r=[],a=[],c=[],e=[],f=this.properties,h=this.extendedPropertiesFromOriginalParents,m=h.filter(b=>h.find(_=>!!_.implements.find(P=>P.id===b.id))?!1:!b.abstract),E=new Set(f.filter(b=>{var A;return!!((A=b.extends)!=null&&A.id)}).map(b=>b.extends.id));return m.forEach(b=>{if(E.has(b.id))return;E.add(b.id);const A=b.clone(i,this,x.UUID.uuid());A.setExtends(b,i),A.initChildren(i),a.push(A),i==null||i.add(A,W.Added),this.addProperty(A,i)}),[...this.properties].forEach(b=>{if(b.extends)return;if(m.find(_=>_.name===b.name&&_.implements.every(P=>!!b.implements.find(V=>V.id===P.id)))){const _=b.remove({ignoreUpstream:!1},i);c.push(..._.removed),r.push(..._.updated)}}),this.properties.forEach(b=>{const A=b.afterAllChildrenInitialized(i);r.push(...A.updated),e.push(...A.affected),a.push(...A.added),c.push(...A.removed)}),i==null||i.attemptAutoclose("add-extended-properties",this.id),{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}addSuggestions(){return this.implements.forEach(i=>{Jje(this,i).forEach(c=>{const e=c.toJSON();e.id=`_suggestion--parent--${this.id}--${c.id}`;const f=Re(e,this.project);f.suggestion=!0,f.setParent(this,null),f.initChildren(null),this.addSuggestedProperty(f)}),Qje(this,i).forEach(c=>{const e=`_suggestion--parent--${this.id}--${c.id}`,f=c.implementAsFunctionDeclaration(null,this,e),h=Re(f,this.project);if(h.suggestion=!0,h.setParent(this,null),h.initChildren(null),this.methods=this.methods.filter(m=>m.id!==e),h.inputs.forEach(m=>{m.suggestion=!0}),h.returnStatements.length){const m=h.returnStatements[0];m.suggestion=!0,m.outputs.forEach(E=>{E.suggestion=!0})}this.addSuggestedMethod(h)})}),this}subscribe(){var i;return this.activeVersion=!0,(i=this.knownVersions)==null||i.forEach(r=>{r.version!==this.version&&(r.activeVersion=!1)}),this.project.subscribeInstance(this),this.project.subscribedDefinitionEntities.add(this.id),this}unsubscribe(){return this.project.unsubscribeInstance(this),this.project.subscribedDefinitionEntities.delete(this.id),this}metaSync(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"meta-sync"))){const a=tn(this,i,r),c=en(this,a),e=this.toMeta();return this.name=a.name!==void 0?a.name:e.name,this.codeName=a.codeName!==void 0?a.codeName:e.codeName,this.description=a.description!==void 0?a.description:e.description,this.x=a.x||e.x,this.y=a.y||e.y,this.static=a.static!==void 0?a.static:this.static,this.abstract=a.abstract!==void 0?a.abstract:this.abstract,this.additionalProperties=a.additionalProperties!==void 0?a.additionalProperties:e.additionalProperties,super.baseMetaSync(a,this,r),a.deleted===!0&&!e.deleted?r==null||r.add(this,W.Removed):a.deleted===!1&&e.deleted?r==null||r.add(this,W.Added):c&&(r==null||r.add(this,W.Updated)),r==null||r.attemptAutoclose("meta-sync",this.id),this}async APILoad(i=Ke,...r){return await Ni.repository.APILoad(this.id,...r),this}async APICreate(i=Ke,...r){return await Ni.repository.APICreate(this.toShallowJSON(),...r),this}async APIUpdate(i=Ke,...r){return await Ni.repository.APIUpdate(this.toShallowJSON(),...r),this}async APIDelete(i=Ke,...r){return await Ni.repository.APIDelete(this.toShallowJSON(),...r),this}async APIClone(i=Ke,...r){return await Ni.repository.APIClone(this.id,...r),this}async APILoadVersion(i=Ke,r,...a){return await Ni.repository.APILoadVersion(this.id,r,...a)}removeFromParent(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.RemoveFromParent))){if(!this.checkCanEdit(this,i))return Y.Logger.warn(`[removeFromParent] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),i==null||i.attemptAutoclose(w.RemoveFromParent,this.id),{added:[],updated:[],removed:[],affected:[],self:this};const r=[],a=[],c=[],e=[];if(this.parent.type===d.Project)this.parent.removeDefinitionEntity(this);else if(this.parent.type===d.DataType&&this.parent.entity&&this.parent.entity.id===this.id){const f=this.parent.setEntity(null,i);r.push(f)}return i==null||i.attemptAutoclose(w.RemoveFromParent,this.id),{added:C(c),updated:C(r),removed:C(a),affected:C(e),self:this}}remove({ignoreUpstream:i}={ignoreUpstream:!1},r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.RemoveEntity))){var h;if(!this.checkCanDelete(this,r))return Y.Logger.warn(`[remove] User is not allowed to delete or edit this ${this.type} entity with id: ${this.id}`),r==null||r.event({id:`${w.RemoveEntity}-${this.id}--${Me.ActionOwnerEntityNonDeletable}`,action:w.RemoveEntity,owner:this,errorReason:Me.ActionOwnerEntityNonDeletable,rootAction:((h=r==null?void 0:r.self)==null?void 0:h.id)===this.id&&(r==null?void 0:r.actionName)===w.RemoveEntity}),r==null||r.attemptAutoclose(w.RemoveEntity,this.id),{added:[],updated:[],removed:[],affected:[],self:this};const a=[],c=[],e=[],f=[];if(r!=null&&r.hasRemoved(this.id))return r==null||r.attemptAutoclose(w.RemoveEntity,this.id),{added:[],updated:[],removed:[],affected:[],self:this};if(c.push(this),this.unsubscribe(),this.unsubscribeFromDependencies(),this.project.subscribeDeletedInstance(this),this.metaSync({deleted:!0},r),Object.values(this.detachedDependents).forEach(m=>{const{updated:E,removed:b,added:A}=m.entity.onDetachedDependencyRemoved(this,m.field,r);a.push(...E),c.push(...b),e.push(...A)}),this.properties.forEach(m=>{const{updated:E,removed:b}=m.remove({ignoreUpstream:!0},r);a.push(...E),c.push(...b)}),this.methods.forEach(m=>{const{updated:E,removed:b}=m.remove({ignoreUpstream:!0},r);a.push(...E),c.push(...b)}),this.abstractMethods.forEach(m=>{const{updated:E,removed:b}=m.remove({ignoreUpstream:!0},r);a.push(...E),c.push(...b)}),this.suggestedProperties.forEach(m=>{const{updated:E,removed:b}=m.remove({ignoreUpstream:!0},r);a.push(...E),c.push(...b)}),this.suggestedMethods.forEach(m=>{const{updated:E,removed:b}=m.remove({ignoreUpstream:!0},r);a.push(...E),c.push(...b)}),!i){const m=this.removeFromParent(r);e.push(...m.added),a.push(...m.updated),c.push(...m.removed),f.push(...m.affected)}return r==null||r.attemptAutoclose(w.RemoveEntity,this.id),{added:C(e),updated:C(a),removed:C(c),affected:C(f),self:this}}restore({}={},i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.RestoreEntity))){if(!this.checkCanEdit(this,i))return Y.Logger.warn(`[restore] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),i==null||i.attemptAutoclose(w.RestoreEntity,this.id),{added:[],updated:[],removed:[],affected:[],self:this};const r=[],a=[],c=[],e=[];return i!=null&&i.hasAdded(this.id)?(i==null||i.attemptAutoclose(w.RestoreEntity,this.id),{added:[],updated:[],removed:[],affected:[],self:this}):(this.subscribe(),this.project.unsubscribeDeletedInstance(this),this.metaSync({deleted:!1},i),Object.values(this.detachedDependents).forEach(f=>{const{updated:h,removed:m,added:E}=f.entity.onDetachedDependencyRestored(this,f.field,i);a.push(...h),c.push(...m),r.push(...E)}),this.properties.forEach(f=>{const{updated:h}=f.restore({},i);a.push(...h)}),this.methods.forEach(f=>{const{updated:h}=f.restore({},i);a.push(...h)}),this.abstractMethods.forEach(f=>{const{updated:h}=f.restore({},i);a.push(...h)}),this.suggestedProperties.forEach(f=>{const{updated:h}=f.restore({},i);a.push(...h)}),this.suggestedMethods.forEach(f=>{const{updated:h}=f.restore({},i);a.push(...h)}),i==null||i.attemptAutoclose(w.RestoreEntity,this.id),{added:C(r),updated:C(a),removed:C(c),affected:C(e),self:this})}toFlat(i=new Set){var a;return i.has(this.id)?[]:(i.add(this.id),[this,...((a=this.extends)==null?void 0:a.toFlat(i))||[],...this.implements.flatMap(c=>c.toFlat(i)),...this.properties.flatMap(c=>c.toFlat(i)),...this.methods.flatMap(c=>c.toFlat(i)),...this.abstractMethods.flatMap(c=>c.toFlat(i)),...this.parent.toFlat(i)])}toFlatIds(i=new Set){var a;return i.has(this.id)?[]:(i.add(this.id),[this.id,...((a=this.extends)==null?void 0:a.toFlatIds(i))||[],...this.implements.flatMap(c=>c.toFlatIds(i)),...this.properties.flatMap(c=>c.toFlatIds(i)),...this.methods.flatMap(c=>c.toFlatIds(i)),...this.abstractMethods.flatMap(c=>c.toFlatIds(i)),...this.parent.toFlatIds(i)])}toMeta(){return{id:this.id,version:this.version,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,codeName:this.codeName,description:this.description,static:this.static,abstract:this.abstract,x:this.x,y:this.y,type:this.type,editable:this.editable,deletable:this.deletable,additionalProperties:this.additionalProperties,name:this.name}}toJSON(i=new Set){var r,a,c;return i.has(this.id)?this.toReference():(i.add(this.id),{id:this.id,version:this.version,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,type:this.type,editable:this.editable,deletable:this.deletable,name:this.name,codeName:this.codeName,description:this.description,x:this.x,y:this.y,static:this.static,abstract:this.abstract,additionalProperties:this.additionalProperties,allPropertiesImplement:((r=this.allPropertiesImplement)==null?void 0:r.toJSON(i))||null,additionalPropertiesDataType:((a=this.additionalPropertiesDataType)==null?void 0:a.toJSON(i))||null,properties:this.properties.map(e=>e.toJSON(i)),methods:this.methods.map(e=>e.toJSON(i)),abstractMethods:this.abstractMethods.map(e=>e.toJSON(i)),implements:this.implements.map(e=>e.toJSON(i)),extends:((c=this.extends)==null?void 0:c.toJSON(i))||null,parent:this.parent.toReference()})}toJSONClone(i=at){var a,c,e,f,h,m,E,b,A,_;let r;return(a=i.seenEntityMaps)!=null&&a.has(this.id)?r=i.seenEntityMaps.get(this.id):(r=i.newId||dn(this,this.project,i.uuidStrategy),i.seenEntityMaps&&i.seenEntityMaps.set(this.id,r)),(c=i.seenEntities)!=null&&c.has(r)||(e=i.seenEntities)!=null&&e.has(this.id)?this.toReference({seenEntityMaps:i.seenEntityMaps}):((f=i.seenEntities)==null||f.add(r),(h=i.seenEntities)==null||h.add(this.id),{id:r,version:x.UUID.uuid(),createdAt:i.timestamp||B().toISOString(),author:x.sessionAuthor,previousVersion:null,deleted:!1,type:this.type,editable:this.editable,deletable:this.deletable,name:this.name,codeName:this.codeName,description:this.description,x:this.x,y:this.y,static:this.static,abstract:this.abstract,additionalProperties:this.additionalProperties,allPropertiesImplement:((m=this.allPropertiesImplement)==null?void 0:m.toJSONClone(i))||null,additionalPropertiesDataType:((E=this.additionalPropertiesDataType)==null?void 0:E.toJSONClone(i))||null,properties:this.properties.map(P=>P.toJSONClone({...i,newId:null})),methods:this.methods.map(P=>P.toJSONClone({...i,newId:null})),abstractMethods:this.abstractMethods.map(P=>P.toJSONClone({...i,newId:null})),implements:this.implements.map(P=>P.type===d.BuiltInBaseEntity?P.toJSON(i.seenEntities):P.toJSONClone({...i,newId:null})),extends:((b=this.extends)==null?void 0:b.type)===d.BuiltInBaseEntity?(A=this.extends)==null?void 0:A.toJSON(i.seenEntities):(_=this.extends)==null?void 0:_.toJSONClone({...i,newId:null}),parent:this.parent.toReference({seenEntityMaps:i.seenEntityMaps})})}toReference(i=at){var a;let r=this.id;return(a=i.seenEntityMaps)!=null&&a.has(this.id)&&(r=i.seenEntityMaps.get(this.id)),{id:r+"--"+x.UUID.uuid()+"--ref",type:d.GenericReference,entityId:r,version:this.version,entityType:this.type}}toShallowJSON(i=at){var a,c,e,f;let r=this.id;return(a=i.seenEntityMaps)!=null&&a.has(this.id)&&(r=i.seenEntityMaps.get(this.id)),{id:r,version:this.version,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,name:this.name,codeName:this.codeName,description:this.description,type:this.type,editable:this.editable,deletable:this.deletable,x:this.x,y:this.y,static:this.static,abstract:this.abstract,additionalProperties:this.additionalProperties,allPropertiesImplement:((c=this.allPropertiesImplement)==null?void 0:c.toReference(i))||null,additionalPropertiesDataType:((e=this.additionalPropertiesDataType)==null?void 0:e.toReference(i))||null,properties:this.properties.map(h=>h.toReference(i)),methods:this.methods.map(h=>h.toReference(i)),abstractMethods:this.abstractMethods.map(h=>h.toReference(i)),implements:this.implements.map(h=>h.toReference(i)),extends:((f=this.extends)==null?void 0:f.toReference(i))||null,parent:this.parent.toReference(i)}}toFlatJSON(i=new Set){var a,c,e;return i.has(this.id)?[]:(i.add(this.id),[this.toShallowJSON(),...this.properties.flatMap(f=>f.toFlatJSON(i)),...this.methods.flatMap(f=>f.toFlatJSON(i)),...this.abstractMethods.flatMap(f=>f.toFlatJSON(i)),...this.implements.flatMap(f=>f.toFlatJSON(i)),...((a=this.extends)==null?void 0:a.toFlatJSON(i))||[],...this.parent.toFlatJSON(i),...((c=this.additionalPropertiesDataType)==null?void 0:c.toFlatJSON(i))||[],...((e=this.allPropertiesImplement)==null?void 0:e.toFlatJSON(i))||[]])}toGenerationTarget(i=at){var c,e,f;const r=this.parent.type===d.Project?void 0:(c=i.seenEntityMaps)!=null&&c.has(this.parent.id)?i.seenEntityMaps.get(this.parent.id):this.parent.id;let a=this.id;return(e=i.seenEntityMaps)!=null&&e.has(this.id)&&(a=i.seenEntityMaps.get(this.id)),{id:a,name:this.name,description:this.description,type:this.type,static:this.static,abstract:this.abstract,extends:(f=this.extends)==null?void 0:f.id,additionalProperties:this.additionalProperties,implements:this.implements.map(h=>h.id),parent:r}}toFlatGenerationTarget(i=new Set){var a,c,e;return i.has(this.id)?[]:(i.add(this.id),[this.toGenerationTarget(),...this.properties.flatMap(f=>f.toFlatGenerationTarget(i)),...this.methods.flatMap(f=>f.toFlatGenerationTarget(i)),...this.abstractMethods.flatMap(f=>f.toFlatGenerationTarget(i)),...this.implements.filter(f=>f.type===d.DefinitionEntity).flatMap(f=>f.toFlatGenerationTarget(i)),...((a=this.extends)==null?void 0:a.toFlatGenerationTarget(i))||[],...this.parent.toFlatGenerationTarget(i),...((c=this.additionalPropertiesDataType)==null?void 0:c.toFlatGenerationTarget(i))||[],...((e=this.allPropertiesImplement)==null?void 0:e.toFlatGenerationTarget(i))||[]])}clearErrors(){var i,r;return this.errors=[],this.properties.forEach(a=>a.clearErrors()),this.methods.forEach(a=>a.clearErrors()),this.abstractMethods.forEach(a=>a.clearErrors()),(i=this.additionalPropertiesDataType)==null||i.clearErrors(),(r=this.allPropertiesImplement)==null||r.clearErrors(),this}validate(){return this.errors=Yje(this),{success:!0}}async validateAsync(i={}){const r=Y.YieldTracker.from(i);return this.errors=await zje(this,{tracker:r}),{success:!0}}getErrors(){var r,a;return[...this.errors,...this.properties.flatMap(c=>c.getErrors()),...this.methods.flatMap(c=>c.getErrors()),...this.abstractMethods.flatMap(c=>c.getErrors()),...((r=this.additionalPropertiesDataType)==null?void 0:r.getErrors())||[],...((a=this.allPropertiesImplement)==null?void 0:a.getErrors())||[]]}async getErrorsAsync(i={}){const r=Y.YieldTracker.from(i),a=[...this.errors];await r.tick();for(const c of this.properties)a.push(...await c.getErrorsAsync({tracker:r}));for(const c of this.methods)a.push(...await c.getErrorsAsync({tracker:r}));for(const c of this.abstractMethods)a.push(...await c.getErrorsAsync({tracker:r}));return this.additionalPropertiesDataType&&a.push(...await this.additionalPropertiesDataType.getErrorsAsync({tracker:r})),this.allPropertiesImplement&&a.push(...await this.allPropertiesImplement.getErrorsAsync({tracker:r})),a}getShallowErrors(){return this.errors}clone(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.CloneEntity)),r=null,a=null,c=!0){var M,G,k;const e=Fr(r,this),f=this.toJSON(),h=a||x.UUID.uuid(),m=r||this.parent;f.properties=[],f.methods=[],f.abstractMethods=[];const E=h.split("-id"),b=E[E.length-1||0]||h;f.id=h,f.version=x.UUID.uuid(),f.createdAt=(i==null?void 0:i.timestamp)||B().toISOString(),f.author=(i==null?void 0:i.author)||"1",f.previousVersion=null,f.deleted=!1,f.editable=!0,f.deletable=!0,f.parent=m.toReference();const A=lr(f,e);A.hydrateAncestors(),A.setParent(m,i),c&&(A.subscribe(),A.addSelfToProject(i)),A.initChildren(i),i==null||i.add(A,W.Added);const _=(M=this.properties)==null?void 0:M.map(q=>this.project.diggestedBuiltInBaseEntitiesIds.has(q.id)?q:q.clone(i,A,x.UUID.uuid(),c));A.properties=_;const P=(G=this.methods)==null?void 0:G.map((q,ne)=>this.project.diggestedBuiltInBaseEntitiesIds.has(q.id)?q:q.clone(i,A,b+"-method-"+ne+"-id",c));A.methods=P;const V=(k=this.abstractMethods)==null?void 0:k.map((q,ne)=>this.project.diggestedBuiltInBaseEntitiesIds.has(q.id)?q:q.clone(i,A,b+"-abstract-method-"+ne+"-id",c));if(A.abstractMethods=V,this.additionalPropertiesDataType)if(this.project.diggestedBuiltInBaseEntitiesIds.has(this.additionalPropertiesDataType.id))A.setAdditionalPropertiesDataType(this.additionalPropertiesDataType,i);else{const q=this.additionalPropertiesDataType.clone(i,A,x.UUID.uuid(),c);A.setAdditionalPropertiesDataType(q,i)}if(this.allPropertiesImplement)if(this.project.diggestedBuiltInBaseEntitiesIds.has(this.allPropertiesImplement.id))A.setAllPropertiesImplement(this.allPropertiesImplement,i);else{const q=this.allPropertiesImplement.clone(i,A,x.UUID.uuid(),c);A.setAllPropertiesImplement(q,i)}return i||A.captureVersion(),i==null||i.attemptAutoclose(w.CloneEntity,this.id),A}getFunctionDeclaration(i){return this.methods.find(r=>r.id===i)}implement(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"implement-definition-entity")),a){const c=m1(this,i,r,a);return r==null||r.attemptAutoclose("implement-definition-entity",this.id),c}getAllPropertiesImplements(){var r;const i=[];return this.allPropertiesImplement&&i.push(this.allPropertiesImplement),i.push(...((r=this.extends)==null?void 0:r.getAllPropertiesImplements())||[],...this.implements.flatMap(a=>a.getAllPropertiesImplements())),i}getAllInteractiveMethods(){var e;const i=this.implements.filter(f=>f.type===d.DefinitionEntity||f.type===d.BuiltInBaseEntity&&f.interactive),r=((e=this.extends)==null?void 0:e.getAllInteractiveMethods())||[],a=i.flatMap(f=>f.getAllInteractiveMethods());return C([...this.methods,...r,...a])}inferFromInputs(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"infer-definition-entity-from-inputs"))){const a=[],c=[],e=[],f=[];if(this.parent.type!==d.DataType||!this.parent.inferred)return r==null||r.attemptAutoclose("infer-definition-entity-from-inputs",this.id),{added:[],updated:[],removed:[],affected:[],self:this};const h=[];i.forEach(b=>{h.find(_=>ce(_,this.project)===ce(b,this.project))||h.push(b)});const m=this.properties.filter(b=>!b.dataType);h.forEach(b=>{var k,q,ne;const A=m.find(J=>ce(J,this.project)===ce(b,this.project));if(!A)return;const P=gr(b.parent).getMasterInputWithValueWriterFromAllInstances(b),V=iu(P,r),M=V==null?void 0:V.clone(r,A,x.UUID.uuid(),!0);M&&((k=A.dataType)==null||k.merge(M,r),M.id!==((q=A.dataType)==null?void 0:q.id)&&M.remove({ignoreUpstream:!1},r),A.dataType&&(A.dataType.metaSync({inferred:!0,like:!0},r),A.setDataType(A.dataType,r),r==null||r.add(A,W.Affected)));let G=null;if(b.declaration&&A.id!==((ne=b.declaration)==null?void 0:ne.id)&&(G=b.declaration),b.setDeclaration(A,r),r==null||r.add(b,W.Updated),G){const{updated:J,removed:se}=G.remove({ignoreUpstream:!1},r);c.push(...J),e.push(...se)}});const E=[];return h.forEach(b=>{if(!b.declaration){E.push(b);return}}),E.length===0?(r==null||r.attemptAutoclose("infer-definition-entity-from-inputs",this.id),{added:[],updated:[],removed:[],affected:[],self:this}):(E.forEach(b=>{var ne,J,se,te,le;const A=this.properties.find(ue=>ce(ue,this.project)===ce(b,this.project));if(A){if(b.setDeclaration(A,r),!A.getDataType(r)){const z=gr(b.parent).getMasterInputWithValueWriterFromAllInstances(b),Q=iu(z),de=Q==null?void 0:Q.clone(r,A,x.UUID.uuid(),!0);de&&((ne=A.dataType)==null||ne.merge(de,r),de.id!==((J=A.dataType)==null?void 0:J.id)&&de.remove({ignoreUpstream:!1},r),A.dataType&&(A.dataType.metaSync({inferred:!0,like:!0},r),A.setDataType(A.dataType,r),r==null||r.add(A,W.Affected)))}return}const _=ce(b,this.project),P=b.codeName||Ep(b,this.project)||cs(ir(_)),V=Es.new(r);V.parent=this.toReference(),V.index=b.index,V.name=_,V.codeName=P,V.description=b.description;const M=Re(V,this.project);M.hydrateAncestors(),M.addSelfToProject(r),r==null||r.add(M,W.Added),M.setParent(this,r),M.initChildren(r),r||M.captureVersion();const k=gr(b.parent).getMasterInputWithValueWriterFromAllInstances(b),q=iu(k);if(q&&q.id!==((se=M.dataType)==null?void 0:se.id)){const ue=q==null?void 0:q.clone(r,M,x.UUID.uuid(),!0);ue&&((te=M.dataType)==null||te.merge(ue,r),ue.id!==((le=M.dataType)==null?void 0:le.id)&&ue.remove({ignoreUpstream:!1},r),M.dataType&&(M.dataType.metaSync({inferred:!0,like:!0},r),M.setDataType(M.dataType,r),r==null||r.add(M,W.Affected)))}return this.addProperty(M,r),b.setDeclaration(M,r),r==null||r.add(b,W.Updated),M}),r==null||r.attemptAutoclose("infer-definition-entity-from-inputs",this.id),{added:C(a),updated:C(c),removed:C(e),affected:C(f),self:this})}getRawDefaultValue(){const i={};return this.properties.forEach(r=>{var e;if(!bv(r)||!r.defaultValue)return;const a=ce(r,this.project),c=r.codeName||Ep(r,this.project)||cs(ir(a));i[c]=((e=r.getDefaultValue())==null?void 0:e.value)||null}),i}getActiveRawDefaultValue(){const i={};return this.properties.forEach(r=>{var f;if(!bv(r))return;const a=ce(r,this.project),c=r.codeName||Ep(r,this.project)||cs(ir(a)),e=(f=this.project.requestActiveDynamicValue(r,!0))==null?void 0:f.value;e&&(i[c]=(e==null?void 0:e.value)||null)}),i}setAdditionalPropertiesDataType(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.SetAdditionalPropertiesDataType))){if(!this.checkCanEdit(this,r))return Y.Logger.warn(`[setAdditionalPropertiesDataType] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.SetAdditionalPropertiesDataType,this.id),this;const a=this.additionalPropertiesDataType;return(a==null?void 0:a.id)!==(i==null?void 0:i.id)&&(a==null||a.remove({ignoreUpstream:!0},r),this.additionalPropertiesDataType=i,this.subscribeToDependencies(),r==null||r.add(this,W.Affected)),r==null||r.attemptAutoclose(w.SetAdditionalPropertiesDataType,this.id),this}removeAdditionalPropertiesDataType(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.RemoveAllPropertiesImplement))){return this.checkCanEdit(this,i)?(this.additionalPropertiesDataType&&(this.additionalPropertiesDataType.remove({ignoreUpstream:!0},i),i==null||i.add(this,W.Affected),this.additionalPropertiesDataType=null),i==null||i.attemptAutoclose(w.RemoveAllPropertiesImplement,this.id),this):(Y.Logger.warn(`[removeAdditionalPropertiesDataType] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),i==null||i.attemptAutoclose(w.RemoveAllPropertiesImplement,this.id),this)}setAllPropertiesImplement(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.SetAllPropertiesImplement))){if(!this.checkCanEdit(this,r))return Y.Logger.warn(`[setAllPropertiesImplement] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.SetAllPropertiesImplement,this.id),this;const a=this.allPropertiesImplement;return(a==null?void 0:a.id)!==(i==null?void 0:i.id)&&(a==null||a.remove({ignoreUpstream:!0},r),this.allPropertiesImplement=i,this.subscribeToDependencies(),r==null||r.add(this,W.Affected)),r==null||r.attemptAutoclose(w.SetAllPropertiesImplement,this.id),this}removeAllPropertiesImplement(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.RemoveAllPropertiesImplement))){return this.checkCanEdit(this,i)?(this.allPropertiesImplement&&(this.properties.find(r=>{var a;return r.id===((a=this.allPropertiesImplement)==null?void 0:a.id)})||this.allPropertiesImplement.remove({ignoreUpstream:!0},i),i==null||i.add(this,W.Affected),this.allPropertiesImplement=null),i==null||i.attemptAutoclose(w.RemoveAllPropertiesImplement,this.id),this):(Y.Logger.warn(`[removeAllPropertiesImplement] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),i==null||i.attemptAutoclose(w.RemoveAllPropertiesImplement,this.id),this)}};R(Ni,"repository",{APICreate:async(i,...r)=>i,APIUpdate:async(i,...r)=>i,APIDelete:async(i,...r)=>i,APIClone:async(i,...r)=>{},APILoad:async(i,...r)=>null,APILoadVersion:async(i,r,...a)=>null}),R(Ni,"type",d.DefinitionEntity),R(Ni,"USER_MANAGED_PARENT_TYPES",[d.Project,d.DataType]),R(Ni,"PARENT_TYPES",[...Ni.USER_MANAGED_PARENT_TYPES]),R(Ni,"MUTABLE_BASE_PROPERTIES",["name","codeName","description","static","abstract","additionalProperties"]),R(Ni,"INMUTABLE_BASE_PROPERTIES",["id","type","version","createdAt","author","previousVersion"]),R(Ni,"BASE_PROPERTIES",[...Ni.MUTABLE_BASE_PROPERTIES,...Ni.INMUTABLE_BASE_PROPERTIES]),R(Ni,"MUTABLE_META_PROPERTIES",[...Ni.MUTABLE_BASE_PROPERTIES,"x","y"]),R(Ni,"INMUTABLE_META_PROPERTIES",[...Ni.INMUTABLE_BASE_PROPERTIES]),R(Ni,"META_PROPERTIES",[...Ni.MUTABLE_META_PROPERTIES,...Ni.INMUTABLE_META_PROPERTIES]),R(Ni,"MUTABLE_UPSTREAM_PROPERTIES",["extends","implements"]),R(Ni,"INMUTABLE_UPSTREAM_PROPERTIES",["parent"]),R(Ni,"UPSTREAM_PROPERTIES",[...Ni.MUTABLE_UPSTREAM_PROPERTIES,...Ni.INMUTABLE_UPSTREAM_PROPERTIES]),R(Ni,"MUTABLE_DOWNSTREAM_PROPERTIES",["properties","methods","abstractMethods","allPropertiesImplement","additionalPropertiesDataType"]),R(Ni,"INMUTABLE_DOWNSTREAM_PROPERTIES",[]),R(Ni,"DOWNSTREAM_PROPERTIES",[...Ni.MUTABLE_DOWNSTREAM_PROPERTIES,...Ni.INMUTABLE_DOWNSTREAM_PROPERTIES]),R(Ni,"PROPERTIES",[...Ni.META_PROPERTIES,...Ni.UPSTREAM_PROPERTIES,...Ni.DOWNSTREAM_PROPERTIES]);let Ks=Ni;async function UVi(s,p={}){const i=Y.YieldTracker.from(p),r=[],a=qt(s.errors,r);return await i.tick(),a}function FVi(s){const p=[];return qt(s.errors,p)}const lI=class lI extends Gx{constructor(i,r){super(i);R(this,"initialData");R(this,"id");R(this,"name");R(this,"description",null);R(this,"type",d.PrimitiveEntity);R(this,"static");R(this,"abstract");R(this,"properties",[]);R(this,"methods",[]);R(this,"abstractMethods",[]);R(this,"extends",null);R(this,"errors",[]);R(this,"project");this.initialData=i,this.project=r,this.id=i.id,this.name=i.name,this.description=i.description,this.static=i.static,this.abstract=i.abstract,this.properties=this.initialData.properties.map(a=>{const c=Re(a,this.project);return c.setParent(this,null),c.initChildren(null),c}),this.methods=this.initialData.methods.map(a=>{const c=Re(a,this.project);return c.parent=this,c}),this.abstractMethods=this.initialData.abstractMethods.map(a=>{const c=Re(a,this.project);return c.parent=this,c}),this.initialData.extends&&(this.extends=Re(this.initialData.extends,this.project))}get allMethods(){return C([...this.ownDeclaredMethods,...this.allBaseMethodsFromOriginalParents])}get allProperties(){return C([...this.ownDeclaredProperties,...this.allBasePropertiesFromOriginalParents])}get allBaseMethodsFromOriginalParents(){var a;const i=((a=this.extends)==null?void 0:a.allMethods)||[],r=[...i].filter(c=>!i.some(e=>e.id!==c.id));return C(r)}get allBasePropertiesFromOriginalParents(){var a;const i=((a=this.extends)==null?void 0:a.allProperties)||[],r=[...i].filter(c=>!i.some(e=>{var f;return e.id!==c.id&&(e.implements.find(h=>h.id===c.id)||((f=e.extends)==null?void 0:f.id)===c.id)}));return C(r)}get allBasePropertiesFromExtendedAndImplementedEntities(){var a,c;const i=[...((a=this.extends)==null?void 0:a.ownDeclaredProperties)||[],...((c=this.extends)==null?void 0:c.allBasePropertiesFromExtendedAndImplementedEntities)||[]].filter(e=>!e.abstract),r=[...i].filter(e=>!i.some(f=>{var h;return f.id!==e.id&&(f.implements.find(m=>m.id===e.id)||((h=f.extends)==null?void 0:h.id)===e.id)}));return C(r)}get extendedPropertiesFromOriginalParents(){var a,c;const i=[...((a=this.extends)==null?void 0:a.ownDeclaredProperties)||[],...((c=this.extends)==null?void 0:c.extendedPropertiesFromOriginalParents)||[]].filter(e=>!e.abstract),r=[...i].filter(e=>!i.some(f=>{var h;return f.id!==e.id&&(f.implements.find(m=>m.id===e.id)||((h=f.extends)==null?void 0:h.id)===e.id)}));return C(r)}get implementedPropertiesFromOriginalParents(){return C([...(this.extends?[this.extends]:[]).reduce((i,r)=>{const a=r.implementedPropertiesFromOriginalParents,c=[...r.ownDeclaredProperties].filter(h=>!!h.abstract),e=[...a,...c,...i];return[...e].filter(h=>!!!e.find(E=>{var b;return((b=E.extends)==null?void 0:b.id)===h.id||E.implements.find(A=>A.id===h.id)}))},[])])}get extendedProperties(){return this.properties.filter(i=>i.isExtendedProperty)}get ownDeclaredMethods(){return[...this.methods]}get ownDeclaredProperties(){return this.properties.filter(i=>!i.isExtendedProperty)}subscribe(){return this.project.subscribeBuiltInInstance(this),this}unsubscribe(){return this.project.unsubscribeBuiltInInstance(this),this}async APILoad(i=Ke,...r){return await lI.repository.APILoad(this.id,...r),this}toFlat(i=new Set){return i.has(this.id)?[]:(i.add(this.id),[this,...this.properties.flatMap(a=>a.toFlat(i)),...this.methods.flatMap(a=>a.toFlat(i)),...this.abstractMethods.flatMap(a=>a.toFlat(i))])}toFlatIds(i=new Set){return i.has(this.id)?[]:(i.add(this.id),[this.id,...this.properties.flatMap(a=>a.toFlatIds(i)),...this.methods.flatMap(a=>a.toFlatIds(i)),...this.abstractMethods.flatMap(a=>a.toFlatIds(i))])}toMeta(){return{id:this.id,version:this.version,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,description:this.description,static:this.static,abstract:this.abstract,type:this.type,name:this.name}}toJSON(i=new Set){var r;return i.has(this.id)?this.toReference():(i.add(this.id),{id:this.id,version:this.version,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,type:this.type,name:this.name,description:this.description,static:this.static,abstract:this.abstract,properties:this.properties.map(a=>a.toJSON(i)),methods:this.methods.map(a=>a.toJSON(i)),abstractMethods:this.abstractMethods.map(a=>a.toJSON(i)),extends:((r=this.extends)==null?void 0:r.toJSON(i))||null})}toReference(i=at){return{id:this.id+"--"+x.UUID.uuid()+"--ref",type:d.GenericReference,entityId:this.id,version:this.version,entityType:this.type}}toShallowJSON(i=at){var r;return{id:this.id,version:this.version,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,type:this.type,name:this.name,description:this.description,abstract:this.abstract,static:this.static,properties:this.properties.map(a=>a.toReference()),methods:this.methods.map(a=>a.toReference()),abstractMethods:this.abstractMethods.map(a=>a.toReference()),extends:((r=this.extends)==null?void 0:r.toReference())||null}}toFlatJSON(i=new Set){return i.has(this.id)?[]:(i.add(this.id),[this.toShallowJSON(),...this.properties.flatMap(a=>a.toFlatJSON(i)),...this.methods.flatMap(a=>a.toFlatJSON(i)),...this.abstractMethods.flatMap(a=>a.toFlatJSON(i))])}toGenerationTarget(i=at){var r;return{id:this.id,type:this.type,name:this.name,description:this.description,static:this.static,abstract:this.abstract,extends:(r=this.extends)==null?void 0:r.id}}toFlatGenerationTarget(i=new Set){return i.has(this.id)?[]:(i.add(this.id),[this.toGenerationTarget(),...this.properties.flatMap(a=>a.toFlatGenerationTarget(i)),...this.methods.flatMap(a=>a.toFlatGenerationTarget(i)),...this.abstractMethods.flatMap(a=>a.toFlatGenerationTarget(i))])}clearErrors(){return this.errors=[],this.properties.forEach(i=>i.clearErrors()),this.methods.forEach(i=>i.clearErrors()),this.abstractMethods.forEach(i=>i.clearErrors()),this}validate(){return this.errors=FVi(this),{success:!0}}async validateAsync(i={}){const r=Y.YieldTracker.from(i);return this.errors=await UVi(this,{tracker:r}),{success:!0}}getErrors(){return[...this.errors,...this.properties.flatMap(r=>r.getErrors()),...this.methods.flatMap(r=>r.getErrors()),...this.abstractMethods.flatMap(r=>r.getErrors())]}async getErrorsAsync(i={}){const r=Y.YieldTracker.from(i),a=[...this.errors];await r.tick();for(const c of this.properties){const e=await c.getErrorsAsync({tracker:r});a.push(...e)}for(const c of this.methods){const e=await c.getErrorsAsync({tracker:r});a.push(...e)}for(const c of this.abstractMethods){const e=await c.getErrorsAsync({tracker:r});a.push(...e)}return a}getShallowErrors(){return this.errors}getAllInteractiveMethods(){const i=[];return i.push(...this.methods),!this.extends||this.extends.type===d.PrimitiveEntity?i:C(i)}};R(lI,"repository",{APILoad:async(i,...r)=>null});let Pf=lI;function lr(s,p){if(!s)throw new Error("Entity is null");const i=p.get(s.id);switch(s.type){case d.LiteralValue:return i||new Lr(s,p);case d.DefinitionEntity:return i||new Ks(s,p);case d.PrimitiveEntity:return i||new Pf(s,p);case d.FunctionDeclaration:return i||new md(s,p);case d.GlobalEvent:return i||new _p(s,p);case d.DataType:return i||new vr(s,p);case d.Property:return i||new Es(s,p);case d.FunctionCall:return i||new Cp(s,p);case d.Condition:return i||new Pp(s,p);case d.Operation:return i||new Op(s,p);case d.VariableDeclaration:return i||new $p(s,p);case d.VariableInstance:return i||new xp(s,p);case d.OutputMap:return i||new po(s,p);case d.ArgumentDeclaration:return i||new Za(s,p);case d.InputMap:return i||new Ts(s,p);case d.Project:return i||new x(s);case d.InstalledProject:return i||new Bp(s,p);case d.ActionDescriptor:return i||new er(s,p);case d.ReturnStatement:return i||new lu(s,p);case d.Loop:return i||new Vp(s,p);case d.Search:return i||new Lp(s,p);case d.ValueDescriptor:return i||new Ed(s,p);case d.BuiltInBaseEntity:return i||new Td(s,p);case d.InternalCall:return i||new Mp(s,p);case d.ContinueStatement:return i||new kp(s,p);case d.BreakStatement:return i||new Gp(s,p);case d.GenericReference:return p.get(s.entityId);default:throw new Error("Invalid entity type: "+s.type)}}function Re(s,p){if(!s)throw new Error("Entity is null");const i=lr(s,p);return i.subscribe(),i}function KVi(s,p,i){if(!s)throw new Error("Entity is null");switch(s.type){case d.LiteralValue:return Lr.fromGenerationTarget(s,p,i);case d.DefinitionEntity:return Ks.fromGenerationTarget(s,p,i);case d.FunctionDeclaration:return md.fromGenerationTarget(s,p,i);case d.GlobalEvent:return _p.fromGenerationTarget(s,p,i);case d.DataType:return vr.fromGenerationTarget(s,p,i);case d.Property:return Es.fromGenerationTarget(s,p,i);case d.FunctionCall:return Cp.fromGenerationTarget(s,p,i);case d.Condition:return Pp.fromGenerationTarget(s,p,i);case d.Operation:return Op.fromGenerationTarget(s,p,i);case d.VariableDeclaration:return $p.fromGenerationTarget(s,p,i);case d.VariableInstance:return xp.fromGenerationTarget(s,p,i);case d.OutputMap:return po.fromGenerationTarget(s,p,i);case d.ArgumentDeclaration:return Za.fromGenerationTarget(s,p,i);case d.InputMap:return Ts.fromGenerationTarget(s,p,i);case d.InstalledProject:return Bp.fromGenerationTarget(s,p,i);case d.ReturnStatement:return lu.fromGenerationTarget(s,p,i);case d.Loop:return Vp.fromGenerationTarget(s,p,i);case d.Search:return Lp.fromGenerationTarget(s,p,i);case d.ActionDescriptor:return er.fromGenerationTarget(s,p,i);case d.ValueDescriptor:return Ed.fromGenerationTarget(s,p,i);case d.InternalCall:return Mp.fromGenerationTarget(s,p,i);case d.ContinueStatement:return kp.fromGenerationTarget(s,p,i);case d.BreakStatement:return Gp.fromGenerationTarget(s,p,i);default:throw new Error("Invalid entity type: "+s.type)}}const at={seenEntityMaps:new Map,seenEntities:new Set,timestamp:B().toISOString()};class rUe{constructor(){R(this,"initialData")}}const Ke={cascade:!1},nUe={APILoad:async(s,...p)=>null},qVi={APICreate:async(s,...p)=>s,APIUpdate:async(s,...p)=>s,APIDelete:async(s,...p)=>s,APIClone:async(s,...p)=>{},APILoadVersion:async(s,p,...i)=>null,...nUe};class SVi{}class aUe extends rUe{}class ZVi extends aUe{}class HVi{}class WVi{}class zVi{}class RL{}class YVi extends RL{}class JVi extends RL{}class QVi{}class uy{static initReadsValue(p){if(p.initialData.readsValue&&p.initialData.readsValue.type!==d.GenericReference)p.readsValue=Re(p.initialData.readsValue,p.project);else if(p.initialData.readsValue&&p.initialData.readsValue.type===d.GenericReference){const i=Ra(p.initialData.readsValue,p.project);i&&(p.readsValue=i)}if(p.readsValue){if(Mt.includes(p.readsValue.type)){let i=p.parent;!Dr.includes(i.type)&&i.type!==d.Project&&(i=i.parent);const r=p.type===d.InputMap&&p.parent.type===d.Loop;r&&(i=p.parent.parent),p.readsValue.setParent(i,null),p.readsValue.initChildren(null),i&&i.type!==d.Project&&!r&&i.detachedChildren.includes(p)?i.replaceDetachedChild(p,p.readsValue):i&&i.type!==d.Project&&!r&&i.subscribeDetachedChild(p.readsValue)}p.readsValue.addValueReader(p,null)}return p.readsValue}}class QE{static initWritesValues(p,i){const r=p.initialData.writesValues.reduce((c,e)=>{if(e.type===d.GenericReference||p.writesValues.some(h=>h.id===e.id))return c;const f=Re(e,p.project);return f.setValueWriter(p,null),Mt.includes(f.type)&&(f.setParent(i,null),f.initChildren(null)),[...c,f]},[]),a=[...p.writesValues];return p.writesValues=C([...a,...r]),p.writesValues}}class XVi{}var pi=(s=>(s.PROJECT_INITIALIZED="project-initialized",s.BEFORE_CHANGE_SET_CLOSE_BEFORE_SIDE_EFFECTS="before-change-set-close-before-side-effects",s.BEFORE_CHANGE_SET_CLOSE_AFTER_SIDE_EFFECTS="before-change-set-close-after-side-effects",s.CHANGE_SET_CLOSED_BEFORE_PERSIST="change-set-closed-before-persist",s.CHANGE_SET_PERSISTED="change-set-persisted",s.BEFORE_CHANGE_SET_PERSIST="before-change-set-persist",s.EXPLICIT_DEFINITION_ENTITY_ADDED="explicit-definition-entity-added",s.EXPLICIT_DEFINITION_ENTITY_REMOVED="explicit-definition-entity-removed",s.EXPLICIT_DEFINITION_ENTITY_UPDATED="explicit-definition-entity-updated",s.PERSISTED_DEFINITION_ENTITY_ADDED="persisted-definition-entity-added",s.PERSISTED_DEFINITION_ENTITY_REMOVED="persisted-definition-entity-removed",s.PERSISTED_DEFINITION_ENTITY_UPDATED="persisted-definition-entity-updated",s.RELATIONAL_DATABASE_DEFINITION_ENTITY_ADDED="relational-database-definition-entity-added",s.RELATIONAL_DATABASE_DEFINITION_ENTITY_REMOVED="relational-database-definition-entity-removed",s.RELATIONAL_DATABASE_DEFINITION_ENTITY_UPDATED="relational-database-definition-entity-updated",s))(pi||{});const DL={...h$,events:new Y.Events("def-proj-static-p-ctx-events")},sUe={requestActiveDynamicValue:(s,p=!1)=>null,...DL},Gt=class Gt extends un{constructor(i,r={...sUe,events:new Y.Events("def-proj-inst-p-ctx-events")}){super(i);R(this,"initialData");R(this,"id");R(this,"type",d.Project);R(this,"workspaceId");R(this,"name",null);R(this,"description",null);R(this,"x");R(this,"y");R(this,"entities",[]);R(this,"projects",[]);R(this,"functions",[]);R(this,"events",[]);R(this,"variableDeclarations",[]);R(this,"variableInstances",[]);R(this,"conditions",[]);R(this,"operations",[]);R(this,"functionCalls",[]);R(this,"loops",[]);R(this,"searches",[]);R(this,"primitives",[]);R(this,"builtInBaseEntities",[]);R(this,"operationDeclarations",[]);R(this,"globalEventActionDescriptors",[]);R(this,"loopDeclarations",[]);R(this,"loopDeclarationsBodies",[]);R(this,"conditionDeclarations",[]);R(this,"valueDescriptors",[]);R(this,"dataTypes",[]);R(this,"project");R(this,"instances",{});R(this,"builtInInstances",{});R(this,"deletedInstances",{});R(this,"subscribedDefinitionEntities",new Set);R(this,"errors",[]);R(this,"references",[]);R(this,"history",[]);R(this,"undoableStackValueIndex",-1);R(this,"detachedDependents",{});R(this,"knownVersions",null);R(this,"activeVersion",!1);R(this,"initialized",!1);R(this,"startedInitialization",!1);R(this,"diggestedBuiltInBaseEntitiesIds",new Set);R(this,"rejectParallelCS",!1);R(this,"onPersistChangeSetSequentiallyCallback",null);R(this,"onPersistChangeSetInParallelCallback",null);R(this,"onAddChangeSetCallback",null);R(this,"onDiscardChangeSetCallback",null);if(this.parentContext=r,this.initialData=i,this.id=i.id,this.workspaceId=i.workspaceId,this.name=i.name,this.description=i.description,this.x=0,this.y=0,this.instances[this.id]=this,!Gt.UUID)throw new Error("UUID module is already initialized. Please inject a valid UUID module.")}static get UUID(){var i;return(i=this.parentContext.requestExtension("uuid"))==null?void 0:i.module}static new(i=null){return{id:Gt.UUID.uuid(),version:Gt.UUID.uuid(),workspaceId:"",createdAt:(i==null?void 0:i.timestamp)||B().toISOString(),author:(i==null?void 0:i.author)||Gt.sessionAuthor,previousVersion:null,deleted:!1,deletable:!0,editable:!0,type:d.Project,name:"",description:"",entities:[],functions:[],events:[],projects:[],variableDeclarations:[],variableInstances:[],conditions:[],operations:[],functionCalls:[],loops:[],searches:[]}}static validateGenerationTarget(i,r){let a=JSON.parse(JSON.stringify(i));const c=[],e=[],f=Xr(a);return e.push(...f.errors),c.push(...f.explanations),{errors:e,explanations:c,modifiedData:a}}get off(){return this.parentContext.events.off}get on(){return this.parentContext.events.on}get emit(){return this.parentContext.events.emit}get emitAsync(){return this.parentContext.events.emitAsync}get emitAsyncAll(){return this.parentContext.events.emitAsyncAll}get emitAsyncAllSettled(){return this.parentContext.events.emitAsyncAllSettled}get emitAsyncSequentially(){return this.parentContext.events.emitAsyncSequentially}get emitAsyncSequentiallyAll(){return this.parentContext.events.emitAsyncSequentiallyAll}get emitAsyncSequentiallyAllSettled(){return this.parentContext.events.emitAsyncSequentiallyAllSettled}async closePersistChangeSetsSequentially(){Y.Logger.log("[ProjectState.closePersistChangeSetsSequentially] called");const i=this.history.find(r=>r.dirty&&!r.open&&!r.submitting);i&&(Y.Logger.log(`[ProjectState.closePersistChangeSetsSequentially] closing pending change-set ${i.id} - ${i.actionName}`),await this.persistChangeSetSequentially(i))}async onPersistChangeSetSequentially(i){this.onPersistChangeSetSequentiallyCallback=i,Y.Logger.log("[ProjectState.onPersistChangeSetSequentially] onPersistChangeSetSequentiallyCallback has been set. Checking for pending change-sets."),await this.closePersistChangeSetsSequentially()}offPersistChangeSetSequentially(){this.onPersistChangeSetSequentiallyCallback=null}async onPersistChangeSetInParallel(i){this.onPersistChangeSetInParallelCallback=i,Y.Logger.log("[ProjectState.onPersistChangeSetInParallel] onPersistChangeSetInParallelCallback has been set. Checking for pending change-sets.");for(const r of this.history)this.persistChangeSetInParallel(r),await new Promise(a=>setTimeout(a,27))}offPersistChangeSetInParallel(){this.onPersistChangeSetInParallelCallback=null}onAddChangeSet(i){this.onAddChangeSetCallback=i}offAddChangeSet(){this.onAddChangeSetCallback=null}onDiscardChangeSet(i){this.onDiscardChangeSetCallback=i}offDiscardChangeSet(){this.onDiscardChangeSetCallback=null}async persistChangeSetSequentially(i){if(Y.Logger.log(`[ProjectState.persistChangeSetSequentially] called for change-set ${i.id} - ${i.actionName}`),!i.dirty||i.open||i.submitting){Y.Logger.log(`[ProjectState.persistChangeSetSequentially] change-set ${i.id} - ${i.actionName} is not dirty, or is open, or is already being submitted, skipping.`);return}const r=this.history.findIndex(e=>e.id===i.id),a=this.history.slice(0,r),c=a[a.length-1];if(c!=null&&c.dirty){Y.Logger.log(`[ProjectState.persistChangeSetSequentially] lastBeforeSelf is dirty: ${c.id} - ${c.actionName}, closing it first.`);return}this.onPersistChangeSetSequentiallyCallback&&(Y.Logger.log(`[ProjectState.persistChangeSetSequentially] invoking onPersistChangeSetSequentiallyCallback for change-set ${i.id} - ${i.actionName}`),this.emit("before-change-set-persist",i),i.submitting=!0,(await this.onPersistChangeSetSequentiallyCallback(i)).success&&(i.dirty=!1,this.emit("change-set-persisted",i),Y.Logger.log(`[ProjectState.persistChangeSetSequentially] change-set ${i.id} - ${i.actionName} closed successfully, checking for pending change-sets to close.`),this.closePersistChangeSetsSequentially()))}async persistChangeSetInParallel(i){if(Y.Logger.log(`[ProjectState.persistChangeSetInParallel] called for change-set ${i.id} - ${i.actionName}`),!i.dirty||i.open||i.submitting){Y.Logger.log(`[ProjectState.persistChangeSetInParallel] change-set ${i.id} - ${i.actionName} is not dirty, or is open, or is already being submitted, skipping.`);return}this.onPersistChangeSetInParallelCallback&&(Y.Logger.log(`[ProjectState.persistChangeSetInParallel] invoking onPersistChangeSetInParallelCallback for change-set ${i.id} - ${i.actionName}`),this.emit("before-change-set-persist",i),i.submitting=!0,(await this.onPersistChangeSetInParallelCallback(i)).success&&(i.dirty=!1,this.emit("change-set-persisted",i)))}toLatestChangeSet(i,r,a,c=!1,e="here-this"){if(!this.history.length)return new S(this,i,r,a,c,e);const f=this.history[this.history.length-1];return f.open?f:this.addChangeSet(new S(this,i,r,a,c,e))}addChangeSet(i){var a,c;if(!this.history.length)return this.undoableStackValueIndex=B_(this.undoableStackValueIndex,this.history,i),(a=this.onAddChangeSetCallback)==null||a.call(this,i,this.undoableStackValueIndex),i;const r=this.history.find(e=>e.id===(i==null?void 0:i.id));if(r)return r;if(this.rejectParallelCS){const e=this.history.find(f=>f.open);if(e)throw Y.Logger.warn("Previous still open: ",e),Y.Logger.warn("New change set: ",i),new Error(`There is already an open change-set with id '${e.id}'${e.actionName?` auto-close: ${e.actionName}`:""}${e.self?` root: ${e.self.type} ${ce(e.self,this)}`:""}.`)}return this.undoableStackValueIndex=B_(this.undoableStackValueIndex,this.history,i),(c=this.onAddChangeSetCallback)==null||c.call(this,i,this.undoableStackValueIndex),i}discardChangeSet(i){var a;Y.Logger.log(`[ProjectState.discardChangeSet] called for change-set ${i.id} - ${i.actionName}`);const r=this.history.findIndex(c=>c.id===(i==null?void 0:i.id));return r!==-1&&(this.history.splice(r,1),Y.Logger.log(`[ProjectState.discardChangeSet] Removed change-set ${i.id} - ${i.actionName} from history.`),this.undoableStackValueIndex=this.undoableStackValueIndex-1,(a=this.onDiscardChangeSetCallback)==null||a.call(this,i),i==null||i.teardown()),this}validateGeneratedUpdate(i){return{errors:[],explanations:[],modifiedData:i}}subscribeDependents(i){return i.forEach(r=>{this.detachedDependents[r.entity.id]||(this.detachedDependents[r.entity.id]=r)}),this}unsubscribeDependents(i){return i.forEach(r=>{this.detachedDependents[r.entity.id]&&delete this.detachedDependents[r.entity.id]}),this}syncDependents(i=this.project.addChangeSet(new S(this.project,Gt.sessionAuthor,B().toISOString(),this,!0,"sync-dependents"))){const r=[],a=[],c=[],e=[];return Object.values(this.detachedDependents).forEach(f=>{const h=f.entity.afterAllChildrenInitialized(i);r.push(...h.updated),a.push(...h.added),c.push(...h.removed),e.push(...h.affected)}),i==null||i.attemptAutoclose("sync-dependents",this.id),{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}onDetachedDependencyRemoved(i,r,a){const c=[],e=[],f=[],h=[];return{updated:C(c),added:C(e),removed:C(f),affected:C(h),self:this}}onDetachedDependencyRestored(i,r,a){const c=[],e=[],f=[],h=[];return{updated:C(c),added:C(e),removed:C(f),affected:C(h),self:this}}unsubscribeFromDependencies(){return this}subscribeToDependencies(){return this}increaseVersion(i){var r;if(i&&!B(i).isValid())throw new Error(`The shared timestamp '${i}' is not a valid ISO 8601 date string.`);if(i&&B(i).isSame(B(this.createdAt)))return this;if(!((r=this.knownVersions)!=null&&r.has(this.version))&&this.initialized)throw new Error(`The current ${this.type} ${this.id} version '${this.version}' is not captured in the 'knownVersions' map. Capture the current version before increasing it to avoid losing data.`);if(!this.activeVersion)throw new Error(`Only active versions can be increased. Entity with id '${this.id}' and version '${this.version}' is not active.`);return this.previousVersion=this.version,this.version=Gt.UUID.uuid(),this.createdAt=B(i).toISOString()||B().toISOString(),this}captureVersion(){var r;const i=((r=this.knownVersions)==null?void 0:r.get(this.version))||new Gt(this);if(!this.activeVersion)throw new Error(`Only active versions can be captured. Entity of type ${this.type} with id '${this.id}' and version '${this.version}' is not active.`);if(this.version!==i.version)throw new Error(`Captured ${this.type} with id '${this.id}', version '${i.version}' does not match current entity version '${this.version}'.`);return this.knownVersions=this.knownVersions?this.knownVersions.set(this.version,i):new Map().set(this.version,i),this.apply(i),this}snapshot(){const i=new Gt(this);return this.apply(i)}apply(i){const r=this.toMeta();return i.metaSync(r,null),i.entities=[...this.entities],i.projects=[...this.projects],i.functions=[...this.functions],i.events=[...this.events],i.variableDeclarations=[...this.variableDeclarations],i.variableInstances=[...this.variableInstances],i.conditions=[...this.conditions],i.operations=[...this.operations],i.functionCalls=[...this.functionCalls],i.loops=[...this.loops],i.searches=[...this.searches],i}recursiveCaptureUpstreamVersions(i){const r=[],a=[],c=[],e=[];return{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}async restoreVersion(i,r){var m;const a=[],c=[],e=[],f=[];if(this.version===i&&(r!=null&&r.skipIfSameVersion))return{updated:C(a),added:C(c),removed:C(e),affected:C(f),self:this};if(!this.knownVersions){const E=new Map;for(const[b,A]of this.knownVersions||new Map){if(E.set(b,A),A.activeVersion=!1,A.knownVersions)for(const[_,P]of A.knownVersions)E.set(_,P);A.knownVersions=null}}let h=(m=this.knownVersions)==null?void 0:m.get(i);if(!h){const E=await this.APILoadVersion({},i);if(!E)throw new Error(`Version with id '${i}' for entity with id '${this.id}' not found.`);h=new Gt(E)}return this.metaSync(h.toShallowJSON(),null),this.previousVersion=h.previousVersion,this.version=h.version,this.createdAt=h.createdAt,this.author=h.author,this.deleted=h.deleted,this.entities=[...h.entities],this.projects=[...h.projects],this.functions=[...h.functions],this.events=[...h.events],this.variableDeclarations=[...h.variableDeclarations],this.variableInstances=[...h.variableInstances],this.conditions=[...h.conditions],this.operations=[...h.operations],this.functionCalls=[...h.functionCalls],this.loops=[...h.loops],this.searches=[...h.searches],{updated:C(a),added:C(c),removed:C(e),affected:C(f),self:this}}updateWithShallowTransfer(i,r=this.project.addChangeSet(new S(this.project,Gt.sessionAuthor,B().toISOString(),this,!0,w.UpdateWithShallowTransfer))){return this.checkCanEdit(this,r)?(this.metaSync(i,r),this.version=i.version,this.createdAt=i.createdAt,this.author=i.author,this.deleted=i.deleted,this.previousVersion=i.previousVersion,this.captureVersion(),this.subscribeToDependencies(),r==null||r.attemptAutoclose(w.UpdateWithShallowTransfer,this.id),this):(Y.Logger.warn(`[updateWithShallowTransfer] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.UpdateWithShallowTransfer,this.id),this)}updateWithGenerationTarget(i,r=this.project.addChangeSet(new S(this.project,Gt.sessionAuthor,B().toISOString(),this,!0,w.UpdateWithGenerationTarget))){return this.checkCanEdit(this,r)?(this.metaSync(i,r),this.captureVersion(),this.subscribeToDependencies(),r==null||r.attemptAutoclose(w.UpdateWithGenerationTarget,this.id),this):(Y.Logger.warn(`[updateWithGenerationTarget] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.UpdateWithGenerationTarget,this.id),this)}hydrateAncestors(){const i=[],r=[],a=[],c=[];return{updated:C(i),added:C(r),removed:C(a),affected:C(c),self:this}}afterAllChildrenInitialized(i=null){const r=[],a=[],c=[],e=[];return this.initialized||(this.initialized=!0,this.emit("project-initialized",this,i)),this.validate(),{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}addSelfToProject(i){const r=[],a=[],c=[],e=[];return this.subscribe(),this.subscribeToDependencies(),{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}get instancesList(){return Object.values(this.instances)}get builtInInstancesList(){return Object.values(this.builtInInstances)}isOperationDeclaration(i){return this.operationDeclarations.includes(i)}isGlobalEventActionDescriptor(i){return this.globalEventActionDescriptors.includes(i)}isLoopDeclaration(i){return this.loopDeclarations.includes(i)}isConditionDeclaration(i){return this.conditionDeclarations.includes(i)}initChildren(i=this.project.addChangeSet(new S(this.project,Gt.sessionAuthor,B().toISOString(),this,!0,"init-children"))){return this.initialized||this.startedInitialization?this:(this.startedInitialization=!0,this.entities=this.initialData.entities.map(r=>{const a=Re(r,this);return a.setParent(this,null),a.initChildren(i),a}),this.projects=this.initialData.projects.map(r=>{const a=Re(r,this);return a.setParent(this,null),a.initChildren(i),a}),this.variableDeclarations=this.initialData.variableDeclarations.map(r=>{const a=Re(r,this);return a.setParent(this,null),a.initChildren(i),a}),this.variableInstances=this.initialData.variableInstances.map(r=>{const a=Re(r,this);return a.setParent(this,null),a.initChildren(i),a}),this.conditions=this.initialData.conditions.map(r=>{const a=Re(r,this);return a.setParent(this,null),a.initChildren(i),a}),this.operations=this.initialData.operations.map(r=>{const a=Re(r,this);return a.setParent(this,null),a.initChildren(i),a}),this.functions=this.initialData.functions.map(r=>{const a=Re(r,this);return a.setParent(this,null),a.initChildren(i),a}),this.events=this.initialData.events.map(r=>{const a=Re(r,this);return a.setParent(this,null),a.initChildren(i),a}),this.functionCalls=this.initialData.functionCalls.map(r=>{const a=Re(r,this);return a.setParent(this,null),a.initChildren(i),a}),this.loops=this.initialData.loops.map(r=>{const a=Re(r,this);return a.setParent(this,null),a.initChildren(i),a}),this.searches=this.initialData.searches.map(r=>{const a=Re(r,this);return a.setParent(this,null),a.initChildren(i),a}),this.attachOrphanReferences(),this.subscribeToDependencies(),this.afterAllChildrenInitialized(i),i==null||i.attemptAutoclose("init-children",this.id),this)}subscribeInstance(i){return(!this.instances[i.id]||this.instances[i.id]!==i)&&(this.instances[i.id]=i),this}subscribeDeletedInstance(i){return(!this.deletedInstances[i.id]||this.deletedInstances[i.id]!==i)&&(this.deletedInstances[i.id]=i),this}subscribeBuiltInInstance(i){return(!this.builtInInstances[i.id]||this.builtInInstances[i.id]!==i)&&(this.builtInInstances[i.id]=i),this}subscribe(){var i;return this.activeVersion=!0,(i=this.knownVersions)==null||i.forEach(r=>{r.version!==this.version&&(r.activeVersion=!1)}),this.subscribeInstance(this),this}unsubscribe(){return this}unsubscribeInstance(i){return delete this.instances[i.id],this}unsubscribeDeletedInstance(i){return delete this.deletedInstances[i.id],this}unsubscribeBuiltInInstance(i){return delete this.builtInInstances[i.id],this}findSubscribedBuiltInInstance(i){return this.builtInInstances[i.id]||null}get(i){return this.instances[i]||this.builtInInstances[i]||null}getDeleted(i){return this.deletedInstances[i]||null}getManaged(i){return this.getBuiltIn(i)?null:this.instances[i]||null}getBuiltIn(i){return this.builtInInstances[i]||null}findSubscribedInstanceFromReference(i){return this.instances[i.entityId]||null}findSubscribedBuiltInInstanceFromReference(i){return this.builtInInstances[i.entityId]||null}metaSync(i,r=this.project.addChangeSet(new S(this.project,Gt.sessionAuthor,B().toISOString(),this,!0,"meta-sync"))){const a=tn(this,i,r),c=en(this,a),e=this.toMeta();return this.name=a.name!==void 0?a.name:e.name,this.description=a.description!==void 0?a.description:e.description,this.x=a.x||e.x,this.y=a.y||e.y,super.baseMetaSync(a,this,r),a.deleted===!0&&!e.deleted?r==null||r.add(this,W.Removed):a.deleted===!1&&e.deleted?r==null||r.add(this,W.Added):c&&(r==null||r.add(this,W.Updated)),r==null||r.attemptAutoclose("meta-sync",this.id),this}async APILoad(i=Ke,...r){return await Gt.repository.APILoad(this.id,...r),this}async APICreate(i=Ke,...r){return await Gt.repository.APICreate(this.toShallowJSON(),...r),this}async APIUpdate(i=Ke,...r){return await Gt.repository.APIUpdate(this.toShallowJSON(),...r),this}async APIDelete(i=Ke,...r){return await Gt.repository.APIDelete(this.toShallowJSON(),...r),this}async APIClone(i=Ke,...r){return await Gt.repository.APIClone(this.id,...r),this}async APILoadVersion(i=Ke,r,...a){return await Gt.repository.APILoadVersion(this.id,r,...a)}remove({ignoreUpstream:i}={ignoreUpstream:!1},r=this.project.addChangeSet(new S(this.project,Gt.sessionAuthor,B().toISOString(),this,!0,w.RemoveEntity))){return{added:[],updated:[],removed:[],affected:[],self:this}}restore({}={},i=this.project.addChangeSet(new S(this.project,Gt.sessionAuthor,B().toISOString(),this,!0,w.RestoreEntity))){return{added:[],updated:[],removed:[],affected:[],self:this}}getAllBuiltInIds(){const i=new Set;return[...this.primitives.flatMap(r=>r.toFlatIds(i)),...this.builtInBaseEntities.flatMap(r=>r.toFlatIds(i)),...this.operationDeclarations.flatMap(r=>r.toFlatIds(i)),...this.globalEventActionDescriptors.flatMap(r=>r.toFlatIds(i)),...this.loopDeclarations.flatMap(r=>r.toFlatIds(i)),...this.conditionDeclarations.flatMap(r=>r.toFlatIds(i)),...this.valueDescriptors.flatMap(r=>r.toFlatIds(i)),...this.dataTypes.flatMap(r=>r.toFlatIds(i))]}getAllBuiltIn(){const i=new Set;return[...this.primitives.flatMap(r=>r.toFlat(i)),...this.builtInBaseEntities.flatMap(r=>r.toFlat(i)),...this.operationDeclarations.flatMap(r=>r.toFlat(i)),...this.globalEventActionDescriptors.flatMap(r=>r.toFlat(i)),...this.loopDeclarations.flatMap(r=>r.toFlat(i)),...this.conditionDeclarations.flatMap(r=>r.toFlat(i)),...this.valueDescriptors.flatMap(r=>r.toFlat(i)),...this.dataTypes.flatMap(r=>r.toFlat(i))]}toFlat(i=new Set){return i.has(this.id)?[]:(i.add(this.id),[this,...this.entities.flatMap(a=>a.toFlat(i)),...this.functions.flatMap(a=>a.toFlat(i)),...this.events.flatMap(a=>a.toFlat(i)),...this.projects.flatMap(a=>a.toFlat(i)),...this.variableDeclarations.flatMap(a=>a.toFlat(i)),...this.variableInstances.flatMap(a=>a.toFlat(i)),...this.conditions.flatMap(a=>a.toFlat(i)),...this.operations.flatMap(a=>a.toFlat(i)),...this.functionCalls.flatMap(a=>a.toFlat(i)),...this.loops.flatMap(a=>a.toFlat(i)),...this.searches.flatMap(a=>a.toFlat(i))])}toFlatIds(i=new Set){return i.has(this.id)?[]:(i.add(this.id),[this.id,...this.entities.flatMap(a=>a.toFlatIds(i)),...this.functions.flatMap(a=>a.toFlatIds(i)),...this.events.flatMap(a=>a.toFlatIds(i)),...this.projects.flatMap(a=>a.toFlatIds(i)),...this.variableDeclarations.flatMap(a=>a.toFlatIds(i)),...this.variableInstances.flatMap(a=>a.toFlatIds(i)),...this.conditions.flatMap(a=>a.toFlatIds(i)),...this.operations.flatMap(a=>a.toFlatIds(i)),...this.functionCalls.flatMap(a=>a.toFlatIds(i)),...this.loops.flatMap(a=>a.toFlatIds(i)),...this.searches.flatMap(a=>a.toFlatIds(i))])}toMeta(){return{id:this.id,version:this.version,workspaceId:this.workspaceId,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,description:this.description,type:this.type,editable:this.editable,deletable:this.deletable,name:this.name}}toJSON(i=new Set){return i.has(this.id)?this.toReference():(i.add(this.id),{id:this.id,version:this.version,workspaceId:this.workspaceId,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,type:this.type,editable:this.editable,deletable:this.deletable,name:this.name,description:this.description,entities:this.entities.map(r=>r.toJSON(i)),variableDeclarations:this.variableDeclarations.map(r=>r.toJSON(i)),variableInstances:this.variableInstances.map(r=>r.toJSON(i)),conditions:this.conditions.map(r=>r.toJSON(i)),operations:this.operations.map(r=>r.toJSON(i)),loops:this.loops.map(r=>r.toJSON(i)),searches:this.searches.map(r=>r.toJSON(i)),functions:this.functions.map(r=>r.toJSON(i)),events:this.events.map(r=>r.toJSON(i)),projects:this.projects.map(r=>r.toJSON(i)),functionCalls:this.functionCalls.map(r=>r.toJSON(i))})}toJSONClone(i={uuidStrategy:"uuid"}){const r=new Map,a=new Set,c=this.getAllBuiltInIds();return Object.keys(this.instances).forEach(e=>{if(c.includes(e)){r.set(e,e);return}r.set(e,Gt.UUID.uuid())}),a.add(this.id),{id:r.get(this.id),version:this.version,workspaceId:this.workspaceId,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,type:this.type,editable:this.editable,deletable:this.deletable,name:this.name,description:this.description,entities:this.entities.map(e=>e.toJSONClone({...i,seenEntityMaps:r,seenEntities:a,newId:null})),projects:this.projects.map(e=>e.toJSONClone({...i,seenEntityMaps:r,seenEntities:a,newId:null})),variableDeclarations:this.variableDeclarations.map(e=>e.toJSONClone({...i,seenEntityMaps:r,seenEntities:a,newId:null})),variableInstances:this.variableInstances.map(e=>e.toJSONClone({...i,seenEntityMaps:r,seenEntities:a,newId:null})),conditions:this.conditions.map(e=>e.toJSONClone({...i,seenEntityMaps:r,seenEntities:a,newId:null})),operations:this.operations.map(e=>e.toJSONClone({...i,seenEntityMaps:r,seenEntities:a,newId:null})),functions:this.functions.map(e=>e.toJSONClone({...i,seenEntityMaps:r,seenEntities:a,newId:null})),events:this.events.map(e=>e.toJSONClone({...i,seenEntityMaps:r,seenEntities:a,newId:null})),functionCalls:this.functionCalls.map(e=>e.toJSONClone({...i,seenEntityMaps:r,seenEntities:a,newId:null})),loops:this.loops.map(e=>e.toJSONClone({...i,seenEntityMaps:r,seenEntities:a,newId:null})),searches:this.searches.map(e=>e.toJSONClone({...i,seenEntityMaps:r,seenEntities:a,newId:null}))}}toReference(i=at){var a;let r=this.id;return(a=i.seenEntityMaps)!=null&&a.has(this.id)&&(r=i.seenEntityMaps.get(this.id)),{id:r+"--"+Gt.UUID.uuid()+"--ref",type:d.GenericReference,entityId:r,version:this.version,entityType:this.type}}toShallowJSON(i=at){var a;let r=this.id;return(a=i.seenEntityMaps)!=null&&a.has(this.id)&&(r=i.seenEntityMaps.get(this.id)),{id:r,version:this.version,workspaceId:this.workspaceId,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,type:this.type,editable:this.editable,deletable:this.deletable,name:this.name,description:this.description,entities:this.entities.map(c=>c.toReference(i)),functions:this.functions.map(c=>c.toReference(i)),events:this.events.map(c=>c.toReference(i)),projects:this.projects.map(c=>c.toReference(i)),variableDeclarations:this.variableDeclarations.map(c=>c.toReference(i)),variableInstances:this.variableInstances.map(c=>c.toReference(i)),conditions:this.conditions.map(c=>c.toReference(i)),operations:this.operations.map(c=>c.toReference(i)),functionCalls:this.functionCalls.map(c=>c.toReference(i)),loops:this.loops.map(c=>c.toReference(i)),searches:this.searches.map(c=>c.toReference(i))}}toFlatJSON(i=new Set){return i.has(this.id)?[]:(i.add(this.id),[this.toShallowJSON(),...this.entities.flatMap(a=>a.toFlatJSON(i)),...this.functions.flatMap(a=>a.toFlatJSON(i)),...this.events.flatMap(a=>a.toFlatJSON(i)),...this.projects.flatMap(a=>a.toFlatJSON(i)),...this.variableDeclarations.flatMap(a=>a.toFlatJSON(i)),...this.variableInstances.flatMap(a=>a.toFlatJSON(i)),...this.conditions.flatMap(a=>a.toFlatJSON(i)),...this.operations.flatMap(a=>a.toFlatJSON(i)),...this.functionCalls.flatMap(a=>a.toFlatJSON(i)),...this.loops.flatMap(a=>a.toFlatJSON(i)),...this.searches.flatMap(a=>a.toFlatJSON(i))])}toGenerationTarget(i=at){var a;let r=this.id;return(a=i.seenEntityMaps)!=null&&a.has(this.id)&&(r=i.seenEntityMaps.get(this.id)),{id:r,workspaceId:this.workspaceId,type:this.type,name:this.name,description:this.description}}toFlatGenerationTarget(i=new Set){return i.has(this.id)?[]:(i.add(this.id),[...this.entities.flatMap(a=>a.toFlatGenerationTarget(i)),...this.functions.flatMap(a=>a.toFlatGenerationTarget(i)),...this.events.flatMap(a=>a.toFlatGenerationTarget(i)),...this.projects.flatMap(a=>a.toFlatGenerationTarget(i)),...this.variableDeclarations.flatMap(a=>a.toFlatGenerationTarget(i)),...this.variableInstances.flatMap(a=>a.toFlatGenerationTarget(i)),...this.conditions.flatMap(a=>a.toFlatGenerationTarget(i)),...this.operations.flatMap(a=>a.toFlatGenerationTarget(i)),...this.functionCalls.flatMap(a=>a.toFlatGenerationTarget(i)),...this.loops.flatMap(a=>a.toFlatGenerationTarget(i)),...this.searches.flatMap(a=>a.toFlatGenerationTarget(i))])}clearErrors(){return this.errors=[],this.entities.forEach(i=>i.clearErrors()),this.projects.forEach(i=>i.clearErrors()),this.functions.forEach(i=>i.clearErrors()),this.events.forEach(i=>i.clearErrors()),this.variableDeclarations.forEach(i=>i.clearErrors()),this.variableInstances.forEach(i=>i.clearErrors()),this.conditions.forEach(i=>i.clearErrors()),this.operations.forEach(i=>i.clearErrors()),this.functionCalls.forEach(i=>i.clearErrors()),this.loops.forEach(i=>i.clearErrors()),this.searches.forEach(i=>i.clearErrors()),this}validate(){return this.validateChildren(),AE([...this.errors]),{success:!0}}async validateAsync(i={}){const r=Y.YieldTracker.from(i);return await this.validateChildrenAsync({tracker:r}),await D_e([...this.errors]),{success:!0}}validateChildren(){this.entities.forEach(i=>i.validate()),this.projects.forEach(i=>i.validate()),this.functions.forEach(i=>i.validate()),this.events.forEach(i=>i.validate()),this.variableDeclarations.forEach(i=>i.validate()),this.variableInstances.forEach(i=>i.validate()),this.conditions.forEach(i=>i.validate()),this.operations.forEach(i=>i.validate()),this.functionCalls.forEach(i=>i.validate()),this.loops.forEach(i=>i.validate()),this.searches.forEach(i=>i.validate())}async validateChildrenAsync(i={}){const r=Y.YieldTracker.from(i);for(let a=0;a<this.entities.length;a++)await this.entities[a].validateAsync({tracker:r});for(let a=0;a<this.projects.length;a++)await this.projects[a].validateAsync({tracker:r});for(let a=0;a<this.functions.length;a++)await this.functions[a].validateAsync({tracker:r});for(let a=0;a<this.events.length;a++)await this.events[a].validateAsync({tracker:r});for(let a=0;a<this.variableDeclarations.length;a++)await this.variableDeclarations[a].validateAsync({tracker:r});for(let a=0;a<this.variableInstances.length;a++)await this.variableInstances[a].validateAsync({tracker:r});for(let a=0;a<this.conditions.length;a++)await this.conditions[a].validateAsync({tracker:r});for(let a=0;a<this.operations.length;a++)await this.operations[a].validateAsync({tracker:r});for(let a=0;a<this.functionCalls.length;a++)await this.functionCalls[a].validateAsync({tracker:r});for(let a=0;a<this.loops.length;a++)await this.loops[a].validateAsync({tracker:r});for(let a=0;a<this.searches.length;a++)await this.searches[a].validateAsync({tracker:r})}getErrors(){return[...this.errors,...this.entities.flatMap(r=>r.getErrors()),...this.projects.flatMap(r=>r.getErrors()),...this.functions.flatMap(r=>r.getErrors()),...this.events.flatMap(r=>r.getErrors()),...this.variableDeclarations.flatMap(r=>r.getErrors()),...this.variableInstances.flatMap(r=>r.getErrors()),...this.conditions.flatMap(r=>r.getErrors()),...this.operations.flatMap(r=>r.getErrors()),...this.functionCalls.flatMap(r=>r.getErrors()),...this.loops.flatMap(r=>r.getErrors()),...this.searches.flatMap(r=>r.getErrors())]}async getErrorsAsync(i={}){const r=Y.YieldTracker.from(i),a=[...this.errors];await r.tick();for(let c=0;c<this.entities.length;c++){const e=await this.entities[c].getErrorsAsync({tracker:r});a.push(...e)}for(let c=0;c<this.projects.length;c++){const e=await this.projects[c].getErrorsAsync({tracker:r});a.push(...e)}for(let c=0;c<this.functions.length;c++){const e=await this.functions[c].getErrorsAsync({tracker:r});a.push(...e)}for(let c=0;c<this.events.length;c++){const e=await this.events[c].getErrorsAsync({tracker:r});a.push(...e)}for(let c=0;c<this.variableDeclarations.length;c++){const e=await this.variableDeclarations[c].getErrorsAsync({tracker:r});a.push(...e)}for(let c=0;c<this.variableInstances.length;c++){const e=await this.variableInstances[c].getErrorsAsync({tracker:r});a.push(...e)}for(let c=0;c<this.conditions.length;c++){const e=await this.conditions[c].getErrorsAsync({tracker:r});a.push(...e)}for(let c=0;c<this.operations.length;c++){const e=await this.operations[c].getErrorsAsync({tracker:r});a.push(...e)}for(let c=0;c<this.functionCalls.length;c++){const e=await this.functionCalls[c].getErrorsAsync({tracker:r});a.push(...e)}for(let c=0;c<this.loops.length;c++){const e=await this.loops[c].getErrorsAsync({tracker:r});a.push(...e)}for(let c=0;c<this.searches.length;c++){const e=await this.searches[c].getErrorsAsync({tracker:r});a.push(...e)}return a}getShallowErrors(){return this.errors}clone(){return this}addDefinitionEntity(i){return this.entities.includes(i)||this.entities.push(i),i}addFunctionDeclaration(i){return this.functions.includes(i)||this.functions.push(i),i}addFunctionCall(i){return this.functionCalls.includes(i)||this.functionCalls.push(i),i}addVariableDeclaration(i){return this.variableDeclarations.includes(i)||this.variableDeclarations.push(i),i}addVariableInstance(i){return this.variableInstances.includes(i)||this.variableInstances.push(i),i}addInstalledProject(i){return this.projects.includes(i)||this.projects.push(i),this}addGlobalEvent(i){return this.events.includes(i)||this.events.push(i),this}addCondition(i){return this.conditions.includes(i)||this.conditions.push(i),this}addOperation(i){return this.operations.includes(i)||this.operations.push(i),this}addLoop(i){return this.loops.includes(i)||this.loops.push(i),this}addSearch(i){return this.searches.includes(i)||this.searches.push(i),this}removeDefinitionEntity(i){const r=this.entities.findIndex(a=>a.id===i.id);if(r>-1){const a=this.entities[r];return this.entities.splice(r,1),a}return null}removeCondition(i){const r=this.conditions.findIndex(a=>a.id===i.id);if(r>-1){const a=this.conditions[r];return this.conditions.splice(r,1),a}return null}removeOperation(i){const r=this.operations.findIndex(a=>a.id===i.id);if(r>-1){const a=this.operations[r];return this.operations.splice(r,1),a}return null}removeLoop(i){const r=this.loops.findIndex(a=>a.id===i.id);if(r>-1){const a=this.loops[r];return this.loops.splice(r,1),a}return null}removeSearch(i){const r=this.searches.findIndex(a=>a.id===i.id);if(r>-1){const a=this.searches[r];return this.searches.splice(r,1),a}return null}removeFunctionCall(i){const r=this.functionCalls.findIndex(a=>a.id===i.id);if(r>-1){const a=this.functionCalls[r];return this.functionCalls.splice(r,1),a}return null}removeVariableInstance(i){const r=this.variableInstances.findIndex(a=>a.id===i.id);if(r>-1){const a=this.variableInstances[r];return this.variableInstances.splice(r,1),a}return null}removeVariableDeclaration(i){const r=this.variableDeclarations.findIndex(a=>a.id===i.id);if(r>-1){const a=this.variableDeclarations[r];return this.variableDeclarations.splice(r,1),a}return null}removeFunctionDeclaration(i){const r=this.functions.findIndex(a=>a.id===i.id);if(r>-1){const a=this.functions[r];return this.functions.splice(r,1),a}return null}removeInstalledProject(i){const r=this.projects.findIndex(a=>a.id===i.id);if(r>-1){const a=this.projects[r];return this.projects.splice(r,1),a}return null}removeGlobalEvent(i){const r=this.events.findIndex(a=>a.id===i.id);if(r>-1){const a=this.events[r];return this.events.splice(r,1),a}return null}removeTopLevelVariableDeclaration(i){if(i.type!==d.VariableDeclaration)return null;const r=this.variableDeclarations.findIndex(a=>a.id===i.id);if(r>-1){const a=this.variableDeclarations[r];return this.variableDeclarations.splice(r,1),a}return null}getEntryPoints(){return[...this.functions,...this.events,...this.entities.flatMap(r=>r.methods)]}getTerminationStatements(){return[...this.getEntryPoints().reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.ReturnStatement||e.type===d.ContinueStatement||e.type===d.BreakStatement)]},[])]}getFunctionDeclaration(i){return this.functions.find(r=>r.id===i)||null}getConditions(){return[...this.conditions,...this.getEntryPoints().reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.Condition)]},[]),...this.functionCalls.reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.Condition)]},[]),...this.operations.reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.Condition)]},[]),...this.loops.reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.Condition)]},[]),...this.searches.reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.Condition)]},[])]}getOperations(){return[...this.operations,...this.getEntryPoints().reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.Operation)]},[]),...this.functionCalls.reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.Operation)]},[]),...this.conditions.reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.Operation)]},[]),...this.loops.reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.Operation)]},[]),...this.searches.reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.Operation)]},[])]}getFunctionCalls(){return[...this.functionCalls,...this.getEntryPoints().reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.FunctionCall)]},[]),...this.conditions.reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.FunctionCall)]},[]),...this.operations.reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.FunctionCall)]},[]),...this.loops.reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.FunctionCall)]},[]),...this.searches.reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.FunctionCall)]},[])]}getDefinitionEntities(i=new Set){return Array.from(this.subscribedDefinitionEntities).filter(a=>!i.has(a)).map(a=>this.get(a))}getVariables(){return[...this.variableDeclarations,...this.getEntryPoints().reduce((r,a)=>{const c=cr(a);return[...r,...c]},[]),...this.functionCalls.reduce((r,a)=>{const c=cr(a);return[...r,...c]},[]),...this.conditions.reduce((r,a)=>{const c=cr(a);return[...r,...c]},[]),...this.operations.reduce((r,a)=>{const c=cr(a);return[...r,...c]},[]),...this.loops.reduce((r,a)=>{const c=cr(a);return[...r,...c]},[]),...this.searches.reduce((r,a)=>{const c=cr(a);return[...r,...c]},[])]}getVariableInstances(){return[...this.variableInstances,...this.entities.reduce((r,a)=>[...r,...a.methods.flatMap(c=>{const f=ct(c).filter(h=>h.type===d.VariableInstance);return[...r,...f]})],[]),...this.getEntryPoints().reduce((r,a)=>{const e=cr(a).filter(f=>f.type===d.VariableInstance);return[...r,...e]},[]),...this.functionCalls.reduce((r,a)=>{const e=cr(a).filter(f=>f.type===d.VariableInstance);return[...r,...e]},[]),...this.conditions.reduce((r,a)=>{const e=cr(a).filter(f=>f.type===d.VariableInstance);return[...r,...e]},[]),...this.operations.reduce((r,a)=>{const e=cr(a).filter(f=>f.type===d.VariableInstance);return[...r,...e]},[]),...this.loops.reduce((r,a)=>{const e=cr(a).filter(f=>f.type===d.VariableInstance);return[...r,...e]},[]),...this.searches.reduce((r,a)=>{const e=cr(a).filter(f=>f.type===d.VariableInstance);return[...r,...e]},[])]}getVariableDeclarations(){return C([...this.variableDeclarations,...this.entities.reduce((r,a)=>[...r,...a.methods.flatMap(c=>{const f=ct(c).filter(h=>h.type===d.VariableDeclaration);return[...r,...f]})],[]),...this.getEntryPoints().reduce((r,a)=>{const e=cr(a).filter(f=>f.type===d.VariableDeclaration);return[...r,...e]},[]),...this.functionCalls.reduce((r,a)=>{const e=cr(a).filter(f=>f.type===d.VariableDeclaration);return[...r,...e]},[]),...this.conditions.reduce((r,a)=>{const e=cr(a).filter(f=>f.type===d.VariableDeclaration);return[...r,...e]},[]),...this.operations.reduce((r,a)=>{const e=cr(a).filter(f=>f.type===d.VariableDeclaration);return[...r,...e]},[]),...this.loops.reduce((r,a)=>{const e=cr(a).filter(f=>f.type===d.VariableDeclaration);return[...r,...e]},[]),...this.searches.reduce((r,a)=>{const e=cr(a).filter(f=>f.type===d.VariableDeclaration);return[...r,...e]},[])])}getLoops(){return[...this.loops,...this.getEntryPoints().reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.Loop)]},[]),...this.functionCalls.reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.Loop)]},[]),...this.conditions.reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.Loop)]},[]),...this.operations.reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.Loop)]},[]),...this.searches.reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.Loop)]},[])]}getSearches(){return[...this.searches,...this.getEntryPoints().reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.Search)]},[]),...this.functionCalls.reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.Search)]},[]),...this.conditions.reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.Search)]},[]),...this.operations.reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.Search)]},[]),...this.loops.reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.Search)]},[])]}attachOrphanReferences(){const i=this.getVariableInstances(),r=this.getVariableDeclarations();return i.forEach(a=>{if(!a.declaration){const c=a.initialData,e=c.declaration.entityId||c.declaration.id,f=r.find(h=>h.id===e);f&&a.setDeclaration(f)}}),this}getBuiltInPersistedEntity(){return this.builtInBaseEntities.find(i=>i.name===ge.PERSISTED_ENTITY)||null}requestActiveDynamicValue(i,r=!1){var c,e;const a=(e=(c=this.parentContext).requestActiveDynamicValue)==null?void 0:e.call(c,i,r);if(!a&&pI.includes(i.type)){const f=i.getDefaultValue();return f?{value:f,type:Be.DefaultValue,inheritanceLink:null,valueOwner:i}:null}return a||null}requestExtension(i){if(this.parentContext.requestExtension){const r=this.parentContext.requestExtension(i);if(r&&!r.module)throw new Error(`Module ${i} is not registered properly.`);return r.module||null}return null}undo(){Y.Logger.log("Undoing, from: ",this.undoableStackValueIndex),this.undoableStackValueIndex=this.undoableStackValueIndex-1,Y.Logger.log("To: ",this.undoableStackValueIndex);const i=this.history[this.undoableStackValueIndex+1],r=this.history[this.undoableStackValueIndex];return Y.Logger.log("Current change set: ",i==null?void 0:i.toJSON()),Y.Logger.log("Change set to restore: ",r==null?void 0:r.toJSON()),$_(i||"initial",r||"initial",this)}redo(){Y.Logger.log("Undoing, from: ",this.undoableStackValueIndex),this.undoableStackValueIndex=this.undoableStackValueIndex+1,Y.Logger.log("To: ",this.undoableStackValueIndex);const i=this.history[this.undoableStackValueIndex-1],r=this.history[this.undoableStackValueIndex];return Y.Logger.log("Current change set: ",i==null?void 0:i.toJSON()),Y.Logger.log("Change set to restore: ",r.toJSON()),$_(i||"initial",r||"initial",this)}applyExternalChangeSet(i){const r=i.payload,a=this.addChangeSet(new S(this,i.userAuthor,i.emittedAt,this));a.ignoreNonEditable=!0,a.ignoreNonDeletable=!0;const c=r.updated[this.id];if(!c)throw new Error("Project root not found in change set transfer. Cannot apply changes.");const e={...r.added,...r.updated,...r.removed},f=[...Object.keys(r.added),...Object.keys(r.updated),...Object.keys(r.removed)];f.forEach(m=>{var E;if(!e[m]){Y.Logger.warn(`Entity '${m}' not found in change set transfer. Cannot apply changes.`);const b=(E=this.get(m))==null?void 0:E.toShallowJSON();throw b?Y.Logger.warn("Entity in project: ",b):Y.Logger.warn("Entity not in project"),new Error(`Entity '${m}' not found in change set transfer. Cannot apply changes.`)}});const h=new Fn(c,{allBuiltInEntityIds:this.diggestedBuiltInBaseEntitiesIds});return h.flatRecord=e,h.order=f,h.orderEntities(),Y.Logger.log("All entities: ",h.order.map((m,E)=>`${E+1}: ${e[m].type} - ${m}`).join(`,
605
+ Alternatively you can update the parent data-type entity with 'update' action to remove the existing value of the field.`}))}return{errors:e,explanations:c,modifiedData:a}}get interactive(){return this.implements.length?this.implements.every(i=>i.interactive):!0}get allMethods(){return C([...this.ownDeclaredMethods,...this.allBaseMethodsFromOriginalParents])}get allProperties(){return C([...this.ownDeclaredProperties,...this.allBasePropertiesFromOriginalParents])}get allBaseMethodsFromOriginalParents(){var a;const i=((a=this.extends)==null?void 0:a.type)===d.DefinitionEntity?this.extends.allMethods:[],r=[...i].filter(c=>!i.some(e=>{var f,h;return e.id!==c.id&&(((f=e.implements)==null?void 0:f.id)===c.id||((h=e.extends)==null?void 0:h.id)===c.id)}));return C([...r,...this.implements.flatMap(c=>{const e=c.type===d.DefinitionEntity?[...c.allMethods]:[];return[...e].filter(h=>!e.some(m=>{var E,b;return m.id!==h.id&&(((E=m.implements)==null?void 0:E.id)===h.id||((b=m.extends)==null?void 0:b.id)===h.id)}))})])}get allBasePropertiesFromOriginalParents(){var c;const i=((c=this.extends)==null?void 0:c.allProperties)||[],r=[...i].filter(e=>!i.some(f=>{var h;return f.id!==e.id&&(!!f.implements.find(m=>m.id===e.id)||((h=f.extends)==null?void 0:h.id)===e.id)}));return C([...r,...this.implements.flatMap(e=>{const f=[...e.allProperties];return[...f].filter(m=>!f.some(E=>{var b;return E.id!==m.id&&(!!E.implements.find(A=>A.id===m.id)||((b=E.extends)==null?void 0:b.id)===m.id)}))})])}get allBasePropertiesFromExtendedAndImplementedEntities(){var c,e;const i=[...((c=this.extends)==null?void 0:c.ownDeclaredProperties)||[],...((e=this.extends)==null?void 0:e.allBasePropertiesFromExtendedAndImplementedEntities)||[]].filter(f=>!f.abstract),r=[...i].filter(f=>!i.some(h=>{var m;return h.id!==f.id&&(!!h.implements.find(E=>E.id===f.id)||((m=h.extends)==null?void 0:m.id)===f.id)})),a=this.implements.reduce((f,h)=>{const m=h.implementedPropertiesFromOriginalParents,E=[...h.ownDeclaredProperties].filter(_=>!_.abstract),b=[...m,...E,...f];return[...b].filter(_=>!!!b.find(V=>{var M;return!!V.implements.find(G=>G.id===_.id)||((M=V.extends)==null?void 0:M.id)===_.id}))},[]);return C([...r,...a])}get allBaseMethodsFromExtendedAndImplementedEntities(){return C([...(this.extends?[this.extends]:[]).reduce((i,r)=>r.type!==d.DefinitionEntity?[]:[...[...r.ownDeclaredMethods,...r.allBaseMethodsFromExtendedAndImplementedEntities].filter(c=>c.type!==d.ActionDescriptor),...i],[]),...this.implements.reduce((i,r)=>r.type!==d.DefinitionEntity?r.abstractMethods:[...[...r.ownDeclaredMethods,...r.allBaseMethodsFromExtendedAndImplementedEntities].filter(c=>c.type!==d.ActionDescriptor),...i],[])])}get extendedPropertiesFromOriginalParents(){var a,c;const i=[...((a=this.extends)==null?void 0:a.ownDeclaredProperties)||[],...((c=this.extends)==null?void 0:c.extendedPropertiesFromOriginalParents)||[]].filter(e=>!e.abstract),r=[...i].filter(e=>!i.some(f=>{var h;return f.id!==e.id&&(!!f.implements.find(m=>m.id===e.id)||((h=f.extends)==null?void 0:h.id)===e.id)}));return C(r)}get implementedPropertiesFromOriginalParents(){return C([...(this.extends?[this.extends]:[]).reduce((i,r)=>{const a=r.implementedPropertiesFromOriginalParents,c=[...r.ownDeclaredProperties].filter(h=>!!h.abstract),e=[...a,...c,...i];return[...e].filter(h=>!!!e.find(E=>{var b;return((b=E.extends)==null?void 0:b.id)===h.id||!!E.implements.find(A=>A.id===h.id)}))},[]),...this.implements.reduce((i,r)=>{const a=r.implementedPropertiesFromOriginalParents,c=[...r.ownDeclaredProperties].filter(h=>!!h.abstract),e=[...a,...c,...i];return[...e].filter(h=>!!!e.find(E=>{var b;return!!E.implements.find(A=>A.id===h.id)||((b=E.extends)==null?void 0:b.id)===h.id}))},[])].filter(i=>!!i.abstract))}get extendedMethodsFromOriginalParents(){return C((this.extends?[this.extends]:[]).reduce((i,r)=>{if(r.type!==d.DefinitionEntity)return[];const a=[...r.ownDeclaredMethods,...r.extendedMethodsFromOriginalParents].filter(c=>c.type!==d.ActionDescriptor);return[...i,...a]},[]))}get implementedMethodsFromOriginalParents(){return C([...(this.extends?[this.extends]:[]).reduce((i,r)=>{const a=r.type===d.DefinitionEntity?r.methods:[],c=[...r.abstractMethods].filter(e=>!a.find(f=>f.name===e.name));return[...a,...c,...i]},[]),...this.implements.reduce((i,r)=>[...r.abstractMethods,...i],[])].filter(i=>i.type===d.ActionDescriptor))}get extendedProperties(){return this.properties.filter(i=>i.isExtendedProperty)}get ownDeclaredProperties(){return this.properties.filter(r=>!r.isExtendedProperty)}get extendedMethods(){return this.methods.filter(i=>i.isExtendedMethod)}get ownDeclaredMethods(){return this.methods.filter(i=>!i.isExtendedMethod)}validateGeneratedUpdate(i){const r=[],a=[];return i.parent&&r.push(new we({id:`${this.id}--${Te.InvalidParentUpdate}`,code:Te.InvalidParentUpdate,severity:ve.Error,message:`Entity of type '${this.type}' with id '${this.id}' cannot have the 'parent' property updated. The 'parent' on an '${this.type}', must be the root project as it is a globally declared entity.`})),{errors:r,explanations:a,modifiedData:i}}subscribeDependents(i){return i.forEach(r=>{this.detachedDependents[r.entity.id]||(this.detachedDependents[r.entity.id]=r)}),this}unsubscribeDependents(i){return i.forEach(r=>{this.detachedDependents[r.entity.id]&&delete this.detachedDependents[r.entity.id]}),this}syncDependents(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"sync-dependents"))){const r=[],a=[],c=[],e=[];return Object.values(this.detachedDependents).forEach(f=>{const h=f.entity.afterAllChildrenInitialized(i);r.push(...h.updated),a.push(...h.added),c.push(...h.removed),e.push(...h.affected)}),i==null||i.attemptAutoclose("sync-dependents",this.id),{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}onDetachedDependencyRemoved(i,r,a){const c=[],e=[],f=[],h=[];return r==="implements"&&(this.removeImplementation(i,a),c.push(this)),r==="extends"&&(this.setExtension(null,a),c.push(this)),{updated:C(c),added:C(e),removed:C(f),affected:C(h),self:this}}onDetachedDependencyRestored(i,r,a){const c=[],e=[],f=[],h=[];return r==="implements"&&(this.addImplementation(i,a),c.push(this)),r==="extends"&&(this.setExtension(i,a),c.push(this)),{updated:C(c),added:C(e),removed:C(f),affected:C(h),self:this}}unsubscribeFromDependencies(){return this.implements.forEach(i=>{ma.includes(i.type)||i.unsubscribeDependents([{entity:this,field:"implements"}])}),this.extends&&(ma.includes(this.extends.type)||this.extends.unsubscribeDependents([{entity:this,field:"extends"}])),this}subscribeToDependencies(){return this.implements.forEach(i=>{ma.includes(i.type)||i.subscribeDependents([{entity:this,field:"implements"}])}),this.extends&&(ma.includes(this.extends.type)||this.extends.subscribeDependents([{entity:this,field:"extends"}])),this}increaseVersion(i){var r;if(this.project.diggestedBuiltInBaseEntitiesIds.has(this.id))return this;if(i&&!B(i).isValid())throw new Error(`The shared timestamp '${i}' is not a valid ISO 8601 date string.`);if(i&&B(i).isSame(B(this.createdAt)))return this;if(!((r=this.knownVersions)!=null&&r.has(this.version))&&this.project.initialized)throw new Error(`The current ${this.type} ${this.id} version '${this.version}' is not captured in the 'knownVersions' map. Capture the current version before increasing it to avoid losing data.`);if(!this.activeVersion)throw new Error(`Only active versions can be increased. Entity with id '${this.id}' and version '${this.version}' is not active.`);return this.previousVersion=this.version,this.version=x.UUID.uuid(),this.createdAt=B(i).toISOString()||B().toISOString(),this}captureVersion(){var r;const i=((r=this.knownVersions)==null?void 0:r.get(this.version))||new Ni(this,this.project);if(!this.activeVersion)throw new Error(`Only active versions can be captured. Entity of type ${this.type} with id '${this.id}' and version '${this.version}' is not active.`);if(this.version!==i.version)throw new Error(`Captured ${this.type} with id '${this.id}', version '${i.version}' does not match current entity version '${this.version}'.`);return this.knownVersions=this.knownVersions?this.knownVersions.set(this.version,i):new Map().set(this.version,i),this.apply(i),this}snapshot(){const i=new Ni(this,this.project);return this.apply(i)}apply(i){const r=this.toMeta();return i.metaSync(r,null),i.properties=[...this.properties],i.methods=[...this.methods],i.abstractMethods=[...this.abstractMethods],i.extends=this.extends,i.implements=[...this.implements],i.allPropertiesImplement=this.allPropertiesImplement,i.additionalPropertiesDataType=this.additionalPropertiesDataType,i.parent=this.parent,i}recursiveCaptureUpstreamVersions(i){const r=[],a=[],c=[],e=[];if(this.parent){this.parent.increaseVersion(i);const f=this.parent.recursiveCaptureUpstreamVersions(i);r.push(this.parent,...f.updated),a.push(...f.added),c.push(...f.removed)}return{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}async restoreVersion(i,r){var m;const a=[],c=[],e=[],f=[];if(this.version===i&&(r!=null&&r.skipIfSameVersion))return{updated:C(a),added:C(c),removed:C(e),affected:C(f),self:this};if(!this.knownVersions){const E=new Map;for(const[b,A]of this.knownVersions||new Map){if(E.set(b,A),A.activeVersion=!1,A.knownVersions)for(const[_,P]of A.knownVersions)E.set(_,P);A.knownVersions=null}}let h=(m=this.knownVersions)==null?void 0:m.get(i);if(!h){const E=await this.APILoadVersion({},i);if(!E)throw new Error(`Version with id '${i}' for entity with id '${this.id}' not found.`);h=new Ni(E,this.project)}return this.metaSync(h.toShallowJSON(),null),this.previousVersion=h.previousVersion,this.version=h.version,this.createdAt=h.createdAt,this.author=h.author,this.deleted=h.deleted,this.properties=[...h.properties],this.methods=[...h.methods],this.abstractMethods=[...h.abstractMethods],this.extends=h.extends,this.implements=[...h.implements],this.allPropertiesImplement=h.allPropertiesImplement,this.additionalPropertiesDataType=h.additionalPropertiesDataType,this.parent=h.parent,{updated:C(a),added:C(c),removed:C(e),affected:C(f),self:this}}updateWithShallowTransfer(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.UpdateWithShallowTransfer))){if(!this.checkCanEdit(this,r))return Y.Logger.warn(`[updateWithShallowTransfer] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.UpdateWithShallowTransfer,this.id),this;if(this.metaSync(i,r),this.version=i.version,this.createdAt=i.createdAt,this.author=i.author,this.deleted=i.deleted,this.previousVersion=i.previousVersion,this.unsubscribeFromDependencies(),i.parent){const f=ie(i.parent),h=this.project.get(f),m=this.parent;if(m&&m.id!==(h==null?void 0:h.id)&&this.removeFromParent(r),h)this.setParent(h,r),this.addSelfToProject(r);else throw r==null||r.attemptAutoclose(w.UpdateWithShallowTransfer,this.id),new Error(`${this.type} with id '${this.id}' has a 'parent' reference '${f}' that isn't found in the project`)}else throw r==null||r.attemptAutoclose(w.UpdateWithShallowTransfer,this.id),new Error(`${this.type} with id '${this.id}' must have a 'parent'`);if(i.extends){const f=ie(i.extends),h=this.project.get(f);h&&this.setExtension(h,r)}else this.setExtension(null,r);if(i.implements.forEach(f=>{const h=ie(f),m=this.project.get(h);if(m)this.addImplementation(m,r);else throw new Error(`${fr(this.type)} with id '${this.id}' has a 'implements' reference "${h}" which is missing in the project`)}),this.implements.filter(f=>{const h=ie(f);return!i.implements.find(m=>ie(m)===h)}).forEach(f=>{this.removeImplementation(f,r)}),i.methods.forEach(f=>{const h=ie(f),m=this.project.get(h);m&&this.addMethod(m,r)}),this.methods.filter(f=>{const h=ie(f);return!i.methods.find(m=>ie(m)===h)}).forEach(f=>{this.removeMethod(f,r)}),i.properties.forEach(f=>{const h=ie(f),m=this.project.get(h);m&&this.addProperty(m,r)}),this.properties.filter(f=>{const h=ie(f);return!i.properties.find(m=>ie(m)===h)}).forEach(f=>{this.removeProperty(f,r)}),i.allPropertiesImplement){const f=ie(i.allPropertiesImplement),h=this.project.get(f);h&&this.setAllPropertiesImplement(h,r)}else this.setAllPropertiesImplement(null,r);if(i.additionalPropertiesDataType){const f=ie(i.additionalPropertiesDataType),h=this.project.get(f);h&&this.setAdditionalPropertiesDataType(h,r)}else this.setAdditionalPropertiesDataType(null,r);return this.captureVersion(),this.subscribeToDependencies(),r==null||r.attemptAutoclose(w.UpdateWithShallowTransfer,this.id),this}updateWithGenerationTarget(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.UpdateWithGenerationTarget))){var a;if(!this.checkCanEdit(this,r))return Y.Logger.warn(`[updateWithGenerationTarget] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.UpdateWithGenerationTarget,this.id),this;if(this.metaSync(i,r),i.parent){const c=ie(i.parent),e=this.project.get(c),f=this.parent;if(f&&f.id!==(e==null?void 0:e.id)&&this.removeFromParent(r),e)this.setParent(e,r),this.addSelfToProject(r);else throw r==null||r.attemptAutoclose(w.UpdateWithGenerationTarget,this.id),new Error(`${this.type} with id '${this.id}' has a 'parent' reference '${c}' that isn't found in the project`)}if(i.extends){const c=ie(i.extends),e=this.project.get(c);if(e)this.setExtension(e,r);else throw new Error(`${fr(this.type)} with id '${this.id}' has an 'extends' reference "${c}" which is missing in the project`)}else i.extends===null&&this.setExtension(null,r);return(a=i.implements)==null||a.forEach(c=>{const e=ie(c),f=this.project.get(e);if(f)this.addImplementation(f,r);else throw new Error(`${fr(this.type)} with id '${this.id}' has a 'implements' reference "${e}" which is missing in the project`)}),i.implements&&this.implements.filter(e=>{const f=ie(e);return!(i.implements||[]).find(h=>ie(h)===f)}).forEach(e=>{this.removeImplementation(e,r)}),this.captureVersion(),this.subscribeToDependencies(),r==null||r.attemptAutoclose(w.UpdateWithGenerationTarget,this.id),this}hydrateAncestors(){const i=[],r=[],a=[],c=[];if(this.initialData.parent){const e=ie(this.initialData.parent),f=this.project.get(e);if(f)this.setParent(f,null),i.push(f);else throw new Error(`${this.type} with id '${this.id}' has a 'parent' reference '${e}' that isn't found in the project`)}else throw new Error(`${this.type} with id '${this.id}' must have a 'parent'`);if(this.initialData.extends){const e=ie(this.initialData.extends),f=this.project.get(e);f&&(this.setExtension(f,null),f.type!==d.BuiltInBaseEntity&&i.push(f))}return this.initialData.implements.forEach(e=>{const f=ie(e),h=this.project.get(f);if(h)this.addImplementation(h,null),h.type!==d.BuiltInBaseEntity&&i.push(h);else throw new Error(`${fr(this.type)} with id '${this.id}' has a 'implements' reference "${f}" which is missing in the project`)}),{updated:C(i),added:C(r),removed:C(a),affected:C(c),self:this}}afterAllChildrenInitialized(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.AfterAllChildrenInitialized))){if(!this.checkCanEdit(this,i))return Y.Logger.warn(`[afterAllChildrenInitialized] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),i==null||i.attemptAutoclose(w.AfterAllChildrenInitialized,this.id),{updated:[],added:[],removed:[],affected:[],self:this};const r=[],a=[],c=[],e=[];this.initialized=!0;const{updated:f,added:h,removed:m,affected:E}=this.syncImplementationProperties(i);r.push(...f),a.push(...h),c.push(...m),e.push(...E);const{updated:b,added:A,removed:_,affected:P}=this.addExtendedProperties(i);r.push(...b),a.push(...A),c.push(..._),e.push(...P);const{updated:V,added:M,removed:G}=this.removeUnrecognizedProperties(i);r.push(...V),a.push(...M),c.push(...G);const{updated:k,added:q,removed:ne,affected:J}=this.syncImplementationMethods(i);r.push(...k),a.push(...q),c.push(...ne),e.push(...J);const{updated:se,added:te,removed:le,affected:ue}=this.addExtendedMethods(i);r.push(...se),a.push(...te),c.push(...le),e.push(...ue);const{updated:z,added:Q,removed:de}=this.removeUnrecognizedMethods(i);r.push(...z),a.push(...Q),c.push(...de),this.addSuggestions(),this.properties.forEach(fe=>{this.static&&!fe.static&&fe.metaSync({static:!0},i)}),this.properties.sort((fe,be)=>fe.index-be.index);let he=this.project.getDefinitionEntities(new Set([this.id])).filter(fe=>fe.id!==this.id&&fe.name.toLowerCase()===this.name.toLowerCase());if(he.length&&(this.parent.type===d.Project&&(he.filter(be=>be.parent.type!==d.Project).forEach(be=>{N_e(be,i)}),he=he.filter(be=>be.name.toLowerCase()===this.name.toLowerCase())),he.length)){const fe=su(this.name,he);this.metaSync({name:fe},i)}return i==null||i.attemptAutoclose(w.AfterAllChildrenInitialized,this.id),{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}addSelfToProject(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"add-self-to-project"))){const r=[this],a=[],c=[],e=[];if(this.parent.type===d.DataType){const f=this.parent;f.entity=this,r.push(f)}else this.project.addDefinitionEntity(this);return this.subscribe(),this.subscribeToDependencies(),i==null||i.attemptAutoclose("add-self-to-project",this.id),{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}setParent(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.SetParent))){var a;return this.checkCanEditWithCounterpartAndSideEffects(this,i,w.SetParent,r)?(((a=this.parent)==null?void 0:a.id)!==(i==null?void 0:i.id)&&(this.parent=i,r&&(r==null||r.add(this,W.Updated))),r==null||r.attemptAutoclose(w.SetParent,this.id),this):this}setExtension(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.SetExtension))){var a;return this.checkCanEdit(this,r)?(((a=this.extends)==null?void 0:a.id)!==(i==null?void 0:i.id)&&(this.extends=i,this.subscribeToDependencies(),r&&(r==null||r.add(this,W.Updated))),r==null||r.attemptAutoclose(w.SetExtension,this.id),this):(Y.Logger.warn(`[setExtension] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.SetExtension,this.id),this)}addImplementation(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.AddImplementation))){return this.checkCanEdit(this,r)?(this.implements.includes(i)||(this.implements.push(i),this.subscribeToDependencies(),r==null||r.add(this,W.Updated)),r==null||r.attemptAutoclose(w.AddImplementation,this.id),this):(Y.Logger.warn(`[addImplementation] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.AddImplementation,this.id),this)}removeImplementation(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.RemoveImplementation))){return this.checkCanEdit(this,r)?(this.implements.includes(i)&&(this.implements=this.implements.filter(a=>a.id!==i.id),r==null||r.add(this,W.Updated)),r==null||r.attemptAutoclose(w.RemoveImplementation,this.id),this):(Y.Logger.warn(`[removeImplementation] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.RemoveImplementation,this.id),this)}removeProperty(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.RemoveProperty))){return this.checkCanEdit(this,r)?(this.properties.includes(i)&&(this.properties=this.properties.filter(a=>a.id!==i.id),r==null||r.add(this,W.Updated)),r==null||r.attemptAutoclose(w.RemoveProperty,this.id),this):(Y.Logger.warn(`[removeProperty] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.RemoveProperty,this.id),this)}addMethod(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.AddMethod))){return this.checkCanEdit(this,r)?(this.methods.includes(i)||(this.methods.push(i),this.suggestedMethods=this.suggestedMethods.filter(a=>a.name!==i.name),r==null||r.add(this,W.Updated)),r==null||r.attemptAutoclose(w.AddMethod,this.id),this):(Y.Logger.warn(`[addMethod] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.AddMethod,this.id),this)}removeMethod(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.RemoveMethod))){return this.checkCanEdit(this,r)?(this.methods.includes(i)&&(this.methods=this.methods.filter(a=>a.id!==i.id),r==null||r.add(this,W.Updated)),r==null||r.attemptAutoclose(w.RemoveMethod,this.id),this):(Y.Logger.warn(`[removeMethod] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.RemoveMethod,this.id),this)}addProperty(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.AddProperty))){return this.checkCanEdit(this,r)?(this.properties.includes(i)||(this.properties.push(i),this.suggestedProperties=this.suggestedProperties.filter(a=>a.name!==i.name),r==null||r.add(this,W.Updated)),r==null||r.attemptAutoclose(w.AddProperty,this.id),this):(Y.Logger.warn(`[addProperty] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.AddProperty,this.id),this)}addSuggestedProperty(i){return this.suggestedProperties.includes(i)||this.suggestedProperties.push(i),this}addSuggestedMethod(i){return this.suggestedMethods.includes(i)||this.suggestedMethods.push(i),this}removeSuggestedProperty(i){return this.suggestedProperties=this.suggestedProperties.filter(r=>r.id!==i.id),this}removeSuggestedMethod(i){return this.suggestedMethods=this.suggestedMethods.filter(r=>r.id!==i.id),this}addAbstractMethod(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.AddAbstractMethod))){return this.checkCanEdit(this,r)?(this.abstractMethods.includes(i)||(this.abstractMethods.push(i),r==null||r.add(this,W.Updated)),r==null||r.attemptAutoclose(w.AddAbstractMethod,this.id),this):(Y.Logger.warn(`[addAbstractMethod] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.AddAbstractMethod,this.id),this)}removeAbstractMethod(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.RemoveAbstractMethod))){return this.checkCanEdit(this,r)?(this.abstractMethods.includes(i)&&(this.abstractMethods=this.abstractMethods.filter(a=>a.id!==i.id),r==null||r.add(this,W.Updated)),r==null||r.attemptAutoclose(w.RemoveAbstractMethod,this.id),this):(Y.Logger.warn(`[removeAbstractMethod] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.RemoveAbstractMethod,this.id),this)}initChildren(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"init-children"))){if(this.initialized||this.startedInitialization)return this;if(this.startedInitialization=!0,this.properties=this.initialData.properties.map(r=>{const a=Re(r,this.project);return a.setParent(this,null),a.initChildren(i),a}),this.methods=this.initialData.methods.map(r=>{const a=Re(r,this.project);return a.setParent(this,null),a.initChildren(i),a}),this.abstractMethods=this.initialData.abstractMethods.map(r=>{const a=Re(r,this.project);return a.setParent(this,null),a.initChildren(i),a}),this.initialData.extends&&(this.extends=Re(this.initialData.extends,this.project)),this.implements=this.initialData.implements.map(r=>Re(r,this.project)),this.initialData.allPropertiesImplement){const r=Re(this.initialData.allPropertiesImplement,this.project);r.setParent(this,null),r.initChildren(null),this.setAllPropertiesImplement(r,i)}if(this.initialData.additionalPropertiesDataType){const r=Re(this.initialData.additionalPropertiesDataType,this.project);r.setParent(this,null),r.initChildren(null),this.setAdditionalPropertiesDataType(r,i)}return this.subscribeToDependencies(),this.afterAllChildrenInitialized(i),i==null||i.attemptAutoclose("init-children",this.id),this}removeUnrecognizedProperties(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"remove-unrecognized-properties"))){const r=[],a=[],c=[],e=[];let f=[...this.properties];f=f.filter(b=>b.parent.id===this.id),f=f.filter(b=>!b.isExtendedProperty);const h=this.implementedPropertiesFromOriginalParents,m=this.getAllPropertiesImplements();return f.filter(b=>this.interactive&&!b.implements.length?!1:!b.implements.find(_=>!!h.find(P=>P.id===_.id)||!!m.find(P=>P.id===_.id))).forEach(b=>{const A=b.remove({ignoreUpstream:!1},i);c.push(...A.removed),r.push(...A.updated)}),i==null||i.attemptAutoclose("remove-unrecognized-properties",this.id),{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}removeUnrecognizedMethods(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"remove-unrecognized-methods"))){const r=[],a=[],c=[],e=[];let f=[...this.methods];f=f.filter(m=>m.parent.id===this.id),f=f.filter(m=>!m.isExtendedMethod);const h=this.implementedMethodsFromOriginalParents;return f=f.filter(m=>this.interactive&&!m.implements?!1:!h.find(E=>{var b;return E.id===((b=m.implements)==null?void 0:b.id)})),f.forEach(m=>{const E=m.remove({ignoreUpstream:!1},i);c.push(...E.removed),r.push(...E.updated)}),i==null||i.attemptAutoclose("remove-unrecognized-methods",this.id),{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}syncImplementationMethods(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"sync-implementation-methods"))){const r=[],a=[],c=[],e=[],f=this.methods,h=this.implementedMethodsFromOriginalParents,m=[...this.allBaseMethodsFromExtendedAndImplementedEntities,...f];return h.filter(b=>!m.find(_=>{var P;return((P=_.implements)==null?void 0:P.id)===b.id})).forEach(b=>{if(this.methods.find(V=>{var M;return((M=V.implements)==null?void 0:M.id)===b.id}))return;const _=this.methods.find(V=>{var ne,J;if(V.name===b.name&&!V.implements)return!0;const M=di(this,ge.CRON_JOB),G=di(this,ge.HTTP_ENDPOINT),k=((ne=V.implements)==null?void 0:ne.id)===re["built-in-base-entity"].BUILT_IN_HTTP_ENDPOINT_ENTITY.methods.handler.id,q=((J=V.implements)==null?void 0:J.id)===re["built-in-base-entity"].BUILT_IN_CRON_JOB_ENTITY.methods.handler.id;return!!(M&&!q&&!G&&k||G&&!k&&!M&&q)});if(_&&_.type===d.FunctionDeclaration){_.setImplements(b,i),_.metaSync({name:b.name},i),i==null||i.add(_,W.Updated),i==null||i.add(this,W.Updated);return}const P=b.implementAsFunctionDeclaration(i,this);a.push(P),i==null||i.add(P,W.Added),this.addMethod(P,i)}),this.methods.sort((b,A)=>b.index-A.index).forEach(b=>{b.afterAllChildrenInitialized(i)}),i==null||i.attemptAutoclose("sync-implementation-methods",this.id),{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}syncImplementationProperties(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"sync-implementation-properties"))){const r=[],a=[],c=[],e=[],f=this.properties,h=this.implementedPropertiesFromOriginalParents.filter(E=>!this.allBasePropertiesFromExtendedAndImplementedEntities.find(A=>!!A.implements.find(_=>_.id===E.id))),m=[...this.allBasePropertiesFromExtendedAndImplementedEntities,...f];return h.forEach(E=>{const b=m.find(V=>!!V.implements.find(M=>M.id===E.id));if(b){const{updated:V,added:M,removed:G,affected:k}=b.syncWithImplementation(i);r.push(...V),a.push(...M),c.push(...G),e.push(...k);return}if(this.properties.find(V=>!!V.implements.find(M=>M.id===E.id)))return;const _=this.properties.find(V=>V.name===E.name&&!!V.abstract&&!V.implements);if(_){_.addImplementation(E,i),_.metaSync({abstract:!1},i),_.afterAllChildrenInitialized(i);return}const P=E.implement(this,i,x.UUID.uuid());a.push(P),i==null||i.add(P,W.Added)}),this.properties.find(E=>{var b;return E.id===((b=this.allPropertiesImplement)==null?void 0:b.id)})&&this.removeAllPropertiesImplement(i),i==null||i.attemptAutoclose("sync-implementation-properties",this.id),{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}addExtendedMethods(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"add-extended-methods"))){const r=[],a=[],c=[],e=[],f=this.methods,m=this.extendedMethodsFromOriginalParents.filter(b=>b.type===d.FunctionDeclaration),E=new Set(f.filter(b=>{var A;return!!((A=b.extends)!=null&&A.id)}).map(b=>b.extends.id));return m.forEach(b=>{if(E.has(b.id))return;E.add(b.id);const A=b.clone(i,this,x.UUID.uuid());A.setExtends(b,i),A.initChildren(i),a.push(A),i==null||i.add(A,W.Added),this.addMethod(A,i)}),i==null||i.attemptAutoclose("add-extended-methods",this.id),{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}addExtendedProperties(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"add-extended-properties"))){const r=[],a=[],c=[],e=[],f=this.properties,h=this.extendedPropertiesFromOriginalParents,m=h.filter(b=>h.find(_=>!!_.implements.find(P=>P.id===b.id))?!1:!b.abstract),E=new Set(f.filter(b=>{var A;return!!((A=b.extends)!=null&&A.id)}).map(b=>b.extends.id));return m.forEach(b=>{if(E.has(b.id))return;E.add(b.id);const A=b.clone(i,this,x.UUID.uuid());A.setExtends(b,i),A.initChildren(i),a.push(A),i==null||i.add(A,W.Added),this.addProperty(A,i)}),[...this.properties].forEach(b=>{if(b.extends)return;if(m.find(_=>_.name===b.name&&_.implements.every(P=>!!b.implements.find(V=>V.id===P.id)))){const _=b.remove({ignoreUpstream:!1},i);c.push(..._.removed),r.push(..._.updated)}}),this.properties.forEach(b=>{const A=b.afterAllChildrenInitialized(i);r.push(...A.updated),e.push(...A.affected),a.push(...A.added),c.push(...A.removed)}),i==null||i.attemptAutoclose("add-extended-properties",this.id),{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}addSuggestions(){return this.implements.forEach(i=>{Jje(this,i).forEach(c=>{const e=c.toJSON();e.id=`_suggestion--parent--${this.id}--${c.id}`;const f=Re(e,this.project);f.suggestion=!0,f.setParent(this,null),f.initChildren(null),this.addSuggestedProperty(f)}),Qje(this,i).forEach(c=>{const e=`_suggestion--parent--${this.id}--${c.id}`,f=c.implementAsFunctionDeclaration(null,this,e),h=Re(f,this.project);if(h.suggestion=!0,h.setParent(this,null),h.initChildren(null),this.methods=this.methods.filter(m=>m.id!==e),h.inputs.forEach(m=>{m.suggestion=!0}),h.returnStatements.length){const m=h.returnStatements[0];m.suggestion=!0,m.outputs.forEach(E=>{E.suggestion=!0})}this.addSuggestedMethod(h)})}),this}subscribe(){var i;return this.activeVersion=!0,(i=this.knownVersions)==null||i.forEach(r=>{r.version!==this.version&&(r.activeVersion=!1)}),this.project.subscribeInstance(this),this.project.subscribedDefinitionEntities.add(this.id),this}unsubscribe(){return this.project.unsubscribeInstance(this),this.project.subscribedDefinitionEntities.delete(this.id),this}metaSync(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"meta-sync"))){const a=tn(this,i,r),c=en(this,a),e=this.toMeta();return this.name=a.name!==void 0?a.name:e.name,this.codeName=a.codeName!==void 0?a.codeName:e.codeName,this.description=a.description!==void 0?a.description:e.description,this.x=a.x||e.x,this.y=a.y||e.y,this.static=a.static!==void 0?a.static:this.static,this.abstract=a.abstract!==void 0?a.abstract:this.abstract,this.additionalProperties=a.additionalProperties!==void 0?a.additionalProperties:e.additionalProperties,super.baseMetaSync(a,this,r),a.deleted===!0&&!e.deleted?r==null||r.add(this,W.Removed):a.deleted===!1&&e.deleted?r==null||r.add(this,W.Added):c&&(r==null||r.add(this,W.Updated)),r==null||r.attemptAutoclose("meta-sync",this.id),this}async APILoad(i=Ke,...r){return await Ni.repository.APILoad(this.id,...r),this}async APICreate(i=Ke,...r){return await Ni.repository.APICreate(this.toShallowJSON(),...r),this}async APIUpdate(i=Ke,...r){return await Ni.repository.APIUpdate(this.toShallowJSON(),...r),this}async APIDelete(i=Ke,...r){return await Ni.repository.APIDelete(this.toShallowJSON(),...r),this}async APIClone(i=Ke,...r){return await Ni.repository.APIClone(this.id,...r),this}async APILoadVersion(i=Ke,r,...a){return await Ni.repository.APILoadVersion(this.id,r,...a)}removeFromParent(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.RemoveFromParent))){if(!this.checkCanEdit(this,i))return Y.Logger.warn(`[removeFromParent] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),i==null||i.attemptAutoclose(w.RemoveFromParent,this.id),{added:[],updated:[],removed:[],affected:[],self:this};const r=[],a=[],c=[],e=[];if(this.parent.type===d.Project)this.parent.removeDefinitionEntity(this);else if(this.parent.type===d.DataType&&this.parent.entity&&this.parent.entity.id===this.id){const f=this.parent.setEntity(null,i);r.push(f)}return i==null||i.attemptAutoclose(w.RemoveFromParent,this.id),{added:C(c),updated:C(r),removed:C(a),affected:C(e),self:this}}remove({ignoreUpstream:i}={ignoreUpstream:!1},r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.RemoveEntity))){var h;if(!this.checkCanDelete(this,r))return Y.Logger.warn(`[remove] User is not allowed to delete or edit this ${this.type} entity with id: ${this.id}`),r==null||r.event({id:`${w.RemoveEntity}-${this.id}--${Me.ActionOwnerEntityNonDeletable}`,action:w.RemoveEntity,owner:this,errorReason:Me.ActionOwnerEntityNonDeletable,rootAction:((h=r==null?void 0:r.self)==null?void 0:h.id)===this.id&&(r==null?void 0:r.actionName)===w.RemoveEntity}),r==null||r.attemptAutoclose(w.RemoveEntity,this.id),{added:[],updated:[],removed:[],affected:[],self:this};const a=[],c=[],e=[],f=[];if(r!=null&&r.hasRemoved(this.id))return r==null||r.attemptAutoclose(w.RemoveEntity,this.id),{added:[],updated:[],removed:[],affected:[],self:this};if(c.push(this),this.unsubscribe(),this.unsubscribeFromDependencies(),this.project.subscribeDeletedInstance(this),this.metaSync({deleted:!0},r),Object.values(this.detachedDependents).forEach(m=>{const{updated:E,removed:b,added:A}=m.entity.onDetachedDependencyRemoved(this,m.field,r);a.push(...E),c.push(...b),e.push(...A)}),this.properties.forEach(m=>{const{updated:E,removed:b}=m.remove({ignoreUpstream:!0},r);a.push(...E),c.push(...b)}),this.methods.forEach(m=>{const{updated:E,removed:b}=m.remove({ignoreUpstream:!0},r);a.push(...E),c.push(...b)}),this.abstractMethods.forEach(m=>{const{updated:E,removed:b}=m.remove({ignoreUpstream:!0},r);a.push(...E),c.push(...b)}),this.suggestedProperties.forEach(m=>{const{updated:E,removed:b}=m.remove({ignoreUpstream:!0},r);a.push(...E),c.push(...b)}),this.suggestedMethods.forEach(m=>{const{updated:E,removed:b}=m.remove({ignoreUpstream:!0},r);a.push(...E),c.push(...b)}),!i){const m=this.removeFromParent(r);e.push(...m.added),a.push(...m.updated),c.push(...m.removed),f.push(...m.affected)}return r==null||r.attemptAutoclose(w.RemoveEntity,this.id),{added:C(e),updated:C(a),removed:C(c),affected:C(f),self:this}}restore({}={},i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.RestoreEntity))){if(!this.checkCanEdit(this,i))return Y.Logger.warn(`[restore] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),i==null||i.attemptAutoclose(w.RestoreEntity,this.id),{added:[],updated:[],removed:[],affected:[],self:this};const r=[],a=[],c=[],e=[];return i!=null&&i.hasAdded(this.id)?(i==null||i.attemptAutoclose(w.RestoreEntity,this.id),{added:[],updated:[],removed:[],affected:[],self:this}):(this.subscribe(),this.project.unsubscribeDeletedInstance(this),this.metaSync({deleted:!1},i),Object.values(this.detachedDependents).forEach(f=>{const{updated:h,removed:m,added:E}=f.entity.onDetachedDependencyRestored(this,f.field,i);a.push(...h),c.push(...m),r.push(...E)}),this.properties.forEach(f=>{const{updated:h}=f.restore({},i);a.push(...h)}),this.methods.forEach(f=>{const{updated:h}=f.restore({},i);a.push(...h)}),this.abstractMethods.forEach(f=>{const{updated:h}=f.restore({},i);a.push(...h)}),this.suggestedProperties.forEach(f=>{const{updated:h}=f.restore({},i);a.push(...h)}),this.suggestedMethods.forEach(f=>{const{updated:h}=f.restore({},i);a.push(...h)}),i==null||i.attemptAutoclose(w.RestoreEntity,this.id),{added:C(r),updated:C(a),removed:C(c),affected:C(e),self:this})}toFlat(i=new Set){var a;return i.has(this.id)?[]:(i.add(this.id),[this,...((a=this.extends)==null?void 0:a.toFlat(i))||[],...this.implements.flatMap(c=>c.toFlat(i)),...this.properties.flatMap(c=>c.toFlat(i)),...this.methods.flatMap(c=>c.toFlat(i)),...this.abstractMethods.flatMap(c=>c.toFlat(i)),...this.parent.toFlat(i)])}toFlatIds(i=new Set){var a;return i.has(this.id)?[]:(i.add(this.id),[this.id,...((a=this.extends)==null?void 0:a.toFlatIds(i))||[],...this.implements.flatMap(c=>c.toFlatIds(i)),...this.properties.flatMap(c=>c.toFlatIds(i)),...this.methods.flatMap(c=>c.toFlatIds(i)),...this.abstractMethods.flatMap(c=>c.toFlatIds(i)),...this.parent.toFlatIds(i)])}toMeta(){return{id:this.id,version:this.version,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,codeName:this.codeName,description:this.description,static:this.static,abstract:this.abstract,x:this.x,y:this.y,type:this.type,editable:this.editable,deletable:this.deletable,additionalProperties:this.additionalProperties,name:this.name}}toJSON(i=new Set){var r,a,c;return i.has(this.id)?this.toReference():(i.add(this.id),{id:this.id,version:this.version,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,type:this.type,editable:this.editable,deletable:this.deletable,name:this.name,codeName:this.codeName,description:this.description,x:this.x,y:this.y,static:this.static,abstract:this.abstract,additionalProperties:this.additionalProperties,allPropertiesImplement:((r=this.allPropertiesImplement)==null?void 0:r.toJSON(i))||null,additionalPropertiesDataType:((a=this.additionalPropertiesDataType)==null?void 0:a.toJSON(i))||null,properties:this.properties.map(e=>e.toJSON(i)),methods:this.methods.map(e=>e.toJSON(i)),abstractMethods:this.abstractMethods.map(e=>e.toJSON(i)),implements:this.implements.map(e=>e.toJSON(i)),extends:((c=this.extends)==null?void 0:c.toJSON(i))||null,parent:this.parent.toReference()})}toJSONClone(i=at){var a,c,e,f,h,m,E,b,A,_;let r;return(a=i.seenEntityMaps)!=null&&a.has(this.id)?r=i.seenEntityMaps.get(this.id):(r=i.newId||dn(this,this.project,i.uuidStrategy),i.seenEntityMaps&&i.seenEntityMaps.set(this.id,r)),(c=i.seenEntities)!=null&&c.has(r)||(e=i.seenEntities)!=null&&e.has(this.id)?this.toReference({seenEntityMaps:i.seenEntityMaps}):((f=i.seenEntities)==null||f.add(r),(h=i.seenEntities)==null||h.add(this.id),{id:r,version:x.UUID.uuid(),createdAt:i.timestamp||B().toISOString(),author:x.sessionAuthor,previousVersion:null,deleted:!1,type:this.type,editable:this.editable,deletable:this.deletable,name:this.name,codeName:this.codeName,description:this.description,x:this.x,y:this.y,static:this.static,abstract:this.abstract,additionalProperties:this.additionalProperties,allPropertiesImplement:((m=this.allPropertiesImplement)==null?void 0:m.toJSONClone(i))||null,additionalPropertiesDataType:((E=this.additionalPropertiesDataType)==null?void 0:E.toJSONClone(i))||null,properties:this.properties.map(P=>P.toJSONClone({...i,newId:null})),methods:this.methods.map(P=>P.toJSONClone({...i,newId:null})),abstractMethods:this.abstractMethods.map(P=>P.toJSONClone({...i,newId:null})),implements:this.implements.map(P=>P.type===d.BuiltInBaseEntity?P.toJSON(i.seenEntities):P.toJSONClone({...i,newId:null})),extends:((b=this.extends)==null?void 0:b.type)===d.BuiltInBaseEntity?(A=this.extends)==null?void 0:A.toJSON(i.seenEntities):(_=this.extends)==null?void 0:_.toJSONClone({...i,newId:null}),parent:this.parent.toReference({seenEntityMaps:i.seenEntityMaps})})}toReference(i=at){var a;let r=this.id;return(a=i.seenEntityMaps)!=null&&a.has(this.id)&&(r=i.seenEntityMaps.get(this.id)),{id:r+"--"+x.UUID.uuid()+"--ref",type:d.GenericReference,entityId:r,version:this.version,entityType:this.type}}toShallowJSON(i=at){var a,c,e,f;let r=this.id;return(a=i.seenEntityMaps)!=null&&a.has(this.id)&&(r=i.seenEntityMaps.get(this.id)),{id:r,version:this.version,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,name:this.name,codeName:this.codeName,description:this.description,type:this.type,editable:this.editable,deletable:this.deletable,x:this.x,y:this.y,static:this.static,abstract:this.abstract,additionalProperties:this.additionalProperties,allPropertiesImplement:((c=this.allPropertiesImplement)==null?void 0:c.toReference(i))||null,additionalPropertiesDataType:((e=this.additionalPropertiesDataType)==null?void 0:e.toReference(i))||null,properties:this.properties.map(h=>h.toReference(i)),methods:this.methods.map(h=>h.toReference(i)),abstractMethods:this.abstractMethods.map(h=>h.toReference(i)),implements:this.implements.map(h=>h.toReference(i)),extends:((f=this.extends)==null?void 0:f.toReference(i))||null,parent:this.parent.toReference(i)}}toFlatJSON(i=new Set){var a,c,e;return i.has(this.id)?[]:(i.add(this.id),[this.toShallowJSON(),...this.properties.flatMap(f=>f.toFlatJSON(i)),...this.methods.flatMap(f=>f.toFlatJSON(i)),...this.abstractMethods.flatMap(f=>f.toFlatJSON(i)),...this.implements.flatMap(f=>f.toFlatJSON(i)),...((a=this.extends)==null?void 0:a.toFlatJSON(i))||[],...this.parent.toFlatJSON(i),...((c=this.additionalPropertiesDataType)==null?void 0:c.toFlatJSON(i))||[],...((e=this.allPropertiesImplement)==null?void 0:e.toFlatJSON(i))||[]])}toGenerationTarget(i=at){var c,e,f;const r=this.parent.type===d.Project?void 0:(c=i.seenEntityMaps)!=null&&c.has(this.parent.id)?i.seenEntityMaps.get(this.parent.id):this.parent.id;let a=this.id;return(e=i.seenEntityMaps)!=null&&e.has(this.id)&&(a=i.seenEntityMaps.get(this.id)),{id:a,name:this.name,description:this.description,type:this.type,static:this.static,abstract:this.abstract,extends:(f=this.extends)==null?void 0:f.id,additionalProperties:this.additionalProperties,implements:this.implements.map(h=>h.id),parent:r}}toFlatGenerationTarget(i=new Set){var a,c,e;return i.has(this.id)?[]:(i.add(this.id),[this.toGenerationTarget(),...this.properties.flatMap(f=>f.toFlatGenerationTarget(i)),...this.methods.flatMap(f=>f.toFlatGenerationTarget(i)),...this.abstractMethods.flatMap(f=>f.toFlatGenerationTarget(i)),...this.implements.filter(f=>f.type===d.DefinitionEntity).flatMap(f=>f.toFlatGenerationTarget(i)),...((a=this.extends)==null?void 0:a.toFlatGenerationTarget(i))||[],...this.parent.toFlatGenerationTarget(i),...((c=this.additionalPropertiesDataType)==null?void 0:c.toFlatGenerationTarget(i))||[],...((e=this.allPropertiesImplement)==null?void 0:e.toFlatGenerationTarget(i))||[]])}clearErrors(){var i,r;return this.errors=[],this.properties.forEach(a=>a.clearErrors()),this.methods.forEach(a=>a.clearErrors()),this.abstractMethods.forEach(a=>a.clearErrors()),(i=this.additionalPropertiesDataType)==null||i.clearErrors(),(r=this.allPropertiesImplement)==null||r.clearErrors(),this}validate(){return this.errors=Yje(this),{success:!0}}async validateAsync(i={}){const r=Y.YieldTracker.from(i);return this.errors=await zje(this,{tracker:r}),{success:!0}}getErrors(){var r,a;return[...this.errors,...this.properties.flatMap(c=>c.getErrors()),...this.methods.flatMap(c=>c.getErrors()),...this.abstractMethods.flatMap(c=>c.getErrors()),...((r=this.additionalPropertiesDataType)==null?void 0:r.getErrors())||[],...((a=this.allPropertiesImplement)==null?void 0:a.getErrors())||[]]}async getErrorsAsync(i={}){const r=Y.YieldTracker.from(i),a=[...this.errors];await r.tick();for(const c of this.properties)a.push(...await c.getErrorsAsync({tracker:r}));for(const c of this.methods)a.push(...await c.getErrorsAsync({tracker:r}));for(const c of this.abstractMethods)a.push(...await c.getErrorsAsync({tracker:r}));return this.additionalPropertiesDataType&&a.push(...await this.additionalPropertiesDataType.getErrorsAsync({tracker:r})),this.allPropertiesImplement&&a.push(...await this.allPropertiesImplement.getErrorsAsync({tracker:r})),a}getShallowErrors(){return this.errors}clone(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.CloneEntity)),r=null,a=null,c=!0){var M,G,k;const e=Fr(r,this),f=this.toJSON(),h=a||x.UUID.uuid(),m=r||this.parent;f.properties=[],f.methods=[],f.abstractMethods=[];const E=h.split("-id"),b=E[E.length-1||0]||h;f.id=h,f.version=x.UUID.uuid(),f.createdAt=(i==null?void 0:i.timestamp)||B().toISOString(),f.author=(i==null?void 0:i.author)||"1",f.previousVersion=null,f.deleted=!1,f.editable=!0,f.deletable=!0,f.parent=m.toReference();const A=lr(f,e);A.hydrateAncestors(),A.setParent(m,i),c&&(A.subscribe(),A.addSelfToProject(i)),A.initChildren(i),i==null||i.add(A,W.Added);const _=(M=this.properties)==null?void 0:M.map(q=>this.project.diggestedBuiltInBaseEntitiesIds.has(q.id)?q:q.clone(i,A,x.UUID.uuid(),c));A.properties=_;const P=(G=this.methods)==null?void 0:G.map((q,ne)=>this.project.diggestedBuiltInBaseEntitiesIds.has(q.id)?q:q.clone(i,A,b+"-method-"+ne+"-id",c));A.methods=P;const V=(k=this.abstractMethods)==null?void 0:k.map((q,ne)=>this.project.diggestedBuiltInBaseEntitiesIds.has(q.id)?q:q.clone(i,A,b+"-abstract-method-"+ne+"-id",c));if(A.abstractMethods=V,this.additionalPropertiesDataType)if(this.project.diggestedBuiltInBaseEntitiesIds.has(this.additionalPropertiesDataType.id))A.setAdditionalPropertiesDataType(this.additionalPropertiesDataType,i);else{const q=this.additionalPropertiesDataType.clone(i,A,x.UUID.uuid(),c);A.setAdditionalPropertiesDataType(q,i)}if(this.allPropertiesImplement)if(this.project.diggestedBuiltInBaseEntitiesIds.has(this.allPropertiesImplement.id))A.setAllPropertiesImplement(this.allPropertiesImplement,i);else{const q=this.allPropertiesImplement.clone(i,A,x.UUID.uuid(),c);A.setAllPropertiesImplement(q,i)}return i||A.captureVersion(),i==null||i.attemptAutoclose(w.CloneEntity,this.id),A}getFunctionDeclaration(i){return this.methods.find(r=>r.id===i)}implement(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"implement-definition-entity")),a){const c=m1(this,i,r,a);return r==null||r.attemptAutoclose("implement-definition-entity",this.id),c}getAllPropertiesImplements(){var r;const i=[];return this.allPropertiesImplement&&i.push(this.allPropertiesImplement),i.push(...((r=this.extends)==null?void 0:r.getAllPropertiesImplements())||[],...this.implements.flatMap(a=>a.getAllPropertiesImplements())),i}getAllInteractiveMethods(){var e;const i=this.implements.filter(f=>f.type===d.DefinitionEntity||f.type===d.BuiltInBaseEntity&&f.interactive),r=((e=this.extends)==null?void 0:e.getAllInteractiveMethods())||[],a=i.flatMap(f=>f.getAllInteractiveMethods());return C([...this.methods,...r,...a])}inferFromInputs(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"infer-definition-entity-from-inputs"))){const a=[],c=[],e=[],f=[];if(this.parent.type!==d.DataType||!this.parent.inferred)return r==null||r.attemptAutoclose("infer-definition-entity-from-inputs",this.id),{added:[],updated:[],removed:[],affected:[],self:this};const h=[];i.forEach(b=>{h.find(_=>ce(_,this.project)===ce(b,this.project))||h.push(b)});const m=this.properties.filter(b=>!b.dataType);h.forEach(b=>{var k,q,ne;const A=m.find(J=>ce(J,this.project)===ce(b,this.project));if(!A)return;const P=gr(b.parent).getMasterInputWithValueWriterFromAllInstances(b),V=iu(P,r),M=V==null?void 0:V.clone(r,A,x.UUID.uuid(),!0);M&&((k=A.dataType)==null||k.merge(M,r),M.id!==((q=A.dataType)==null?void 0:q.id)&&M.remove({ignoreUpstream:!1},r),A.dataType&&(A.dataType.metaSync({inferred:!0,like:!0},r),A.setDataType(A.dataType,r),r==null||r.add(A,W.Affected)));let G=null;if(b.declaration&&A.id!==((ne=b.declaration)==null?void 0:ne.id)&&(G=b.declaration),b.setDeclaration(A,r),r==null||r.add(b,W.Updated),G){const{updated:J,removed:se}=G.remove({ignoreUpstream:!1},r);c.push(...J),e.push(...se)}});const E=[];return h.forEach(b=>{if(!b.declaration){E.push(b);return}}),E.length===0?(r==null||r.attemptAutoclose("infer-definition-entity-from-inputs",this.id),{added:[],updated:[],removed:[],affected:[],self:this}):(E.forEach(b=>{var ne,J,se,te,le;const A=this.properties.find(ue=>ce(ue,this.project)===ce(b,this.project));if(A){if(b.setDeclaration(A,r),!A.getDataType(r)){const z=gr(b.parent).getMasterInputWithValueWriterFromAllInstances(b),Q=iu(z),de=Q==null?void 0:Q.clone(r,A,x.UUID.uuid(),!0);de&&((ne=A.dataType)==null||ne.merge(de,r),de.id!==((J=A.dataType)==null?void 0:J.id)&&de.remove({ignoreUpstream:!1},r),A.dataType&&(A.dataType.metaSync({inferred:!0,like:!0},r),A.setDataType(A.dataType,r),r==null||r.add(A,W.Affected)))}return}const _=ce(b,this.project),P=b.codeName||Ep(b,this.project)||cs(ir(_)),V=Es.new(r);V.parent=this.toReference(),V.index=b.index,V.name=_,V.codeName=P,V.description=b.description;const M=Re(V,this.project);M.hydrateAncestors(),M.addSelfToProject(r),r==null||r.add(M,W.Added),M.setParent(this,r),M.initChildren(r),r||M.captureVersion();const k=gr(b.parent).getMasterInputWithValueWriterFromAllInstances(b),q=iu(k);if(q&&q.id!==((se=M.dataType)==null?void 0:se.id)){const ue=q==null?void 0:q.clone(r,M,x.UUID.uuid(),!0);ue&&((te=M.dataType)==null||te.merge(ue,r),ue.id!==((le=M.dataType)==null?void 0:le.id)&&ue.remove({ignoreUpstream:!1},r),M.dataType&&(M.dataType.metaSync({inferred:!0,like:!0},r),M.setDataType(M.dataType,r),r==null||r.add(M,W.Affected)))}return this.addProperty(M,r),b.setDeclaration(M,r),r==null||r.add(b,W.Updated),M}),r==null||r.attemptAutoclose("infer-definition-entity-from-inputs",this.id),{added:C(a),updated:C(c),removed:C(e),affected:C(f),self:this})}getRawDefaultValue(){const i={};return this.properties.forEach(r=>{var e;if(!bv(r)||!r.defaultValue)return;const a=ce(r,this.project),c=r.codeName||Ep(r,this.project)||cs(ir(a));i[c]=((e=r.getDefaultValue())==null?void 0:e.value)||null}),i}getActiveRawDefaultValue(){const i={};return this.properties.forEach(r=>{var f;if(!bv(r))return;const a=ce(r,this.project),c=r.codeName||Ep(r,this.project)||cs(ir(a)),e=(f=this.project.requestActiveDynamicValue(r,!0))==null?void 0:f.value;e&&(i[c]=(e==null?void 0:e.value)||null)}),i}setAdditionalPropertiesDataType(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.SetAdditionalPropertiesDataType))){if(!this.checkCanEdit(this,r))return Y.Logger.warn(`[setAdditionalPropertiesDataType] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.SetAdditionalPropertiesDataType,this.id),this;const a=this.additionalPropertiesDataType;return(a==null?void 0:a.id)!==(i==null?void 0:i.id)&&(a==null||a.remove({ignoreUpstream:!0},r),this.additionalPropertiesDataType=i,this.subscribeToDependencies(),r==null||r.add(this,W.Affected)),r==null||r.attemptAutoclose(w.SetAdditionalPropertiesDataType,this.id),this}removeAdditionalPropertiesDataType(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.RemoveAllPropertiesImplement))){return this.checkCanEdit(this,i)?(this.additionalPropertiesDataType&&(this.additionalPropertiesDataType.remove({ignoreUpstream:!0},i),i==null||i.add(this,W.Affected),this.additionalPropertiesDataType=null),i==null||i.attemptAutoclose(w.RemoveAllPropertiesImplement,this.id),this):(Y.Logger.warn(`[removeAdditionalPropertiesDataType] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),i==null||i.attemptAutoclose(w.RemoveAllPropertiesImplement,this.id),this)}setAllPropertiesImplement(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.SetAllPropertiesImplement))){if(!this.checkCanEdit(this,r))return Y.Logger.warn(`[setAllPropertiesImplement] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.SetAllPropertiesImplement,this.id),this;const a=this.allPropertiesImplement;return(a==null?void 0:a.id)!==(i==null?void 0:i.id)&&(a==null||a.remove({ignoreUpstream:!0},r),this.allPropertiesImplement=i,this.subscribeToDependencies(),r==null||r.add(this,W.Affected)),r==null||r.attemptAutoclose(w.SetAllPropertiesImplement,this.id),this}removeAllPropertiesImplement(i=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,w.RemoveAllPropertiesImplement))){return this.checkCanEdit(this,i)?(this.allPropertiesImplement&&(this.properties.find(r=>{var a;return r.id===((a=this.allPropertiesImplement)==null?void 0:a.id)})||this.allPropertiesImplement.remove({ignoreUpstream:!0},i),i==null||i.add(this,W.Affected),this.allPropertiesImplement=null),i==null||i.attemptAutoclose(w.RemoveAllPropertiesImplement,this.id),this):(Y.Logger.warn(`[removeAllPropertiesImplement] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),i==null||i.attemptAutoclose(w.RemoveAllPropertiesImplement,this.id),this)}};R(Ni,"repository",{APICreate:async(i,...r)=>i,APIUpdate:async(i,...r)=>i,APIDelete:async(i,...r)=>i,APIClone:async(i,...r)=>{},APILoad:async(i,...r)=>null,APILoadVersion:async(i,r,...a)=>null}),R(Ni,"type",d.DefinitionEntity),R(Ni,"USER_MANAGED_PARENT_TYPES",[d.Project,d.DataType]),R(Ni,"PARENT_TYPES",[...Ni.USER_MANAGED_PARENT_TYPES]),R(Ni,"MUTABLE_BASE_PROPERTIES",["name","codeName","description","static","abstract","additionalProperties"]),R(Ni,"INMUTABLE_BASE_PROPERTIES",["id","type","version","createdAt","author","previousVersion"]),R(Ni,"BASE_PROPERTIES",[...Ni.MUTABLE_BASE_PROPERTIES,...Ni.INMUTABLE_BASE_PROPERTIES]),R(Ni,"MUTABLE_META_PROPERTIES",[...Ni.MUTABLE_BASE_PROPERTIES,"x","y"]),R(Ni,"INMUTABLE_META_PROPERTIES",[...Ni.INMUTABLE_BASE_PROPERTIES]),R(Ni,"META_PROPERTIES",[...Ni.MUTABLE_META_PROPERTIES,...Ni.INMUTABLE_META_PROPERTIES]),R(Ni,"MUTABLE_UPSTREAM_PROPERTIES",["extends","implements"]),R(Ni,"INMUTABLE_UPSTREAM_PROPERTIES",["parent"]),R(Ni,"UPSTREAM_PROPERTIES",[...Ni.MUTABLE_UPSTREAM_PROPERTIES,...Ni.INMUTABLE_UPSTREAM_PROPERTIES]),R(Ni,"MUTABLE_DOWNSTREAM_PROPERTIES",["properties","methods","abstractMethods","allPropertiesImplement","additionalPropertiesDataType"]),R(Ni,"INMUTABLE_DOWNSTREAM_PROPERTIES",[]),R(Ni,"DOWNSTREAM_PROPERTIES",[...Ni.MUTABLE_DOWNSTREAM_PROPERTIES,...Ni.INMUTABLE_DOWNSTREAM_PROPERTIES]),R(Ni,"PROPERTIES",[...Ni.META_PROPERTIES,...Ni.UPSTREAM_PROPERTIES,...Ni.DOWNSTREAM_PROPERTIES]);let Ks=Ni;async function UVi(s,p={}){const i=Y.YieldTracker.from(p),r=[],a=qt(s.errors,r);return await i.tick(),a}function FVi(s){const p=[];return qt(s.errors,p)}const lI=class lI extends Gx{constructor(i,r){super(i);R(this,"initialData");R(this,"id");R(this,"name");R(this,"description",null);R(this,"type",d.PrimitiveEntity);R(this,"static");R(this,"abstract");R(this,"properties",[]);R(this,"methods",[]);R(this,"abstractMethods",[]);R(this,"extends",null);R(this,"errors",[]);R(this,"project");this.initialData=i,this.project=r,this.id=i.id,this.name=i.name,this.description=i.description,this.static=i.static,this.abstract=i.abstract,this.properties=this.initialData.properties.map(a=>{const c=Re(a,this.project);return c.setParent(this,null),c.initChildren(null),c}),this.methods=this.initialData.methods.map(a=>{const c=Re(a,this.project);return c.parent=this,c}),this.abstractMethods=this.initialData.abstractMethods.map(a=>{const c=Re(a,this.project);return c.parent=this,c}),this.initialData.extends&&(this.extends=Re(this.initialData.extends,this.project))}get allMethods(){return C([...this.ownDeclaredMethods,...this.allBaseMethodsFromOriginalParents])}get allProperties(){return C([...this.ownDeclaredProperties,...this.allBasePropertiesFromOriginalParents])}get allBaseMethodsFromOriginalParents(){var a;const i=((a=this.extends)==null?void 0:a.allMethods)||[],r=[...i].filter(c=>!i.some(e=>e.id!==c.id));return C(r)}get allBasePropertiesFromOriginalParents(){var a;const i=((a=this.extends)==null?void 0:a.allProperties)||[],r=[...i].filter(c=>!i.some(e=>{var f;return e.id!==c.id&&(e.implements.find(h=>h.id===c.id)||((f=e.extends)==null?void 0:f.id)===c.id)}));return C(r)}get allBasePropertiesFromExtendedAndImplementedEntities(){var a,c;const i=[...((a=this.extends)==null?void 0:a.ownDeclaredProperties)||[],...((c=this.extends)==null?void 0:c.allBasePropertiesFromExtendedAndImplementedEntities)||[]].filter(e=>!e.abstract),r=[...i].filter(e=>!i.some(f=>{var h;return f.id!==e.id&&(f.implements.find(m=>m.id===e.id)||((h=f.extends)==null?void 0:h.id)===e.id)}));return C(r)}get extendedPropertiesFromOriginalParents(){var a,c;const i=[...((a=this.extends)==null?void 0:a.ownDeclaredProperties)||[],...((c=this.extends)==null?void 0:c.extendedPropertiesFromOriginalParents)||[]].filter(e=>!e.abstract),r=[...i].filter(e=>!i.some(f=>{var h;return f.id!==e.id&&(f.implements.find(m=>m.id===e.id)||((h=f.extends)==null?void 0:h.id)===e.id)}));return C(r)}get implementedPropertiesFromOriginalParents(){return C([...(this.extends?[this.extends]:[]).reduce((i,r)=>{const a=r.implementedPropertiesFromOriginalParents,c=[...r.ownDeclaredProperties].filter(h=>!!h.abstract),e=[...a,...c,...i];return[...e].filter(h=>!!!e.find(E=>{var b;return((b=E.extends)==null?void 0:b.id)===h.id||E.implements.find(A=>A.id===h.id)}))},[])])}get extendedProperties(){return this.properties.filter(i=>i.isExtendedProperty)}get ownDeclaredMethods(){return[...this.methods]}get ownDeclaredProperties(){return this.properties.filter(i=>!i.isExtendedProperty)}subscribe(){return this.project.subscribeBuiltInInstance(this),this}unsubscribe(){return this.project.unsubscribeBuiltInInstance(this),this}async APILoad(i=Ke,...r){return await lI.repository.APILoad(this.id,...r),this}toFlat(i=new Set){return i.has(this.id)?[]:(i.add(this.id),[this,...this.properties.flatMap(a=>a.toFlat(i)),...this.methods.flatMap(a=>a.toFlat(i)),...this.abstractMethods.flatMap(a=>a.toFlat(i))])}toFlatIds(i=new Set){return i.has(this.id)?[]:(i.add(this.id),[this.id,...this.properties.flatMap(a=>a.toFlatIds(i)),...this.methods.flatMap(a=>a.toFlatIds(i)),...this.abstractMethods.flatMap(a=>a.toFlatIds(i))])}toMeta(){return{id:this.id,version:this.version,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,description:this.description,static:this.static,abstract:this.abstract,type:this.type,name:this.name}}toJSON(i=new Set){var r;return i.has(this.id)?this.toReference():(i.add(this.id),{id:this.id,version:this.version,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,type:this.type,name:this.name,description:this.description,static:this.static,abstract:this.abstract,properties:this.properties.map(a=>a.toJSON(i)),methods:this.methods.map(a=>a.toJSON(i)),abstractMethods:this.abstractMethods.map(a=>a.toJSON(i)),extends:((r=this.extends)==null?void 0:r.toJSON(i))||null})}toReference(i=at){return{id:this.id+"--"+x.UUID.uuid()+"--ref",type:d.GenericReference,entityId:this.id,version:this.version,entityType:this.type}}toShallowJSON(i=at){var r;return{id:this.id,version:this.version,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,type:this.type,name:this.name,description:this.description,abstract:this.abstract,static:this.static,properties:this.properties.map(a=>a.toReference()),methods:this.methods.map(a=>a.toReference()),abstractMethods:this.abstractMethods.map(a=>a.toReference()),extends:((r=this.extends)==null?void 0:r.toReference())||null}}toFlatJSON(i=new Set){return i.has(this.id)?[]:(i.add(this.id),[this.toShallowJSON(),...this.properties.flatMap(a=>a.toFlatJSON(i)),...this.methods.flatMap(a=>a.toFlatJSON(i)),...this.abstractMethods.flatMap(a=>a.toFlatJSON(i))])}toGenerationTarget(i=at){var r;return{id:this.id,type:this.type,name:this.name,description:this.description,static:this.static,abstract:this.abstract,extends:(r=this.extends)==null?void 0:r.id}}toFlatGenerationTarget(i=new Set){return i.has(this.id)?[]:(i.add(this.id),[this.toGenerationTarget(),...this.properties.flatMap(a=>a.toFlatGenerationTarget(i)),...this.methods.flatMap(a=>a.toFlatGenerationTarget(i)),...this.abstractMethods.flatMap(a=>a.toFlatGenerationTarget(i))])}clearErrors(){return this.errors=[],this.properties.forEach(i=>i.clearErrors()),this.methods.forEach(i=>i.clearErrors()),this.abstractMethods.forEach(i=>i.clearErrors()),this}validate(){return this.errors=FVi(this),{success:!0}}async validateAsync(i={}){const r=Y.YieldTracker.from(i);return this.errors=await UVi(this,{tracker:r}),{success:!0}}getErrors(){return[...this.errors,...this.properties.flatMap(r=>r.getErrors()),...this.methods.flatMap(r=>r.getErrors()),...this.abstractMethods.flatMap(r=>r.getErrors())]}async getErrorsAsync(i={}){const r=Y.YieldTracker.from(i),a=[...this.errors];await r.tick();for(const c of this.properties){const e=await c.getErrorsAsync({tracker:r});a.push(...e)}for(const c of this.methods){const e=await c.getErrorsAsync({tracker:r});a.push(...e)}for(const c of this.abstractMethods){const e=await c.getErrorsAsync({tracker:r});a.push(...e)}return a}getShallowErrors(){return this.errors}getAllInteractiveMethods(){const i=[];return i.push(...this.methods),!this.extends||this.extends.type===d.PrimitiveEntity?i:C(i)}};R(lI,"repository",{APILoad:async(i,...r)=>null});let Pf=lI;function lr(s,p){if(!s)throw new Error("Entity is null");const i=p.get(s.id);switch(s.type){case d.LiteralValue:return i||new Lr(s,p);case d.DefinitionEntity:return i||new Ks(s,p);case d.PrimitiveEntity:return i||new Pf(s,p);case d.FunctionDeclaration:return i||new md(s,p);case d.GlobalEvent:return i||new _p(s,p);case d.DataType:return i||new vr(s,p);case d.Property:return i||new Es(s,p);case d.FunctionCall:return i||new Cp(s,p);case d.Condition:return i||new Pp(s,p);case d.Operation:return i||new Op(s,p);case d.VariableDeclaration:return i||new $p(s,p);case d.VariableInstance:return i||new xp(s,p);case d.OutputMap:return i||new po(s,p);case d.ArgumentDeclaration:return i||new Za(s,p);case d.InputMap:return i||new Ts(s,p);case d.Project:return i||new x(s);case d.InstalledProject:return i||new Bp(s,p);case d.ActionDescriptor:return i||new er(s,p);case d.ReturnStatement:return i||new lu(s,p);case d.Loop:return i||new Vp(s,p);case d.Search:return i||new Lp(s,p);case d.ValueDescriptor:return i||new Ed(s,p);case d.BuiltInBaseEntity:return i||new Td(s,p);case d.InternalCall:return i||new Mp(s,p);case d.ContinueStatement:return i||new kp(s,p);case d.BreakStatement:return i||new Gp(s,p);case d.GenericReference:return p.get(s.entityId);default:throw new Error("Invalid entity type: "+s.type)}}function Re(s,p){if(!s)throw new Error("Entity is null");const i=lr(s,p);return i.subscribe(),i}function KVi(s,p,i){if(!s)throw new Error("Entity is null");switch(s.type){case d.LiteralValue:return Lr.fromGenerationTarget(s,p,i);case d.DefinitionEntity:return Ks.fromGenerationTarget(s,p,i);case d.FunctionDeclaration:return md.fromGenerationTarget(s,p,i);case d.GlobalEvent:return _p.fromGenerationTarget(s,p,i);case d.DataType:return vr.fromGenerationTarget(s,p,i);case d.Property:return Es.fromGenerationTarget(s,p,i);case d.FunctionCall:return Cp.fromGenerationTarget(s,p,i);case d.Condition:return Pp.fromGenerationTarget(s,p,i);case d.Operation:return Op.fromGenerationTarget(s,p,i);case d.VariableDeclaration:return $p.fromGenerationTarget(s,p,i);case d.VariableInstance:return xp.fromGenerationTarget(s,p,i);case d.OutputMap:return po.fromGenerationTarget(s,p,i);case d.ArgumentDeclaration:return Za.fromGenerationTarget(s,p,i);case d.InputMap:return Ts.fromGenerationTarget(s,p,i);case d.InstalledProject:return Bp.fromGenerationTarget(s,p,i);case d.ReturnStatement:return lu.fromGenerationTarget(s,p,i);case d.Loop:return Vp.fromGenerationTarget(s,p,i);case d.Search:return Lp.fromGenerationTarget(s,p,i);case d.ActionDescriptor:return er.fromGenerationTarget(s,p,i);case d.ValueDescriptor:return Ed.fromGenerationTarget(s,p,i);case d.InternalCall:return Mp.fromGenerationTarget(s,p,i);case d.ContinueStatement:return kp.fromGenerationTarget(s,p,i);case d.BreakStatement:return Gp.fromGenerationTarget(s,p,i);default:throw new Error("Invalid entity type: "+s.type)}}const at={seenEntityMaps:new Map,seenEntities:new Set,timestamp:B().toISOString()};class rUe{constructor(){R(this,"initialData")}}const Ke={cascade:!1},nUe={APILoad:async(s,...p)=>null},qVi={APICreate:async(s,...p)=>s,APIUpdate:async(s,...p)=>s,APIDelete:async(s,...p)=>s,APIClone:async(s,...p)=>{},APILoadVersion:async(s,p,...i)=>null,...nUe};class SVi{}class aUe extends rUe{}class ZVi extends aUe{}class HVi{}class WVi{}class zVi{}class RL{}class YVi extends RL{}class JVi extends RL{}class QVi{}class uy{static initReadsValue(p){if(p.initialData.readsValue&&p.initialData.readsValue.type!==d.GenericReference)p.readsValue=Re(p.initialData.readsValue,p.project);else if(p.initialData.readsValue&&p.initialData.readsValue.type===d.GenericReference){const i=Ra(p.initialData.readsValue,p.project);i&&(p.readsValue=i)}if(p.readsValue){if(Mt.includes(p.readsValue.type)){let i=p.parent;!Dr.includes(i.type)&&i.type!==d.Project&&(i=i.parent);const r=p.type===d.InputMap&&p.parent.type===d.Loop;r&&(i=p.parent.parent),p.readsValue.setParent(i,null),p.readsValue.initChildren(null),i&&i.type!==d.Project&&!r&&i.detachedChildren.includes(p)?i.replaceDetachedChild(p,p.readsValue):i&&i.type!==d.Project&&!r&&i.subscribeDetachedChild(p.readsValue)}p.readsValue.addValueReader(p,null)}return p.readsValue}}class QE{static initWritesValues(p,i){const r=p.initialData.writesValues.reduce((c,e)=>{if(e.type===d.GenericReference||p.writesValues.some(h=>h.id===e.id))return c;const f=Re(e,p.project);return f.setValueWriter(p,null),Mt.includes(f.type)&&(f.setParent(i,null),f.initChildren(null)),[...c,f]},[]),a=[...p.writesValues];return p.writesValues=C([...a,...r]),p.writesValues}}class XVi{}var pi=(s=>(s.PROJECT_INITIALIZED="project-initialized",s.BEFORE_CHANGE_SET_CLOSE_BEFORE_SIDE_EFFECTS="before-change-set-close-before-side-effects",s.BEFORE_CHANGE_SET_CLOSE_AFTER_SIDE_EFFECTS="before-change-set-close-after-side-effects",s.CHANGE_SET_CLOSED_BEFORE_PERSIST="change-set-closed-before-persist",s.CHANGE_SET_PERSISTED="change-set-persisted",s.BEFORE_CHANGE_SET_PERSIST="before-change-set-persist",s.EXPLICIT_DEFINITION_ENTITY_ADDED="explicit-definition-entity-added",s.EXPLICIT_DEFINITION_ENTITY_REMOVED="explicit-definition-entity-removed",s.EXPLICIT_DEFINITION_ENTITY_UPDATED="explicit-definition-entity-updated",s.PERSISTED_DEFINITION_ENTITY_ADDED="persisted-definition-entity-added",s.PERSISTED_DEFINITION_ENTITY_REMOVED="persisted-definition-entity-removed",s.PERSISTED_DEFINITION_ENTITY_UPDATED="persisted-definition-entity-updated",s.RELATIONAL_DATABASE_DEFINITION_ENTITY_ADDED="relational-database-definition-entity-added",s.RELATIONAL_DATABASE_DEFINITION_ENTITY_REMOVED="relational-database-definition-entity-removed",s.RELATIONAL_DATABASE_DEFINITION_ENTITY_UPDATED="relational-database-definition-entity-updated",s))(pi||{});const DL={...h$,events:new Y.Events("def-proj-static-p-ctx-events")},sUe={requestActiveDynamicValue:(s,p=!1)=>null,...DL},Gt=class Gt extends un{constructor(i,r={...sUe,events:new Y.Events("def-proj-inst-p-ctx-events")}){super(i);R(this,"initialData");R(this,"id");R(this,"type",d.Project);R(this,"workspaceId");R(this,"name",null);R(this,"description",null);R(this,"x");R(this,"y");R(this,"entities",[]);R(this,"projects",[]);R(this,"functions",[]);R(this,"events",[]);R(this,"variableDeclarations",[]);R(this,"variableInstances",[]);R(this,"conditions",[]);R(this,"operations",[]);R(this,"functionCalls",[]);R(this,"loops",[]);R(this,"searches",[]);R(this,"primitives",[]);R(this,"builtInBaseEntities",[]);R(this,"operationDeclarations",[]);R(this,"globalEventActionDescriptors",[]);R(this,"loopDeclarations",[]);R(this,"loopDeclarationsBodies",[]);R(this,"conditionDeclarations",[]);R(this,"valueDescriptors",[]);R(this,"dataTypes",[]);R(this,"project");R(this,"instances",{});R(this,"builtInInstances",{});R(this,"deletedInstances",{});R(this,"subscribedDefinitionEntities",new Set);R(this,"errors",[]);R(this,"references",[]);R(this,"history",[]);R(this,"undoableStackValueIndex",-1);R(this,"detachedDependents",{});R(this,"knownVersions",null);R(this,"activeVersion",!1);R(this,"initialized",!1);R(this,"startedInitialization",!1);R(this,"diggestedBuiltInBaseEntitiesIds",new Set);R(this,"rejectParallelCS",!1);R(this,"onPersistChangeSetSequentiallyCallback",null);R(this,"onPersistChangeSetInParallelCallback",null);R(this,"onAddChangeSetCallback",null);R(this,"onDiscardChangeSetCallback",null);if(this.parentContext=r,this.initialData=i,this.id=i.id,this.workspaceId=i.workspaceId,this.name=i.name,this.description=i.description,this.x=0,this.y=0,this.instances[this.id]=this,!Gt.UUID)throw new Error("UUID module is already initialized. Please inject a valid UUID module.")}static get UUID(){var i;return(i=this.parentContext.requestExtension("uuid"))==null?void 0:i.module}static new(i=null){return{id:Gt.UUID.uuid(),version:Gt.UUID.uuid(),workspaceId:"",createdAt:(i==null?void 0:i.timestamp)||B().toISOString(),author:(i==null?void 0:i.author)||Gt.sessionAuthor,previousVersion:null,deleted:!1,deletable:!0,editable:!0,type:d.Project,name:"",description:"",entities:[],functions:[],events:[],projects:[],variableDeclarations:[],variableInstances:[],conditions:[],operations:[],functionCalls:[],loops:[],searches:[]}}static validateGenerationTarget(i,r){let a=JSON.parse(JSON.stringify(i));const c=[],e=[],f=Xr(a);return e.push(...f.errors),c.push(...f.explanations),{errors:e,explanations:c,modifiedData:a}}get off(){return this.parentContext.events.off}get on(){return this.parentContext.events.on}get emit(){return this.parentContext.events.emit}get emitAsync(){return this.parentContext.events.emitAsync}get emitAsyncAll(){return this.parentContext.events.emitAsyncAll}get emitAsyncAllSettled(){return this.parentContext.events.emitAsyncAllSettled}get emitAsyncSequentially(){return this.parentContext.events.emitAsyncSequentially}get emitAsyncSequentiallyAll(){return this.parentContext.events.emitAsyncSequentiallyAll}get emitAsyncSequentiallyAllSettled(){return this.parentContext.events.emitAsyncSequentiallyAllSettled}async closePersistChangeSetsSequentially(){Y.Logger.log("[ProjectState.closePersistChangeSetsSequentially] called");const i=this.history.find(r=>r.dirty&&!r.open&&!r.submitting);i&&(Y.Logger.log(`[ProjectState.closePersistChangeSetsSequentially] closing pending change-set ${i.id} - ${i.actionName}`),await this.persistChangeSetSequentially(i))}async onPersistChangeSetSequentially(i){this.onPersistChangeSetSequentiallyCallback=i,Y.Logger.log("[ProjectState.onPersistChangeSetSequentially] onPersistChangeSetSequentiallyCallback has been set. Checking for pending change-sets."),await this.closePersistChangeSetsSequentially()}offPersistChangeSetSequentially(){this.onPersistChangeSetSequentiallyCallback=null}async onPersistChangeSetInParallel(i){this.onPersistChangeSetInParallelCallback=i,Y.Logger.log("[ProjectState.onPersistChangeSetInParallel] onPersistChangeSetInParallelCallback has been set. Checking for pending change-sets.");for(const r of this.history)this.persistChangeSetInParallel(r),await new Promise(a=>setTimeout(a,27))}offPersistChangeSetInParallel(){this.onPersistChangeSetInParallelCallback=null}onAddChangeSet(i){this.onAddChangeSetCallback=i}offAddChangeSet(){this.onAddChangeSetCallback=null}onDiscardChangeSet(i){this.onDiscardChangeSetCallback=i}offDiscardChangeSet(){this.onDiscardChangeSetCallback=null}async persistChangeSetSequentially(i){if(Y.Logger.log(`[ProjectState.persistChangeSetSequentially] called for change-set ${i.id} - ${i.actionName}`),!i.dirty||i.open||i.submitting){Y.Logger.log(`[ProjectState.persistChangeSetSequentially] change-set ${i.id} - ${i.actionName} is not dirty, or is open, or is already being submitted, skipping.`);return}const r=this.history.findIndex(e=>e.id===i.id),a=this.history.slice(0,r),c=a[a.length-1];if(c!=null&&c.dirty){Y.Logger.log(`[ProjectState.persistChangeSetSequentially] lastBeforeSelf is dirty: ${c.id} - ${c.actionName}, closing it first.`);return}this.onPersistChangeSetSequentiallyCallback&&(Y.Logger.log(`[ProjectState.persistChangeSetSequentially] invoking onPersistChangeSetSequentiallyCallback for change-set ${i.id} - ${i.actionName}`),this.emit("before-change-set-persist",i),i.submitting=!0,(await this.onPersistChangeSetSequentiallyCallback(i)).success&&(i.dirty=!1,this.emit("change-set-persisted",i),Y.Logger.log(`[ProjectState.persistChangeSetSequentially] change-set ${i.id} - ${i.actionName} closed successfully, checking for pending change-sets to close.`),this.closePersistChangeSetsSequentially()))}async persistChangeSetInParallel(i){if(Y.Logger.log(`[ProjectState.persistChangeSetInParallel] called for change-set ${i.id} - ${i.actionName}`),!i.dirty||i.open||i.submitting){Y.Logger.log(`[ProjectState.persistChangeSetInParallel] change-set ${i.id} - ${i.actionName} is not dirty, or is open, or is already being submitted, skipping.`);return}this.onPersistChangeSetInParallelCallback&&(Y.Logger.log(`[ProjectState.persistChangeSetInParallel] invoking onPersistChangeSetInParallelCallback for change-set ${i.id} - ${i.actionName}`),this.emit("before-change-set-persist",i),i.submitting=!0,(await this.onPersistChangeSetInParallelCallback(i)).success&&(i.dirty=!1,this.emit("change-set-persisted",i)))}toLatestChangeSet(i,r,a,c=!1,e="here-this"){if(!this.history.length)return new S(this,i,r,a,c,e);const f=this.history[this.history.length-1];return f.open?f:this.addChangeSet(new S(this,i,r,a,c,e))}addChangeSet(i){var a,c;if(!this.history.length)return this.undoableStackValueIndex=B_(this.undoableStackValueIndex,this.history,i),(a=this.onAddChangeSetCallback)==null||a.call(this,i,this.undoableStackValueIndex),i;const r=this.history.find(e=>e.id===(i==null?void 0:i.id));if(r)return r;if(this.rejectParallelCS){const e=this.history.find(f=>f.open);if(e)throw Y.Logger.warn("Previous still open: ",e),Y.Logger.warn("New change set: ",i),new Error(`There is already an open change-set with id '${e.id}'${e.actionName?` auto-close: ${e.actionName}`:""}${e.self?` root: ${e.self.type} ${ce(e.self,this)}`:""}.`)}return this.undoableStackValueIndex=B_(this.undoableStackValueIndex,this.history,i),(c=this.onAddChangeSetCallback)==null||c.call(this,i,this.undoableStackValueIndex),i}discardChangeSet(i){var a;Y.Logger.log(`[ProjectState.discardChangeSet] called for change-set ${i.id} - ${i.actionName}`);const r=this.history.findIndex(c=>c.id===(i==null?void 0:i.id));return r!==-1&&(this.history.splice(r,1),Y.Logger.log(`[ProjectState.discardChangeSet] Removed change-set ${i.id} - ${i.actionName} from history.`),this.undoableStackValueIndex=this.undoableStackValueIndex-1,(a=this.onDiscardChangeSetCallback)==null||a.call(this,i),i==null||i.teardown()),this}validateGeneratedUpdate(i){return{errors:[],explanations:[],modifiedData:i}}subscribeDependents(i){return i.forEach(r=>{this.detachedDependents[r.entity.id]||(this.detachedDependents[r.entity.id]=r)}),this}unsubscribeDependents(i){return i.forEach(r=>{this.detachedDependents[r.entity.id]&&delete this.detachedDependents[r.entity.id]}),this}syncDependents(i=this.project.addChangeSet(new S(this.project,Gt.sessionAuthor,B().toISOString(),this,!0,"sync-dependents"))){const r=[],a=[],c=[],e=[];return Object.values(this.detachedDependents).forEach(f=>{const h=f.entity.afterAllChildrenInitialized(i);r.push(...h.updated),a.push(...h.added),c.push(...h.removed),e.push(...h.affected)}),i==null||i.attemptAutoclose("sync-dependents",this.id),{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}onDetachedDependencyRemoved(i,r,a){const c=[],e=[],f=[],h=[];return{updated:C(c),added:C(e),removed:C(f),affected:C(h),self:this}}onDetachedDependencyRestored(i,r,a){const c=[],e=[],f=[],h=[];return{updated:C(c),added:C(e),removed:C(f),affected:C(h),self:this}}unsubscribeFromDependencies(){return this}subscribeToDependencies(){return this}increaseVersion(i){var r;if(i&&!B(i).isValid())throw new Error(`The shared timestamp '${i}' is not a valid ISO 8601 date string.`);if(i&&B(i).isSame(B(this.createdAt)))return this;if(!((r=this.knownVersions)!=null&&r.has(this.version))&&this.initialized)throw new Error(`The current ${this.type} ${this.id} version '${this.version}' is not captured in the 'knownVersions' map. Capture the current version before increasing it to avoid losing data.`);if(!this.activeVersion)throw new Error(`Only active versions can be increased. Entity with id '${this.id}' and version '${this.version}' is not active.`);return this.previousVersion=this.version,this.version=Gt.UUID.uuid(),this.createdAt=B(i).toISOString()||B().toISOString(),this}captureVersion(){var r;const i=((r=this.knownVersions)==null?void 0:r.get(this.version))||new Gt(this);if(!this.activeVersion)throw new Error(`Only active versions can be captured. Entity of type ${this.type} with id '${this.id}' and version '${this.version}' is not active.`);if(this.version!==i.version)throw new Error(`Captured ${this.type} with id '${this.id}', version '${i.version}' does not match current entity version '${this.version}'.`);return this.knownVersions=this.knownVersions?this.knownVersions.set(this.version,i):new Map().set(this.version,i),this.apply(i),this}snapshot(){const i=new Gt(this);return this.apply(i)}apply(i){const r=this.toMeta();return i.metaSync(r,null),i.entities=[...this.entities],i.projects=[...this.projects],i.functions=[...this.functions],i.events=[...this.events],i.variableDeclarations=[...this.variableDeclarations],i.variableInstances=[...this.variableInstances],i.conditions=[...this.conditions],i.operations=[...this.operations],i.functionCalls=[...this.functionCalls],i.loops=[...this.loops],i.searches=[...this.searches],i}recursiveCaptureUpstreamVersions(i){const r=[],a=[],c=[],e=[];return{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}async restoreVersion(i,r){var m;const a=[],c=[],e=[],f=[];if(this.version===i&&(r!=null&&r.skipIfSameVersion))return{updated:C(a),added:C(c),removed:C(e),affected:C(f),self:this};if(!this.knownVersions){const E=new Map;for(const[b,A]of this.knownVersions||new Map){if(E.set(b,A),A.activeVersion=!1,A.knownVersions)for(const[_,P]of A.knownVersions)E.set(_,P);A.knownVersions=null}}let h=(m=this.knownVersions)==null?void 0:m.get(i);if(!h){const E=await this.APILoadVersion({},i);if(!E)throw new Error(`Version with id '${i}' for entity with id '${this.id}' not found.`);h=new Gt(E)}return this.metaSync(h.toShallowJSON(),null),this.previousVersion=h.previousVersion,this.version=h.version,this.createdAt=h.createdAt,this.author=h.author,this.deleted=h.deleted,this.entities=[...h.entities],this.projects=[...h.projects],this.functions=[...h.functions],this.events=[...h.events],this.variableDeclarations=[...h.variableDeclarations],this.variableInstances=[...h.variableInstances],this.conditions=[...h.conditions],this.operations=[...h.operations],this.functionCalls=[...h.functionCalls],this.loops=[...h.loops],this.searches=[...h.searches],{updated:C(a),added:C(c),removed:C(e),affected:C(f),self:this}}updateWithShallowTransfer(i,r=this.project.addChangeSet(new S(this.project,Gt.sessionAuthor,B().toISOString(),this,!0,w.UpdateWithShallowTransfer))){return this.checkCanEdit(this,r)?(this.metaSync(i,r),this.version=i.version,this.createdAt=i.createdAt,this.author=i.author,this.deleted=i.deleted,this.previousVersion=i.previousVersion,this.captureVersion(),this.subscribeToDependencies(),r==null||r.attemptAutoclose(w.UpdateWithShallowTransfer,this.id),this):(Y.Logger.warn(`[updateWithShallowTransfer] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.UpdateWithShallowTransfer,this.id),this)}updateWithGenerationTarget(i,r=this.project.addChangeSet(new S(this.project,Gt.sessionAuthor,B().toISOString(),this,!0,w.UpdateWithGenerationTarget))){return this.checkCanEdit(this,r)?(this.metaSync(i,r),this.captureVersion(),this.subscribeToDependencies(),r==null||r.attemptAutoclose(w.UpdateWithGenerationTarget,this.id),this):(Y.Logger.warn(`[updateWithGenerationTarget] User is not allowed to edit this ${this.type} entity with id: ${this.id}`),r==null||r.attemptAutoclose(w.UpdateWithGenerationTarget,this.id),this)}hydrateAncestors(){const i=[],r=[],a=[],c=[];return{updated:C(i),added:C(r),removed:C(a),affected:C(c),self:this}}afterAllChildrenInitialized(i=null){const r=[],a=[],c=[],e=[];return this.initialized||(this.initialized=!0,this.emit("project-initialized",this,i)),this.validate(),{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}addSelfToProject(i){const r=[],a=[],c=[],e=[];return this.subscribe(),this.subscribeToDependencies(),{updated:C(r),added:C(a),removed:C(c),affected:C(e),self:this}}get instancesList(){return Object.values(this.instances)}get builtInInstancesList(){return Object.values(this.builtInInstances)}isOperationDeclaration(i){return this.operationDeclarations.includes(i)}isGlobalEventActionDescriptor(i){return this.globalEventActionDescriptors.includes(i)}isLoopDeclaration(i){return this.loopDeclarations.includes(i)}isConditionDeclaration(i){return this.conditionDeclarations.includes(i)}initChildren(i=this.project.addChangeSet(new S(this.project,Gt.sessionAuthor,B().toISOString(),this,!0,"init-children"))){return this.initialized||this.startedInitialization?this:(this.startedInitialization=!0,this.entities=this.initialData.entities.map(r=>{const a=Re(r,this);return a.setParent(this,null),a.initChildren(i),a}),this.projects=this.initialData.projects.map(r=>{const a=Re(r,this);return a.setParent(this,null),a.initChildren(i),a}),this.variableDeclarations=this.initialData.variableDeclarations.map(r=>{const a=Re(r,this);return a.setParent(this,null),a.initChildren(i),a}),this.variableInstances=this.initialData.variableInstances.map(r=>{const a=Re(r,this);return a.setParent(this,null),a.initChildren(i),a}),this.conditions=this.initialData.conditions.map(r=>{const a=Re(r,this);return a.setParent(this,null),a.initChildren(i),a}),this.operations=this.initialData.operations.map(r=>{const a=Re(r,this);return a.setParent(this,null),a.initChildren(i),a}),this.functions=this.initialData.functions.map(r=>{const a=Re(r,this);return a.setParent(this,null),a.initChildren(i),a}),this.events=this.initialData.events.map(r=>{const a=Re(r,this);return a.setParent(this,null),a.initChildren(i),a}),this.functionCalls=this.initialData.functionCalls.map(r=>{const a=Re(r,this);return a.setParent(this,null),a.initChildren(i),a}),this.loops=this.initialData.loops.map(r=>{const a=Re(r,this);return a.setParent(this,null),a.initChildren(i),a}),this.searches=this.initialData.searches.map(r=>{const a=Re(r,this);return a.setParent(this,null),a.initChildren(i),a}),this.attachOrphanReferences(),this.subscribeToDependencies(),this.afterAllChildrenInitialized(i),i==null||i.attemptAutoclose("init-children",this.id),this)}subscribeInstance(i){return(!this.instances[i.id]||this.instances[i.id]!==i)&&(this.instances[i.id]=i),this}subscribeDeletedInstance(i){return(!this.deletedInstances[i.id]||this.deletedInstances[i.id]!==i)&&(this.deletedInstances[i.id]=i),this}subscribeBuiltInInstance(i){return(!this.builtInInstances[i.id]||this.builtInInstances[i.id]!==i)&&(this.builtInInstances[i.id]=i),this}subscribe(){var i;return this.activeVersion=!0,(i=this.knownVersions)==null||i.forEach(r=>{r.version!==this.version&&(r.activeVersion=!1)}),this.subscribeInstance(this),this}unsubscribe(){return this}unsubscribeInstance(i){return delete this.instances[i.id],this}unsubscribeDeletedInstance(i){return delete this.deletedInstances[i.id],this}unsubscribeBuiltInInstance(i){return delete this.builtInInstances[i.id],this}findSubscribedBuiltInInstance(i){return this.builtInInstances[i.id]||null}get(i){return this.instances[i]||this.builtInInstances[i]||null}getDeleted(i){return this.deletedInstances[i]||null}getManaged(i){return this.getBuiltIn(i)?null:this.instances[i]||null}getBuiltIn(i){return this.builtInInstances[i]||null}findSubscribedInstanceFromReference(i){return this.instances[i.entityId]||null}findSubscribedBuiltInInstanceFromReference(i){return this.builtInInstances[i.entityId]||null}metaSync(i,r=this.project.addChangeSet(new S(this.project,Gt.sessionAuthor,B().toISOString(),this,!0,"meta-sync"))){const a=tn(this,i,r),c=en(this,a),e=this.toMeta();return this.name=a.name!==void 0?a.name:e.name,this.description=a.description!==void 0?a.description:e.description,this.x=a.x||e.x,this.y=a.y||e.y,super.baseMetaSync(a,this,r),a.deleted===!0&&!e.deleted?r==null||r.add(this,W.Removed):a.deleted===!1&&e.deleted?r==null||r.add(this,W.Added):c&&(r==null||r.add(this,W.Updated)),r==null||r.attemptAutoclose("meta-sync",this.id),this}async APILoad(i=Ke,...r){return await Gt.repository.APILoad(this.id,...r),this}async APICreate(i=Ke,...r){return await Gt.repository.APICreate(this.toShallowJSON(),...r),this}async APIUpdate(i=Ke,...r){return await Gt.repository.APIUpdate(this.toShallowJSON(),...r),this}async APIDelete(i=Ke,...r){return await Gt.repository.APIDelete(this.toShallowJSON(),...r),this}async APIClone(i=Ke,...r){return await Gt.repository.APIClone(this.id,...r),this}async APILoadVersion(i=Ke,r,...a){return await Gt.repository.APILoadVersion(this.id,r,...a)}remove({ignoreUpstream:i}={ignoreUpstream:!1},r=this.project.addChangeSet(new S(this.project,Gt.sessionAuthor,B().toISOString(),this,!0,w.RemoveEntity))){return{added:[],updated:[],removed:[],affected:[],self:this}}restore({}={},i=this.project.addChangeSet(new S(this.project,Gt.sessionAuthor,B().toISOString(),this,!0,w.RestoreEntity))){return{added:[],updated:[],removed:[],affected:[],self:this}}getAllBuiltInIds(){const i=new Set;return[...this.primitives.flatMap(r=>r.toFlatIds(i)),...this.builtInBaseEntities.flatMap(r=>r.toFlatIds(i)),...this.operationDeclarations.flatMap(r=>r.toFlatIds(i)),...this.globalEventActionDescriptors.flatMap(r=>r.toFlatIds(i)),...this.loopDeclarations.flatMap(r=>r.toFlatIds(i)),...this.conditionDeclarations.flatMap(r=>r.toFlatIds(i)),...this.valueDescriptors.flatMap(r=>r.toFlatIds(i)),...this.dataTypes.flatMap(r=>r.toFlatIds(i))]}getAllBuiltIn(){const i=new Set;return[...this.primitives.flatMap(r=>r.toFlat(i)),...this.builtInBaseEntities.flatMap(r=>r.toFlat(i)),...this.operationDeclarations.flatMap(r=>r.toFlat(i)),...this.globalEventActionDescriptors.flatMap(r=>r.toFlat(i)),...this.loopDeclarations.flatMap(r=>r.toFlat(i)),...this.conditionDeclarations.flatMap(r=>r.toFlat(i)),...this.valueDescriptors.flatMap(r=>r.toFlat(i)),...this.dataTypes.flatMap(r=>r.toFlat(i))]}toFlat(i=new Set){return i.has(this.id)?[]:(i.add(this.id),[this,...this.entities.flatMap(a=>a.toFlat(i)),...this.functions.flatMap(a=>a.toFlat(i)),...this.events.flatMap(a=>a.toFlat(i)),...this.projects.flatMap(a=>a.toFlat(i)),...this.variableDeclarations.flatMap(a=>a.toFlat(i)),...this.variableInstances.flatMap(a=>a.toFlat(i)),...this.conditions.flatMap(a=>a.toFlat(i)),...this.operations.flatMap(a=>a.toFlat(i)),...this.functionCalls.flatMap(a=>a.toFlat(i)),...this.loops.flatMap(a=>a.toFlat(i)),...this.searches.flatMap(a=>a.toFlat(i))])}toFlatIds(i=new Set){return i.has(this.id)?[]:(i.add(this.id),[this.id,...this.entities.flatMap(a=>a.toFlatIds(i)),...this.functions.flatMap(a=>a.toFlatIds(i)),...this.events.flatMap(a=>a.toFlatIds(i)),...this.projects.flatMap(a=>a.toFlatIds(i)),...this.variableDeclarations.flatMap(a=>a.toFlatIds(i)),...this.variableInstances.flatMap(a=>a.toFlatIds(i)),...this.conditions.flatMap(a=>a.toFlatIds(i)),...this.operations.flatMap(a=>a.toFlatIds(i)),...this.functionCalls.flatMap(a=>a.toFlatIds(i)),...this.loops.flatMap(a=>a.toFlatIds(i)),...this.searches.flatMap(a=>a.toFlatIds(i))])}toMeta(){return{id:this.id,version:this.version,workspaceId:this.workspaceId,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,description:this.description,type:this.type,editable:this.editable,deletable:this.deletable,name:this.name}}toJSON(i=new Set){return i.has(this.id)?this.toReference():(i.add(this.id),{id:this.id,version:this.version,workspaceId:this.workspaceId,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,type:this.type,editable:this.editable,deletable:this.deletable,name:this.name,description:this.description,entities:this.entities.map(r=>r.toJSON(i)),variableDeclarations:this.variableDeclarations.map(r=>r.toJSON(i)),variableInstances:this.variableInstances.map(r=>r.toJSON(i)),conditions:this.conditions.map(r=>r.toJSON(i)),operations:this.operations.map(r=>r.toJSON(i)),loops:this.loops.map(r=>r.toJSON(i)),searches:this.searches.map(r=>r.toJSON(i)),functions:this.functions.map(r=>r.toJSON(i)),events:this.events.map(r=>r.toJSON(i)),projects:this.projects.map(r=>r.toJSON(i)),functionCalls:this.functionCalls.map(r=>r.toJSON(i))})}toJSONClone(i={uuidStrategy:"uuid"}){const r=new Map,a=new Set,c=this.getAllBuiltInIds();return Object.keys(this.instances).forEach(e=>{if(c.includes(e)){r.set(e,e);return}r.set(e,Gt.UUID.uuid())}),a.add(this.id),{id:r.get(this.id),version:this.version,workspaceId:this.workspaceId,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,type:this.type,editable:this.editable,deletable:this.deletable,name:this.name,description:this.description,entities:this.entities.map(e=>e.toJSONClone({...i,seenEntityMaps:r,seenEntities:a,newId:null})),projects:this.projects.map(e=>e.toJSONClone({...i,seenEntityMaps:r,seenEntities:a,newId:null})),variableDeclarations:this.variableDeclarations.map(e=>e.toJSONClone({...i,seenEntityMaps:r,seenEntities:a,newId:null})),variableInstances:this.variableInstances.map(e=>e.toJSONClone({...i,seenEntityMaps:r,seenEntities:a,newId:null})),conditions:this.conditions.map(e=>e.toJSONClone({...i,seenEntityMaps:r,seenEntities:a,newId:null})),operations:this.operations.map(e=>e.toJSONClone({...i,seenEntityMaps:r,seenEntities:a,newId:null})),functions:this.functions.map(e=>e.toJSONClone({...i,seenEntityMaps:r,seenEntities:a,newId:null})),events:this.events.map(e=>e.toJSONClone({...i,seenEntityMaps:r,seenEntities:a,newId:null})),functionCalls:this.functionCalls.map(e=>e.toJSONClone({...i,seenEntityMaps:r,seenEntities:a,newId:null})),loops:this.loops.map(e=>e.toJSONClone({...i,seenEntityMaps:r,seenEntities:a,newId:null})),searches:this.searches.map(e=>e.toJSONClone({...i,seenEntityMaps:r,seenEntities:a,newId:null}))}}toReference(i=at){var a;let r=this.id;return(a=i.seenEntityMaps)!=null&&a.has(this.id)&&(r=i.seenEntityMaps.get(this.id)),{id:r+"--"+Gt.UUID.uuid()+"--ref",type:d.GenericReference,entityId:r,version:this.version,entityType:this.type}}toShallowJSON(i=at){var a;let r=this.id;return(a=i.seenEntityMaps)!=null&&a.has(this.id)&&(r=i.seenEntityMaps.get(this.id)),{id:r,version:this.version,workspaceId:this.workspaceId,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,type:this.type,editable:this.editable,deletable:this.deletable,name:this.name,description:this.description,entities:this.entities.map(c=>c.toReference(i)),functions:this.functions.map(c=>c.toReference(i)),events:this.events.map(c=>c.toReference(i)),projects:this.projects.map(c=>c.toReference(i)),variableDeclarations:this.variableDeclarations.map(c=>c.toReference(i)),variableInstances:this.variableInstances.map(c=>c.toReference(i)),conditions:this.conditions.map(c=>c.toReference(i)),operations:this.operations.map(c=>c.toReference(i)),functionCalls:this.functionCalls.map(c=>c.toReference(i)),loops:this.loops.map(c=>c.toReference(i)),searches:this.searches.map(c=>c.toReference(i))}}toFlatJSON(i=new Set){return i.has(this.id)?[]:(i.add(this.id),[this.toShallowJSON(),...this.entities.flatMap(a=>a.toFlatJSON(i)),...this.functions.flatMap(a=>a.toFlatJSON(i)),...this.events.flatMap(a=>a.toFlatJSON(i)),...this.projects.flatMap(a=>a.toFlatJSON(i)),...this.variableDeclarations.flatMap(a=>a.toFlatJSON(i)),...this.variableInstances.flatMap(a=>a.toFlatJSON(i)),...this.conditions.flatMap(a=>a.toFlatJSON(i)),...this.operations.flatMap(a=>a.toFlatJSON(i)),...this.functionCalls.flatMap(a=>a.toFlatJSON(i)),...this.loops.flatMap(a=>a.toFlatJSON(i)),...this.searches.flatMap(a=>a.toFlatJSON(i))])}toGenerationTarget(i=at){var a;let r=this.id;return(a=i.seenEntityMaps)!=null&&a.has(this.id)&&(r=i.seenEntityMaps.get(this.id)),{id:r,workspaceId:this.workspaceId,type:this.type,name:this.name,description:this.description}}toFlatGenerationTarget(i=new Set){return i.has(this.id)?[]:(i.add(this.id),[...this.entities.flatMap(a=>a.toFlatGenerationTarget(i)),...this.functions.flatMap(a=>a.toFlatGenerationTarget(i)),...this.events.flatMap(a=>a.toFlatGenerationTarget(i)),...this.projects.flatMap(a=>a.toFlatGenerationTarget(i)),...this.variableDeclarations.flatMap(a=>a.toFlatGenerationTarget(i)),...this.variableInstances.flatMap(a=>a.toFlatGenerationTarget(i)),...this.conditions.flatMap(a=>a.toFlatGenerationTarget(i)),...this.operations.flatMap(a=>a.toFlatGenerationTarget(i)),...this.functionCalls.flatMap(a=>a.toFlatGenerationTarget(i)),...this.loops.flatMap(a=>a.toFlatGenerationTarget(i)),...this.searches.flatMap(a=>a.toFlatGenerationTarget(i))])}clearErrors(){return this.errors=[],this.entities.forEach(i=>i.clearErrors()),this.projects.forEach(i=>i.clearErrors()),this.functions.forEach(i=>i.clearErrors()),this.events.forEach(i=>i.clearErrors()),this.variableDeclarations.forEach(i=>i.clearErrors()),this.variableInstances.forEach(i=>i.clearErrors()),this.conditions.forEach(i=>i.clearErrors()),this.operations.forEach(i=>i.clearErrors()),this.functionCalls.forEach(i=>i.clearErrors()),this.loops.forEach(i=>i.clearErrors()),this.searches.forEach(i=>i.clearErrors()),this}validate(){return this.validateChildren(),AE([...this.errors]),{success:!0}}async validateAsync(i={}){const r=Y.YieldTracker.from(i);return await this.validateChildrenAsync({tracker:r}),await D_e([...this.errors]),{success:!0}}validateChildren(){this.entities.forEach(i=>i.validate()),this.projects.forEach(i=>i.validate()),this.functions.forEach(i=>i.validate()),this.events.forEach(i=>i.validate()),this.variableDeclarations.forEach(i=>i.validate()),this.variableInstances.forEach(i=>i.validate()),this.conditions.forEach(i=>i.validate()),this.operations.forEach(i=>i.validate()),this.functionCalls.forEach(i=>i.validate()),this.loops.forEach(i=>i.validate()),this.searches.forEach(i=>i.validate())}async validateChildrenAsync(i={}){const r=Y.YieldTracker.from(i);for(let a=0;a<this.entities.length;a++)await this.entities[a].validateAsync({tracker:r});for(let a=0;a<this.projects.length;a++)await this.projects[a].validateAsync({tracker:r});for(let a=0;a<this.functions.length;a++)await this.functions[a].validateAsync({tracker:r});for(let a=0;a<this.events.length;a++)await this.events[a].validateAsync({tracker:r});for(let a=0;a<this.variableDeclarations.length;a++)await this.variableDeclarations[a].validateAsync({tracker:r});for(let a=0;a<this.variableInstances.length;a++)await this.variableInstances[a].validateAsync({tracker:r});for(let a=0;a<this.conditions.length;a++)await this.conditions[a].validateAsync({tracker:r});for(let a=0;a<this.operations.length;a++)await this.operations[a].validateAsync({tracker:r});for(let a=0;a<this.functionCalls.length;a++)await this.functionCalls[a].validateAsync({tracker:r});for(let a=0;a<this.loops.length;a++)await this.loops[a].validateAsync({tracker:r});for(let a=0;a<this.searches.length;a++)await this.searches[a].validateAsync({tracker:r})}getErrors(){return[...this.errors,...this.entities.flatMap(r=>r.getErrors()),...this.projects.flatMap(r=>r.getErrors()),...this.functions.flatMap(r=>r.getErrors()),...this.events.flatMap(r=>r.getErrors()),...this.variableDeclarations.flatMap(r=>r.getErrors()),...this.variableInstances.flatMap(r=>r.getErrors()),...this.conditions.flatMap(r=>r.getErrors()),...this.operations.flatMap(r=>r.getErrors()),...this.functionCalls.flatMap(r=>r.getErrors()),...this.loops.flatMap(r=>r.getErrors()),...this.searches.flatMap(r=>r.getErrors())]}async getErrorsAsync(i={}){const r=Y.YieldTracker.from(i),a=[...this.errors];await r.tick();for(let c=0;c<this.entities.length;c++){const e=await this.entities[c].getErrorsAsync({tracker:r});a.push(...e)}for(let c=0;c<this.projects.length;c++){const e=await this.projects[c].getErrorsAsync({tracker:r});a.push(...e)}for(let c=0;c<this.functions.length;c++){const e=await this.functions[c].getErrorsAsync({tracker:r});a.push(...e)}for(let c=0;c<this.events.length;c++){const e=await this.events[c].getErrorsAsync({tracker:r});a.push(...e)}for(let c=0;c<this.variableDeclarations.length;c++){const e=await this.variableDeclarations[c].getErrorsAsync({tracker:r});a.push(...e)}for(let c=0;c<this.variableInstances.length;c++){const e=await this.variableInstances[c].getErrorsAsync({tracker:r});a.push(...e)}for(let c=0;c<this.conditions.length;c++){const e=await this.conditions[c].getErrorsAsync({tracker:r});a.push(...e)}for(let c=0;c<this.operations.length;c++){const e=await this.operations[c].getErrorsAsync({tracker:r});a.push(...e)}for(let c=0;c<this.functionCalls.length;c++){const e=await this.functionCalls[c].getErrorsAsync({tracker:r});a.push(...e)}for(let c=0;c<this.loops.length;c++){const e=await this.loops[c].getErrorsAsync({tracker:r});a.push(...e)}for(let c=0;c<this.searches.length;c++){const e=await this.searches[c].getErrorsAsync({tracker:r});a.push(...e)}return a}getShallowErrors(){return this.errors}clone(){return this}addDefinitionEntity(i){return this.entities.includes(i)||this.entities.push(i),i}addFunctionDeclaration(i){return this.functions.includes(i)||this.functions.push(i),i}addFunctionCall(i){return this.functionCalls.includes(i)||this.functionCalls.push(i),i}addVariableDeclaration(i){return this.variableDeclarations.includes(i)||this.variableDeclarations.push(i),i}addVariableInstance(i){return this.variableInstances.includes(i)||this.variableInstances.push(i),i}addInstalledProject(i){return this.projects.includes(i)||this.projects.push(i),this}addGlobalEvent(i){return this.events.includes(i)||this.events.push(i),this}addCondition(i){return this.conditions.includes(i)||this.conditions.push(i),this}addOperation(i){return this.operations.includes(i)||this.operations.push(i),this}addLoop(i){return this.loops.includes(i)||this.loops.push(i),this}addSearch(i){return this.searches.includes(i)||this.searches.push(i),this}removeDefinitionEntity(i){const r=this.entities.findIndex(a=>a.id===i.id);if(r>-1){const a=this.entities[r];return this.entities.splice(r,1),a}return null}removeCondition(i){const r=this.conditions.findIndex(a=>a.id===i.id);if(r>-1){const a=this.conditions[r];return this.conditions.splice(r,1),a}return null}removeOperation(i){const r=this.operations.findIndex(a=>a.id===i.id);if(r>-1){const a=this.operations[r];return this.operations.splice(r,1),a}return null}removeLoop(i){const r=this.loops.findIndex(a=>a.id===i.id);if(r>-1){const a=this.loops[r];return this.loops.splice(r,1),a}return null}removeSearch(i){const r=this.searches.findIndex(a=>a.id===i.id);if(r>-1){const a=this.searches[r];return this.searches.splice(r,1),a}return null}removeFunctionCall(i){const r=this.functionCalls.findIndex(a=>a.id===i.id);if(r>-1){const a=this.functionCalls[r];return this.functionCalls.splice(r,1),a}return null}removeVariableInstance(i){const r=this.variableInstances.findIndex(a=>a.id===i.id);if(r>-1){const a=this.variableInstances[r];return this.variableInstances.splice(r,1),a}return null}removeVariableDeclaration(i){const r=this.variableDeclarations.findIndex(a=>a.id===i.id);if(r>-1){const a=this.variableDeclarations[r];return this.variableDeclarations.splice(r,1),a}return null}removeFunctionDeclaration(i){const r=this.functions.findIndex(a=>a.id===i.id);if(r>-1){const a=this.functions[r];return this.functions.splice(r,1),a}return null}removeInstalledProject(i){const r=this.projects.findIndex(a=>a.id===i.id);if(r>-1){const a=this.projects[r];return this.projects.splice(r,1),a}return null}removeGlobalEvent(i){const r=this.events.findIndex(a=>a.id===i.id);if(r>-1){const a=this.events[r];return this.events.splice(r,1),a}return null}removeTopLevelVariableDeclaration(i){if(i.type!==d.VariableDeclaration)return null;const r=this.variableDeclarations.findIndex(a=>a.id===i.id);if(r>-1){const a=this.variableDeclarations[r];return this.variableDeclarations.splice(r,1),a}return null}getEntryPoints(){return[...this.functions,...this.events,...this.entities.flatMap(r=>r.methods)]}getTerminationStatements(){return[...this.getEntryPoints().reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.ReturnStatement||e.type===d.ContinueStatement||e.type===d.BreakStatement)]},[])]}getFunctionDeclaration(i){return this.functions.find(r=>r.id===i)||null}getConditions(){return[...this.conditions,...this.getEntryPoints().reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.Condition)]},[]),...this.functionCalls.reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.Condition)]},[]),...this.operations.reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.Condition)]},[]),...this.loops.reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.Condition)]},[]),...this.searches.reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.Condition)]},[])]}getOperations(){return[...this.operations,...this.getEntryPoints().reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.Operation)]},[]),...this.functionCalls.reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.Operation)]},[]),...this.conditions.reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.Operation)]},[]),...this.loops.reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.Operation)]},[]),...this.searches.reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.Operation)]},[])]}getFunctionCalls(){return[...this.functionCalls,...this.getEntryPoints().reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.FunctionCall)]},[]),...this.conditions.reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.FunctionCall)]},[]),...this.operations.reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.FunctionCall)]},[]),...this.loops.reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.FunctionCall)]},[]),...this.searches.reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.FunctionCall)]},[])]}getDefinitionEntities(i=new Set){return Array.from(this.subscribedDefinitionEntities).filter(a=>!i.has(a)).map(a=>this.get(a))}getVariables(){return[...this.variableDeclarations,...this.getEntryPoints().reduce((r,a)=>{const c=cr(a);return[...r,...c]},[]),...this.functionCalls.reduce((r,a)=>{const c=cr(a);return[...r,...c]},[]),...this.conditions.reduce((r,a)=>{const c=cr(a);return[...r,...c]},[]),...this.operations.reduce((r,a)=>{const c=cr(a);return[...r,...c]},[]),...this.loops.reduce((r,a)=>{const c=cr(a);return[...r,...c]},[]),...this.searches.reduce((r,a)=>{const c=cr(a);return[...r,...c]},[])]}getVariableInstances(){return[...this.variableInstances,...this.entities.reduce((r,a)=>[...r,...a.methods.flatMap(c=>{const f=ct(c).filter(h=>h.type===d.VariableInstance);return[...r,...f]})],[]),...this.getEntryPoints().reduce((r,a)=>{const e=cr(a).filter(f=>f.type===d.VariableInstance);return[...r,...e]},[]),...this.functionCalls.reduce((r,a)=>{const e=cr(a).filter(f=>f.type===d.VariableInstance);return[...r,...e]},[]),...this.conditions.reduce((r,a)=>{const e=cr(a).filter(f=>f.type===d.VariableInstance);return[...r,...e]},[]),...this.operations.reduce((r,a)=>{const e=cr(a).filter(f=>f.type===d.VariableInstance);return[...r,...e]},[]),...this.loops.reduce((r,a)=>{const e=cr(a).filter(f=>f.type===d.VariableInstance);return[...r,...e]},[]),...this.searches.reduce((r,a)=>{const e=cr(a).filter(f=>f.type===d.VariableInstance);return[...r,...e]},[])]}getVariableDeclarations(){return C([...this.variableDeclarations,...this.entities.reduce((r,a)=>[...r,...a.methods.flatMap(c=>{const f=ct(c).filter(h=>h.type===d.VariableDeclaration);return[...r,...f]})],[]),...this.getEntryPoints().reduce((r,a)=>{const e=cr(a).filter(f=>f.type===d.VariableDeclaration);return[...r,...e]},[]),...this.functionCalls.reduce((r,a)=>{const e=cr(a).filter(f=>f.type===d.VariableDeclaration);return[...r,...e]},[]),...this.conditions.reduce((r,a)=>{const e=cr(a).filter(f=>f.type===d.VariableDeclaration);return[...r,...e]},[]),...this.operations.reduce((r,a)=>{const e=cr(a).filter(f=>f.type===d.VariableDeclaration);return[...r,...e]},[]),...this.loops.reduce((r,a)=>{const e=cr(a).filter(f=>f.type===d.VariableDeclaration);return[...r,...e]},[]),...this.searches.reduce((r,a)=>{const e=cr(a).filter(f=>f.type===d.VariableDeclaration);return[...r,...e]},[])])}getLoops(){return[...this.loops,...this.getEntryPoints().reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.Loop)]},[]),...this.functionCalls.reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.Loop)]},[]),...this.conditions.reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.Loop)]},[]),...this.operations.reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.Loop)]},[]),...this.searches.reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.Loop)]},[])]}getSearches(){return[...this.searches,...this.getEntryPoints().reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.Search)]},[]),...this.functionCalls.reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.Search)]},[]),...this.conditions.reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.Search)]},[]),...this.operations.reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.Search)]},[]),...this.loops.reduce((r,a)=>{const c=ct(a);return[...r,...c.filter(e=>e.type===d.Search)]},[])]}attachOrphanReferences(){const i=this.getVariableInstances(),r=this.getVariableDeclarations();return i.forEach(a=>{if(!a.declaration){const c=a.initialData,e=c.declaration.entityId||c.declaration.id,f=r.find(h=>h.id===e);f&&a.setDeclaration(f)}}),this}getBuiltInPersistedEntity(){return this.builtInBaseEntities.find(i=>i.name===ge.PERSISTED_ENTITY)||null}requestActiveDynamicValue(i,r=!1){var c,e;const a=(e=(c=this.parentContext).requestActiveDynamicValue)==null?void 0:e.call(c,i,r);if(!a&&pI.includes(i.type)){const f=i.getDefaultValue();return f?{value:f,type:Be.DefaultValue,inheritanceLink:null,valueOwner:i}:null}return a||null}requestExtension(i){if(this.parentContext.requestExtension){const r=this.parentContext.requestExtension(i);if(r&&!r.module)throw new Error(`Module ${i} is not registered properly.`);return r.module||null}return null}undo(){Y.Logger.log("Undoing, from: ",this.undoableStackValueIndex),this.undoableStackValueIndex=this.undoableStackValueIndex-1,Y.Logger.log("To: ",this.undoableStackValueIndex);const i=this.history[this.undoableStackValueIndex+1],r=this.history[this.undoableStackValueIndex];return Y.Logger.log("Current change set: ",i==null?void 0:i.toJSON()),Y.Logger.log("Change set to restore: ",r==null?void 0:r.toJSON()),$_(i||"initial",r||"initial",this)}redo(){Y.Logger.log("Undoing, from: ",this.undoableStackValueIndex),this.undoableStackValueIndex=this.undoableStackValueIndex+1,Y.Logger.log("To: ",this.undoableStackValueIndex);const i=this.history[this.undoableStackValueIndex-1],r=this.history[this.undoableStackValueIndex];return Y.Logger.log("Current change set: ",i==null?void 0:i.toJSON()),Y.Logger.log("Change set to restore: ",r.toJSON()),$_(i||"initial",r||"initial",this)}applyExternalChangeSet(i){const r=i.payload,a=this.addChangeSet(new S(this,i.userAuthor,i.emittedAt,this));a.ignoreNonEditable=!0,a.ignoreNonDeletable=!0;const c=r.updated[this.id];if(!c)throw new Error("Project root not found in change set transfer. Cannot apply changes.");const e={...r.added,...r.updated,...r.removed},f=[...Object.keys(r.added),...Object.keys(r.updated),...Object.keys(r.removed)];f.forEach(m=>{var E;if(!e[m]){Y.Logger.warn(`Entity '${m}' not found in change set transfer. Cannot apply changes.`);const b=(E=this.get(m))==null?void 0:E.toShallowJSON();throw b?Y.Logger.warn("Entity in project: ",b):Y.Logger.warn("Entity not in project"),new Error(`Entity '${m}' not found in change set transfer. Cannot apply changes.`)}});const h=new Fn(c,{allBuiltInEntityIds:this.diggestedBuiltInBaseEntitiesIds});return h.flatRecord=e,h.order=f,h.orderEntities(),Y.Logger.log("All entities: ",h.order.map((m,E)=>`${E+1}: ${e[m].type} - ${m}`).join(`,
606
606
  `)),Y.Logger.log("Persisting new additions"),h.visit(async(m,E)=>{if(r.added[m.id]){Y.Logger.log("Adding: ",m.id);try{const b=Re(m,this);if(b.hydrateAncestors(),b.addSelfToProject(a),a.add(b,W.Added),a||b.captureVersion(),!this.get(m.id))throw new Error(`Entity ${m.id} was not added to the project`)}catch(b){Y.Logger.error("Error: ",b),Y.Logger.error("Errored entity: ",m)}}}),Y.Logger.log("Persisting updates"),h.visit(async(m,E)=>{if(r.updated[m.id]){Y.Logger.log("Updating: ",m.id);try{const b=this.get(m.id);b?(b.updateWithShallowTransfer(m,a),a.add(b,W.Updated),a||b.captureVersion()):Y.Logger.warn(`Active version of ${m.id} not found when applying external changes`)}catch(b){Y.Logger.error("Error: ",b),Y.Logger.error("Errored entity: ",m)}}}),Y.Logger.log("Persisting removals"),h.visit(async(m,E)=>{if(r.removed[m.id]){Y.Logger.log("Removing: ",m.id);try{const b=this.get(m.id);b&&(b.remove({ignoreUpstream:!1},a),a.add(b,W.Removed),a||b.captureVersion())}catch(b){Y.Logger.error("Error: ",b),Y.Logger.error("Errored entity: ",m)}}}),a.open=!1,a}toBuiltInShallowRecord(){const i={};return Object.values(this.builtInInstances).forEach(r=>{const a=r.toShallowJSON();i[r.id]=a}),i}toShallowRecord(){const i={};return Object.values(this.instances).forEach(r=>{const a=r.toShallowJSON();i[r.id]=a}),i}toFullProjectTransfer(i){const r={shallowErrors:!1,...i},a=new Fn(void 0,{allBuiltInEntityIds:this.diggestedBuiltInBaseEntitiesIds});a.flatRecord={};for(const f of Object.values(this.instances))this.diggestedBuiltInBaseEntitiesIds.has(f.id)||(a.flatRecord[f.id]=f);a.order=Object.keys(a.flatRecord),a.orderEntities();const c={},e=[];return a.visit(f=>{try{const h=f.toShallowJSON();c[f.id]=h,e.push(f.id)}catch(h){if(Y.Logger.error(`[toFullProjectTransfer] Error serializing ${f.type} ${f.id}`,h),!r.shallowErrors)throw h}}),{order:e,size:e.length,record:c}}async toFullProjectTransferAsync(i={}){const r={shallowErrors:!1,...i},a=Y.YieldTracker.from(r),c=new Fn(void 0,{allBuiltInEntityIds:this.diggestedBuiltInBaseEntitiesIds});c.flatRecord={};for(const h of Object.values(this.instances))await a.tick(),!this.diggestedBuiltInBaseEntitiesIds.has(h.id)&&(c.flatRecord[h.id]=h);c.order=Object.keys(c.flatRecord);const e=[];if(r.seenEntityMaps)for(const h of c.order){const m=r.seenEntityMaps.get(h)??h;this.diggestedBuiltInBaseEntitiesIds.has(m)}await c.orderEntitiesAsync({tracker:a});const f={};return await c.visitAsync(async h=>{try{if(this.diggestedBuiltInBaseEntitiesIds.has(h.id))return;const m=h.toShallowJSON({seenEntityMaps:r.seenEntityMaps});r.resetVersionOptions&&(m.version=Gt.UUID.uuid(),m.createdAt=r.resetVersionOptions.commonTimestamp||B().toISOString(),m.author=r.resetVersionOptions.author||Gt.sessionAuthor||"1",m.previousVersion=null),f[m.id]=m,e.push(m.id),r!=null&&r.onVisit&&await r.onVisit(m)}catch(m){if(Y.Logger.error(`[toFullProjectTransferAsync] Error serializing ${h.type} ${h.id}`,m),!r.shallowErrors)throw m}},{tracker:a}),{order:e,size:e.length,record:f}}async toFullProjectGenerationTargetAsync(i={}){const r={shallowErrors:!1,...i},a=Y.YieldTracker.from(r),c=new Fn(void 0,{allBuiltInEntityIds:this.diggestedBuiltInBaseEntitiesIds});c.flatRecord={};for(const h of Object.values(this.instances))await a.tick(),!this.diggestedBuiltInBaseEntitiesIds.has(h.id)&&(c.flatRecord[h.id]=h);c.order=Object.keys(c.flatRecord);const e=[];if(r.seenEntityMaps)for(const h of c.order){const m=r.seenEntityMaps.get(h)??h;this.diggestedBuiltInBaseEntitiesIds.has(m)}await c.orderEntitiesAsync({tracker:a});const f={};return await c.visitAsync(async h=>{try{if(this.diggestedBuiltInBaseEntitiesIds.has(h.id))return;const m=h.toGenerationTarget({seenEntityMaps:r.seenEntityMaps});f[m.id]=m,e.push(m.id),r!=null&&r.onVisit&&await r.onVisit(m)}catch(m){if(Y.Logger.error(`[toFullProjectTransferAsync] Error serializing ${h.type} ${h.id}`,m),!r.shallowErrors)throw m}},{tracker:a}),{order:e,size:e.length,record:f}}};R(Gt,"parentContext",DL),R(Gt,"sessionAuthor","1"),R(Gt,"repository",{APICreate:async(i,...r)=>i,APIUpdate:async(i,...r)=>i,APIDelete:async(i,...r)=>i,APIClone:async(i,...r)=>{},APILoad:async(i,...r)=>null,APILoadVersion:async(i,r,...a)=>null}),R(Gt,"type",d.Project),R(Gt,"USER_MANAGED_PARENT_TYPES",[]),R(Gt,"PARENT_TYPES",[...Gt.USER_MANAGED_PARENT_TYPES]),R(Gt,"MUTABLE_BASE_PROPERTIES",["name","description"]),R(Gt,"INMUTABLE_BASE_PROPERTIES",["id","type","workspaceId","version","createdAt","author","previousVersion"]),R(Gt,"BASE_PROPERTIES",[...Gt.MUTABLE_BASE_PROPERTIES,...Gt.INMUTABLE_BASE_PROPERTIES]),R(Gt,"MUTABLE_META_PROPERTIES",[...Gt.MUTABLE_BASE_PROPERTIES,"x","y"]),R(Gt,"INMUTABLE_META_PROPERTIES",[...Gt.INMUTABLE_BASE_PROPERTIES]),R(Gt,"META_PROPERTIES",[...Gt.MUTABLE_META_PROPERTIES,...Gt.INMUTABLE_META_PROPERTIES]),R(Gt,"MUTABLE_UPSTREAM_PROPERTIES",[]),R(Gt,"INMUTABLE_UPSTREAM_PROPERTIES",["primitives","builtInBaseEntities","operationDeclarations","globalEventActionDescriptors","loopDeclarations","builtInInstances"]),R(Gt,"UPSTREAM_PROPERTIES",[...Gt.MUTABLE_UPSTREAM_PROPERTIES,...Gt.INMUTABLE_UPSTREAM_PROPERTIES]),R(Gt,"MUTABLE_DOWNSTREAM_PROPERTIES",["entities","projects","functions","events","variableDeclarations","variableInstances","conditions","operations","functionCalls","loops","searches"]),R(Gt,"INMUTABLE_DOWNSTREAM_PROPERTIES",[]),R(Gt,"DOWNSTREAM_PROPERTIES",[...Gt.MUTABLE_DOWNSTREAM_PROPERTIES,...Gt.INMUTABLE_DOWNSTREAM_PROPERTIES]),R(Gt,"PROPERTIES",[...Gt.META_PROPERTIES,...Gt.UPSTREAM_PROPERTIES,...Gt.DOWNSTREAM_PROPERTIES]);let x=Gt;class ePi extends er{constructor(p){super(dE,p)}}class tPi extends er{constructor(i){super(sm,i);R(this,"autoexecutable",!0)}getEntityToMatchInputMap(i){return i.inputs.find(r=>{var a;return((a=r.declaration)==null?void 0:a.id)===re.operation[xe.Validate].inputs.entityToMatch.id})||null}getDataToValidateInputMap(i){return i.inputs.find(r=>{var a;return((a=r.declaration)==null?void 0:a.id)===re.operation[xe.Validate].inputs.dataToValidate.id})||null}getOutputDataOutputMap(i){return i.outputs.find(r=>{var a;return((a=r.declaration)==null?void 0:a.id)===re.operation[xe.Validate].dataType.entity.properties.outputEntity.id})||null}getEntityToMatch(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"get-entity-to-match-validate-data"))){var e;const a=((e=this.project.requestActiveDynamicValue(i))==null?void 0:e.value)||null,c=a==null?void 0:a.valueAsTypeSingle;return r==null||r.attemptAutoclose("get-entity-to-match-validate-data",this.id),c}syncOperationInstance(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"sync-operation-instance-validate-data"))){const a=[],c=[],e=[],f=[],h=this.getEntityToMatchInputMap(i);if(h){const{added:b,updated:A,removed:_,affected:P}=this.syncEntityToMatchInputMapDataType(h,r);a.push(...A),c.push(...b),e.push(..._),f.push(...P)}const m=this.getDataToValidateInputMap(i);if(m){const{added:b,updated:A,removed:_,affected:P}=this.syncDataToValidateInputMapDataType(m,r);a.push(...A),c.push(...b),e.push(..._),f.push(...P)}const E=this.getOutputDataOutputMap(i);if(E){const{added:b,updated:A,removed:_,affected:P}=this.syncOutputDataOutputMapDataType(E,r);a.push(...A),c.push(...b),e.push(..._),f.push(...P)}return r==null||r.attemptAutoclose("sync-operation-instance-validate-data",this.id),{updated:C(a),added:C(c),removed:C(e),affected:C(f),self:i}}syncEntityToMatchInputMapDataType(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"sync-entity-to-match-input-map-data-type"))){var E,b,A,_,P,V,M,G,k,q,ne,J,se,te,le,ue,z,Q;const a=[],c=[],e=[],f=[];if(((E=i.declaration)==null?void 0:E.id)!==re.operation[xe.Validate].inputs.entityToMatch.id)return r==null||r.attemptAutoclose("sync-entity-to-match-input-map-data-type",this.id),{updated:[],added:[],removed:[],affected:[],self:null};const h=((b=this.project.requestActiveDynamicValue(i))==null?void 0:b.value)||null,m=h==null?void 0:h.valueAsTypeSingle;if(!i.dataType){const de={id:x.UUID.uuid(),version:x.UUID.uuid(),createdAt:(r==null?void 0:r.timestamp)||new Date().toISOString(),author:(r==null?void 0:r.author)||x.sessionAuthor,previousVersion:null,deleted:!1,deletable:!0,editable:!0,type:d.DataType,parentRelationType:null,options:((A=i.declaration.dataType)==null?void 0:A.options)||null,implementationChooseOne:((_=i.declaration.dataType)==null?void 0:_.implementationChooseOne)||!1,staticEntities:((P=i.declaration.dataType)==null?void 0:P.staticEntities)??null,interactiveEntities:((V=i.declaration.dataType)==null?void 0:V.interactiveEntities)??null,actionEntities:((M=i.declaration.dataType)==null?void 0:M.actionEntities)??null,index:((G=i.declaration.dataType)==null?void 0:G.index)??null,isList:((k=i.declaration.dataType)==null?void 0:k.isList)||!1,foreignKeyAllowed:((q=i.declaration.dataType)==null?void 0:q.foreignKeyAllowed)??null,andChildrenGroup:null,orChildrenGroup:null,foreignKeyRef:null,asType:!0,entity:(m==null?void 0:m.toJSON())||null,like:!0,inferred:!0,parent:i.toReference()},pe=Re(de,i.project);pe.hydrateAncestors(),pe.addSelfToProject(r),r==null||r.add(pe,W.Added),pe.setParent(i,r),pe.initChildren(r),pe.setEntity(m,r),a.push(pe),i.setDataType(pe,r),r||pe.captureVersion()}return(z=i.dataType)==null||z.metaSync({inferred:!0,like:!1,asType:!0,options:((ne=i.declaration.dataType)==null?void 0:ne.options)||null,implementationChooseOne:((J=i.declaration.dataType)==null?void 0:J.implementationChooseOne)||!1,staticEntities:((se=i.declaration.dataType)==null?void 0:se.staticEntities)??null,interactiveEntities:((te=i.declaration.dataType)==null?void 0:te.interactiveEntities)??null,actionEntities:((le=i.declaration.dataType)==null?void 0:le.actionEntities)??null,isList:((ue=i.declaration.dataType)==null?void 0:ue.isList)||!1},r),(Q=i.dataType)==null||Q.setEntity(m,r),i.dataType&&c.push(i.dataType),r==null||r.attemptAutoclose("sync-entity-to-match-input-map-data-type",this.id),{updated:C(c),added:C(a),removed:C(e),affected:C(f),self:i.dataType}}syncDataToValidateInputMapDataType(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"sync-data-to-validate-input-map-data-type"))){var b,A,_;const a=[],c=[],e=[],f=[];if(((b=i.declaration)==null?void 0:b.id)!==re.operation[xe.Validate].inputs.dataToValidate.id)return r==null||r.attemptAutoclose("sync-data-to-validate-input-map-data-type",this.id),{updated:[],added:[],removed:[],affected:[],self:null};const h=this.getEntityToMatchInputMap(i.parent);if(!h)return r==null||r.attemptAutoclose("sync-data-to-validate-input-map-data-type",this.id),{updated:[],added:[],removed:[],affected:[],self:null};if(!this.getEntityToMatch(h,r))return r==null||r.attemptAutoclose("sync-data-to-validate-input-map-data-type",this.id),{updated:[],added:[],removed:[],affected:[],self:null};if(!i.dataType){const P={id:x.UUID.uuid(),version:x.UUID.uuid(),createdAt:(r==null?void 0:r.timestamp)||new Date().toISOString(),author:(r==null?void 0:r.author)||x.sessionAuthor,previousVersion:null,deleted:!1,deletable:!0,editable:!0,type:d.DataType,index:null,parentRelationType:null,options:null,implementationChooseOne:!1,foreignKeyAllowed:null,isList:!1,foreignKeyRef:null,andChildrenGroup:null,orChildrenGroup:null,staticEntities:null,interactiveEntities:null,actionEntities:null,asType:!1,entity:null,like:!0,inferred:!0,parent:i.toReference()},V=Re(P,i.project);V.hydrateAncestors(),V.addSelfToProject(r),r==null||r.add(V,W.Added),V.setParent(i,r),V.initChildren(r),a.push(V),i.setDataType(V,r),r||V.captureVersion()}(A=i.dataType)==null||A.metaSync({inferred:!0,like:!0,asType:!1},r);const E=this.getEntityToMatch(h,r);return(_=i.dataType)==null||_.setEntity(E,r),i.dataType&&c.push(i.dataType),r==null||r.attemptAutoclose("sync-data-to-validate-input-map-data-type",this.id),{updated:C(c),added:C(a),removed:C(e),affected:C(f),self:i.dataType}}syncOutputDataOutputMapDataType(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"sync-output-data-output-map-data-type"))){var A,_,P,V;const a=[],c=[],e=[],f=[];if(((A=i.declaration)==null?void 0:A.id)!==re.operation[xe.Validate].dataType.entity.properties.outputEntity.id)return r==null||r.attemptAutoclose("sync-output-data-output-map-data-type",this.id),{updated:[],added:[],removed:[],affected:[],self:null};const h=this.getEntityToMatchInputMap(i.parent);if(!h)return r==null||r.attemptAutoclose("sync-output-data-output-map-data-type",this.id),{updated:[],added:[],removed:[],affected:[],self:null};if(!this.getEntityToMatch(h,r))return r==null||r.attemptAutoclose("sync-output-data-output-map-data-type",this.id),{updated:[],added:[],removed:[],affected:[],self:null};const E=((_=this.project.requestActiveDynamicValue(h))==null?void 0:_.value)||null,b=(E==null?void 0:E.valueAsTypeSingle)||null;if(!i.dataType){const M={id:x.UUID.uuid(),version:x.UUID.uuid(),createdAt:(r==null?void 0:r.timestamp)||new Date().toISOString(),author:(r==null?void 0:r.author)||x.sessionAuthor,previousVersion:null,deleted:!1,deletable:!0,editable:!0,type:d.DataType,parentRelationType:null,options:null,foreignKeyRef:null,implementationChooseOne:!1,foreignKeyAllowed:null,staticEntities:null,interactiveEntities:null,index:null,actionEntities:null,isList:!1,andChildrenGroup:null,orChildrenGroup:null,asType:!1,entity:(b==null?void 0:b.toJSON())||null,like:!0,inferred:!0,parent:i.toReference()},G=Re(M,i.project);G.hydrateAncestors(),G.addSelfToProject(r),r==null||r.add(G,W.Added),G.setParent(i,r),G.initChildren(r),G.setEntity(b,r),a.push(G),i.setDataType(G,r),r||G.captureVersion()}return(P=i.dataType)==null||P.metaSync({inferred:!0,like:!0,asType:!1},r),(V=i.dataType)==null||V.setEntity(b,r),i.dataType&&c.push(i.dataType),r==null||r.attemptAutoclose("sync-output-data-output-map-data-type",this.id),{updated:C(c),added:C(a),removed:C(e),affected:C(f),self:i.dataType}}inferInputMapDataType(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"infer-input-map-data-type-validate-data"))){var c,e,f;if(((c=i.declaration)==null?void 0:c.id)===re.operation[xe.Validate].inputs.entityToMatch.id){const{added:h,updated:m,removed:E,affected:b}=r?this.syncEntityToMatchInputMapDataType(i,r):{added:[],updated:[],removed:[],affected:[]};return r==null||r.attemptAutoclose("infer-input-map-data-type",this.id),{updated:C(m),added:C(h),removed:C(E),affected:C(b),self:i.dataType}}if(((e=i.declaration)==null?void 0:e.id)===re.operation[xe.Validate].inputs.dataToValidate.id){const{added:h,updated:m,removed:E,affected:b}=this.syncDataToValidateInputMapDataType(i,r);return r==null||r.attemptAutoclose("infer-input-map-data-type",this.id),{updated:C(m),added:C(h),removed:C(E),affected:C(b),self:i.dataType}}const a=(f=i.declaration)==null?void 0:f.getDataType(r);if(a&&a.isResolved)return r==null||r.attemptAutoclose("infer-input-map-data-type-validate-data",this.id),{updated:[],added:[],removed:[],affected:[],self:a};if(i.readsValue){const h=iu(i.readsValue,r);return r==null||r.attemptAutoclose("infer-input-map-data-type-validate-data",this.id),{updated:[],added:[],removed:[],affected:[],self:h}}return r==null||r.attemptAutoclose("infer-input-map-data-type-validate-data",this.id),{updated:[],added:[],removed:[],affected:[],self:null}}inferOutputMapDataType(i,r=this.project.addChangeSet(new S(this.project,x.sessionAuthor,B().toISOString(),this,!0,"infer-output-map-data-type-validate-data"))){var a;if(((a=i.declaration)==null?void 0:a.id)===re.operation[xe.Validate].dataType.entity.properties.outputEntity.id){const{added:c,updated:e,removed:f,affected:h}=this.syncOutputDataOutputMapDataType(i,r);return r==null||r.attemptAutoclose("infer-output-map-data-type-validate-data",this.id),{updated:C(e),added:C(c),removed:C(f),affected:C(h),self:i.dataType}}return{updated:[],added:[],removed:[],affected:[],self:null}}}class iPi extends er{constructor(p){super(bP,p)}}class rPi extends er{constructor(p){super(AP,p)}}class nPi extends er{constructor(p){super(gP,p)}}class aPi extends er{constructor(p){super(zI,p)}}class sPi extends er{constructor(p){super(yI,p)}}class lPi extends er{constructor(p){super(Rv,p)}}function lUe(s){const p=[new OVe(s),new ePi(s),new tPi(s),new aPi(s),new iPi(s),new nPi(s),new rPi(s),new sPi(s),new lPi(s)];return SN.forEach(i=>{p.some(r=>r.id===i.id)||p.push(new er(i,s))}),p.forEach(i=>{i.initChildren(null),s.subscribeBuiltInInstance(i)}),s.operationDeclarations=p,p}const oPi=[];function oUe(s){const p=[new AVe(s),new RVe(s),new wVe(s),new CVe(s)];return mx.forEach(i=>{!p.some(r=>r.id===i.id)&&!oPi.includes(i.id)&&p.push(new Td(i,s))}),p.forEach(i=>{s.subscribeBuiltInInstance(i)}),s.builtInBaseEntities=p,p}function dUe(s){const p=[];return NV.forEach(i=>{p.some(r=>r.id===i.id)||p.push(new Pf(i,s))}),p.forEach(i=>{s.subscribeBuiltInInstance(i)}),s.primitives=p,p}function uUe(s){const p=[new er(f1,s)];return p.forEach(i=>{i.initChildren(null),s.subscribeBuiltInInstance(i)}),s.globalEventActionDescriptors=p,p}function pUe(s){const p=[new er(bE,s),new er(ey,s),new er(vE,s),new er(Vm,s),new er(Pm,s),new er(HR,s)];p.forEach(r=>{r.initChildren(null),s.subscribeBuiltInInstance(r)}),s.loopDeclarations=p;const i=[new er(r1,s),new er(EE,s),new er(JR,s),new er(JN,s),new er(ex,s),new er(WR,s)];return i.forEach(r=>{r.initChildren(null),s.subscribeBuiltInInstance(r)}),s.loopDeclarationsBodies=i,p}function cUe(s){const p=[new Ed(Ix,s)];return p.forEach(i=>{i.initChildren(null),s.subscribeBuiltInInstance(i)}),s.valueDescriptors=p,p}function fUe(s){const p=[new er(vx,s),new er(Tx,s),new er(Ex,s),new er(bx,s)];return Ax.forEach(i=>{p.some(r=>r.id===i.id)||p.push(new er(i,s))}),p.forEach(i=>{i.initChildren(null),s.subscribeBuiltInInstance(i)}),s.conditionDeclarations=p,p}function UT(s){return s&&typeof s.then=="function"}function dPi(s,p){const i=new Fn(s[0],{allBuiltInEntityIds:p.allBuiltInEntityIds}),r=s.map(c=>c.id),a={};return s.forEach(c=>{a[c.id]=c}),i.order=r,i.flatRecord=a,i.orderEntities(),i.order.map(c=>i.flatRecord[c])}function uPi(s,p){const i=new Fn(Object.values(s)[0],{allBuiltInEntityIds:p.allBuiltInEntityIds}),r=Object.keys(s);return i.order=r,i.flatRecord=s,i.orderEntities(),i.order}async function pPi(s,p){const i=Y.YieldTracker.from(p),r=new Fn(s[0],{allBuiltInEntityIds:p.allBuiltInEntityIds}),a=s.map(e=>e.id),c={};for(const e of s)c[e.id]=e,await i.tick();return r.order=a,r.flatRecord=c,await r.orderEntitiesAsync({tracker:i}),r.order.map(e=>r.flatRecord[e])}async function cPi(s,p){const i=Y.YieldTracker.from(p),r=new Fn(Object.values(s)[0],{allBuiltInEntityIds:p.allBuiltInEntityIds}),a=Object.keys(s);return r.order=a,r.flatRecord=s,await r.orderEntitiesAsync({tracker:i}),r.order}class Fn{constructor(p,i={}){R(this,"order",[]);R(this,"flatRecord",{});R(this,"allBuiltInEntityIds");R(this,"onGoingVisits",{});R(this,"cachedReferences",{});if(i.allBuiltInEntityIds&&(this.allBuiltInEntityIds=i.allBuiltInEntityIds),!p)return;const r={asyncInitialOrder:!1,...i};r.asyncInitialOrder?this.flattenAsync(p).then(()=>{this.orderEntitiesAsync({...r}).then(()=>{var a;(a=r.onOrdered)==null||a.call(r)})}):(this.flatten(p),this.orderEntities())}flatten(p){this.allBuiltInEntityIds||(this.allBuiltInEntityIds=new Set(oD()));const i=C(Ue(p,new Set(this.allBuiltInEntityIds),{ignoreBuiltInBaseEntities:!0,diggestedBuiltInBaseEntitiesIds:this.allBuiltInEntityIds})),r=new Set;for(const a of i)this.flatRecord[a.id]=a,r.add(a.id);this.order=Array.from(r)}async flattenAsync(p,i={}){const r=Y.YieldTracker.from(i);this.allBuiltInEntityIds||(this.allBuiltInEntityIds=await dD({tracker:r}));const a=await Ip(await je(p,new Set(this.allBuiltInEntityIds),{ignoreBuiltInBaseEntities:!0,diggestedBuiltInBaseEntitiesIds:this.allBuiltInEntityIds,tracker:r}),{tracker:r}),c=new Set;for(const e of a)this.flatRecord[e.id]=e,c.add(e.id),await r.tick();this.order=Array.from(c)}moveEntityAfterDependencies(p){const i=this.cachedReferences[p.id]||oo(p,this.flatRecord,{ignoreBuiltInBaseEntities:!0,allBuiltInEntityIds:this.allBuiltInEntityIds});this.cachedReferences[p.id]=i;const{upstream:r}=i;for(const a of Object.keys(r)){const c=this.order.indexOf(a),e=this.order.indexOf(p.id);if(c>e)return this.order.splice(e,1),this.order.splice(c,0,p.id),!0}return!1}orderEntities(){let p=!1;for(let i=0;i<this.order.length;i++){const r=this.order[i],a=this.flatRecord[r];if(a||Y.Logger.warn(`Entity with id ${r} not found in flatRecord. Skipping...`),this.moveEntityAfterDependencies(a)){p=!0;break}}p&&this.orderEntities()}async orderEntitiesAsync(p={}){let i=!1;const r=Y.YieldTracker.from(p);for(let a=0;a<this.order.length;a++){const c=this.order[a],e=this.flatRecord[c];if(e||Y.Logger.warn(`Entity with id ${c} not found in flatRecord. Skipping...`),this.moveEntityAfterDependencies(e)){i=!0;break}await r.tick()}i&&await this.orderEntitiesAsync({tracker:r})}getUpstreamOngoingDependenciesVisits(p,i){const r=this.cachedReferences[p]||oo(this.flatRecord[p],this.flatRecord,{ignoreBuiltInBaseEntities:!0,allBuiltInEntityIds:this.allBuiltInEntityIds});this.cachedReferences[p]=r;const{upstream:a}=r,c={};return Object.entries(this.onGoingVisits[i]||{}).forEach(([e,f])=>{Object.keys(a).includes(e)&&(c[e]=f)}),c}getDownstreamOngoingDependenciesVisits(p,i){const r=Object.keys(this.onGoingVisits[i]||{}),a=new Set(r.flatMap(e=>{const f=this.cachedReferences[e]||oo(this.flatRecord[e],this.flatRecord,{ignoreBuiltInBaseEntities:!0,allBuiltInEntityIds:this.allBuiltInEntityIds});return this.cachedReferences[e]=f,Object.keys(f.downstream)})),c={};return Array.from(a).forEach(e=>{e===p&&(c[e]=this.onGoingVisits[i][e])}),c}async settlePromises(p,i){const r=Object.values(p);r.length&&await Promise.all(r),Object.keys(p).forEach(a=>{delete this.onGoingVisits[i][a]})}visit(p){const i=this.order;for(const r of i)p(this.flatRecord[r],this.flatRecord);return this}reverseVisit(p){const i=this.order.slice().reverse();for(const r of i)p(this.flatRecord[r],this.flatRecord);return this}async visitAsync(p,i={}){const{parallelise:r}={parallelise:!0,...i},a=Y.YieldTracker.from(i),c=this.order;if(!r){for(const f of c){const h=p(this.flatRecord[f],this.flatRecord);UT(h)&&await h,await a.tick()}return this}const e=Math.random().toString(36).substring(7);this.onGoingVisits[e]={};for(const f of c){const h=this.getUpstreamOngoingDependenciesVisits(f,e);Object.keys(h).length&&await this.settlePromises(h,e);const m=p(this.flatRecord[f],this.flatRecord);UT(m)&&(this.onGoingVisits[e][f]=m),await a.tick()}return await this.settlePromises(this.onGoingVisits[e],e),this.onGoingVisits[e]={},this}async reverseVisitAsync(p,i={}){const{parallelise:r}={parallelise:!0,...i},a=Y.YieldTracker.from(i),c=this.order.slice().reverse();if(!r){for(const f of c){const h=p(this.flatRecord[f],this.flatRecord);UT(h)&&await h,await a.tick()}return this}const e=Math.random().toString(36).substring(7);this.onGoingVisits[e]={};for(const f of c){const h=this.getDownstreamOngoingDependenciesVisits(f,e);Object.keys(h).length&&await this.settlePromises(h,e);const m=p(this.flatRecord[f],this.flatRecord);UT(m)&&(this.onGoingVisits[e][f]=m),await a.tick()}return await this.settlePromises(this.onGoingVisits[e],e),this.onGoingVisits[e]={},this}}const gf={},sg={},yv={empty:!1,enrich:!0,mock:!1,ignoreCache:!1,onFetch:async()=>null,manuallyInit:!1};function yUe(s,p={enrich:!0,shallowErrors:!1},i){const r={enrich:!0,shallowErrors:!1,...p},{enrich:a,shallowErrors:c}=r,e=s.project,f=s.record,h=iD(s.project,{shallowErrors:c},i);h.instances[e.id]=h;const m=new Fn(e,{allBuiltInEntityIds:h.diggestedBuiltInBaseEntitiesIds}),E=new Set;f[e.id]=e,E.add(e.id);const b=B().toISOString();Object.values(f).forEach(_=>{!_||m.allBuiltInEntityIds.has(_.id)||E.add(_.id)}),m.order=Array.from(E),m.flatRecord=f,m.orderEntities();const A=a?h.addChangeSet(new S(h,x.sessionAuthor,b,h,!0,"project-init-from-fetch-result")):null;return m.visit(_=>{if(_.id===h.id)return;const P=Re(_,h);try{P.hydrateAncestors(),P.addSelfToProject(null);const V=oo(_);Object.keys(V.downstream).forEach(M=>{const G=h.get(M);G&&G.hydrateAncestors()})}catch(V){if(c)Y.Logger.error("Error hydrating ancestors: ",V);else throw V}}),a?(m.visit(_=>{if(_.id===h.id)return;const P=h.get(_.id);if(P)try{P.afterAllChildrenInitialized(A),P.captureVersion()}catch(V){if(c)Y.Logger.error("Error in afterAllChildrenInitialized: ",V);else throw V}}),h.afterAllChildrenInitialized(A),h.subscribe(),h.captureVersion()):(Uu(h,b).forEach(P=>{P.remove({ignoreUpstream:!0},null)}),m.visit(P=>{if(P.id===h.id)return;const V=h.get(P.id);V&&(V.initialized=!0,V.captureVersion())}),h.initialized=!0,h.subscribe(),h.captureVersion()),h.initialized=!0,h.emit(pi.PROJECT_INITIALIZED,h,A),A==null||A.attemptAutoclose("project-init-from-fetch-result",h.id),h}async function fPi(s,p={enrich:!0,shallowErrors:!1,yieldEvery:100},i){const r={enrich:!0,shallowErrors:!1,yieldEvery:100,...p},{enrich:a,shallowErrors:c,yieldEvery:e}=r,f=Y.YieldTracker.from({yieldEvery:e}),h=s.project,m=s.record,E=await rD(s.project,{shallowErrors:c,tracker:f},i);E.instances[h.id]=E;const b=new Fn(void 0,{allBuiltInEntityIds:E.diggestedBuiltInBaseEntitiesIds});await b.flattenAsync(h,{tracker:f}),await b.orderEntitiesAsync({tracker:f});const A=new Set;m[h.id]=h,A.add(h.id);const _=B().toISOString();for(const[V,M]of Object.entries(m))!M||b.allBuiltInEntityIds.has(M.id)||(A.add(M.id),await f.tick());b.order=Array.from(A),b.flatRecord=m,await b.orderEntitiesAsync({tracker:f});const P=a?E.addChangeSet(new S(E,x.sessionAuthor,_,E,!0,"project-init-from-fetch-result")):null;if(await b.visitAsync(V=>{if(V.id===E.id)return;const M=Re(V,E);try{M.hydrateAncestors(),M.addSelfToProject(null);const G=oo(V);Object.keys(G.downstream).forEach(k=>{const q=E.get(k);q&&q.hydrateAncestors()})}catch(G){if(c)Y.Logger.error("Error hydrating ancestors: ",G);else throw Y.Logger.log("Error hydrating ancestors: ",G),G}},{tracker:f}),a){try{await b.visitAsync(V=>{if(V.id===E.id)return;const M=E.get(V.id);M&&(M.afterAllChildrenInitialized(P),M.captureVersion())},{tracker:f})}catch(V){if(c)Y.Logger.error("Error in afterAllChildrenInitialized: ",V);else throw Y.Logger.log("Error in afterAllChildrenInitialized: ",V),V}E.afterAllChildrenInitialized(P),E.subscribe(),E.captureVersion()}else Uu(E,_).forEach(M=>{M.remove({ignoreUpstream:!0},null)}),await b.visitAsync(M=>{if(M.id===E.id)return;const G=E.get(M.id);G&&(G.initialized=!0,G.captureVersion())},{tracker:f}),E.initialized=!0,E.subscribe(),E.captureVersion();return E.initialized=!0,E.emit(pi.PROJECT_INITIALIZED,E,P),P==null||P.attemptAutoclose("project-init-from-fetch-result",E.id),E}async function yPi(s,p=yv){const i={...yv,...p};if(i.empty)return{data:{project:{id:s.id,workspaceId:"",deletable:!0,editable:!0,type:d.Project,version:x.UUID.uuid(),createdAt:B().toISOString(),author:x.sessionAuthor,previousVersion:null,deleted:!1,name:null,description:null,projects:[],entities:[],operations:[],functions:[],variableDeclarations:[],variableInstances:[],functionCalls:[],conditions:[],loops:[],searches:[],events:[]},record:{}}};if(i.mock){const a={...gB};return a.id=s.id,{data:{project:a,record:{}}}}return Y.Logger.log("Fetching project from external API"),new Promise(async a=>{try{if(i.onFetch){const c=await i.onFetch(s.id);if(c){a({data:c});return}}else a({data:null})}catch(c){Y.Logger.error("Error fetching project: ",c),a({data:null})}})}function iD(s,p={shallowErrors:!1},i){const r=new x(s,i);dUe(r),oUe(r),lUe(r),uUe(r),pUe(r),cUe(r),fUe(r);const a=p.allBuiltInIds??new Set([...r.getAllBuiltInIds(),...oD()]);return r.diggestedBuiltInBaseEntitiesIds=a,a.forEach(c=>{if(!r.builtInInstances[c]&&r.instances[c])r.builtInInstances[c]=r.instances[c],delete r.instances[c];else if(!r.builtInInstances[c]&&!p.shallowErrors)throw new Error(`Built in entity was not properly initialized: ${c}`)}),r.instances[r.id]=r,r.activeVersion=!0,r}async function rD(s,p={shallowErrors:!1},i){const r=Y.YieldTracker.from(p),a=new x(s,i);dUe(a),oUe(a),await Y.yieldToEventLoop(),lUe(a),await Y.yieldToEventLoop(),uUe(a),pUe(a),cUe(a),fUe(a),await Y.yieldToEventLoop();const c=p.allBuiltInIds??new Set([...a.getAllBuiltInIds(),...await dD()]);a.diggestedBuiltInBaseEntitiesIds=c;for(const e of c){if(!a.builtInInstances[e]&&a.instances[e])a.builtInInstances[e]=a.instances[e],delete a.instances[e];else if(!a.builtInInstances[e]&&!p.shallowErrors)throw new Error(`Built in entity was not properly initialized: ${e}`);a.instances[e]&&delete a.instances[e],await r.tick()}return a.instances[a.id]=a,a.activeVersion=!0,a}function Uu(s,p){return s.instancesList.filter(r=>B(r.createdAt).isAfter(B(p)||!!r.previousVersion))}function hPi(s,{enrich:p,shallowErrors:i,...r}={enrich:!0,shallowErrors:!1},a){var _,P;const c=new Map,e=new Map;Object.keys(s.instances).forEach(V=>{if(s.diggestedBuiltInBaseEntitiesIds.has(V)){c.set(V,V),e.set(V,V);return}const M=s.get(V);if(!mD(M,{...s.instances,...s.builtInInstances}).every(ne=>!s.diggestedBuiltInBaseEntitiesIds.has(ne))){c.set(V,V),e.set(V,V);return}const q=x.UUID.uuid();c.set(V,q),e.set(q,V)});const f=((_=r.resetVersionOptions)==null?void 0:_.commonTimestamp)??B().toISOString(),h=s.toShallowJSON({seenEntityMaps:c});h.previousVersion=null,h.createdAt=f,h.version=x.UUID.uuid(),h.author=((P=r.resetVersionOptions)==null?void 0:P.author)??(x.sessionAuthor||"1");const m=iD(h,{shallowErrors:i,allBuiltInIds:s.diggestedBuiltInBaseEntitiesIds},a);m.instances[m.id]=m;const E=p?m.addChangeSet(new S(m,x.sessionAuthor,f,m,!0,"project-clone")):null,b=new Fn(s,{allBuiltInEntityIds:s.diggestedBuiltInBaseEntitiesIds}),A=_L(b.flatRecord,c);return b.visit(V=>{var q;const M=V.toShallowJSON({seenEntityMaps:c});M.previousVersion=null,M.createdAt=f,M.version=x.UUID.uuid(),M.author=((q=r.resetVersionOptions)==null?void 0:q.author)??(x.sessionAuthor||"1");const G=oo(M,A);if(Object.keys(G.upstream).length){let ne=!1;if(Object.keys(G.upstream).forEach(J=>{if(!ne&&(!m.get(J)||m.getDeleted(J))){ne=!0;return}}),ne)return}const k=Re(M,m);k.hydrateAncestors(),k.addSelfToProject(E),E==null||E.add(k,W.Added),r.onVisit&&r.onVisit(M)}),p?(b.visit(V=>{if(V.id===m.id)return;const M=m.get(c.get(V.id));M&&(M.afterAllChildrenInitialized(E),M.captureVersion())}),m.afterAllChildrenInitialized(E),m.subscribe(),m.captureVersion()):(Uu(m,f).forEach(M=>{M.remove({ignoreUpstream:!0},null)}),b.visit(M=>{if(M.id===m.id)return;const G=m.get(M.id);G&&(G.initialized=!0,G.captureVersion())}),m.initialized=!0,m.subscribe(),m.captureVersion()),m.instancesList.forEach(V=>{V.previousVersion=null}),E==null||E.attemptAutoclose("project-clone",m.id),{project:m,maps:c}}async function mPi(s,{shallowErrors:p,...i}={shallowErrors:!1,yieldEvery:100}){var m,E;const r=Y.YieldTracker.from(i),a=new Map,c=new Map;Object.keys(s.instances).forEach(b=>{if(s.diggestedBuiltInBaseEntitiesIds.has(b)){a.set(b,b),c.set(b,b);return}const A=x.UUID.uuid();a.set(b,A),c.set(A,b)});const e=((m=i.resetVersionOptions)==null?void 0:m.commonTimestamp)??B().toISOString(),f=s.toShallowJSON({seenEntityMaps:a});f.previousVersion=null,f.createdAt=e,f.version=x.UUID.uuid(),f.author=((E=i.resetVersionOptions)==null?void 0:E.author)??(x.sessionAuthor||"1");const h=await s.toFullProjectTransferAsync({tracker:r,seenEntityMaps:a,resetVersionOptions:i.resetVersionOptions,onVisit:i.onVisit});return{project:f,record:h.record,order:h.order,maps:a}}async function TPi(s,{enrich:p,shallowErrors:i,...r}={enrich:!0,shallowErrors:!1,yieldEvery:100},a){var P,V;const c=Y.YieldTracker.from(r),e=new Map,f=new Map;for(const M of Object.keys(s.instances)){if(s.diggestedBuiltInBaseEntitiesIds.has(M)){e.set(M,M),f.set(M,M),await c.tick();continue}const G=x.UUID.uuid();e.set(M,G),f.set(G,M),await c.tick()}const h=((P=r.resetVersionOptions)==null?void 0:P.commonTimestamp)??B().toISOString(),m=s.toShallowJSON({seenEntityMaps:e});m.previousVersion=null,m.createdAt=h,m.version=x.UUID.uuid(),m.author=((V=r.resetVersionOptions)==null?void 0:V.author)??(x.sessionAuthor||"1");const E=await rD(m,{shallowErrors:i,tracker:c},a);E.diggestedBuiltInBaseEntitiesIds=s.diggestedBuiltInBaseEntitiesIds,E.instances[E.id]=E;const b=p?E.addChangeSet(new S(E,x.sessionAuthor,h,E,!0,"project-clone")):null,A=new Fn(void 0,{allBuiltInEntityIds:s.diggestedBuiltInBaseEntitiesIds}),_=await s.toFullProjectTransferAsync({tracker:c,seenEntityMaps:e,resetVersionOptions:r.resetVersionOptions,onVisit:r.onVisit,shallowErrors:i});A.flatRecord=_.record,A.order=_.order,await A.visitAsync(M=>{var ne;if(s.diggestedBuiltInBaseEntitiesIds.has(M.id))return;const G=M;G.previousVersion=null,G.createdAt=h,G.version=x.UUID.uuid(),G.author=((ne=r.resetVersionOptions)==null?void 0:ne.author)??(x.sessionAuthor||"1");const k=oo(G,A.flatRecord);if(Object.keys(k.upstream).length){let J=!1;if(Object.keys(k.upstream).forEach(se=>{if(!J&&(!E.get(se)||E.getDeleted(se))){J=!0;return}}),J)return}const q=Re(G,E);q.hydrateAncestors(),q.addSelfToProject(b),b==null||b.add(q,W.Added)},{tracker:c}),p?(await A.visitAsync(M=>{if(M.id===E.id||s.diggestedBuiltInBaseEntitiesIds.has(M.id))return;const G=E.get(e.get(M.id));G&&(G.afterAllChildrenInitialized(b),G.captureVersion())},{tracker:c}),E.afterAllChildrenInitialized(b),E.subscribe(),E.captureVersion()):(Uu(E,h).forEach(G=>{G.remove({ignoreUpstream:!0},null)}),await A.visitAsync(G=>{if(G.id===E.id)return;const k=E.get(G.id);k&&(k.initialized=!0,k.captureVersion())},{tracker:c}),E.initialized=!0,E.subscribe(),E.captureVersion());for(const M of E.instancesList)M.previousVersion=null,await c.tick();return b==null||b.attemptAutoclose("project-clone",E.id),{project:E,maps:e}}function vPi(s,p,i=p.addChangeSet(new S(p,x.sessionAuthor,B().toISOString(),p,!0,w.AfterAllChildrenInitialized)),{enrich:r,shallowErrors:a,...c}={shallowErrors:!1,enrich:!0}){var A,_;const e=new Map,f=new Map;Object.keys(s.instances).forEach(P=>{if(s.diggestedBuiltInBaseEntitiesIds.has(P)){e.set(P,P),f.set(P,P);return}if(P===s.id){e.set(P,p.id),f.set(p.id,P);return}const V=s.get(P);if(!mD(V,{...s.instances,...s.builtInInstances}).every(q=>!s.diggestedBuiltInBaseEntitiesIds.has(q))){e.set(P,P),f.set(P,P);return}const k=x.UUID.uuid();e.set(P,k),f.set(k,P)});const h=((A=c.resetVersionOptions)==null?void 0:A.commonTimestamp)??B().toISOString(),m=s.toShallowJSON({seenEntityMaps:e});m.previousVersion=null,m.createdAt=h,m.version=x.UUID.uuid(),m.author=((_=c.resetVersionOptions)==null?void 0:_.author)??(x.sessionAuthor||"1");const E=new Fn(s,{allBuiltInEntityIds:s.diggestedBuiltInBaseEntitiesIds}),b=_L(E.flatRecord,e);return E.visit(P=>{var G;if(P.id===p.id)return;const V=P.toShallowJSON({seenEntityMaps:e});V.previousVersion=null,V.createdAt=h,V.version=x.UUID.uuid(),V.author=((G=c.resetVersionOptions)==null?void 0:G.author)??(x.sessionAuthor||"1");const M=oo(V,b);if(Object.keys(M.upstream).length){let k=!1;if(Object.keys(M.upstream).forEach(q=>{if(!k&&(!p.get(q)||p.getDeleted(q))){k=!0;return}}),k)return}try{const k=Re(V,p);k.hydrateAncestors(),k.addSelfToProject(i),i==null||i.add(k,W.Added),c.onVisit&&c.onVisit(V)}catch(k){if(a)Y.Logger.error("Error cloning entity onto existing project: ",k);else throw Y.Logger.log("Error cloning entity onto existing project: ",k),k}}),r?(E.visit(P=>{if(P.id===p.id)return;const V=p.get(e.get(P.id));V&&(V.afterAllChildrenInitialized(i),V.previousVersion=null,V.captureVersion())}),p.afterAllChildrenInitialized(i),p.subscribe(),p.captureVersion()):(Uu(p,h).forEach(V=>{V.remove({ignoreUpstream:!0},null)}),E.visit(V=>{if(V.id===p.id)return;const M=p.get(V.id);M&&(M.initialized=!0,M.previousVersion=null,M.captureVersion())}),p.initialized=!0,p.subscribe(),p.captureVersion()),p.afterAllChildrenInitialized(i),p.captureVersion(),{project:p,maps:e,changeSet:i}}async function EPi(s,p,i=p.addChangeSet(new S(p,x.sessionAuthor,B().toISOString(),p,!0,w.AfterAllChildrenInitialized)),{enrich:r,shallowErrors:a,...c}={enrich:!0,shallowErrors:!1,yieldEvery:100}){var _,P;const e=Y.YieldTracker.from(c),f=new Map,h=new Map;for(const V of Object.keys(s.instances)){if(s.diggestedBuiltInBaseEntitiesIds.has(V)){f.set(V,V),h.set(V,V),await e.tick();continue}if(V===s.id){f.set(V,p.id),h.set(p.id,V),await e.tick();continue}const M=x.UUID.uuid();f.set(V,M),h.set(M,V),await e.tick()}const m=((_=c.resetVersionOptions)==null?void 0:_.commonTimestamp)??B().toISOString(),E=s.toShallowJSON({seenEntityMaps:f});E.previousVersion=null,E.createdAt=m,E.version=x.UUID.uuid(),E.author=((P=c.resetVersionOptions)==null?void 0:P.author)??(x.sessionAuthor||"1"),p.diggestedBuiltInBaseEntitiesIds=s.diggestedBuiltInBaseEntitiesIds;const b=new Fn(void 0,{allBuiltInEntityIds:s.diggestedBuiltInBaseEntitiesIds}),A=await s.toFullProjectTransferAsync({tracker:e,seenEntityMaps:f,resetVersionOptions:c.resetVersionOptions,onVisit:c.onVisit,shallowErrors:a});return b.flatRecord=A.record,b.order=A.order,await b.visitAsync(V=>{var k;if(s.diggestedBuiltInBaseEntitiesIds.has(V.id)||V.id===p.id)return;const M=V;M.previousVersion=null,M.createdAt=m,M.version=x.UUID.uuid(),M.author=((k=c.resetVersionOptions)==null?void 0:k.author)??(x.sessionAuthor||"1");const G=oo(M,b.flatRecord);if(Object.keys(G.upstream).length){let q=!1;if(Object.keys(G.upstream).forEach(ne=>{if(!q&&(!p.get(ne)||p.getDeleted(ne))){q=!0;return}}),q)return}try{const q=Re(M,p);q.hydrateAncestors(),q.addSelfToProject(i),i==null||i.add(q,W.Added)}catch(q){if(a)Y.Logger.error("Error cloning entity onto existing project: ",q);else throw Y.Logger.log("Error cloning entity onto existing project: ",q),q}},{tracker:e}),r?(await b.visitAsync(V=>{if(V.id===p.id||s.diggestedBuiltInBaseEntitiesIds.has(V.id))return;const M=p.get(f.get(V.id));M&&(M.afterAllChildrenInitialized(i),M.previousVersion=null,M.captureVersion())},{tracker:e}),p.afterAllChildrenInitialized(i),p.subscribe(),p.captureVersion()):(Uu(p,m).forEach(M=>{M.remove({ignoreUpstream:!0},null)}),await b.visitAsync(M=>{if(M.id===p.id)return;const G=p.get(M.id);G&&(G.initialized=!0,G.previousVersion=null,G.captureVersion())},{tracker:e}),p.initialized=!0,p.subscribe(),p.captureVersion()),p.afterAllChildrenInitialized(i),p.captureVersion(),{project:p,maps:f,changeSet:i}}function hUe(s,{enrich:p,shallowErrors:i}={enrich:!0,shallowErrors:!1},r){const a=iD(s,{shallowErrors:i},r);a.activeVersion=!0;const c=B().toISOString(),e=p?a.addChangeSet(new S(a,x.sessionAuthor,c,a,!0,"project-init")):null;e&&(e.type=y1.Automatic);const f=new Fn(s,{allBuiltInEntityIds:a.diggestedBuiltInBaseEntitiesIds});return f.visit(h=>{const m=Re(h,a);m.hydrateAncestors(),m.addSelfToProject(e)}),p?(f.visit(h=>{if(h.id===a.id)return;const m=a.get(h.id);m&&(m.afterAllChildrenInitialized(e),m.captureVersion())}),a.afterAllChildrenInitialized(e),a.subscribe(),a.captureVersion()):(Uu(a,c).forEach(m=>{m.remove({ignoreUpstream:!0},null)}),f.visit(m=>{if(m.id===a.id)return;const E=a.get(m.id);E&&(E.initialized=!0,E.captureVersion())}),a.initialized=!0,a.subscribe(),a.captureVersion()),a.initialized=!0,a.emit(pi.PROJECT_INITIALIZED,a,e),e==null||e.attemptAutoclose("project-init",a.id),a}async function bPi(s,{enrich:p,shallowErrors:i,yieldEvery:r}={enrich:!0,shallowErrors:!1,yieldEvery:100},a){const c=Y.YieldTracker.from({yieldEvery:r}),e=await rD(s,{shallowErrors:i,tracker:c},a),f=B().toISOString(),h=p?e.addChangeSet(new S(e,x.sessionAuthor,f,e,!0,"project-init")):null;h&&(h.type=y1.Automatic);const m=new Fn(void 0,{allBuiltInEntityIds:e.diggestedBuiltInBaseEntitiesIds});return await m.flattenAsync(s,{tracker:c}),await m.orderEntitiesAsync({tracker:c}),await m.visitAsync(E=>{const b=Re(E,e);b.hydrateAncestors(),b.addSelfToProject(h)},{tracker:c}),p?(await m.visitAsync(E=>{if(E.id===e.id)return;const b=e.get(E.id);b&&(b.afterAllChildrenInitialized(h),b.captureVersion())},{tracker:c}),e.afterAllChildrenInitialized(h),e.subscribe(),e.captureVersion()):(Uu(e,f).forEach(b=>{b.remove({ignoreUpstream:!0},null)}),await m.visitAsync(b=>{if(b.id===e.id)return;const A=e.get(b.id);A&&(A.initialized=!0,A.captureVersion())},{tracker:c}),e.initialized=!0,e.subscribe(),e.captureVersion()),e.initialized=!0,e.emit(pi.PROJECT_INITIALIZED,e,h),h==null||h.attemptAutoclose("project-init",e.id),e}async function APi(s,p=yv,i){const r={...yv,...p};if(s.id&&gf[s.id]&&!r.ignoreCache)return gf[s.id];if(s.id&&sg[s.id]&&!r.ignoreCache)return await sg[s.id],gf[s.id];const a=yPi(s,r);s.id&&(sg[s.id]=a);const c=await a;if(c.data){let e;return r.mock?e=hUe(gB,{enrich:!!r.enrich},i):c.data instanceof x?e=c.data:e=yUe(c.data,{enrich:!!r.enrich},i),gf[s.id]=e,s.id&&delete sg[s.id],e}return null}function gPi(s){return gf[s.id]&&delete gf[s.id],null}const hv=vt([He(),Va(),Tr(),au()]),mUe=Mm([ln.CurrentDateAndTime,ln.Random,ln.Unique]),nD=st({type:mUe,rangeStart:hv.nullable(),rangeEnd:hv.nullable()}),XE=nD.extend({type:nt(ln.Random),rangeStart:hv,rangeEnd:hv}),TUe=nD.extend({type:nt(ln.Unique),rangeStart:ms(),rangeEnd:ms()}),vUe=nD.extend({type:nt(ln.CurrentDateAndTime),rangeStart:ms(),rangeEnd:ms()}),aD=XE.extend({rangeStart:Va().nullable(),rangeEnd:Va().nullable()}),EUe=aD.extend({rangeStart:Va(),rangeEnd:ms()}),bUe=aD.extend({rangeStart:ms(),rangeEnd:Va()}),AUe=aD.extend({rangeStart:Va(),rangeEnd:Va()}),sD=XE.extend({rangeStart:Va().nullable(),rangeEnd:Va().nullable()}),gUe=sD.extend({rangeStart:Va(),rangeEnd:ms()}),IUe=sD.extend({rangeStart:ms(),rangeEnd:Va()}),RUe=sD.extend({rangeStart:Va(),rangeEnd:Va()}),lD=XE.extend({rangeStart:au().nullable(),rangeEnd:au().nullable()}),DUe=lD.extend({rangeStart:au(),rangeEnd:ms()}),wUe=lD.extend({rangeStart:ms(),rangeEnd:au()}),CUe=lD.extend({rangeStart:au(),rangeEnd:au()}),OUe=XE.extend({rangeStart:ms(),rangeEnd:ms()}),_Ue=vt([gUe,IUe,RUe]),VUe=vt([EUe,bUe,AUe]),PUe=vt([DUe,wUe,CUe,vUe]),IPi=vt([_Ue,VUe,PUe,TUe,OUe]);function oD(){const s=new Set;return new Set(Rx.flatMap(i=>Ue(i,s)).map(i=>i.id))}function Fo(s){return[...s.calledByEntry||[],...s.calledByError||[],...s.calledBySuccess||[]].filter(p=>p.type!==d.GenericReference)}function NUe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.ActionDescriptor)throw new Error("Entity must be an action descriptor to be flattened");return[s,...s.inputs.flatMap(r=>Ue(r,p,i)),...s.dataType?Ue(s.dataType,p,i):[],...s.error?Ue(s.error,p,i):[],...s.parent?Ue(s.parent,p,i):[]]}function xUe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.ArgumentDeclaration)throw new Error("Entity must be an argument declaration to be flattened");return[s,...s.defaultValue?Ue(s.defaultValue,p):[],...s.writesValues.flatMap(r=>Ue(r,p,i)),...s.implements.flatMap(r=>Ue(r,p,i)),...s.dataType?Ue(s.dataType,p,i):[],...s.parent?Ue(s.parent,p,i):[]]}function $Ue(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.BreakStatement)throw new Error("Entity must be a break statement to be flattened");return[s,...s.outputs.flatMap(r=>Ue(r,p,i)),...s.throws?Ue(s.throws,p,i):[],...s.dataType?Ue(s.dataType,p,i):[],...s.readsValue?Ue(s.readsValue,p,i):[],...(Fo(s)||[]).flatMap(r=>Ue(r,p,i)),...s.parent?Ue(s.parent,p,i):[]]}function LUe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.BuiltInBaseEntity)throw new Error("Entity must be a built-in base entity to be flattened");return[s,...(s.properties||[]).flatMap(r=>Ue(r,p,i)),...(s.methods||[]).flatMap(r=>Ue(r,p,i)),...(s.abstractMethods||[]).flatMap(r=>Ue(r,p,i)),...s.allPropertiesImplement?Ue(s.allPropertiesImplement,p,i):[],...s.additionalPropertiesDataType?Ue(s.additionalPropertiesDataType,p,i):[],...s.extends?Ue(s.extends,p,i):[]]}function BUe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.Condition)throw new Error("Entity must be a condition to be flattened");return[s,...(s.andChildrenGroup||[]).flatMap(r=>Ue(r,p,i)),...(s.orChildrenGroup||[]).flatMap(r=>Ue(r,p,i)),...(s.inputs||[]).flatMap(r=>Ue(r,p,i)),...(s.successCalls||[]).flatMap(r=>Ue(r,p,i)),...(s.errorCalls||[]).flatMap(r=>Ue(r,p,i)),...(Fo(s)||[]).flatMap(r=>Ue(r,p,i)),...s.parent?Ue(s.parent,p,i):[]]}function MUe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.ContinueStatement)throw new Error("Entity must be a continue statement to be flattened");return[s,...s.outputs.flatMap(r=>Ue(r,p,i)),...s.readsValue?Ue(s.readsValue,p,i):[],...s.throws?Ue(s.throws,p,i):[],...s.dataType?Ue(s.dataType,p,i):[],...(Fo(s)||[]).flatMap(r=>Ue(r,p,i)),...s.parent?Ue(s.parent,p,i):[]]}function GUe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.DefinitionEntity)throw new Error("Entity must be a definition entity to be flattened");return[s,...s.extends?Ue(s.extends,p,i):[],...(s.implements||[]).flatMap(r=>Ue(r,p,i)),...(s.properties||[]).flatMap(r=>Ue(r,p,i)),...(s.methods||[]).flatMap(r=>Ue(r,p,i)),...(s.abstractMethods||[]).flatMap(r=>Ue(r,p,i)),...s.allPropertiesImplement?Ue(s.allPropertiesImplement,p,i):[],...s.additionalPropertiesDataType?Ue(s.additionalPropertiesDataType,p,i):[],...s.parent?Ue(s.parent,p,i):[]]}function kUe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.DataType)throw new Error("Entity must be a data type to be flattened");return[s,...(s.andChildrenGroup||[]).flatMap(r=>Ue(r,p,i)),...(s.orChildrenGroup||[]).flatMap(r=>Ue(r,p,i)),...s.entity?Ue(s.entity,p,i):[],...s.foreignKeyRef?Ue(s.foreignKeyRef,p,i):[],...s.parent?Ue(s.parent,p,i):[]]}function jUe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.FunctionCall)throw new Error("Entity must be a function call to be flattened");return[s,...(s.inputs||[]).flatMap(r=>Ue(r,p,i)),...(s.outputs||[]).flatMap(r=>Ue(r,p,i)),...s.error?Ue(s.error,p,i):[],...(Fo(s)||[]).flatMap(r=>Ue(r,p,i)),...(s.successCalls||[]).flatMap(r=>Ue(r,p,i)),...(s.errorCalls||[]).flatMap(r=>Ue(r,p,i)),...(s.writesValues||[]).flatMap(r=>Ue(r,p,i)),...s.parent?Ue(s.parent,p,i):[]]}function UUe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.FunctionDeclaration)throw new Error("Entity must be a function declaration to be flattened");return[s,...(s.inputs||[]).flatMap(r=>Ue(r,p,i)),...(s.calls||[]).flatMap(r=>Ue(r,p,i)),...s.dataType?Ue(s.dataType,p,i):[],...s.implements?Ue(s.implements,p,i):[],...s.parent?Ue(s.parent,p,i):[]]}function FUe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.GlobalEvent)throw new Error("Entity must be a global event to be flattened");return[s,...(s.inputs||[]).flatMap(r=>Ue(r,p,i)),...(s.calls||[]).flatMap(r=>Ue(r,p,i)),...s.implements?Ue(s.implements,p,i):[],...s.parent?Ue(s.parent,p,i):[]]}function KUe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.InputMap)throw new Error("Entity must be an input map to be flattened");return[s,...s.readsValue?Ue(s.readsValue,p,i):[],...s.declaration?Ue(s.declaration,p,i):[],...s.defaultValue?Ue(s.defaultValue,p,i):[],...s.parent?Ue(s.parent,p,i):[]]}function qUe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.InstalledProject)throw new Error("Entity must be an installed project to be flattened");return[s,...(s.functions||[]).flatMap(r=>Ue(r,p,i)),...(s.events||[]).flatMap(r=>Ue(r,p,i)),...s.parent?Ue(s.parent,p,i):[]]}function SUe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.InternalCall)throw new Error("Entity must be an internal call to be flattened");return[s,...(s.successCalls||[]).flatMap(r=>Ue(r,p,i)),...(s.errorCalls||[]).flatMap(r=>Ue(r,p,i)),...(s.inputs||[]).flatMap(r=>Ue(r,p,i)),...(s.outputs||[]).flatMap(r=>Ue(r,p,i)),...(Fo(s)||[]).flatMap(r=>Ue(r,p,i)),...s.error?Ue(s.error,p,i):[],...(s.writesValues||[]).flatMap(r=>Ue(r,p,i)),...s.parent?Ue(s.parent,p,i):[]]}function ZUe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.LiteralValue)throw new Error("Entity must be a literal value to be flattened");return[s,...s.valueAsTypeSingle?Ue(s.valueAsTypeSingle,p,i):[],...s.valueAsTypeList&&Array.isArray(s.valueAsTypeList)?s.valueAsTypeList.flatMap(r=>Ue(r,p,i)):[],...s.parent?Ue(s.parent,p,i):[]]}function HUe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.Loop)throw new Error("Entity must be a loop to be flattened");return[s,...(s.inputs||[]).flatMap(r=>Ue(r,p,i)),...(s.outputs||[]).flatMap(r=>Ue(r,p,i)),...(s.successCalls||[]).flatMap(r=>Ue(r,p,i)),...(s.errorCalls||[]).flatMap(r=>Ue(r,p,i)),...s.error?Ue(s.error,p,i):[],...s.dataType?Ue(s.dataType,p,i):[],...s.body?Ue(s.body,p,i):[],...(Fo(s)||[]).flatMap(r=>Ue(r,p,i)),...(s.writesValues||[]).flatMap(r=>Ue(r,p,i)),...s.parent?Ue(s.parent,p,i):[]]}function WUe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.Operation)throw new Error("Entity must be an operation to be flattened");return[s,...(s.successCalls||[]).flatMap(r=>Ue(r,p,i)),...(s.errorCalls||[]).flatMap(r=>Ue(r,p,i)),...(s.inputs||[]).flatMap(r=>Ue(r,p,i)),...(s.outputs||[]).flatMap(r=>Ue(r,p,i)),...(s.writesValues||[]).flatMap(r=>Ue(r,p,i)),...s.error?Ue(s.error,p,i):[],...(Fo(s)||[]).flatMap(r=>Ue(r,p,i)),...s.parent?Ue(s.parent,p,i):[]]}function zUe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.OutputMap)throw new Error("Entity must be an output map to be flattened");return[s,...(s.writesValues||[]).flatMap(r=>Ue(r,p,i)),...s.declaration?Ue(s.declaration,p,i):[],...s.parent?Ue(s.parent,p,i):[]]}function YUe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.PrimitiveEntity)throw new Error("Entity must be a primitive entity to be flattened");return[s,...(s.properties||[]).flatMap(r=>Ue(r,p,i)),...(s.methods||[]).flatMap(r=>Ue(r,p,i)),...(s.abstractMethods||[]).flatMap(r=>Ue(r,p,i))]}function JUe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.Project)throw new Error("Entity must be a project to be flattened");return[s,...(s.entities||[]).flatMap(r=>Ue(r,p,i)),...(s.functions||[]).flatMap(r=>Ue(r,p,i)),...(s.events||[]).flatMap(r=>Ue(r,p,i)),...(s.projects||[]).flatMap(r=>Ue(r,p,i)),...(s.variableDeclarations||[]).flatMap(r=>Ue(r,p,i)),...(s.variableInstances||[]).flatMap(r=>Ue(r,p,i)),...(s.operations||[]).flatMap(r=>Ue(r,p,i)),...(s.conditions||[]).flatMap(r=>Ue(r,p,i)),...(s.functionCalls||[]).flatMap(r=>Ue(r,p,i)),...(s.projects||[]).flatMap(r=>Ue(r,p,i)),...(s.loops||[]).flatMap(r=>Ue(r,p,i)),...(s.searches||[]).flatMap(r=>Ue(r,p,i))]}function QUe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.Property)throw new Error("Entity must be a property to be flattened");return[s,...s.defaultValue?Ue(s.defaultValue,p,i):[],...s.dataType?Ue(s.dataType,p,i):[],...s.parent?Ue(s.parent,p,i):[]]}function XUe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.ReturnStatement)throw new Error("Entity must be a return statement to be flattened");return[s,...(s.outputs||[]).flatMap(r=>Ue(r,p,i)),...s.throws?Ue(s.throws,p,i):[],...s.readsValue?Ue(s.readsValue,p,i):[],...s.dataType?Ue(s.dataType,p,i):[],...(Fo(s)||[]).flatMap(r=>Ue(r,p,i)),...s.parent?Ue(s.parent,p,i):[]]}function eFe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.Search)throw new Error("Entity must be a search to be flattened");return[s,...(s.successCalls||[]).flatMap(r=>Ue(r,p,i)),...(s.errorCalls||[]).flatMap(r=>Ue(r,p,i)),...(s.inputsDeclarations||[]).flatMap(r=>Ue(r,p,i)),...(s.inputs||[]).flatMap(r=>Ue(r,p,i)),...(s.writesValues||[]).flatMap(r=>Ue(r,p,i)),...(s.outputs||[]).flatMap(r=>Ue(r,p,i)),...s.error?Ue(s.error,p,i):[],...s.dataType?Ue(s.dataType,p,i):[],...(Fo(s)||[]).flatMap(r=>Ue(r,p,i)),...s.parent?Ue(s.parent,p,i):[]]}function tFe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.ValueDescriptor)throw new Error("Entity must be a value descriptor to be flattened");return[s,...s.defaultValue?Ue(s.defaultValue,p,i):[],...s.dataType?Ue(s.dataType,p,i):[],...s.parent?Ue(s.parent,p,i):[]]}function iFe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.VariableDeclaration)throw new Error("Entity must be a variable declaration to be flattened");return[s,...(s.successCalls||[]).flatMap(r=>Ue(r,p,i)),...(s.errorCalls||[]).flatMap(r=>Ue(r,p,i)),...(s.inputs||[]).flatMap(r=>Ue(r,p,i)),...(s.outputs||[]).flatMap(r=>Ue(r,p,i)),...(s.internalCalls||[]).flatMap(r=>Ue(r,p,i)),...(s.writesValues||[]).flatMap(r=>Ue(r,p,i)),...s.readsValue?Ue(s.readsValue,p,i):[],...s.defaultValue?Ue(s.defaultValue,p,i):[],...(Fo(s)||[]).flatMap(r=>Ue(r,p,i)),...s.dataType?Ue(s.dataType,p,i):[],...s.parent?Ue(s.parent,p,i):[]]}function rFe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.VariableInstance)throw new Error("Entity must be a variable instance to be flattened");return[s,...(s.successCalls||[]).flatMap(r=>Ue(r,p,i)),...(s.errorCalls||[]).flatMap(r=>Ue(r,p,i)),...(s.inputs||[]).flatMap(r=>Ue(r,p,i)),...(s.outputs||[]).flatMap(r=>Ue(r,p,i)),...(s.internalCalls||[]).flatMap(r=>Ue(r,p,i)),...(s.writesValues||[]).flatMap(r=>Ue(r,p,i)),...s.readsValue?Ue(s.readsValue,p,i):[],...s.defaultValue?Ue(s.defaultValue,p,i):[],...(Fo(s)||[]).flatMap(r=>Ue(r,p,i)),...s.declaration?Ue(s.declaration,p,i):[],...s.parent?Ue(s.parent,p,i):[]]}function Ue(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(!s)throw new Error("Entity must be defined to be flattened");if(s.type===d.GenericReference)return[];const r=i.ignoreBuiltInBaseEntities?i.diggestedBuiltInBaseEntitiesIds??new Set(oD()):new Set;if(i.diggestedBuiltInBaseEntitiesIds=r,i.ignoreBuiltInBaseEntities&&(ma.includes(s.type)||r.has(s.id)))return[];if(p.has(s.id))return[];switch(s.type){case d.FunctionCall:return jUe(s,p,i);case d.Operation:return WUe(s,p,i);case d.Condition:return BUe(s,p,i);case d.Loop:return HUe(s,p,i);case d.Search:return eFe(s,p,i);case d.GlobalEvent:return FUe(s,p,i);case d.ReturnStatement:return XUe(s,p,i);case d.ContinueStatement:return MUe(s,p,i);case d.BreakStatement:return $Ue(s,p,i);case d.VariableDeclaration:return iFe(s,p,i);case d.DefinitionEntity:return GUe(s,p,i);case d.FunctionDeclaration:return UUe(s,p,i);case d.Project:return JUe(s,p,i);case d.ActionDescriptor:return NUe(s,p,i);case d.ArgumentDeclaration:return xUe(s,p,i);case d.ValueDescriptor:return tFe(s,p,i);case d.InputMap:return KUe(s,p,i);case d.OutputMap:return zUe(s,p,i);case d.DataType:return kUe(s,p,i);case d.InstalledProject:return qUe(s,p,i);case d.InternalCall:return SUe(s,p,i);case d.LiteralValue:return ZUe(s,p,i);case d.Property:return QUe(s,p,i);case d.VariableInstance:return rFe(s,p,i);case d.BuiltInBaseEntity:return i.ignoreBuiltInBaseEntities?[]:LUe(s,p,i);case d.PrimitiveEntity:return i.ignoreBuiltInBaseEntities?[]:YUe(s,p,i)}return[]}async function dD(s={}){const p=new Set,i=Y.YieldTracker.from(s),r=new Set;for(const a of Rx){const c=await je(a,p,{ignoreBuiltInBaseEntities:!1,tracker:i});for(const e of c)r.add(e.id),await i.tick()}return r}function Ko(s){return[...s.calledByEntry||[],...s.calledByError||[],...s.calledBySuccess||[]].filter(p=>p.type!==d.GenericReference)}async function nFe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.ActionDescriptor)throw new Error("Entity must be an action descriptor to be flattened");const r=Y.YieldTracker.from(i),a=[s];await r.tick();const c={...i,tracker:r};delete c.yieldEvery;for(const e of s.inputs)a.push(...await je(e,p,c));return s.dataType&&a.push(...await je(s.dataType,p,c)),s.error&&a.push(...await je(s.error,p,c)),s.parent&&a.push(...await je(s.parent,p,c)),a}async function aFe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.ArgumentDeclaration)throw new Error("Entity must be an argument declaration to be flattened");const r=Y.YieldTracker.from(i),a=[s];await r.tick();const c={...i,tracker:r};delete c.yieldEvery,s.dataType&&a.push(...await je(s.dataType,p,c)),s.parent&&a.push(...await je(s.parent,p,c)),s.defaultValue&&a.push(...await je(s.defaultValue,p,c));for(const e of s.writesValues||[])a.push(...await je(e,p,c));for(const e of s.implements||[])a.push(...await je(e,p,c));return a}async function sFe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.BreakStatement)throw new Error("Entity must be a break statement to be flattened");const r=Y.YieldTracker.from(i),a=[s];await r.tick();const c={...i,tracker:r};delete c.yieldEvery;for(const f of s.outputs)a.push(...await je(f,p,c));s.parent&&a.push(...await je(s.parent,p,c)),s.throws&&a.push(...await je(s.throws,p,c)),s.dataType&&a.push(...await je(s.dataType,p,c)),s.readsValue&&a.push(...await je(s.readsValue,p,c));const e=Ko(s);for(const f of e)a.push(...await je(f,p,c));return a}async function lFe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.BuiltInBaseEntity)throw new Error("Entity must be a built-in base entity to be flattened");const r=Y.YieldTracker.from(i),a=[s];await r.tick();const c={...i,tracker:r};delete c.yieldEvery;for(const e of s.properties||[])a.push(...await je(e,p,c));for(const e of s.methods||[])a.push(...await je(e,p,c));for(const e of s.abstractMethods||[])a.push(...await je(e,p,c));return s.allPropertiesImplement&&a.push(...await je(s.allPropertiesImplement,p,c)),s.additionalPropertiesDataType&&a.push(...await je(s.additionalPropertiesDataType,p,c)),s.extends&&a.push(...await je(s.extends,p,c)),a}async function oFe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.Condition)throw new Error("Entity must be a condition to be flattened");const r=Y.YieldTracker.from(i),a=[s];await r.tick();const c={...i,tracker:r};if(delete c.yieldEvery,s.andChildrenGroup&&Array.isArray(s.andChildrenGroup))for(const f of s.andChildrenGroup)a.push(...await je(f,p,c));if(s.orChildrenGroup&&Array.isArray(s.orChildrenGroup))for(const f of s.orChildrenGroup)a.push(...await je(f,p,c));for(const f of s.inputs)a.push(...await je(f,p,c));for(const f of s.successCalls)a.push(...await je(f,p,c));for(const f of s.errorCalls)a.push(...await je(f,p,c));const e=Ko(s);for(const f of e)a.push(...await je(f,p,c));return s.parent&&a.push(...await je(s.parent,p,c)),a}async function dFe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.ContinueStatement)throw new Error("Entity must be a continue statement to be flattened");const r=Y.YieldTracker.from(i),a=[s];await r.tick();const c={...i,tracker:r};delete c.yieldEvery;for(const f of s.outputs)a.push(...await je(f,p,c));const e=Ko(s);for(const f of e)a.push(...await je(f,p,c));return s.parent&&a.push(...await je(s.parent,p,c)),s.throws&&a.push(...await je(s.throws,p,c)),s.dataType&&a.push(...await je(s.dataType,p,c)),s.readsValue&&a.push(...await je(s.readsValue,p,c)),a}async function uFe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.DefinitionEntity)throw new Error("Entity must be a definition entity to be flattened");const r=Y.YieldTracker.from(i),a=[s];await r.tick();const c={...i,tracker:r};delete c.yieldEvery;for(const e of s.properties)a.push(...await je(e,p,c));for(const e of s.methods)a.push(...await je(e,p,c));for(const e of s.abstractMethods)a.push(...await je(e,p,c));for(const e of s.implements)a.push(...await je(e,p,c));return s.extends&&a.push(...await je(s.extends,p,c)),s.parent&&a.push(...await je(s.parent,p,c)),s.additionalPropertiesDataType&&a.push(...await je(s.additionalPropertiesDataType,p,c)),s.allPropertiesImplement&&a.push(...await je(s.allPropertiesImplement,p,c)),a}async function pFe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.DataType)throw new Error("Entity must be a data type to be flattened");const r=Y.YieldTracker.from(i),a=[s];await r.tick();const c={...i,tracker:r};if(delete c.yieldEvery,s.parent&&a.push(...await je(s.parent,p,c)),s.foreignKeyRef&&a.push(...await je(s.foreignKeyRef,p,c)),s.entity&&a.push(...await je(s.entity,p,c)),s.orChildrenGroup)for(const e of s.orChildrenGroup)a.push(...await je(e,p,c));if(s.andChildrenGroup)for(const e of s.andChildrenGroup)a.push(...await je(e,p,c));return a}async function cFe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.FunctionCall)throw new Error("Entity must be a function call to be flattened");const r=Y.YieldTracker.from(i),a=[s];await r.tick();const c={...i,tracker:r};delete c.yieldEvery;for(const f of s.inputs)a.push(...await je(f,p,c));for(const f of s.outputs)a.push(...await je(f,p,c));s.error&&a.push(...await je(s.error,p,c));const e=Ko(s);for(const f of e)a.push(...await je(f,p,c));for(const f of s.successCalls)a.push(...await je(f,p,c));for(const f of s.errorCalls)a.push(...await je(f,p,c));for(const f of s.writesValues)a.push(...await je(f,p,c));return s.parent&&a.push(...await je(s.parent,p,c)),a}async function fFe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.FunctionDeclaration)throw new Error("Entity must be a function declaration to be flattened");const r=Y.YieldTracker.from(i),a=[s];await r.tick();const c={...i,tracker:r};delete c.yieldEvery,s.parent&&a.push(...await je(s.parent,p,c)),s.implements&&a.push(...await je(s.implements,p,c)),s.dataType&&a.push(...await je(s.dataType,p,c));for(const e of s.inputs)a.push(...await je(e,p,c));for(const e of s.calls)a.push(...await je(e,p,c));return a}async function yFe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.GlobalEvent)throw new Error("Entity must be a global event to be flattened");const r=Y.YieldTracker.from(i),a=[s];await r.tick();const c={...i,tracker:r};delete c.yieldEvery,s.parent&&a.push(...await je(s.parent,p,c)),s.implements&&a.push(...await je(s.implements,p,c));for(const e of s.inputs)a.push(...await je(e,p,c));for(const e of s.calls)a.push(...await je(e,p,c));return a}async function hFe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.InputMap)throw new Error("Entity must be an input map to be flattened");const r=Y.YieldTracker.from(i),a=[s];await r.tick();const c={...i,tracker:r};return delete c.yieldEvery,s.parent&&a.push(...await je(s.parent,p,c)),s.declaration&&a.push(...await je(s.declaration,p,c)),s.readsValue&&a.push(...await je(s.readsValue,p,c)),s.dataType&&a.push(...await je(s.dataType,p,c)),s.defaultValue&&a.push(...await je(s.defaultValue,p,c)),a}async function mFe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.InstalledProject)throw new Error("Entity must be an installed project to be flattened");const r=Y.YieldTracker.from(i),a=[s];await r.tick();const c={...i,tracker:r};delete c.yieldEvery;for(const e of s.functions)a.push(...await je(e,p,c));for(const e of s.events)a.push(...await je(e,p,c));return s.parent&&a.push(...await je(s.parent,p,c)),a}async function TFe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.InternalCall)throw new Error("Entity must be an internal call to be flattened");const r=Y.YieldTracker.from(i),a=[s];await r.tick();const c={...i,tracker:r};delete c.yieldEvery;for(const f of s.inputs)a.push(...await je(f,p,c));for(const f of s.outputs)a.push(...await je(f,p,c));s.error&&a.push(...await je(s.error,p,c));const e=Ko(s);for(const f of e)a.push(...await je(f,p,c));for(const f of s.successCalls)a.push(...await je(f,p,c));for(const f of s.errorCalls)a.push(...await je(f,p,c));for(const f of s.writesValues)a.push(...await je(f,p,c));return s.parent&&a.push(...await je(s.parent,p,c)),a}async function vFe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.LiteralValue)throw new Error("Entity must be a literal value to be flattened");const r=Y.YieldTracker.from(i),a=[s];await r.tick();const c={...i,tracker:r};if(delete c.yieldEvery,s.valueAsTypeSingle&&a.push(...await je(s.valueAsTypeSingle,p,c)),s.valueAsTypeList&&Array.isArray(s.valueAsTypeList))for(const e of s.valueAsTypeList)a.push(...await je(e,p,c));return s.parent&&a.push(...await je(s.parent,p,c)),a}async function EFe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.Loop)throw new Error("Entity must be a loop to be flattened");const r=Y.YieldTracker.from(i),a=[s];await r.tick();const c={...i,tracker:r};delete c.yieldEvery;for(const f of s.inputs)a.push(...await je(f,p,c));for(const f of s.outputs)a.push(...await je(f,p,c));s.error&&a.push(...await je(s.error,p,c));const e=Ko(s);for(const f of e)a.push(...await je(f,p,c));for(const f of s.successCalls)a.push(...await je(f,p,c));for(const f of s.errorCalls)a.push(...await je(f,p,c));for(const f of s.writesValues)a.push(...await je(f,p,c));return s.parent&&a.push(...await je(s.parent,p,c)),s.body&&a.push(...await je(s.body,p,c)),s.dataType&&a.push(...await je(s.dataType,p,c)),a}async function bFe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.Operation)throw new Error("Entity must be an operation to be flattened");const r=Y.YieldTracker.from(i),a=[s];await r.tick();const c={...i,tracker:r};delete c.yieldEvery;for(const f of s.inputs)a.push(...await je(f,p,c));for(const f of s.outputs)a.push(...await je(f,p,c));s.error&&a.push(...await je(s.error,p,c));const e=Ko(s);for(const f of e)a.push(...await je(f,p,c));for(const f of s.successCalls)a.push(...await je(f,p,c));for(const f of s.errorCalls)a.push(...await je(f,p,c));for(const f of s.writesValues)a.push(...await je(f,p,c));return s.parent&&a.push(...await je(s.parent,p,c)),a}async function AFe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.OutputMap)throw new Error("Entity must be an output map to be flattened");const r=Y.YieldTracker.from(i),a=[s];await r.tick();const c={...i,tracker:r};delete c.yieldEvery;for(const e of s.writesValues)a.push(...await je(e,p,c));return s.declaration&&a.push(...await je(s.declaration,p,c)),s.dataType&&a.push(...await je(s.dataType,p,c)),s.parent&&a.push(...await je(s.parent,p,c)),a}async function gFe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.PrimitiveEntity)throw new Error("Entity must be a primitive entity to be flattened");const r=Y.YieldTracker.from(i),a=[s];await r.tick();const c={...i,tracker:r};delete c.yieldEvery;for(const e of s.properties)a.push(...await je(e,p,c));for(const e of s.methods)a.push(...await je(e,p,c));for(const e of s.abstractMethods)a.push(...await je(e,p,c));return a}async function IFe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.Project)throw new Error("Entity must be a project to be flattened");const r=Y.YieldTracker.from(i),a=[s];await r.tick();const c={...i,tracker:r};delete c.yieldEvery;for(const e of s.entities)a.push(...await je(e,p,c));for(const e of s.functions)a.push(...await je(e,p,c));for(const e of s.events)a.push(...await je(e,p,c));for(const e of s.projects)a.push(...await je(e,p,c));for(const e of s.variableDeclarations)a.push(...await je(e,p,c));for(const e of s.variableInstances)a.push(...await je(e,p,c));for(const e of s.operations)a.push(...await je(e,p,c));for(const e of s.conditions)a.push(...await je(e,p,c));for(const e of s.functionCalls)a.push(...await je(e,p,c));for(const e of s.projects)a.push(...await je(e,p,c));for(const e of s.loops)a.push(...await je(e,p,c));for(const e of s.searches)a.push(...await je(e,p,c));return a}async function RFe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.Property)throw new Error("Entity must be a property to be flattened");const r=Y.YieldTracker.from(i),a=[s];await r.tick();const c={...i,tracker:r};return delete c.yieldEvery,s.defaultValue&&a.push(...await je(s.defaultValue,p,c)),s.dataType&&a.push(...await je(s.dataType,p,c)),s.parent&&a.push(...await je(s.parent,p,c)),a}async function DFe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.ReturnStatement)throw new Error("Entity must be a return statement to be flattened");const r=Y.YieldTracker.from(i),a=[s];await r.tick();const c={...i,tracker:r};delete c.yieldEvery;for(const f of s.outputs)a.push(...await je(f,p,c));for(const f of s.outputs)a.push(...await je(f,p,c));s.throws&&a.push(...await je(s.throws,p,c)),s.readsValue&&a.push(...await je(s.readsValue,p,c)),s.dataType&&a.push(...await je(s.dataType,p,c));const e=Ko(s);for(const f of e)a.push(...await je(f,p,c));return s.parent&&a.push(...await je(s.parent,p,c)),a}async function wFe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.Search)throw new Error("Entity must be a search to be flattened");const r=Y.YieldTracker.from(i),a=[s];await r.tick();const c={...i,tracker:r};delete c.yieldEvery;for(const f of s.inputs)a.push(...await je(f,p,c));for(const f of s.outputs)a.push(...await je(f,p,c));s.error&&a.push(...await je(s.error,p,c)),s.dataType&&a.push(...await je(s.dataType,p,c));for(const f of s.inputsDeclarations)a.push(...await je(f,p,c));const e=Ko(s);for(const f of e)a.push(...await je(f,p,c));for(const f of s.successCalls)a.push(...await je(f,p,c));for(const f of s.errorCalls)a.push(...await je(f,p,c));for(const f of s.writesValues)a.push(...await je(f,p,c));return s.parent&&a.push(...await je(s.parent,p,c)),a}async function CFe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.ValueDescriptor)throw new Error("Entity must be a value descriptor to be flattened");const r=Y.YieldTracker.from(i),a=[s];await r.tick();const c={...i,tracker:r};return delete c.yieldEvery,s.defaultValue&&a.push(...await je(s.defaultValue,p,c)),s.dataType&&a.push(...await je(s.dataType,p,c)),s.parent&&a.push(...await je(s.parent,p,c)),a}async function OFe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.VariableDeclaration)throw new Error("Entity must be a variable declaration to be flattened");const r=Y.YieldTracker.from(i),a=[s];await r.tick();const c={...i,tracker:r};delete c.yieldEvery;for(const f of s.inputs)a.push(...await je(f,p,c));for(const f of s.outputs)a.push(...await je(f,p,c));s.error&&a.push(...await je(s.error,p,c)),s.dataType&&a.push(...await je(s.dataType,p,c)),s.readsValue&&a.push(...await je(s.readsValue,p,c)),s.defaultValue&&a.push(...await je(s.defaultValue,p,c));const e=Ko(s);for(const f of e)a.push(...await je(f,p,c));for(const f of s.successCalls)a.push(...await je(f,p,c));for(const f of s.errorCalls)a.push(...await je(f,p,c));for(const f of s.writesValues)a.push(...await je(f,p,c));for(const f of s.internalCalls)a.push(...await je(f,p,c));return s.parent&&a.push(...await je(s.parent,p,c)),a}async function _Fe(s,p=new Set,i={ignoreBuiltInBaseEntities:!1}){if(p.has(s.id))return[];if(p.add(s.id),s.type!==d.VariableInstance)throw new Error("Entity must be a variable instance to be flattened");const r=Y.YieldTracker.from(i),a=[s];await r.tick();const c={...i,tracker:r};delete c.yieldEvery;for(const f of s.inputs)a.push(...await je(f,p,c));for(const f of s.outputs)a.push(...await je(f,p,c));s.error&&a.push(...await je(s.error,p,c)),s.readsValue&&a.push(...await je(s.readsValue,p,c)),s.defaultValue&&a.push(...await je(s.defaultValue,p,c));const e=Ko(s);for(const f of e)a.push(...await je(f,p,c));for(const f of s.successCalls)a.push(...await je(f,p,c));for(const f of s.errorCalls)a.push(...await je(f,p,c));for(const f of s.writesValues)a.push(...await je(f,p,c));for(const f of s.internalCalls)a.push(...await je(f,p,c));return s.parent&&a.push(...await je(s.parent,p,c)),s.declaration&&a.push(...await je(s.declaration,p,c)),a}async function je(s,p=new Set,i={ignoreBuiltInBaseEntities:!1,yieldEvery:100}){const r={...i,ignoreBuiltInBaseEntities:i.ignoreBuiltInBaseEntities??!1};if(!s)throw new Error("Entity must be defined to be flattened");if(s.type===d.GenericReference)return[];const a=Y.YieldTracker.from(r);r.tracker=a,r.yieldEvery!==void 0&&delete r.yieldEvery;const c=r.ignoreBuiltInBaseEntities?r.diggestedBuiltInBaseEntitiesIds??new Set(await dD(r)):new Set;if(r.diggestedBuiltInBaseEntitiesIds=c,r.ignoreBuiltInBaseEntities&&(ma.includes(s.type)||c.has(s.id)))return[];if(p.has(s.id))return[];switch(s.type){case d.FunctionCall:return cFe(s,p,r);case d.Operation:return bFe(s,p,r);case d.Condition:return oFe(s,p,r);case d.Loop:return EFe(s,p,r);case d.Search:return wFe(s,p,r);case d.GlobalEvent:return yFe(s,p,r);case d.ReturnStatement:return DFe(s,p,r);case d.ContinueStatement:return dFe(s,p,r);case d.BreakStatement:return sFe(s,p,r);case d.VariableDeclaration:return OFe(s,p,r);case d.DefinitionEntity:return uFe(s,p,r);case d.FunctionDeclaration:return fFe(s,p,r);case d.Project:return IFe(s,p,r);case d.ActionDescriptor:return nFe(s,p,r);case d.ArgumentDeclaration:return aFe(s,p,r);case d.ValueDescriptor:return CFe(s,p,r);case d.InputMap:return hFe(s,p,r);case d.OutputMap:return AFe(s,p,r);case d.DataType:return pFe(s,p,r);case d.InstalledProject:return mFe(s,p,r);case d.InternalCall:return TFe(s,p,r);case d.LiteralValue:return vFe(s,p,r);case d.Property:return RFe(s,p,r);case d.VariableInstance:return _Fe(s,p,r);case d.BuiltInBaseEntity:return r.ignoreBuiltInBaseEntities?[]:lFe(s,p,r);case d.PrimitiveEntity:return r.ignoreBuiltInBaseEntities?[]:gFe(s,p,r)}return[]}function VFe(s){return s==null||s===""}function RPi(s){return s===null}function Vn(s){return s!=null&&s.valueAsType?!1:VFe(s==null?void 0:s.value)}function co(s){return s?s.valueAsType===null&&s.value===null:!1}function PFe(s,p){if(s===p||!s&&!p)return!0;if(!s||!p||s.name===ye.EntityTemplate&&p.name!==ye.EntityTemplate||p.name===ye.EntityTemplate&&s.name!==ye.EntityTemplate)return!1;if(s.name===ye.ActionDescriptor&&p.name!==ye.ActionDescriptor||p.name===ye.ActionDescriptor&&s.name!==ye.ActionDescriptor)return!1;if(s.valueAsTypeSingle&&!p.valueAsTypeSingle||p.valueAsTypeSingle&&!s.valueAsTypeSingle)return!1;if(s.valueAsTypeList&&!p.valueAsTypeList||p.valueAsTypeList&&!s.valueAsTypeList)return!1;if(s.valueAsTypeSingle&&p.valueAsTypeSingle){if(s.valueAsTypeSingle.id!==p.valueAsTypeSingle.id)return!1}else if(s.valueAsTypeList&&p.valueAsTypeList){if(s.valueAsTypeList.length!==p.valueAsTypeList.length)return!1;for(let i=0;i<s.valueAsTypeList.length;i++)if(s.valueAsTypeList[i].id!==p.valueAsTypeList[i].id)return!1}else if(!s.valueAsType&&!p.valueAsType&&s.value!==p.value)return!1;return!0}function NFe(s,p,i){if(!i)throw new Error("[checkIsRowTransformerUpToDate] 'lastPublishedEntityVersion' argument is required");if(!p)throw new Error("[checkIsRowTransformerUpToDate] 'entity' argument is required");if(!s)throw new Error("[checkIsRowTransformerUpToDate] 'newestOpenRowTransformer' argument is required");let r=!0;const a=s.methods.find(c=>{var e;return((e=c.implements)==null?void 0:e.id)===re["built-in-base-entity"].BUILT_IN_SQL_ROW_TRANSFORMER_ENTITY.methods.up.id});if(a?(fn(i).forEach(c=>{const e=a.inputs.find(f=>f.name===c.name);e&&ni(e.getDataType(null),c.getDataType(null)).compatible||(r=!1)}),a.returnStatements.forEach(c=>{!c.dataType||!c.dataType.entity||c.dataType.entity.type!==d.DefinitionEntity?r=!1:ev(c.dataType.entity,p)||(r=!1)})):r=!1,r===null||r){const c=s.methods.find(e=>{var f;return((f=e.implements)==null?void 0:f.id)===re["built-in-base-entity"].BUILT_IN_SQL_ROW_TRANSFORMER_ENTITY.methods.down.id});c?(fn(p).forEach(e=>{const f=c.inputs.find(h=>h.name===e.name);f&&ni(f.getDataType(null),e.getDataType(null)).compatible||(r=!1)}),c.returnStatements.forEach(e=>{!e.dataType||!e.dataType.entity||e.dataType.entity.type!==d.DefinitionEntity?r=!1:ev(e.dataType.entity,i)||(r=!1)})):r=!1}return{isPreexistingRowTransformerUpToDate:r}}function EV(s,p,i,r={skipBaseExtension:!1}){var J;const a={...r||{},skipBaseExtension:(r==null?void 0:r.skipBaseExtension)||!1},c={changesSinceLastPublication:!1,rowTransformerNeeded:!1,newRowTransformerNeeded:!1,newestOpenRowTransformer:null,newRequiredProperties:[],newNonRequiredProperties:[],deletedProperties:[],lastPublishedEntityVersion:null,updatedEntityVersion:i,propChanges:new Map,isPreexistingRowTransformerUpToDate:null,extendedEntities:[]},f=s.entities.filter(se=>{var ue;if(se.id===i.id)return!1;let te=!1,le=se;for(;le;){if(((ue=le.extends)==null?void 0:ue.id)===i.id){te=!0;break}if(le.extends&&le.extends.type===d.DefinitionEntity)le=le.extends;else break}return te}).map(se=>EV(s,p,se,{...a,skipBaseExtension:!0}));if(!p)return{...c,changesSinceLastPublication:!0,extendedEntities:f};const h=p.get(i.id);if(!h)return{...c,changesSinceLastPublication:!0,extendedEntities:f};const m=p.entities.filter(se=>di(se,ge.SQL_ROW_TRANSFORMER)),b=s.entities.filter(se=>{var z;if(!di(se,ge.SQL_ROW_TRANSFORMER)||m.find(Q=>Q.id===se.id))return!1;const le=se.properties.find(Q=>!!Q.implements.find(de=>re["built-in-base-entity"].BUILT_IN_SQL_ROW_TRANSFORMER_ENTITY.properties.definition.id===de.id));if(!le)return!1;const ue=(z=le.defaultValue)==null?void 0:z.valueAsType;return ue?ue.id===i.id:!1}).sort((se,te)=>B(se.createdAt).isAfter(B(te.createdAt))?-1:1)[0]||null,A=new Map;let _=!1,P=null;!a.skipBaseExtension&&i.extends&&((J=i.extends)==null?void 0:J.type)===d.DefinitionEntity&&(P=EV(i.project,p,i.extends));const V=fn(i).filter(se=>fn(h).find(ue=>ue.id===se.id)?!1:!Ka(se.getDataType(null))),M=fn(i).filter(se=>fn(h).find(ue=>ue.id===se.id)?!1:!!Ka(se.getDataType(null))),G=fn(h).filter(se=>!fn(i).find(le=>le.id===se.id));fn(i).filter(se=>{var fe,be,Ie,_e,Ge,Se,Ye,Ze,et,Et,yt;const te=fn(h).find(ai=>ai.id===se.id);let le=!1;if(!te)return!1;const ue=Sa(se.dataType,!0,`[resolveSQLMigrationsDiffs] Unsupported data-type structure on current property '${se.name}' (${se.id}). 'andChildrenGroup' with more than one child is not supported for SQL column properties.`),z=Sa(te.dataType,!0,`[resolveSQLMigrationsDiffs] Unsupported data-type structure on last published property '${se.name}' (${se.id}). 'andChildrenGroup' with more than one child is not supported for SQL column properties.`),Q=Dh(ue,!0,`[resolveSQLMigrationsDiffs] Unsupported data-type structure on current property '${se.name}' (${se.id}). 'orChildrenGroup' with multiple non-null children is not supported for SQL column properties.`),de=Dh(z,!0,`[resolveSQLMigrationsDiffs] Unsupported data-type structure on last published property '${se.name}' (${se.id}). 'orChildrenGroup' with multiple non-null children is not supported for SQL column properties.`);if(((fe=Q==null?void 0:Q.foreignKeyRef)==null?void 0:fe.id)!==((be=de==null?void 0:de.foreignKeyRef)==null?void 0:be.id)){const ai=Q==null?void 0:Q.foreignKeyRef,ui=de==null?void 0:de.foreignKeyRef;A.set(se.id,{...A.get(se.id)||{},newForeignKeyRef:ai||void 0,oldForeignKeyRef:ui||void 0,property:se,oldProperty:te}),le=!0,_=!0}else((Ie=Q==null?void 0:Q.entity)==null?void 0:Ie.id)!==((_e=de==null?void 0:de.entity)==null?void 0:_e.id)&&(((Ge=Q==null?void 0:Q.entity)==null?void 0:Ge.id)===re["primitive-entity"].string.id||((Se=de==null?void 0:de.entity)==null?void 0:Se.id)===re["primitive-entity"].date.id&&((Ye=Q==null?void 0:Q.entity)==null?void 0:Ye.id)===re["primitive-entity"].number.id?A.set(se.id,{...A.get(se.id)||{},castableDataTypeEntity:{fromId:((Ze=de==null?void 0:de.entity)==null?void 0:Ze.id)||"",toId:((et=Q==null?void 0:Q.entity)==null?void 0:et.id)||""},property:se,oldProperty:te}):(A.set(se.id,{...A.get(se.id)||{property:se},nonCastableDataTypeEntity:{fromId:((Et=de==null?void 0:de.entity)==null?void 0:Et.id)||"",toId:((yt=Q==null?void 0:Q.entity)==null?void 0:yt.id)||""},property:se,oldProperty:te}),_=!0),le=!0);se.name!==(te==null?void 0:te.name)&&(A.set(se.id,{...A.get(se.id)||{},nameChange:{from:(te==null?void 0:te.name)||"",to:se.name},property:se,oldProperty:te}),le=!0);const pe=Ka(te.getDataType(null)),he=Ka(se.getDataType(null));return he!==pe&&(A.set(se.id,{...A.get(se.id)||{},requiredChange:{from:!pe,to:!he},property:se,oldProperty:te}),he||(_=!0),le=!0),le}),V.length>0&&(_=!0);let k=null;b&&_&&(k=NFe(b,i,h).isPreexistingRowTransformerUpToDate);const q=i.name!==h.name?{from:h.name,to:i.name}:void 0;let ne=P!=null&&P.rowTransformerNeeded?!0:_;return{...c,changesSinceLastPublication:A.size>0||!!G.length||!!V.length||!!M.length||ne,rowTransformerNeeded:ne,newestOpenRowTransformer:b,nameChange:q,newRequiredProperties:V,newNonRequiredProperties:M,deletedProperties:G,lastPublishedEntityVersion:h,propChanges:A,newRowTransformerNeeded:ne&&!b,isPreexistingRowTransformerUpToDate:k,extendedEntities:f}}function wL(s,p,i,r,a){const c=a==null?void 0:a.ignoreNonEditable;a&&(a.ignoreNonEditable=!0);try{if(!s)throw new Error("[addDifferencesToRowTransformer] 'project' argument is required");if(!p)throw new Error("[addDifferencesToRowTransformer] 'transformer' argument is required");if(!i)throw new Error("[addDifferencesToRowTransformer] 'newEntityState' argument is required");if(!r)throw new Error("[addDifferencesToRowTransformer] 'oldEntityState' argument is required");const e=fn(i),f=fn(r);p.afterAllChildrenInitialized(a);const h=p.methods.find(E=>{var b;return((b=E.implements)==null?void 0:b.id)===re["built-in-base-entity"].BUILT_IN_SQL_ROW_TRANSFORMER_ENTITY.methods.up.id}),m=p.methods.find(E=>{var b;return((b=E.implements)==null?void 0:b.id)===re["built-in-base-entity"].BUILT_IN_SQL_ROW_TRANSFORMER_ENTITY.methods.down.id});if(!h)throw new Error("[addDifferencesToRowTransformer] The 'up' transformer trigger is missing from the parent");if(!m)throw new Error("[addDifferencesToRowTransformer] The 'down' transformer trigger is missing from the parent");f.forEach(E=>{const b=h.inputs.find(V=>V.name===E.name),A=Dh(E.getDataType(null))||E.getDataType(null);let _=b,P;if(b)_.editable=!0;else{const V=Za.new(a);V.parent=h.toReference(),V.name=E.name,V.index=E.index,V.implements=[...E.implements.map(G=>G.toJSON())];const M=Re(V,s);M.hydrateAncestors(),a.add(M,W.Added),M.addSelfToProject(a),M.initChildren(a),_=M}if(!b||!_.dataType||_.dataType&&s.diggestedBuiltInBaseEntitiesIds.has(_.dataType.id)){const V=vr.new(a);V.parent=_.toReference();const M=Re(V,s);M.hydrateAncestors(),a.add(M,W.Added),M.addSelfToProject(a),M.initChildren(a),P=M}else P=_.dataType,P.editable=!0;A&&P.merge(A,a),P.metaSync({editable:!1,deletable:!1},a),_.metaSync({editable:!1,deletable:!1},a)}),[...h.inputs].forEach(E=>{f.find(A=>A.name===E.name)||(E.editable=!0,E.remove({ignoreUpstream:!1},a),E.editable=!1)}),[...h.returnStatements].forEach(E=>{var M,G,k,q,ne,J,se,te,le;if(!E.dataType||E.dataType&&s.diggestedBuiltInBaseEntitiesIds.has(E.dataType.id)){const ue=vr.new(a);ue.entity=i.toReference(),ue.parent=E.toReference();const z=Re(ue,s);z.hydrateAncestors(),a.add(z,W.Added),z.addSelfToProject(a),z.initChildren(a)}const b=(M=E.dataType)==null?void 0:M.entity,A=!b||b.type!==d.DefinitionEntity||b.type===d.DefinitionEntity&&((G=b.parent)==null?void 0:G.type)===d.Project||((k=b.parent)==null?void 0:k.id)!==((q=E.dataType)==null?void 0:q.id),_=!A&&b&&b.type===d.DefinitionEntity&&b.name&&s.getDefinitionEntities().some(ue=>ue.id!==b.id&&ue.name===b.name),P=b&&b.type===d.DefinitionEntity&&b.name&&!A&&!_?b.name:su((i==null?void 0:i.name)+" new format",s.getDefinitionEntities());let V=(ne=E.dataType)==null?void 0:ne.entity;(!((J=E.dataType)!=null&&J.entity)||E.dataType.entity.type!==d.DefinitionEntity||E.dataType.entity.type==d.DefinitionEntity&&((se=E.dataType.entity.parent)==null?void 0:se.type)===d.Project||E.dataType.entity.parent.id!==E.dataType.id)&&(V=i.clone(a,E.dataType),V.metaSync({name:P},a)),Vg(V,i,a,{exactDataType:!0}),V.setExtension(null,a),V.addImplementation(s.getBuiltIn(re["built-in-base-entity"].BUILT_IN_PERSISTED_ENTITY_ENTITY.id),a),V.properties.forEach(ue=>ue.setExtends(null,a)),E.dataType.setEntity(V,a),(le=(te=E.dataType)==null?void 0:te.entity)==null||le.metaSync({name:P},a),E.afterAllChildrenInitialized(a),E.outputs.forEach(ue=>{var he,fe;if(ue.defaultValue||ue.readsValue)return;const z=(he=e.find(be=>be.name===ce(ue,s)))==null?void 0:he.id,Q=(fe=f.find(be=>(be==null?void 0:be.id)===z))==null?void 0:fe.name,de=h.inputs.find(be=>Q===ce(be,s)),pe=ni((de==null?void 0:de.getDataType(null))||null,ue.getDataType(null)||null);pe!=null&&pe.compatible&&(ue.setValueWriter(de,a),de==null||de.addValueReader(ue,a))})}),e.forEach(E=>{var M;const b=(M=E.knownVersions)==null?void 0:M.get(E.previousVersion),A=m.inputs.find(G=>G.name===E.name||!!b&&b.name===G.name),_=Dh(E.getDataType(null))||E.getDataType(null);let P=A,V;if(A)P.editable=!0,P.metaSync({name:E.name,codeName:E.codeName,description:E.description},a);else{const G=Za.new(a);G.parent=m.toReference(),G.name=E.name,G.codeName=E.codeName,G.description=E.description,G.index=E.index,G.implements=[...E.implements.map(q=>q.toJSON())];const k=Re(G,s);k.hydrateAncestors(),a.add(k,W.Added),k.addSelfToProject(a),k.initChildren(a),P=k}if(!A||!P.dataType||P.dataType&&s.diggestedBuiltInBaseEntitiesIds.has(P.dataType.id)){const G=vr.new(a);G.parent=P.toReference();const k=Re(G,s);k.hydrateAncestors(),a.add(k,W.Added),k.addSelfToProject(a),k.initChildren(a),V=k}else V=P.dataType,V.editable=!0,V.merge(P.dataType,a);_&&V.merge(_,a),V.metaSync({editable:!1,deletable:!1},a),P.metaSync({editable:!1,deletable:!1},a)}),[...m.inputs].forEach(E=>{e.find(A=>{var P;if(A.name===E.name)return!0;const _=(P=A.knownVersions)==null?void 0:P.get(A.previousVersion);if(_&&_.name===E.name)return!0})||(E.editable=!0,E.remove({ignoreUpstream:!1},a),E.editable=!1)}),[...m.returnStatements].forEach(E=>{var M,G,k,q;if(!E.dataType||E.dataType&&s.diggestedBuiltInBaseEntitiesIds.has(E.dataType.id)){const ne=vr.new(a);ne.parent=E.toReference();const J=Re(ne,s);J.hydrateAncestors(),a.add(J,W.Added),J.addSelfToProject(a),J.initChildren(a)}const b=(M=E.dataType)==null?void 0:M.entity,A=!b||b.id===re["built-in-base-entity"].BUILT_IN_PERSISTED_ENTITY_ENTITY.id,_=!A&&b&&b.type===d.DefinitionEntity&&b.name&&s.getDefinitionEntities().some(ne=>ne.id!==b.id&&ne.name===b.name),P=b&&b.type===d.DefinitionEntity&&b.name&&!A&&!_?b.name:su((r==null?void 0:r.name)+" old format",s.getDefinitionEntities());let V=(G=E.dataType)==null?void 0:G.entity;(!V||(V==null?void 0:V.id)===re["built-in-base-entity"].BUILT_IN_PERSISTED_ENTITY_ENTITY.id)&&(V=r.clone(a,E.dataType),V.metaSync({name:P},a)),Vg(V,r,a,{exactDataType:!0}),V.setExtension(null,a),V.addImplementation(s.getBuiltIn(re["built-in-base-entity"].BUILT_IN_PERSISTED_ENTITY_ENTITY.id),a),V.properties.forEach(ne=>ne.setExtends(null,a)),E.dataType.setEntity(V,a),(q=(k=E.dataType)==null?void 0:k.entity)==null||q.metaSync({name:P},a),E.afterAllChildrenInitialized(a),E.outputs.forEach(ne=>{var le,ue,z;if(ne.defaultValue||ne.readsValue)return;const J=(le=f.find(Q=>Q.name===ce(ne,s)))==null?void 0:le.id,se=(ue=e.find(Q=>(Q==null?void 0:Q.id)===J))==null?void 0:ue.name,te=m.inputs.find(Q=>se===ce(Q,s));(z=ni((te==null?void 0:te.getDataType(null))||null,ne.getDataType(null)||null))!=null&&z.compatible&&(ne.setValueWriter(te,a),te==null||te.addValueReader(ne,a))})})}finally{a&&(a.ignoreNonEditable=!!c)}}function xFe(s,p,i,r,a={}){var G;const c=s.getBuiltIn(ge.SQL_ROW_TRANSFORMER),e=su(ce(p,s)+" row transformer",s.entities),f=c.implement(e,r),h=f.ownDeclaredProperties.find(k=>{var q;return(q=k.implements)==null?void 0:q.find(ne=>ne.id===re["built-in-base-entity"].BUILT_IN_SQL_ROW_TRANSFORMER_ENTITY.properties.definition.id)}),m=f.methods.find(k=>{var q;return((q=k.implements)==null?void 0:q.id)===re["built-in-base-entity"].BUILT_IN_SQL_ROW_TRANSFORMER_ENTITY.methods.up.id}),E=f.methods.find(k=>{var q;return((q=k.implements)==null?void 0:q.id)===re["built-in-base-entity"].BUILT_IN_SQL_ROW_TRANSFORMER_ENTITY.methods.down.id});if(!h||!m||!E)throw new Error("Cannot find definition property on the new row transformer entity");if(h.defaultValue)h.defaultValue.setValueAsTypeSingle(p,r);else{const k=Lr.new(r);k.name=ye.EntityTemplate,k.valueAsTypeSingle=p.toJSON(),k.parent=h.toReference();const q=Re(k,s);q.hydrateAncestors(),r.add(q,W.Added),q.addSelfToProject(r),q.initChildren(r)}wL(s,f,p,i,r),Y.Logger.log("BEFORE - changeSet.listAdded",r.listAdded.map(k=>{var ne,J,se,te,le,ue,z;const q=s.get(k.id);return q?ce(q,s):k.type===d.InputMap?"(not found) "+k.type+" "+k.id+" - declaration: "+((ne=k.declaration)==null?void 0:ne.type)+" "+((J=k.declaration)==null?void 0:J.id)+' "'+((se=k.declaration)==null?void 0:se.name)+`"
607
607
  parent: `+((le=(te=k.parent)==null?void 0:te.parent)==null?void 0:le.id)+" - "+((z=(ue=k.parent)==null?void 0:ue.parent)==null?void 0:z.name):"(not found) "+k.type+" "+k.id})),Y.Logger.log("AFTER - changeSet.listAdded",r.listAdded.map(k=>{var ne,J,se,te,le,ue,z;const q=s.get(k.id);return q?q.type+' "'+ce(q,s)+'" ('+q.id+")":k.type===d.InputMap?"(not found) "+k.type+" ("+k.id+") - declaration: "+((ne=k.declaration)==null?void 0:ne.type)+" ("+((J=k.declaration)==null?void 0:J.id)+') "'+((se=k.declaration)==null?void 0:se.name)+`"
608
608
  parent: "`+((le=(te=k.parent)==null?void 0:te.parent)==null?void 0:le.name)+'" ('+((z=(ue=k.parent)==null?void 0:ue.parent)==null?void 0:z.id)+")":"(not found) "+k.type+" "+k.id})),Y.Logger.log("-----------------"),Y.Logger.log("Old properties: ",fn(i).map(k=>k.name+" ("+k.id+")")),Y.Logger.log("New properties: ",fn(p).map(k=>k.name+" ("+k.id+")"));const b=f.methods.find(k=>{var q;return((q=k.implements)==null?void 0:q.id)===re["built-in-base-entity"].BUILT_IN_SQL_ROW_TRANSFORMER_ENTITY.methods.up.id}),A=f.methods.find(k=>{var q;return((q=k.implements)==null?void 0:q.id)===re["built-in-base-entity"].BUILT_IN_SQL_ROW_TRANSFORMER_ENTITY.methods.down.id});Y.Logger.log(`