@elyx-code/project-logic-tree 0.0.6950 → 0.0.6951
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 +1 -1
- package/dist/index.js +356 -121
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -598,7 +598,7 @@ Some of which might require an explicit 'parentRelationType' property to go alon
|
|
|
598
598
|
The entities of type '${bt(_,"', '","' and '")}' can only have one 'data-type' child under the 'dataType' property so no 'parentRelationType' is needed.`})),m.dataType)){const P=(b=m.dataType)==null?void 0:b.id;e.push(new we({id:`${i.id}--${Te.NewEntityWouldOverriteExisting}`,code:Te.NewEntityWouldOverriteExisting,severity:ve.Error,message:`The entity with id '${i.id}' and type '${i.type}', cannot be added as a child to the entity with id '${a.parent}' and type '${A}', because it already has a 'data-type' child with id '${P}'.
|
|
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
|
-
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,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.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.
|
|
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
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.
|
|
603
603
|
You can inspect the existing 'entity' field with the 'describe_entity' action. Like so:
|
|
604
604
|
${fp({describe_entity:A.entity.id})}
|