@elyx-code/project-logic-tree 0.0.6520 → 0.0.6521

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.js CHANGED
@@ -39995,7 +39995,8 @@ This is likely an incorrect strategy, either the '${this.type}' entity doesn't n
39995
39995
  return this.errors;
39996
39996
  }
39997
39997
  getDefaultValue() {
39998
- return (this == null ? void 0 : this.defaultValue) || null;
39998
+ var r;
39999
+ return (this == null ? void 0 : this.defaultValue) || ((r = this.implements) == null ? void 0 : r.getDefaultValue()) || null;
39999
40000
  }
40000
40001
  setDefaultValue(r, a = this.project.addChangeSet(
40001
40002
  new j(
@@ -99879,7 +99880,7 @@ This is likely an incorrect strategy, either the '${this.type}' entity doesn't n
99879
99880
  }
99880
99881
  getDefaultValue() {
99881
99882
  var r;
99882
- return this.defaultValue || ((r = this.declaration) == null ? void 0 : r.defaultValue) || null;
99883
+ return this.defaultValue || ((r = this.declaration) == null ? void 0 : r.getDefaultValue()) || null;
99883
99884
  }
99884
99885
  setDefaultValue(r, a = this.project.addChangeSet(
99885
99886
  new j(
@@ -116802,7 +116803,8 @@ ${lA}`
116802
116803
  return r == null || r.attemptAutoclose("get-data-type", this.id), this.dataType;
116803
116804
  }
116804
116805
  getDefaultValue() {
116805
- return this.defaultValue;
116806
+ var r, a;
116807
+ return this.defaultValue || ((r = this.extends) == null ? void 0 : r.getDefaultValue()) || ((a = this.implements) == null ? void 0 : a.getDefaultValue()) || null;
116806
116808
  }
116807
116809
  setDefaultValue(r, a = this.project.addChangeSet(
116808
116810
  new j(
@@ -55,7 +55,7 @@ ${U}`})):f.push(new le({id:`${o.id}--${ae.NoOverlapWithImplementedSignature}`,co
55
55
  Adding a new argument would make the implementation invalid. There are no arguments in the descriptor with the same name.
56
56
  ${x}
57
57
  ${U}`}))}}}return f.push(...e.errors,...h,...ji(o)),{errors:f,modifiedData:o}}get codeNativeValueValidation(){var i;return this._codeNativeValueValidation||((i=this.implements)==null?void 0:i.codeNativeValueValidation)||null}validateGeneratedUpdate(i){const a=[];return i.parent&&a.push(new le({id:`${this.id}--${K.InvalidParentUpdate}`,code:K.InvalidParentUpdate,severity:H.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.
58
- 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.`})),{errors:a,modifiedData:i}}subscribeDependents(i){return i.forEach(a=>{this.detachedDependents[a.entity.id]||(this.detachedDependents[a.entity.id]=a)}),this}unsubscribeDependents(i){return i.forEach(a=>{this.detachedDependents[a.entity.id]&&delete this.detachedDependents[a.entity.id]}),this}syncDependents(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"sync-dependents"))){const a=[],o=[],f=[],e=[];return Object.values(this.detachedDependents).forEach(h=>{const v=h.entity.afterAllChildrenInitialized(i);a.push(...v.updated),o.push(...v.added),f.push(...v.removed),e.push(...v.affected)}),i==null||i.attemptAutoclose("sync-dependents",this.id),{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}onDetachedDependencyRemoved(i,a,o){const f=[],e=[],h=[],v=[];return a==="implements"&&(this.setImplements(null,o),f.push(this)),{updated:R(f),added:R(e),removed:R(h),affected:R(v),self:this}}onDetachedDependencyRestored(i,a,o){const f=[],e=[],h=[],v=[];return a==="implements"&&(this.setImplements(i,o),f.push(this)),{updated:R(f),added:R(e),removed:R(h),affected:R(v),self:this}}unsubscribeFromDependencies(){var i,a,o,f,e;return(a=(i=this.implements)==null?void 0:i.unsubscribeDependents)==null||a.call(i,[{entity:this,field:"implements"}]),(e=(f=(o=this.dataType)==null?void 0:o.entity)==null?void 0:f.unsubscribeDependents)==null||e.call(f,[{entity:this,field:"data-type-entity"}]),this}subscribeToDependencies(){var i,a,o,f,e;return(a=(i=this.implements)==null?void 0:i.subscribeDependents)==null||a.call(i,[{entity:this,field:"implements"}]),(e=(f=(o=this.dataType)==null?void 0:o.entity)==null?void 0:f.subscribeDependents)==null||e.call(f,[{entity:this,field:"data-type-entity"}]),this}increaseVersion(i){if(i&&!B(i).isValid())throw new Error(`The shared timestamp '${i}' is not a valid ISO 8601 date string.`);return i&&B(i).isSame(B(this.createdAt))?this:(this.previousVersion=this.version,this.version=N.UUID.uuid(),this.createdAt=B(i).toISOString()||B().toISOString(),this)}captureVersion(){var a;const i=((a=this.knownVersions)==null?void 0:a.get(this.version))||new Lt(this,this.project);return i.metaSync(this.toMeta(),null),this.knownVersions=this.knownVersions?this.knownVersions.set(this.version,i):new Map([[this.version,i]]),i.implements=this.implements,i.defaultValue=this.defaultValue,i.dataType=this.dataType,i.writesValues=[...this.writesValues],i.parent=this.parent,this}recursiveCaptureUpstreamVersions(i){const a=[],o=[],f=[],e=[];if(this.parent){this.parent.increaseVersion(i);const h=this.parent.recursiveCaptureUpstreamVersions(i);a.push(this.parent,...h.updated),o.push(...h.added),f.push(...h.removed)}return{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}async restoreVersion(i){var v;const a=[],o=[],f=[],e=[];if(this.version===i)return{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this};if(!this.knownVersions){const T=new Map;for(const[g,A]of this.knownVersions||new Map){if(T.set(g,A),A.activeVersion=!1,A.knownVersions)for(const[O,V]of A.knownVersions)T.set(O,V);A.knownVersions=null}}let h=(v=this.knownVersions)==null?void 0:v.get(i);if(!h){const T=await this.APILoadVersion({},i);if(!T)throw new Error(`Version with id '${i}' for entity with id '${this.id}' not found.`);h=new Lt(T,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.implements=h.implements,this.defaultValue=h.defaultValue,this.dataType=h.dataType,this.writesValues=h.writesValues,this.parent=h.parent,{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}updateWithShallowTransfer(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"update-with-shallow-transfer"))){if(this.metaSync(i,a),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 o=J(i.parent),f=this.project.get(o),e=this.parent;if(e&&e.id!==(f==null?void 0:f.id)&&this.removeFromParent(a),f)this.setParent(f,a);else throw a==null||a.attemptAutoclose("update-with-shallow-transfer",this.id),new Error(`${this.type} with id '${this.id}' has a 'parent' reference '${o}' that isn't found in the project`)}else throw a==null||a.attemptAutoclose("update-with-shallow-transfer",this.id),new Error(`${this.type} with id '${this.id}' must have a 'parent'`);if(i.implements){const o=J(i.implements),f=this.project.get(o);f&&this.setImplements(f,a)}return this.captureVersion(),this.subscribeToDependencies(),a==null||a.attemptAutoclose("update-with-shallow-transfer",this.id),this}hydrateAncestors(){const i=[],a=[],o=[],f=[];if(this.initialData.parent){const e=J(this.initialData.parent),h=this.project.get(e);if(h)this.setParent(h,null),i.push(h);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){const e=J(this.initialData.implements),h=this.project.get(e);h&&(this.setImplements(h,null),i.push(h))}return{updated:R(i),added:R(a),removed:R(o),affected:R(f),self:this}}afterAllChildrenInitialized(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"after-all-children-initialized"))){const a=[],o=[],f=[],e=[];this.initialized=!0;const{updated:h,added:v,removed:T,affected:g}=this.syncWithImplementation(i);return a.push(...h),o.push(...v),f.push(...T),e.push(...g),this.captureVersion(),i==null||i.attemptAutoclose("after-all-children-initialized",this.id),{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}addSelfToProject(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"add-self-to-project"))){const a=[this],o=[],f=[],e=[];return this.parent.addInputDeclaration(this,i),e.push(this.parent),this.writesValues.forEach(h=>{h.setValueWriter(this,i),a.push(h)}),this.subscribe(),this.subscribeToDependencies(),i==null||i.attemptAutoclose("add-self-to-project",this.id),{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}addValueReader(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"add-value-reader"))){return this.writesValues.includes(i)?(a==null||a.attemptAutoclose("add-value-reader",this.id),this):(this.writesValues.push(i),a==null||a.add(this,k.Affected),this)}removeValueReader(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"remove-value-reader"))){return this.writesValues.includes(i)?(this.writesValues=this.writesValues.filter(o=>o.id!==i.id),a==null||a.add(this,k.Affected),this):(a==null||a.attemptAutoclose("remove-value-reader",this.id),this)}setParent(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"set-parent"))){var o;return((o=this.parent)==null?void 0:o.id)!==(i==null?void 0:i.id)&&(this.parent=i,a&&(a==null||a.add(this,k.Updated))),a==null||a.attemptAutoclose("set-parent",this.id),this}setImplements(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"set-implements"))){var o;return((o=this.implements)==null?void 0:o.id)!==(i==null?void 0:i.id)&&(this.implements=i,a&&(a==null||a.add(this,k.Updated))),a==null||a.attemptAutoclose("set-implements",this.id),this}initChildren(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"init-children"))){if(this.initialized||this.startedInitialization)return this;if(this.startedInitialization=!0,this.initialData.defaultValue&&(this.defaultValue=oe(this.initialData.defaultValue,this.project),this.defaultValue.setParent(this,null),this.defaultValue.initChildren(i)),this.initialData.dataType&&(this.dataType=oe(this.initialData.dataType,this.project),this.dataType.setParent(this,null),this.dataType.initChildren(i)),this.initialData.implements){const a=oe(this.initialData.implements,this.project);this.setImplements(a,null)}return Gf.initWritesValues(this,this.parent),this.subscribeToDependencies(),this.afterAllChildrenInitialized(i),i==null||i.attemptAutoclose("init-children",this.id),this}subscribe(){return this.activeVersion=!0,this.project.subscribeInstance(this),this}unsubscribe(){return this.project.unsubscribeInstance(this),this}metaSync(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"meta-sync"))){const o=Fi(this,i),f=this.toMeta();return this.index=i.index||(i.index!==0?f.index:0),this.name=i.name!==void 0?i.name:f.name,this.codeName=i.codeName!==void 0?i.codeName:f.codeName,this.description=i.description!==void 0?i.description:f.description,this.required=i.required!==void 0?i.required:this.required,this.constant=!0,super.metaSync(i),i.deleted===!0&&!f.deleted?a==null||a.add(this,k.Removed):i.deleted===!1&&f.deleted?a==null||a.add(this,k.Added):o&&(a==null||a.add(this,k.Updated)),a==null||a.attemptAutoclose("meta-sync",this.id),this}async APILoad(i=Te,...a){return await Lt.repository.APILoad(this.id,...a),this}async APICreate(i=Te,...a){return await Lt.repository.APICreate(this.toShallowJSON(),...a),this}async APIUpdate(i=Te,...a){return await Lt.repository.APIUpdate(this.toShallowJSON(),...a),this}async APIDelete(i=Te,...a){return await Lt.repository.APIDelete(this.toShallowJSON(),...a),this}async APIClone(i=Te,...a){return await Lt.repository.APIClone(this.id,...a),this}async APILoadVersion(i=Te,a,...o){return await Lt.repository.APILoadVersion(this.id,a,...o)}removeFromParent(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"remove-from-parent"))){const a=[],o=[],f=[],e=[];return this.parent.removeInputDeclaration(this,i),e.push(this.parent),i==null||i.attemptAutoclose("remove-from-parent",this.id),{added:R(f),updated:R(a),removed:R(o),affected:R(e),self:this}}remove({ignoreUpstream:i}={ignoreUpstream:!1},a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"remove-entity"))){const o=[],f=[],e=[],h=[];if(a!=null&&a.hasRemoved(this.id))return a==null||a.attemptAutoclose("remove-entity",this.id),{added:[],updated:[],removed:[],affected:[],self:this};if(f.push(this),this.unsubscribe(),this.unsubscribeFromDependencies(),this.project.subscribeDeletedInstance(this),this.metaSync({deleted:!0},a),Object.values(this.detachedDependents).forEach(v=>{const{updated:T,removed:g,added:A}=v.entity.onDetachedDependencyRemoved(this,v.field,a);o.push(...T),f.push(...g),e.push(...A)}),this.defaultValue){const{updated:v,removed:T}=this.defaultValue.remove({ignoreUpstream:!0},a);o.push(...v),f.push(...T)}if(this.writesValues.forEach(v=>{o.push(v),v.readsValue=null}),!i){const v=this.removeFromParent(a);e.push(...v.added),o.push(...v.updated),f.push(...v.removed),h.push(...v.affected)}if(this.dataType){const v=this.dataType.remove({ignoreUpstream:!0},a);o.push(...v.updated),f.push(...v.removed)}return a==null||a.attemptAutoclose("remove-entity",this.id),{added:R(e),updated:R(o),removed:R(f),affected:R(h),self:this}}restore({}={},i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"restore-entity"))){const a=[],o=[],f=[],e=[];if(i!=null&&i.hasAdded(this.id))return i==null||i.attemptAutoclose("restore-entity",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(h=>{const{updated:v,removed:T,added:g}=h.entity.onDetachedDependencyRestored(this,h.field,i);o.push(...v),f.push(...T),a.push(...g)}),this.defaultValue){const{updated:h}=this.defaultValue.restore({},i);o.push(...h)}if(this.writesValues.forEach(h=>{o.push(h),h.setValueWriter(this,i)}),e.push(this.parent),this.parent.addInputDeclaration(this,i),this.dataType){const{updated:h}=this.dataType.restore({},i);o.push(...h)}return i==null||i.attemptAutoclose("restore-entity",this.id),{added:R(a),updated:R(o),removed:R(f),affected:R(e),self:this}}toFlat(i=new Set){var o,f;return i.has(this.id)?[]:(i.add(this.id),[this,...((o=this.defaultValue)==null?void 0:o.toFlat(i))||[],...this.writesValues.flatMap(e=>e.toFlat(i)),...((f=this.dataType)==null?void 0:f.toFlat(i))||[]])}toFlatIds(i=new Set){var o,f;return i.has(this.id)?[]:(i.add(this.id),[this.id,...((o=this.defaultValue)==null?void 0:o.toFlatIds(i))||[],...this.writesValues.flatMap(e=>e.toFlatIds(i)),...((f=this.dataType)==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,codeName:this.codeName,description:this.description,index:this.index,required:this.required,constant:!0,type:this.type,name:this.name}}toJSON(i=new Set){var a,o,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,name:this.name,type:this.type,index:this.index,codeName:this.codeName,description:this.description,required:this.required,constant:!0,defaultValue:((a=this.defaultValue)==null?void 0:a.toJSON(i))||null,dataType:((o=this.dataType)==null?void 0:o.toJSON(i))||null,implements:((f=this.implements)==null?void 0:f.toJSON(i))||null,writesValues:this.writesValues.map(e=>e.toJSON(i)),parent:this.parent.toReference()})}toJSONClone(i=qe){var o,f,e,h,v,T,g,A;let a;return(o=i.seenEntityMaps)!=null&&o.has(this.id)?a=i.seenEntityMaps.get(this.id):(a=i.newId||Zi(this,this.project,i.uuidStrategy),i.seenEntityMaps&&i.seenEntityMaps.set(this.id,a)),(f=i.seenEntities)!=null&&f.has(a)||(e=i.seenEntities)!=null&&e.has(this.id)?this.toReference({seenEntityMaps:i.seenEntityMaps}):((h=i.seenEntities)==null||h.add(a),(v=i.seenEntities)==null||v.add(this.id),{id:a,version:N.UUID.uuid(),createdAt:i.timestamp||B().toISOString(),previousVersion:null,author:this.author,deleted:this.deleted,name:this.name,type:this.type,index:this.index,codeName:this.codeName,description:this.description,required:this.required,constant:!0,defaultValue:((T=this.defaultValue)==null?void 0:T.toJSONClone({...i,newId:null}))||null,dataType:((g=this.dataType)==null?void 0:g.toJSONClone({...i,newId:null}))||null,implements:((A=this.implements)==null?void 0:A.toJSONClone({...i,newId:null}))||null,writesValues:this.writesValues.map(O=>O.toJSONClone({...i,newId:null})),parent:this.parent.toReference({seenEntityMaps:i.seenEntityMaps})})}toReference(i=qe){var o;let a=this.id;return(o=i.seenEntityMaps)!=null&&o.has(this.id)&&(a=i.seenEntityMaps.get(this.id)),{id:a+"--"+N.UUID.uuid()+"--ref",type:c.GenericReference,entityId:a,version:this.version,entityType:this.type}}toShallowJSON(i=qe){var o,f,e,h;let a=this.id;return(o=i.seenEntityMaps)!=null&&o.has(this.id)&&(a=i.seenEntityMaps.get(this.id)),{id:a,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,index:this.index,required:this.required,constant:!0,defaultValue:((f=this.defaultValue)==null?void 0:f.toReference(i))||null,writesValues:this.writesValues.map(v=>v.toReference(i)),implements:((e=this.implements)==null?void 0:e.toReference(i))||null,dataType:((h=this.dataType)==null?void 0:h.toReference(i))||null,parent:this.parent.toReference(i)}}toFlatJSON(i=new Set){var o,f;return i.has(this.id)?[]:(i.add(this.id),[this.toShallowJSON(),...((o=this.defaultValue)==null?void 0:o.toFlatJSON(i))||[],...this.writesValues.flatMap(e=>e.toFlatJSON(i)),...((f=this.dataType)==null?void 0:f.toFlatJSON(i))||[]])}toGenerationTarget(){return{id:this.id,name:this.name,codeName:this.codeName,description:this.description,type:this.type,required:this.required,constant:!0,parent:this.parent.id}}toFlatGenerationTarget(i=new Set){var o,f;return i.has(this.id)?[]:(i.add(this.id),[this.toGenerationTarget(),...((o=this.defaultValue)==null?void 0:o.toFlatGenerationTarget(i))||[],...this.writesValues.flatMap(e=>e.toFlatGenerationTarget(i)),...((f=this.dataType)==null?void 0:f.toFlatGenerationTarget(i))||[]])}clearErrors(){var i,a;return this.errors=[],(i=this.defaultValue)==null||i.clearErrors(),(a=this.dataType)==null||a.clearErrors(),this}validate(){const i=G6(this);return this.errors=i,{success:!0}}getErrors(){var a,o;return[...this.errors,...((a=this.defaultValue)==null?void 0:a.getErrors())||[],...((o=this.dataType)==null?void 0:o.getErrors())||[]]}getShallowErrors(){return this.errors}getDefaultValue(){return(this==null?void 0:this.defaultValue)||null}setDefaultValue(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"set-default-value"))){const o=this.defaultValue;return(o==null?void 0:o.id)!==(i==null?void 0:i.id)&&(o==null||o.remove({ignoreUpstream:!0},a),this.defaultValue=i,a==null||a.add(this,k.Affected)),a==null||a.attemptAutoclose("set-default-value",this.id),this}clone(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"clone-entity")),a=null,o=null,f=!0){var O,V;let e=Ki(a,this);const h=this.toJSON(),v=o||N.UUID.uuid();h.dataType=null,h.id=v,h.version=N.UUID.uuid(),h.createdAt=(i==null?void 0:i.timestamp)||B().toISOString(),h.author=(i==null?void 0:i.author)||"1",h.previousVersion=null,h.deleted=!1;const T=fi(h,e);a?T.setParent(a,null):T.setParent(this.parent,null),f&&T.subscribe(),T.initChildren(i),i==null||i.add(T,k.Added);const g=(O=this.dataType)==null?void 0:O.clone(i,T,N.UUID.uuid(),f);T.setDataType(g||null,i);const A=(V=this.defaultValue)==null?void 0:V.clone(i,T,N.UUID.uuid(),f);return T.defaultValue=A||null,i==null||i.attemptAutoclose("clone-entity",this.id),T}getDataType(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"get-data-type"))){return this.dataType}setDataType(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"set-data-type"))){const o=this.dataType;return(o==null?void 0:o.id)!==(i==null?void 0:i.id)&&(o==null||o.remove({ignoreUpstream:!0},a),this.dataType=i,this.subscribeToDependencies(),a==null||a.add(this,k.Affected)),a==null||a.attemptAutoclose("set-data-type",this.id),this}removeDataType(){return this.dataType=null,this}syncWithImplementation(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"sync-with-implementation"))){const a=[],o=[],f=[],e=[];if(!this.implements)return i==null||i.attemptAutoclose("sync-with-implementation",this.id),{added:R(o),updated:R(a),removed:R(f),affected:R(e),self:this};const h=this.implements.getDataType(i);if(!h)return i==null||i.attemptAutoclose("sync-with-implementation",this.id),{added:R(o),updated:R(a),removed:R(f),affected:R(e),self:this};let v=this.getDataType(i);return v?v&&v.merge(h,i):v=h.clone(i,this),this.setDataType(v,i),i==null||i.attemptAutoclose("sync-with-implementation",this.id),{added:R(o),updated:R(a),removed:R(f),affected:R(e),self:this}}};D(Lt,"repository",{APICreate:async(i,...a)=>i,APIUpdate:async(i,...a)=>i,APIDelete:async(i,...a)=>i,APIClone:async(i,...a)=>{},APILoad:async(i,...a)=>null,APILoadVersion:async(i,a,...o)=>null}),D(Lt,"type",c.ArgumentDeclaration),D(Lt,"USER_MANAGED_PARENT_TYPES",[...Pt]),D(Lt,"PARENT_TYPES",[...Lt.USER_MANAGED_PARENT_TYPES]),D(Lt,"MUTABLE_BASE_PROPERTIES",["name","codeName","description","required","constant"]),D(Lt,"INMUTABLE_BASE_PROPERTIES",["id","type","version","createdAt","author","previousVersion"]),D(Lt,"BASE_PROPERTIES",[...Lt.MUTABLE_BASE_PROPERTIES,...Lt.INMUTABLE_BASE_PROPERTIES]),D(Lt,"MUTABLE_META_PROPERTIES",[...Lt.MUTABLE_BASE_PROPERTIES,"index"]),D(Lt,"INMUTABLE_META_PROPERTIES",[...Lt.INMUTABLE_BASE_PROPERTIES]),D(Lt,"META_PROPERTIES",[...Lt.MUTABLE_META_PROPERTIES,...Lt.INMUTABLE_META_PROPERTIES]),D(Lt,"MUTABLE_UPSTREAM_PROPERTIES",[]),D(Lt,"INMUTABLE_UPSTREAM_PROPERTIES",["parent","implements"]),D(Lt,"UPSTREAM_PROPERTIES",[...Lt.MUTABLE_UPSTREAM_PROPERTIES,...Lt.INMUTABLE_UPSTREAM_PROPERTIES]),D(Lt,"MUTABLE_DOWNSTREAM_PROPERTIES",["writesValues","dataType","defaultValue"]),D(Lt,"INMUTABLE_DOWNSTREAM_PROPERTIES",[]),D(Lt,"DOWNSTREAM_PROPERTIES",[...Lt.MUTABLE_DOWNSTREAM_PROPERTIES,...Lt.INMUTABLE_DOWNSTREAM_PROPERTIES]),D(Lt,"PROPERTIES",[...Lt.META_PROPERTIES,...Lt.UPSTREAM_PROPERTIES,...Lt.DOWNSTREAM_PROPERTIES]);let ta=Lt;function k6(d){const u=_Ae(d),i=DAe(d),a=_n(d);d.inputs.forEach(f=>f.validate()),a.forEach(f=>f.validate());const o=[...u,...i,...S6(d),...ib(d)];return gi(d.errors,o)}function _Ae(d){const u=[];if(!d.calls.length&&!d.extends){const i=wt({id:`${d.id}--${ie.ScopeWithoutLogic}`,message:`Action "${W(d,d.project)}" with id "${d.id}" does not have any logic defined. So it doesn't do anything.`,severity:H.Warning,code:ie.ScopeWithoutLogic,entity:d});u.push(i.error)}return gi(d.errors,u)}function DAe(d){const u=[];return d.implements,gi(d.errors,u)}function S6(d,u){const i=d.parent.type===c.DefinitionEntity?d.parent.methods.filter(f=>f.id!==d.id):[],o=[...d.project.functions,...i].filter(f=>f.id!==d.id);return Df(d,[qi],o,u)}const CAe=Object.freeze(Object.defineProperty({__proto__:null,validate:k6,validateFunctionDeclarationName:S6},Symbol.toStringTag,{value:"Module"}));var K6=(d=>(d.FunctionDeclarationImplements="function-declaration-implements",d.FunctionDeclarationExtends="function-declaration-extends",d))(K6||{});const Mt=class Mt extends Bi{constructor(i,a){super(i);D(this,"initialData");D(this,"id");D(this,"name");D(this,"codeName",null);D(this,"description",null);D(this,"x");D(this,"y");D(this,"collapsed");D(this,"private");D(this,"index",null);D(this,"type",c.FunctionDeclaration);D(this,"implements",null);D(this,"extends",null);D(this,"inputs",[]);D(this,"calls",[]);D(this,"parent");D(this,"detachedChildren",[]);D(this,"errors",[]);D(this,"project");D(this,"detachedDependents",{});D(this,"knownVersions",null);D(this,"activeVersion",!1);D(this,"initialized",!1);D(this,"startedInitialization",!1);D(this,"suggestion",!1);this.initialData=i,this.project=a,this.id=i.id,this.name=i.name,this.description=i.description,this.private=i.private,this.collapsed=i.collapsed,this.x=i.x,this.y=i.y,this.codeName=i.codeName,this.index=i.index}static new(i=null){return{id:N.UUID.uuid(),version:N.UUID.uuid(),createdAt:(i==null?void 0:i.timestamp)||B().toISOString(),author:(i==null?void 0:i.author)||N.sessionAuthor,previousVersion:null,deleted:!1,type:c.FunctionDeclaration,name:"",codeName:null,description:"",collapsed:!1,private:!1,index:null,implements:null,extends:null,inputs:[],parent:null,calls:[],x:0,y:0}}static fromGenerationTarget(i,a){let o=a;if(i.parent){const T=J(i.parent);o=a.get(T)}let f=null;if(i.implements){const T=J(i.implements);f=a.get(T)}let e=null;if(i.extends){const T=J(i.extends);e=a.get(T)}const h={id:i.id,version:N.UUID.uuid(),createdAt:B().toISOString(),author:N.sessionAuthor,previousVersion:null,deleted:!1,name:i.name,type:c.FunctionDeclaration,index:o.type===c.DefinitionEntity?o.methods.length:null,codeName:i.codeName||null,description:i.description||null,collapsed:!1,private:!1,calls:[],inputs:[],implements:f,extends:e,x:0,y:0,parent:o},v=oe(h,a);return v.setParent(o,null),v}static validateGenerationTarget(i,a){var A;let o=JSON.parse(JSON.stringify(i));const f=[],e=ur(o,{parent:{list:!1,types:[c.Project,c.InstalledProject,c.DefinitionEntity,c.Loop],optional:!0},implements:{list:!1,types:[c.ActionDescriptor],optional:!0}},a);o=e.modifiedData;const h=wb(o,a),v=o.parent?a.get(o.parent):null;if(v&&v.type===c.DefinitionEntity){const O=v,x=Lr(O).filter(S=>!S.interactive),U=O.methods.find(S=>{var q;return((q=S.implements)==null?void 0:q.id)===o.implements});if(U&&f.push(new le({id:`${o.id}--${ae.MethodOverwritesOtherSiblingWithSameImplementation}`,code:ae.MethodOverwritesOtherSiblingWithSameImplementation,severity:H.Error,message:`The '${c.FunctionDeclaration}' with id "${o.id}" is trying to implement the '${c.ActionDescriptor}' with id "${o.implements}", but the parent definition-entity already has a ${c.FunctionDeclaration} with id '${U.id}' that implements the same base method.
58
+ 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.`})),{errors:a,modifiedData:i}}subscribeDependents(i){return i.forEach(a=>{this.detachedDependents[a.entity.id]||(this.detachedDependents[a.entity.id]=a)}),this}unsubscribeDependents(i){return i.forEach(a=>{this.detachedDependents[a.entity.id]&&delete this.detachedDependents[a.entity.id]}),this}syncDependents(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"sync-dependents"))){const a=[],o=[],f=[],e=[];return Object.values(this.detachedDependents).forEach(h=>{const v=h.entity.afterAllChildrenInitialized(i);a.push(...v.updated),o.push(...v.added),f.push(...v.removed),e.push(...v.affected)}),i==null||i.attemptAutoclose("sync-dependents",this.id),{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}onDetachedDependencyRemoved(i,a,o){const f=[],e=[],h=[],v=[];return a==="implements"&&(this.setImplements(null,o),f.push(this)),{updated:R(f),added:R(e),removed:R(h),affected:R(v),self:this}}onDetachedDependencyRestored(i,a,o){const f=[],e=[],h=[],v=[];return a==="implements"&&(this.setImplements(i,o),f.push(this)),{updated:R(f),added:R(e),removed:R(h),affected:R(v),self:this}}unsubscribeFromDependencies(){var i,a,o,f,e;return(a=(i=this.implements)==null?void 0:i.unsubscribeDependents)==null||a.call(i,[{entity:this,field:"implements"}]),(e=(f=(o=this.dataType)==null?void 0:o.entity)==null?void 0:f.unsubscribeDependents)==null||e.call(f,[{entity:this,field:"data-type-entity"}]),this}subscribeToDependencies(){var i,a,o,f,e;return(a=(i=this.implements)==null?void 0:i.subscribeDependents)==null||a.call(i,[{entity:this,field:"implements"}]),(e=(f=(o=this.dataType)==null?void 0:o.entity)==null?void 0:f.subscribeDependents)==null||e.call(f,[{entity:this,field:"data-type-entity"}]),this}increaseVersion(i){if(i&&!B(i).isValid())throw new Error(`The shared timestamp '${i}' is not a valid ISO 8601 date string.`);return i&&B(i).isSame(B(this.createdAt))?this:(this.previousVersion=this.version,this.version=N.UUID.uuid(),this.createdAt=B(i).toISOString()||B().toISOString(),this)}captureVersion(){var a;const i=((a=this.knownVersions)==null?void 0:a.get(this.version))||new Lt(this,this.project);return i.metaSync(this.toMeta(),null),this.knownVersions=this.knownVersions?this.knownVersions.set(this.version,i):new Map([[this.version,i]]),i.implements=this.implements,i.defaultValue=this.defaultValue,i.dataType=this.dataType,i.writesValues=[...this.writesValues],i.parent=this.parent,this}recursiveCaptureUpstreamVersions(i){const a=[],o=[],f=[],e=[];if(this.parent){this.parent.increaseVersion(i);const h=this.parent.recursiveCaptureUpstreamVersions(i);a.push(this.parent,...h.updated),o.push(...h.added),f.push(...h.removed)}return{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}async restoreVersion(i){var v;const a=[],o=[],f=[],e=[];if(this.version===i)return{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this};if(!this.knownVersions){const T=new Map;for(const[g,A]of this.knownVersions||new Map){if(T.set(g,A),A.activeVersion=!1,A.knownVersions)for(const[O,V]of A.knownVersions)T.set(O,V);A.knownVersions=null}}let h=(v=this.knownVersions)==null?void 0:v.get(i);if(!h){const T=await this.APILoadVersion({},i);if(!T)throw new Error(`Version with id '${i}' for entity with id '${this.id}' not found.`);h=new Lt(T,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.implements=h.implements,this.defaultValue=h.defaultValue,this.dataType=h.dataType,this.writesValues=h.writesValues,this.parent=h.parent,{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}updateWithShallowTransfer(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"update-with-shallow-transfer"))){if(this.metaSync(i,a),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 o=J(i.parent),f=this.project.get(o),e=this.parent;if(e&&e.id!==(f==null?void 0:f.id)&&this.removeFromParent(a),f)this.setParent(f,a);else throw a==null||a.attemptAutoclose("update-with-shallow-transfer",this.id),new Error(`${this.type} with id '${this.id}' has a 'parent' reference '${o}' that isn't found in the project`)}else throw a==null||a.attemptAutoclose("update-with-shallow-transfer",this.id),new Error(`${this.type} with id '${this.id}' must have a 'parent'`);if(i.implements){const o=J(i.implements),f=this.project.get(o);f&&this.setImplements(f,a)}return this.captureVersion(),this.subscribeToDependencies(),a==null||a.attemptAutoclose("update-with-shallow-transfer",this.id),this}hydrateAncestors(){const i=[],a=[],o=[],f=[];if(this.initialData.parent){const e=J(this.initialData.parent),h=this.project.get(e);if(h)this.setParent(h,null),i.push(h);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){const e=J(this.initialData.implements),h=this.project.get(e);h&&(this.setImplements(h,null),i.push(h))}return{updated:R(i),added:R(a),removed:R(o),affected:R(f),self:this}}afterAllChildrenInitialized(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"after-all-children-initialized"))){const a=[],o=[],f=[],e=[];this.initialized=!0;const{updated:h,added:v,removed:T,affected:g}=this.syncWithImplementation(i);return a.push(...h),o.push(...v),f.push(...T),e.push(...g),this.captureVersion(),i==null||i.attemptAutoclose("after-all-children-initialized",this.id),{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}addSelfToProject(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"add-self-to-project"))){const a=[this],o=[],f=[],e=[];return this.parent.addInputDeclaration(this,i),e.push(this.parent),this.writesValues.forEach(h=>{h.setValueWriter(this,i),a.push(h)}),this.subscribe(),this.subscribeToDependencies(),i==null||i.attemptAutoclose("add-self-to-project",this.id),{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}addValueReader(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"add-value-reader"))){return this.writesValues.includes(i)?(a==null||a.attemptAutoclose("add-value-reader",this.id),this):(this.writesValues.push(i),a==null||a.add(this,k.Affected),this)}removeValueReader(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"remove-value-reader"))){return this.writesValues.includes(i)?(this.writesValues=this.writesValues.filter(o=>o.id!==i.id),a==null||a.add(this,k.Affected),this):(a==null||a.attemptAutoclose("remove-value-reader",this.id),this)}setParent(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"set-parent"))){var o;return((o=this.parent)==null?void 0:o.id)!==(i==null?void 0:i.id)&&(this.parent=i,a&&(a==null||a.add(this,k.Updated))),a==null||a.attemptAutoclose("set-parent",this.id),this}setImplements(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"set-implements"))){var o;return((o=this.implements)==null?void 0:o.id)!==(i==null?void 0:i.id)&&(this.implements=i,a&&(a==null||a.add(this,k.Updated))),a==null||a.attemptAutoclose("set-implements",this.id),this}initChildren(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"init-children"))){if(this.initialized||this.startedInitialization)return this;if(this.startedInitialization=!0,this.initialData.defaultValue&&(this.defaultValue=oe(this.initialData.defaultValue,this.project),this.defaultValue.setParent(this,null),this.defaultValue.initChildren(i)),this.initialData.dataType&&(this.dataType=oe(this.initialData.dataType,this.project),this.dataType.setParent(this,null),this.dataType.initChildren(i)),this.initialData.implements){const a=oe(this.initialData.implements,this.project);this.setImplements(a,null)}return Gf.initWritesValues(this,this.parent),this.subscribeToDependencies(),this.afterAllChildrenInitialized(i),i==null||i.attemptAutoclose("init-children",this.id),this}subscribe(){return this.activeVersion=!0,this.project.subscribeInstance(this),this}unsubscribe(){return this.project.unsubscribeInstance(this),this}metaSync(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"meta-sync"))){const o=Fi(this,i),f=this.toMeta();return this.index=i.index||(i.index!==0?f.index:0),this.name=i.name!==void 0?i.name:f.name,this.codeName=i.codeName!==void 0?i.codeName:f.codeName,this.description=i.description!==void 0?i.description:f.description,this.required=i.required!==void 0?i.required:this.required,this.constant=!0,super.metaSync(i),i.deleted===!0&&!f.deleted?a==null||a.add(this,k.Removed):i.deleted===!1&&f.deleted?a==null||a.add(this,k.Added):o&&(a==null||a.add(this,k.Updated)),a==null||a.attemptAutoclose("meta-sync",this.id),this}async APILoad(i=Te,...a){return await Lt.repository.APILoad(this.id,...a),this}async APICreate(i=Te,...a){return await Lt.repository.APICreate(this.toShallowJSON(),...a),this}async APIUpdate(i=Te,...a){return await Lt.repository.APIUpdate(this.toShallowJSON(),...a),this}async APIDelete(i=Te,...a){return await Lt.repository.APIDelete(this.toShallowJSON(),...a),this}async APIClone(i=Te,...a){return await Lt.repository.APIClone(this.id,...a),this}async APILoadVersion(i=Te,a,...o){return await Lt.repository.APILoadVersion(this.id,a,...o)}removeFromParent(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"remove-from-parent"))){const a=[],o=[],f=[],e=[];return this.parent.removeInputDeclaration(this,i),e.push(this.parent),i==null||i.attemptAutoclose("remove-from-parent",this.id),{added:R(f),updated:R(a),removed:R(o),affected:R(e),self:this}}remove({ignoreUpstream:i}={ignoreUpstream:!1},a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"remove-entity"))){const o=[],f=[],e=[],h=[];if(a!=null&&a.hasRemoved(this.id))return a==null||a.attemptAutoclose("remove-entity",this.id),{added:[],updated:[],removed:[],affected:[],self:this};if(f.push(this),this.unsubscribe(),this.unsubscribeFromDependencies(),this.project.subscribeDeletedInstance(this),this.metaSync({deleted:!0},a),Object.values(this.detachedDependents).forEach(v=>{const{updated:T,removed:g,added:A}=v.entity.onDetachedDependencyRemoved(this,v.field,a);o.push(...T),f.push(...g),e.push(...A)}),this.defaultValue){const{updated:v,removed:T}=this.defaultValue.remove({ignoreUpstream:!0},a);o.push(...v),f.push(...T)}if(this.writesValues.forEach(v=>{o.push(v),v.readsValue=null}),!i){const v=this.removeFromParent(a);e.push(...v.added),o.push(...v.updated),f.push(...v.removed),h.push(...v.affected)}if(this.dataType){const v=this.dataType.remove({ignoreUpstream:!0},a);o.push(...v.updated),f.push(...v.removed)}return a==null||a.attemptAutoclose("remove-entity",this.id),{added:R(e),updated:R(o),removed:R(f),affected:R(h),self:this}}restore({}={},i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"restore-entity"))){const a=[],o=[],f=[],e=[];if(i!=null&&i.hasAdded(this.id))return i==null||i.attemptAutoclose("restore-entity",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(h=>{const{updated:v,removed:T,added:g}=h.entity.onDetachedDependencyRestored(this,h.field,i);o.push(...v),f.push(...T),a.push(...g)}),this.defaultValue){const{updated:h}=this.defaultValue.restore({},i);o.push(...h)}if(this.writesValues.forEach(h=>{o.push(h),h.setValueWriter(this,i)}),e.push(this.parent),this.parent.addInputDeclaration(this,i),this.dataType){const{updated:h}=this.dataType.restore({},i);o.push(...h)}return i==null||i.attemptAutoclose("restore-entity",this.id),{added:R(a),updated:R(o),removed:R(f),affected:R(e),self:this}}toFlat(i=new Set){var o,f;return i.has(this.id)?[]:(i.add(this.id),[this,...((o=this.defaultValue)==null?void 0:o.toFlat(i))||[],...this.writesValues.flatMap(e=>e.toFlat(i)),...((f=this.dataType)==null?void 0:f.toFlat(i))||[]])}toFlatIds(i=new Set){var o,f;return i.has(this.id)?[]:(i.add(this.id),[this.id,...((o=this.defaultValue)==null?void 0:o.toFlatIds(i))||[],...this.writesValues.flatMap(e=>e.toFlatIds(i)),...((f=this.dataType)==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,codeName:this.codeName,description:this.description,index:this.index,required:this.required,constant:!0,type:this.type,name:this.name}}toJSON(i=new Set){var a,o,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,name:this.name,type:this.type,index:this.index,codeName:this.codeName,description:this.description,required:this.required,constant:!0,defaultValue:((a=this.defaultValue)==null?void 0:a.toJSON(i))||null,dataType:((o=this.dataType)==null?void 0:o.toJSON(i))||null,implements:((f=this.implements)==null?void 0:f.toJSON(i))||null,writesValues:this.writesValues.map(e=>e.toJSON(i)),parent:this.parent.toReference()})}toJSONClone(i=qe){var o,f,e,h,v,T,g,A;let a;return(o=i.seenEntityMaps)!=null&&o.has(this.id)?a=i.seenEntityMaps.get(this.id):(a=i.newId||Zi(this,this.project,i.uuidStrategy),i.seenEntityMaps&&i.seenEntityMaps.set(this.id,a)),(f=i.seenEntities)!=null&&f.has(a)||(e=i.seenEntities)!=null&&e.has(this.id)?this.toReference({seenEntityMaps:i.seenEntityMaps}):((h=i.seenEntities)==null||h.add(a),(v=i.seenEntities)==null||v.add(this.id),{id:a,version:N.UUID.uuid(),createdAt:i.timestamp||B().toISOString(),previousVersion:null,author:this.author,deleted:this.deleted,name:this.name,type:this.type,index:this.index,codeName:this.codeName,description:this.description,required:this.required,constant:!0,defaultValue:((T=this.defaultValue)==null?void 0:T.toJSONClone({...i,newId:null}))||null,dataType:((g=this.dataType)==null?void 0:g.toJSONClone({...i,newId:null}))||null,implements:((A=this.implements)==null?void 0:A.toJSONClone({...i,newId:null}))||null,writesValues:this.writesValues.map(O=>O.toJSONClone({...i,newId:null})),parent:this.parent.toReference({seenEntityMaps:i.seenEntityMaps})})}toReference(i=qe){var o;let a=this.id;return(o=i.seenEntityMaps)!=null&&o.has(this.id)&&(a=i.seenEntityMaps.get(this.id)),{id:a+"--"+N.UUID.uuid()+"--ref",type:c.GenericReference,entityId:a,version:this.version,entityType:this.type}}toShallowJSON(i=qe){var o,f,e,h;let a=this.id;return(o=i.seenEntityMaps)!=null&&o.has(this.id)&&(a=i.seenEntityMaps.get(this.id)),{id:a,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,index:this.index,required:this.required,constant:!0,defaultValue:((f=this.defaultValue)==null?void 0:f.toReference(i))||null,writesValues:this.writesValues.map(v=>v.toReference(i)),implements:((e=this.implements)==null?void 0:e.toReference(i))||null,dataType:((h=this.dataType)==null?void 0:h.toReference(i))||null,parent:this.parent.toReference(i)}}toFlatJSON(i=new Set){var o,f;return i.has(this.id)?[]:(i.add(this.id),[this.toShallowJSON(),...((o=this.defaultValue)==null?void 0:o.toFlatJSON(i))||[],...this.writesValues.flatMap(e=>e.toFlatJSON(i)),...((f=this.dataType)==null?void 0:f.toFlatJSON(i))||[]])}toGenerationTarget(){return{id:this.id,name:this.name,codeName:this.codeName,description:this.description,type:this.type,required:this.required,constant:!0,parent:this.parent.id}}toFlatGenerationTarget(i=new Set){var o,f;return i.has(this.id)?[]:(i.add(this.id),[this.toGenerationTarget(),...((o=this.defaultValue)==null?void 0:o.toFlatGenerationTarget(i))||[],...this.writesValues.flatMap(e=>e.toFlatGenerationTarget(i)),...((f=this.dataType)==null?void 0:f.toFlatGenerationTarget(i))||[]])}clearErrors(){var i,a;return this.errors=[],(i=this.defaultValue)==null||i.clearErrors(),(a=this.dataType)==null||a.clearErrors(),this}validate(){const i=G6(this);return this.errors=i,{success:!0}}getErrors(){var a,o;return[...this.errors,...((a=this.defaultValue)==null?void 0:a.getErrors())||[],...((o=this.dataType)==null?void 0:o.getErrors())||[]]}getShallowErrors(){return this.errors}getDefaultValue(){var i;return(this==null?void 0:this.defaultValue)||((i=this.implements)==null?void 0:i.getDefaultValue())||null}setDefaultValue(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"set-default-value"))){const o=this.defaultValue;return(o==null?void 0:o.id)!==(i==null?void 0:i.id)&&(o==null||o.remove({ignoreUpstream:!0},a),this.defaultValue=i,a==null||a.add(this,k.Affected)),a==null||a.attemptAutoclose("set-default-value",this.id),this}clone(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"clone-entity")),a=null,o=null,f=!0){var O,V;let e=Ki(a,this);const h=this.toJSON(),v=o||N.UUID.uuid();h.dataType=null,h.id=v,h.version=N.UUID.uuid(),h.createdAt=(i==null?void 0:i.timestamp)||B().toISOString(),h.author=(i==null?void 0:i.author)||"1",h.previousVersion=null,h.deleted=!1;const T=fi(h,e);a?T.setParent(a,null):T.setParent(this.parent,null),f&&T.subscribe(),T.initChildren(i),i==null||i.add(T,k.Added);const g=(O=this.dataType)==null?void 0:O.clone(i,T,N.UUID.uuid(),f);T.setDataType(g||null,i);const A=(V=this.defaultValue)==null?void 0:V.clone(i,T,N.UUID.uuid(),f);return T.defaultValue=A||null,i==null||i.attemptAutoclose("clone-entity",this.id),T}getDataType(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"get-data-type"))){return this.dataType}setDataType(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"set-data-type"))){const o=this.dataType;return(o==null?void 0:o.id)!==(i==null?void 0:i.id)&&(o==null||o.remove({ignoreUpstream:!0},a),this.dataType=i,this.subscribeToDependencies(),a==null||a.add(this,k.Affected)),a==null||a.attemptAutoclose("set-data-type",this.id),this}removeDataType(){return this.dataType=null,this}syncWithImplementation(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"sync-with-implementation"))){const a=[],o=[],f=[],e=[];if(!this.implements)return i==null||i.attemptAutoclose("sync-with-implementation",this.id),{added:R(o),updated:R(a),removed:R(f),affected:R(e),self:this};const h=this.implements.getDataType(i);if(!h)return i==null||i.attemptAutoclose("sync-with-implementation",this.id),{added:R(o),updated:R(a),removed:R(f),affected:R(e),self:this};let v=this.getDataType(i);return v?v&&v.merge(h,i):v=h.clone(i,this),this.setDataType(v,i),i==null||i.attemptAutoclose("sync-with-implementation",this.id),{added:R(o),updated:R(a),removed:R(f),affected:R(e),self:this}}};D(Lt,"repository",{APICreate:async(i,...a)=>i,APIUpdate:async(i,...a)=>i,APIDelete:async(i,...a)=>i,APIClone:async(i,...a)=>{},APILoad:async(i,...a)=>null,APILoadVersion:async(i,a,...o)=>null}),D(Lt,"type",c.ArgumentDeclaration),D(Lt,"USER_MANAGED_PARENT_TYPES",[...Pt]),D(Lt,"PARENT_TYPES",[...Lt.USER_MANAGED_PARENT_TYPES]),D(Lt,"MUTABLE_BASE_PROPERTIES",["name","codeName","description","required","constant"]),D(Lt,"INMUTABLE_BASE_PROPERTIES",["id","type","version","createdAt","author","previousVersion"]),D(Lt,"BASE_PROPERTIES",[...Lt.MUTABLE_BASE_PROPERTIES,...Lt.INMUTABLE_BASE_PROPERTIES]),D(Lt,"MUTABLE_META_PROPERTIES",[...Lt.MUTABLE_BASE_PROPERTIES,"index"]),D(Lt,"INMUTABLE_META_PROPERTIES",[...Lt.INMUTABLE_BASE_PROPERTIES]),D(Lt,"META_PROPERTIES",[...Lt.MUTABLE_META_PROPERTIES,...Lt.INMUTABLE_META_PROPERTIES]),D(Lt,"MUTABLE_UPSTREAM_PROPERTIES",[]),D(Lt,"INMUTABLE_UPSTREAM_PROPERTIES",["parent","implements"]),D(Lt,"UPSTREAM_PROPERTIES",[...Lt.MUTABLE_UPSTREAM_PROPERTIES,...Lt.INMUTABLE_UPSTREAM_PROPERTIES]),D(Lt,"MUTABLE_DOWNSTREAM_PROPERTIES",["writesValues","dataType","defaultValue"]),D(Lt,"INMUTABLE_DOWNSTREAM_PROPERTIES",[]),D(Lt,"DOWNSTREAM_PROPERTIES",[...Lt.MUTABLE_DOWNSTREAM_PROPERTIES,...Lt.INMUTABLE_DOWNSTREAM_PROPERTIES]),D(Lt,"PROPERTIES",[...Lt.META_PROPERTIES,...Lt.UPSTREAM_PROPERTIES,...Lt.DOWNSTREAM_PROPERTIES]);let ta=Lt;function k6(d){const u=_Ae(d),i=DAe(d),a=_n(d);d.inputs.forEach(f=>f.validate()),a.forEach(f=>f.validate());const o=[...u,...i,...S6(d),...ib(d)];return gi(d.errors,o)}function _Ae(d){const u=[];if(!d.calls.length&&!d.extends){const i=wt({id:`${d.id}--${ie.ScopeWithoutLogic}`,message:`Action "${W(d,d.project)}" with id "${d.id}" does not have any logic defined. So it doesn't do anything.`,severity:H.Warning,code:ie.ScopeWithoutLogic,entity:d});u.push(i.error)}return gi(d.errors,u)}function DAe(d){const u=[];return d.implements,gi(d.errors,u)}function S6(d,u){const i=d.parent.type===c.DefinitionEntity?d.parent.methods.filter(f=>f.id!==d.id):[],o=[...d.project.functions,...i].filter(f=>f.id!==d.id);return Df(d,[qi],o,u)}const CAe=Object.freeze(Object.defineProperty({__proto__:null,validate:k6,validateFunctionDeclarationName:S6},Symbol.toStringTag,{value:"Module"}));var K6=(d=>(d.FunctionDeclarationImplements="function-declaration-implements",d.FunctionDeclarationExtends="function-declaration-extends",d))(K6||{});const Mt=class Mt extends Bi{constructor(i,a){super(i);D(this,"initialData");D(this,"id");D(this,"name");D(this,"codeName",null);D(this,"description",null);D(this,"x");D(this,"y");D(this,"collapsed");D(this,"private");D(this,"index",null);D(this,"type",c.FunctionDeclaration);D(this,"implements",null);D(this,"extends",null);D(this,"inputs",[]);D(this,"calls",[]);D(this,"parent");D(this,"detachedChildren",[]);D(this,"errors",[]);D(this,"project");D(this,"detachedDependents",{});D(this,"knownVersions",null);D(this,"activeVersion",!1);D(this,"initialized",!1);D(this,"startedInitialization",!1);D(this,"suggestion",!1);this.initialData=i,this.project=a,this.id=i.id,this.name=i.name,this.description=i.description,this.private=i.private,this.collapsed=i.collapsed,this.x=i.x,this.y=i.y,this.codeName=i.codeName,this.index=i.index}static new(i=null){return{id:N.UUID.uuid(),version:N.UUID.uuid(),createdAt:(i==null?void 0:i.timestamp)||B().toISOString(),author:(i==null?void 0:i.author)||N.sessionAuthor,previousVersion:null,deleted:!1,type:c.FunctionDeclaration,name:"",codeName:null,description:"",collapsed:!1,private:!1,index:null,implements:null,extends:null,inputs:[],parent:null,calls:[],x:0,y:0}}static fromGenerationTarget(i,a){let o=a;if(i.parent){const T=J(i.parent);o=a.get(T)}let f=null;if(i.implements){const T=J(i.implements);f=a.get(T)}let e=null;if(i.extends){const T=J(i.extends);e=a.get(T)}const h={id:i.id,version:N.UUID.uuid(),createdAt:B().toISOString(),author:N.sessionAuthor,previousVersion:null,deleted:!1,name:i.name,type:c.FunctionDeclaration,index:o.type===c.DefinitionEntity?o.methods.length:null,codeName:i.codeName||null,description:i.description||null,collapsed:!1,private:!1,calls:[],inputs:[],implements:f,extends:e,x:0,y:0,parent:o},v=oe(h,a);return v.setParent(o,null),v}static validateGenerationTarget(i,a){var A;let o=JSON.parse(JSON.stringify(i));const f=[],e=ur(o,{parent:{list:!1,types:[c.Project,c.InstalledProject,c.DefinitionEntity,c.Loop],optional:!0},implements:{list:!1,types:[c.ActionDescriptor],optional:!0}},a);o=e.modifiedData;const h=wb(o,a),v=o.parent?a.get(o.parent):null;if(v&&v.type===c.DefinitionEntity){const O=v,x=Lr(O).filter(S=>!S.interactive),U=O.methods.find(S=>{var q;return((q=S.implements)==null?void 0:q.id)===o.implements});if(U&&f.push(new le({id:`${o.id}--${ae.MethodOverwritesOtherSiblingWithSameImplementation}`,code:ae.MethodOverwritesOtherSiblingWithSameImplementation,severity:H.Error,message:`The '${c.FunctionDeclaration}' with id "${o.id}" is trying to implement the '${c.ActionDescriptor}' with id "${o.implements}", but the parent definition-entity already has a ${c.FunctionDeclaration} with id '${U.id}' that implements the same base method.
59
59
  A ${c.FunctionDeclaration} that has a parent of type '${c.DefinitionEntity}' is considered a method of that entity, and cannot implement the same '${c.ActionDescriptor}' more than once.
60
60
  ${c.ActionDescriptor} entities inside a ${c.DefinitionEntity} are considered abstract methods that can be implemented by ${c.FunctionDeclaration} entities inside the same parent.
61
61
  If you want to modify the existing implementation, you can update the existing method instead, but it will have to match the same base ${c.ActionDescriptor} signature, otherwise the implementation will have a validation error.`})),!o.implements&&x.length){let S=x.length>1?`The entity of type '${i.type}' with id '${i.id}' can't be added to the 'parent' entity with id '${O.id}' because it extends or implements multiple '${c.BuiltInBaseEntity}' entities that are non-interactive ("${lt(x.map(q=>W(q,q.project)),'", "','" and "')}").`:`The entity of type '${i.type}' with id '${i.id}' can't be added to the 'parent' entity with id '${O.id}' because it extends or implements a '${c.BuiltInBaseEntity}' entity that is non-interactive ("${W(x[0],x[0].project)}").`;S+=`
@@ -190,7 +190,7 @@ The parent ${h.type} has a data-type that references an entity with `;S.length?q
190
190
  The entity is ${ob(x,a)}`,q+="Technically, an implemented variable-declaration or variable-instance will be generated with all ",f.push(new le({id:`${o.id}--${ae.NoOverlapWithImplementedSignature}`,code:ae.NoOverlapWithImplementedSignature,severity:H.Error,message:`Entity of type '${c.InputMap}' with id '${o.id}' cannot be added to the parent entity of type '${h.type}' with id '${h.id}'. The 'declaration' with '${v.id}' of the 'input-map' does not exist in 'entity' field implemented the parent ${h.type}'s 'data-type'.${q}`}))}}else if(oi.filter(A=>At.includes(A)).includes(h.type)){const O=hb(h),V=O.find(U=>U.id===o.declaration),x=`The parent entity has the following argument declarations that can be referenced by input-maps, ids: '${lt(O.map(U=>U.id),"', '","' and '")}'`;V||f.push(new le({id:`${o.id}--${ae.NoOverlapWithImplementedSignature}`,code:ae.NoOverlapWithImplementedSignature,severity:H.Error,message:`Entity of type '${c.InputMap}' with id '${o.id}' cannot be added to the parent entity of type '${h.type}' with id '${h.id}'. The parent entity does not have an 'argument-declaration' with id '${o.declaration}'.
191
191
  You can't add an input-map to an entity that doesn't have a matching 'argument-declaration'.
192
192
  ${x}`}))}}return f.push(...e.errors,...ji(o)),{errors:f,modifiedData:o}}get codeNativeValueValidation(){var i;return this._codeNativeValueValidation||((i=this.declaration)==null?void 0:i.codeNativeValueValidation)||null}validateGeneratedUpdate(i){const a=[];let o=JSON.parse(JSON.stringify(i));const f=_f(o,this);return o=f.modifiedData,a.push(...f.errors),o.parent&&a.push(new le({id:`${this.id}--${K.InvalidParentUpdate}`,code:K.InvalidParentUpdate,severity:H.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.
193
- 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.`})),{errors:a,modifiedData:o}}subscribeDependents(i){return i.forEach(a=>{this.detachedDependents[a.entity.id]||(this.detachedDependents[a.entity.id]=a)}),this}unsubscribeDependents(i){return i.forEach(a=>{this.detachedDependents[a.entity.id]&&delete this.detachedDependents[a.entity.id]}),this}syncDependents(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"sync-dependents"))){const a=[],o=[],f=[],e=[];return Object.values(this.detachedDependents).forEach(h=>{const v=h.entity.afterAllChildrenInitialized(i);a.push(...v.updated),o.push(...v.added),f.push(...v.removed),e.push(...v.affected)}),i==null||i.attemptAutoclose("sync-dependents",this.id),{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}onDetachedDependencyRemoved(i,a,o){const f=[],e=[],h=[],v=[];if(a==="declaration"){const{updated:T,added:g,removed:A}=this.remove({ignoreUpstream:!1},o);f.push(...T),e.push(...g),h.push(...A)}return{updated:R(f),added:R(e),removed:R(h),affected:R(v),self:this}}onDetachedDependencyRestored(i,a,o){const f=[],e=[],h=[],v=[];if(a==="declaration"){const{updated:T,added:g,removed:A}=this.restore({},o);f.push(...T),e.push(...g),h.push(...A)}return{updated:R(f),added:R(e),removed:R(h),affected:R(v),self:this}}unsubscribeFromDependencies(){var i,a,o,f,e;return(a=(i=this.declaration)==null?void 0:i.unsubscribeDependents)==null||a.call(i,[{entity:this,field:"declaration"}]),(e=(f=(o=this.dataType)==null?void 0:o.entity)==null?void 0:f.unsubscribeDependents)==null||e.call(f,[{entity:this,field:"data-type-entity"}]),this}subscribeToDependencies(){var i,a,o,f,e;return(a=(i=this.declaration)==null?void 0:i.subscribeDependents)==null||a.call(i,[{entity:this,field:"declaration"}]),(e=(f=(o=this.dataType)==null?void 0:o.entity)==null?void 0:f.subscribeDependents)==null||e.call(f,[{entity:this,field:"data-type-entity"}]),this}increaseVersion(i){if(i&&!B(i).isValid())throw new Error(`The shared timestamp '${i}' is not a valid ISO 8601 date string.`);return i&&B(i).isSame(B(this.createdAt))?this:(this.previousVersion=this.version,this.version=N.UUID.uuid(),this.createdAt=B(i).toISOString()||B().toISOString(),this)}captureVersion(){var a;const i=((a=this.knownVersions)==null?void 0:a.get(this.version))||new qt(this,this.project);return i.metaSync(this.toMeta(),null),this.knownVersions=this.knownVersions?this.knownVersions.set(this.version,i):new Map([[this.version,i]]),i.declaration=this.declaration,i.defaultValue=this.defaultValue,i.readsValue=this.readsValue,i.dataType=this.dataType,i.parent=this.parent,this}recursiveCaptureUpstreamVersions(i){const a=[],o=[],f=[],e=[];if(this.parent){this.parent.increaseVersion(i);const h=this.parent.recursiveCaptureUpstreamVersions(i);a.push(this.parent,...h.updated),o.push(...h.added),f.push(...h.removed)}return{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}async restoreVersion(i){var v;const a=[],o=[],f=[],e=[];if(this.version===i)return{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this};if(!this.knownVersions){const T=new Map;for(const[g,A]of this.knownVersions||new Map){if(T.set(g,A),A.activeVersion=!1,A.knownVersions)for(const[O,V]of A.knownVersions)T.set(O,V);A.knownVersions=null}}let h=(v=this.knownVersions)==null?void 0:v.get(i);if(!h){const T=await this.APILoadVersion({},i);if(!T)throw new Error(`Version with id '${i}' for entity with id '${this.id}' not found.`);h=new qt(T,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.declaration=h.declaration,this.defaultValue=h.defaultValue,this.readsValue=h.readsValue,this.dataType=h.dataType,this.parent=h.parent,{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}updateWithShallowTransfer(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"update-with-shallow-transfer"))){if(this.metaSync(i,a),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 o=J(i.parent),f=this.project.get(o),e=this.parent;if(e&&e.id!==(f==null?void 0:f.id)&&this.removeFromParent(a),f)this.setParent(f,a);else throw a==null||a.attemptAutoclose("update-with-shallow-transfer",this.id),new Error(`${this.type} with id '${this.id}' has a 'parent' reference '${o}' that isn't found in the project`)}else throw a==null||a.attemptAutoclose("update-with-shallow-transfer",this.id),new Error(`${this.type} with id '${this.id}' must have a 'parent'`);if(i.readsValue){const o=J(i.readsValue),f=this.project.get(o),e=this.readsValue;e&&e.id!==(f==null?void 0:f.id)&&this.removeValueWriter(a),f&&this.setValueWriter(f,a)}if(i.declaration){const o=J(this.initialData.declaration),f=this.project.get(o);f&&this.setDeclaration(f,a)}return this.captureVersion(),this.subscribeToDependencies(),a==null||a.attemptAutoclose("update-with-shallow-transfer",this.id),this}hydrateAncestors(){const i=[],a=[],o=[],f=[];if(this.initialData.parent){const e=J(this.initialData.parent),h=this.project.get(e);if(h)this.setParent(h,null),i.push(h);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.readsValue){const e=J(this.initialData.readsValue),h=this.project.get(e);h&&(this.setValueWriter(h,null),i.push(h))}if(this.initialData.declaration){const e=J(this.initialData.declaration),h=this.project.get(e);h&&(this.setDeclaration(h,null),i.push(h))}return{updated:R(i),added:R(a),removed:R(o),affected:R(f),self:this}}afterAllChildrenInitialized(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"after-all-children-initialized"))){const a=[],o=[],f=[],e=[];return this.initialized=!0,this.captureVersion(),i==null||i.attemptAutoclose("after-all-children-initialized",this.id),{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}addSelfToProject(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"add-self-to-project"))){var h;const a=[this],o=[],f=[],e=[];return this.parent.addInput(this,i),e.push(this.parent),(h=this.readsValue)==null||h.addValueReader(this,i),this.readsValue&&a.push(this.readsValue),this.subscribe(),this.subscribeToDependencies(),i==null||i.attemptAutoclose("add-self-to-project",this.id),{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}setParent(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"set-parent"))){var o;return((o=this.parent)==null?void 0:o.id)!==(i==null?void 0:i.id)&&(this.parent=i,a&&(a==null||a.add(this,k.Updated))),a==null||a.attemptAutoclose("set-parent",this.id),this}setDataType(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"set-data-type"))){const o=this.dataType;return(o==null?void 0:o.id)!==(i==null?void 0:i.id)&&(o==null||o.remove({ignoreUpstream:!0},a),this.dataType=i,this.subscribeToDependencies(),a==null||a.add(this,k.Affected)),a==null||a.attemptAutoclose("set-data-type",this.id),this}removeDataType(){return this.dataType=null,this}setDeclaration(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"set-declaration"))){var o;return((o=this.declaration)==null?void 0:o.id)!==(i==null?void 0:i.id)&&(this.declaration=i,a&&(a==null||a.add(this,k.Updated))),a==null||a.attemptAutoclose("set-declaration",this.id),this}initChildren(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"init-children"))){return this.initialized||this.startedInitialization?this:(this.startedInitialization=!0,this.initialData.defaultValue&&(this.defaultValue=oe(this.initialData.defaultValue,this.project),this.defaultValue.setParent(this,null),this.defaultValue.initChildren(i)),this.initialData.declaration&&(this.declaration=oe(this.initialData.declaration,this.project)),Uf.initReadsValue(this),this.subscribeToDependencies(),this.afterAllChildrenInitialized(i),i==null||i.attemptAutoclose("init-children",this.id),this)}setValueWriter(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"set-value-writer"))){return this.readsValue!==i&&(this.readsValue=i,a==null||a.add(this,k.Updated)),a==null||a.attemptAutoclose("set-value-writer",this.id),this}removeValueWriter(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"remove-value-writer"))){return this.readsValue&&(this.readsValue=null,i==null||i.add(this,k.Updated)),i==null||i.attemptAutoclose("remove-value-writer",this.id),this}subscribe(){return this.activeVersion=!0,this.project.subscribeInstance(this),this}unsubscribe(){return this.project.unsubscribeInstance(this),this}metaSync(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"meta-sync"))){const o=Fi(this,i),f=this.toMeta();return this.index=i.index||(i.index!==0?f.index:0),this.name=i.name!==void 0?i.name:f.name,this.codeName=i.codeName!==void 0?i.codeName:f.codeName,this.description=i.description!==void 0?i.description:f.description,super.metaSync(i),i.deleted===!0&&!f.deleted?a==null||a.add(this,k.Removed):i.deleted===!1&&f.deleted?a==null||a.add(this,k.Added):o&&(a==null||a.add(this,k.Updated)),a==null||a.attemptAutoclose("meta-sync",this.id),this}async APILoad(i=Te,...a){return await qt.repository.APILoad(this.id,...a),this}async APICreate(i=Te,...a){return await qt.repository.APICreate(this.toShallowJSON(),...a),this}async APIUpdate(i=Te,...a){return await qt.repository.APIUpdate(this.toShallowJSON(),...a),this}async APIDelete(i=Te,...a){return await qt.repository.APIDelete(this.toShallowJSON(),...a),this}async APIClone(i=Te,...a){return await qt.repository.APIClone(this.id,...a),this}async APILoadVersion(i=Te,a,...o){return await qt.repository.APILoadVersion(this.id,a,...o)}removeFromParent(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"remove-from-parent"))){const a=[],o=[],f=[],e=[];return this.parent.removeInput(this,i),e.push(this.parent),i==null||i.attemptAutoclose("remove-from-parent",this.id),{added:R(f),updated:R(a),removed:R(o),affected:R(e),self:this}}remove({ignoreUpstream:i}={ignoreUpstream:!1},a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"remove-entity"))){var v,T,g,A;const o=[],f=[],e=[],h=[];if(a!=null&&a.hasRemoved(this.id))return a==null||a.attemptAutoclose("remove-entity",this.id),{added:[],updated:[],removed:[],affected:[],self:this};if(f.push(this),this.unsubscribe(),this.unsubscribeFromDependencies(),this.project.subscribeDeletedInstance(this),this.metaSync({deleted:!0},a),Object.values(this.detachedDependents).forEach(O=>{const{updated:V,removed:x,added:U}=O.entity.onDetachedDependencyRemoved(this,O.field,a);o.push(...V),f.push(...x),e.push(...U)}),this.defaultValue){const{updated:O,removed:V}=this.defaultValue.remove({ignoreUpstream:!0},a);o.push(...O),f.push(...V)}if(this.readsValue&&(o.push(this.readsValue),this.readsValue.removeValueReader(this,a)),this.defaultValue&&(o.push(this.defaultValue),this.defaultValue.remove({ignoreUpstream:!0},a)),this.declaration){if(this.declaration.type===c.Property&&((v=this.declaration.parent)==null?void 0:v.type)===c.DefinitionEntity&&((g=(T=this.declaration.parent)==null?void 0:T.parent)==null?void 0:g.type)===c.DataType&&!(a!=null&&a.hasRemoved(this.declaration.id))&&!this.declaration.deleted){const{updated:O,removed:V}=this.declaration.remove({ignoreUpstream:!1},a);o.push(...O),f.push(...V)}else if(this.declaration.type===c.ValueDescriptor&&((A=this.declaration.parent)==null?void 0:A.type)===c.Search&&!(a!=null&&a.hasRemoved(this.declaration.id))&&!this.declaration.deleted){const{updated:O,removed:V}=this.declaration.remove({ignoreUpstream:!1},a);o.push(...O),f.push(...V)}}if(!i){const O=this.removeFromParent(a);e.push(...O.added),o.push(...O.updated),f.push(...O.removed),h.push(...O.affected)}return a==null||a.attemptAutoclose("remove-entity",this.id),{added:R(e),updated:R(o),removed:R(f),affected:R(h),self:this}}restore({}={},i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"restore-entity"))){const a=[],o=[],f=[],e=[];if(i!=null&&i.hasAdded(this.id))return i==null||i.attemptAutoclose("restore-entity",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(h=>{const{updated:v,removed:T,added:g}=h.entity.onDetachedDependencyRestored(this,h.field,i);o.push(...v),f.push(...T),a.push(...g)}),this.defaultValue){const{updated:h}=this.defaultValue.restore({},i);o.push(...h)}return this.readsValue&&(o.push(this.readsValue),this.readsValue.addValueReader(this,i)),this.defaultValue&&(o.push(this.defaultValue),this.defaultValue.restore({},i)),e.push(this.parent),this.parent.addInput(this,i),i==null||i.attemptAutoclose("restore-entity",this.id),{added:R(a),updated:R(o),removed:R(f),affected:R(e),self:this}}toFlat(i=new Set){return i.has(this.id)?[]:(i.add(this.id),[this,...this.defaultValue?this.defaultValue.toFlat(i):[],...this.dataType?this.dataType.toFlat(i):[],...this.declaration?this.declaration.toFlat(i):[],...this.readsValue?this.readsValue.toFlat(i):[]])}toFlatIds(i=new Set){return i.has(this.id)?[]:(i.add(this.id),[this.id,...this.defaultValue?this.defaultValue.toFlatIds(i):[],...this.dataType?this.dataType.toFlatIds(i):[],...this.declaration?this.declaration.toFlatIds(i):[],...this.readsValue?this.readsValue.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,type:this.type,name:this.name}}toJSON(i=new Set){var a,o,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,index:this.index,name:this.name,codeName:this.codeName,description:this.description,defaultValue:((a=this.defaultValue)==null?void 0:a.toJSON(i))||null,declaration:((o=this.declaration)==null?void 0:o.toJSON(i))||null,readsValue:((f=this.readsValue)==null?void 0:f.toReference())||null,parent:this.parent.toReference()})}toJSONClone(i=qe){var o,f,e,h,v,T,g,A,O,V,x;let a;return(o=i.seenEntityMaps)!=null&&o.has(this.id)?a=i.seenEntityMaps.get(this.id):(a=i.newId||Zi(this,this.project,i.uuidStrategy),i.seenEntityMaps&&i.seenEntityMaps.set(this.id,a)),(f=i.seenEntities)!=null&&f.has(a)||(e=i.seenEntities)!=null&&e.has(this.id)?this.toReference({seenEntityMaps:i.seenEntityMaps}):((h=i.seenEntities)==null||h.add(a),(v=i.seenEntities)==null||v.add(this.id),{id:a,version:N.UUID.uuid(),createdAt:i.timestamp||B().toISOString(),previousVersion:null,author:this.author,deleted:this.deleted,type:this.type,index:this.index,name:this.name,codeName:this.codeName,description:this.description,defaultValue:((T=this.defaultValue)==null?void 0:T.toJSONClone({...i,newId:null}))||null,declaration:(g=this.declaration)!=null&&g.id&&this.project.getBuiltIn((A=this.declaration)==null?void 0:A.id)?(O=this.declaration)==null?void 0:O.toJSON(i.seenEntities):((V=this.declaration)==null?void 0:V.toJSONClone({...i,newId:null}))||null,readsValue:((x=this.readsValue)==null?void 0:x.toReference({seenEntityMaps:i.seenEntityMaps}))||null,parent:this.parent.toReference({seenEntityMaps:i.seenEntityMaps})})}toReference(i=qe){var o;let a=this.id;return(o=i.seenEntityMaps)!=null&&o.has(this.id)&&(a=i.seenEntityMaps.get(this.id)),{id:a+"--"+N.UUID.uuid()+"--ref",type:c.GenericReference,entityId:a,version:this.version,entityType:this.type}}toShallowJSON(i=qe){var o,f,e,h;let a=this.id;return(o=i.seenEntityMaps)!=null&&o.has(this.id)&&(a=i.seenEntityMaps.get(this.id)),{id:a,version:this.version,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,type:this.type,name:this.name,codeName:this.codeName,description:this.description,index:this.index,defaultValue:((f=this.defaultValue)==null?void 0:f.toReference(i))||null,declaration:((e=this.declaration)==null?void 0:e.toReference(i))||null,readsValue:((h=this.readsValue)==null?void 0:h.toReference(i))||null,parent:this.parent.toReference(i)}}toFlatJSON(i=new Set){return i.has(this.id)?[]:(i.add(this.id),[this.toShallowJSON(),...this.defaultValue?this.defaultValue.toFlatJSON(i):[],...this.dataType?this.dataType.toFlatJSON(i):[],...this.declaration?this.declaration.toFlatJSON(i):[],...this.readsValue?this.readsValue.toFlatJSON(i):[]])}toGenerationTarget(){var i;return{id:this.id,name:this.name||void 0,description:this.description||void 0,type:this.type,declaration:((i=this.declaration)==null?void 0:i.id)||null,parent:this.parent.id}}toFlatGenerationTarget(i=new Set){return i.has(this.id)?[]:(i.add(this.id),[this.toGenerationTarget(),...this.defaultValue?this.defaultValue.toFlatGenerationTarget(i):[],...this.dataType?this.dataType.toFlatGenerationTarget(i):[],...this.readsValue?this.readsValue.toFlatGenerationTarget(i):[],...this.declaration?this.declaration.toFlatGenerationTarget(i):[]])}clearErrors(){var i;return this.errors=[],(i=this.defaultValue)==null||i.clearErrors(),this}validate(){const i=d8(this);return this.errors=i,{success:!0}}getErrors(){var a;return[...this.errors,...((a=this.defaultValue)==null?void 0:a.getErrors())||[]]}getShallowErrors(){return this.errors}getDefaultValue(){var i;return this.defaultValue||((i=this.declaration)==null?void 0:i.defaultValue)||null}setDefaultValue(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"set-default-value"))){const o=this.defaultValue;return(o==null?void 0:o.id)!==(i==null?void 0:i.id)&&(o==null||o.remove({ignoreUpstream:!0},a),this.defaultValue=i,a==null||a.add(this,k.Affected)),a==null||a.attemptAutoclose("set-default-value",this.id),this}clone(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"clone-entity")),a=null,o=null,f=!0){var A;let e=Ki(a,this);const h=this.toJSON(),v=o||N.UUID.uuid();h.defaultValue=null,h.id=v,h.version=N.UUID.uuid(),h.createdAt=(i==null?void 0:i.timestamp)||B().toISOString(),h.author=(i==null?void 0:i.author)||"1",h.previousVersion=null,h.deleted=!1;const T=fi(h,e);a?T.setParent(a,null):T.setParent(this.parent,null),f&&T.subscribe(),T.initChildren(i),i==null||i.add(T,k.Added);const g=(A=this.defaultValue)==null?void 0:A.clone(i,T,N.UUID.uuid(),f);return T.defaultValue=g||null,i==null||i.attemptAutoclose("clone-entity",this.id),T}getDataType(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"get-data-type"))){var o;if(this.parent.type===c.Operation)return this.parent.declaration.inferInputMapDataType(this,i).self;At.includes(this.parent.type)&&Sr(this.parent).getDataType(i);const a=(o=this.declaration)==null?void 0:o.getDataType(i);if(!a){const f=Os(this,i);if(f)return f}return a||null}};D(qt,"repository",{APICreate:async(i,...a)=>i,APIUpdate:async(i,...a)=>i,APIDelete:async(i,...a)=>i,APIClone:async(i,...a)=>{},APILoad:async(i,...a)=>null,APILoadVersion:async(i,a,...o)=>null}),D(qt,"type",c.InputMap),D(qt,"USER_MANAGED_PARENT_TYPES",[...oi]),D(qt,"PARENT_TYPES",[...qt.USER_MANAGED_PARENT_TYPES]),D(qt,"MUTABLE_BASE_PROPERTIES",["name","codeName","description"]),D(qt,"INMUTABLE_BASE_PROPERTIES",["id","type","version","createdAt","author","previousVersion"]),D(qt,"BASE_PROPERTIES",[...qt.MUTABLE_BASE_PROPERTIES,...qt.INMUTABLE_BASE_PROPERTIES]),D(qt,"MUTABLE_META_PROPERTIES",[...qt.MUTABLE_BASE_PROPERTIES,"index"]),D(qt,"INMUTABLE_META_PROPERTIES",[...qt.INMUTABLE_BASE_PROPERTIES]),D(qt,"META_PROPERTIES",[...qt.MUTABLE_META_PROPERTIES,...qt.INMUTABLE_META_PROPERTIES]),D(qt,"MUTABLE_UPSTREAM_PROPERTIES",["readsValue"]),D(qt,"INMUTABLE_UPSTREAM_PROPERTIES",["parent","declaration"]),D(qt,"UPSTREAM_PROPERTIES",[...qt.MUTABLE_UPSTREAM_PROPERTIES,...qt.INMUTABLE_UPSTREAM_PROPERTIES]),D(qt,"MUTABLE_DOWNSTREAM_PROPERTIES",["defaultValue"]),D(qt,"INMUTABLE_DOWNSTREAM_PROPERTIES",[]),D(qt,"DOWNSTREAM_PROPERTIES",[...qt.MUTABLE_DOWNSTREAM_PROPERTIES,...qt.INMUTABLE_DOWNSTREAM_PROPERTIES]),D(qt,"PROPERTIES",[...qt.META_PROPERTIES,...qt.UPSTREAM_PROPERTIES,...qt.DOWNSTREAM_PROPERTIES]);let aa=qt;class X1e extends aa{constructor(i,a){super(i,a);D(this,"declaration",null);D(this,"errors",[])}toJSON(i=new Set){return super.toJSON(i)}}class Q1e extends aa{constructor(i,a){super(i,a);D(this,"name",null);D(this,"description",null);D(this,"errors",[])}toJSON(i=new Set){return super.toJSON(i)}}function c8(d){const u=[...So(d)];return gi(d.errors,u)}const eRe=Object.freeze(Object.defineProperty({__proto__:null,validate:c8},Symbol.toStringTag,{value:"Module"}));var p8=(d=>(d.Declaration="declaration",d.DataTypeEntity="data-type-entity",d))(p8||{});const Zt=class Zt extends Bi{constructor(i,a){super(i);D(this,"initialData");D(this,"id");D(this,"index");D(this,"type",c.OutputMap);D(this,"parentRelationType");D(this,"defaultValue",null);D(this,"declaration",null);D(this,"writesValues",[]);D(this,"dataType",null);D(this,"project");D(this,"errors",[]);D(this,"parent");D(this,"detachedDependents",{});D(this,"knownVersions",null);D(this,"activeVersion",!1);D(this,"initialized",!1);D(this,"startedInitialization",!1);D(this,"suggestion",!1);D(this,"_codeNativeValueValidation",null);this.initialData=i,this.project=a,this.id=i.id,this.index=i.index,this.parentRelationType=i.parentRelationType}static new(i=null){return{id:N.UUID.uuid(),version:N.UUID.uuid(),createdAt:(i==null?void 0:i.timestamp)||B().toISOString(),author:(i==null?void 0:i.author)||N.sessionAuthor,previousVersion:null,deleted:!1,type:c.OutputMap,declaration:null,writesValues:[],index:0,defaultValue:null,parent:null}}static fromGenerationTarget(i,a){const o=J(i.parent),f=a.get(o);let e;if(i.declaration){const T=J(i.declaration);e=a.get(T)}const h={id:i.id,version:N.UUID.uuid(),createdAt:B().toISOString(),author:N.sessionAuthor,previousVersion:null,deleted:!1,type:c.OutputMap,index:(f.outputs||[]).length,defaultValue:null,declaration:e,writesValues:[],parent:f},v=oe(h,a);return v.setParent(f,null),v}static validateGenerationTarget(i,a){var v;let o=JSON.parse(JSON.stringify(i));const f=[],e=ur(o,{parent:{list:!1,types:oi.filter(T=>T!==c.Condition)},declaration:{list:!1,types:[c.ReturnDeclaration,c.Property]}},a);o=e.modifiedData;const h=a.get(o.parent);if(h&&oi.filter(T=>T!==c.Condition).includes(h.type)){const T=h.outputs.find(g=>{var A;return((A=g.declaration)==null?void 0:A.id)===(o.declaration?J(o.declaration):null)});if(T)f.push(new le({id:`${o.id}--${K.OutputOverwrite}`,code:K.OutputOverwrite,severity:H.Error,message:`Entity of type '${c.OutputMap}' with id '${o.id}' cannot be added to the parent entity of type '${h.type}' with id '${h.id}'. The parent already has an output-map with id '${T.id}' that points to the same base 'return-declaration'.
193
+ 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.`})),{errors:a,modifiedData:o}}subscribeDependents(i){return i.forEach(a=>{this.detachedDependents[a.entity.id]||(this.detachedDependents[a.entity.id]=a)}),this}unsubscribeDependents(i){return i.forEach(a=>{this.detachedDependents[a.entity.id]&&delete this.detachedDependents[a.entity.id]}),this}syncDependents(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"sync-dependents"))){const a=[],o=[],f=[],e=[];return Object.values(this.detachedDependents).forEach(h=>{const v=h.entity.afterAllChildrenInitialized(i);a.push(...v.updated),o.push(...v.added),f.push(...v.removed),e.push(...v.affected)}),i==null||i.attemptAutoclose("sync-dependents",this.id),{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}onDetachedDependencyRemoved(i,a,o){const f=[],e=[],h=[],v=[];if(a==="declaration"){const{updated:T,added:g,removed:A}=this.remove({ignoreUpstream:!1},o);f.push(...T),e.push(...g),h.push(...A)}return{updated:R(f),added:R(e),removed:R(h),affected:R(v),self:this}}onDetachedDependencyRestored(i,a,o){const f=[],e=[],h=[],v=[];if(a==="declaration"){const{updated:T,added:g,removed:A}=this.restore({},o);f.push(...T),e.push(...g),h.push(...A)}return{updated:R(f),added:R(e),removed:R(h),affected:R(v),self:this}}unsubscribeFromDependencies(){var i,a,o,f,e;return(a=(i=this.declaration)==null?void 0:i.unsubscribeDependents)==null||a.call(i,[{entity:this,field:"declaration"}]),(e=(f=(o=this.dataType)==null?void 0:o.entity)==null?void 0:f.unsubscribeDependents)==null||e.call(f,[{entity:this,field:"data-type-entity"}]),this}subscribeToDependencies(){var i,a,o,f,e;return(a=(i=this.declaration)==null?void 0:i.subscribeDependents)==null||a.call(i,[{entity:this,field:"declaration"}]),(e=(f=(o=this.dataType)==null?void 0:o.entity)==null?void 0:f.subscribeDependents)==null||e.call(f,[{entity:this,field:"data-type-entity"}]),this}increaseVersion(i){if(i&&!B(i).isValid())throw new Error(`The shared timestamp '${i}' is not a valid ISO 8601 date string.`);return i&&B(i).isSame(B(this.createdAt))?this:(this.previousVersion=this.version,this.version=N.UUID.uuid(),this.createdAt=B(i).toISOString()||B().toISOString(),this)}captureVersion(){var a;const i=((a=this.knownVersions)==null?void 0:a.get(this.version))||new qt(this,this.project);return i.metaSync(this.toMeta(),null),this.knownVersions=this.knownVersions?this.knownVersions.set(this.version,i):new Map([[this.version,i]]),i.declaration=this.declaration,i.defaultValue=this.defaultValue,i.readsValue=this.readsValue,i.dataType=this.dataType,i.parent=this.parent,this}recursiveCaptureUpstreamVersions(i){const a=[],o=[],f=[],e=[];if(this.parent){this.parent.increaseVersion(i);const h=this.parent.recursiveCaptureUpstreamVersions(i);a.push(this.parent,...h.updated),o.push(...h.added),f.push(...h.removed)}return{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}async restoreVersion(i){var v;const a=[],o=[],f=[],e=[];if(this.version===i)return{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this};if(!this.knownVersions){const T=new Map;for(const[g,A]of this.knownVersions||new Map){if(T.set(g,A),A.activeVersion=!1,A.knownVersions)for(const[O,V]of A.knownVersions)T.set(O,V);A.knownVersions=null}}let h=(v=this.knownVersions)==null?void 0:v.get(i);if(!h){const T=await this.APILoadVersion({},i);if(!T)throw new Error(`Version with id '${i}' for entity with id '${this.id}' not found.`);h=new qt(T,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.declaration=h.declaration,this.defaultValue=h.defaultValue,this.readsValue=h.readsValue,this.dataType=h.dataType,this.parent=h.parent,{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}updateWithShallowTransfer(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"update-with-shallow-transfer"))){if(this.metaSync(i,a),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 o=J(i.parent),f=this.project.get(o),e=this.parent;if(e&&e.id!==(f==null?void 0:f.id)&&this.removeFromParent(a),f)this.setParent(f,a);else throw a==null||a.attemptAutoclose("update-with-shallow-transfer",this.id),new Error(`${this.type} with id '${this.id}' has a 'parent' reference '${o}' that isn't found in the project`)}else throw a==null||a.attemptAutoclose("update-with-shallow-transfer",this.id),new Error(`${this.type} with id '${this.id}' must have a 'parent'`);if(i.readsValue){const o=J(i.readsValue),f=this.project.get(o),e=this.readsValue;e&&e.id!==(f==null?void 0:f.id)&&this.removeValueWriter(a),f&&this.setValueWriter(f,a)}if(i.declaration){const o=J(this.initialData.declaration),f=this.project.get(o);f&&this.setDeclaration(f,a)}return this.captureVersion(),this.subscribeToDependencies(),a==null||a.attemptAutoclose("update-with-shallow-transfer",this.id),this}hydrateAncestors(){const i=[],a=[],o=[],f=[];if(this.initialData.parent){const e=J(this.initialData.parent),h=this.project.get(e);if(h)this.setParent(h,null),i.push(h);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.readsValue){const e=J(this.initialData.readsValue),h=this.project.get(e);h&&(this.setValueWriter(h,null),i.push(h))}if(this.initialData.declaration){const e=J(this.initialData.declaration),h=this.project.get(e);h&&(this.setDeclaration(h,null),i.push(h))}return{updated:R(i),added:R(a),removed:R(o),affected:R(f),self:this}}afterAllChildrenInitialized(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"after-all-children-initialized"))){const a=[],o=[],f=[],e=[];return this.initialized=!0,this.captureVersion(),i==null||i.attemptAutoclose("after-all-children-initialized",this.id),{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}addSelfToProject(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"add-self-to-project"))){var h;const a=[this],o=[],f=[],e=[];return this.parent.addInput(this,i),e.push(this.parent),(h=this.readsValue)==null||h.addValueReader(this,i),this.readsValue&&a.push(this.readsValue),this.subscribe(),this.subscribeToDependencies(),i==null||i.attemptAutoclose("add-self-to-project",this.id),{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}setParent(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"set-parent"))){var o;return((o=this.parent)==null?void 0:o.id)!==(i==null?void 0:i.id)&&(this.parent=i,a&&(a==null||a.add(this,k.Updated))),a==null||a.attemptAutoclose("set-parent",this.id),this}setDataType(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"set-data-type"))){const o=this.dataType;return(o==null?void 0:o.id)!==(i==null?void 0:i.id)&&(o==null||o.remove({ignoreUpstream:!0},a),this.dataType=i,this.subscribeToDependencies(),a==null||a.add(this,k.Affected)),a==null||a.attemptAutoclose("set-data-type",this.id),this}removeDataType(){return this.dataType=null,this}setDeclaration(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"set-declaration"))){var o;return((o=this.declaration)==null?void 0:o.id)!==(i==null?void 0:i.id)&&(this.declaration=i,a&&(a==null||a.add(this,k.Updated))),a==null||a.attemptAutoclose("set-declaration",this.id),this}initChildren(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"init-children"))){return this.initialized||this.startedInitialization?this:(this.startedInitialization=!0,this.initialData.defaultValue&&(this.defaultValue=oe(this.initialData.defaultValue,this.project),this.defaultValue.setParent(this,null),this.defaultValue.initChildren(i)),this.initialData.declaration&&(this.declaration=oe(this.initialData.declaration,this.project)),Uf.initReadsValue(this),this.subscribeToDependencies(),this.afterAllChildrenInitialized(i),i==null||i.attemptAutoclose("init-children",this.id),this)}setValueWriter(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"set-value-writer"))){return this.readsValue!==i&&(this.readsValue=i,a==null||a.add(this,k.Updated)),a==null||a.attemptAutoclose("set-value-writer",this.id),this}removeValueWriter(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"remove-value-writer"))){return this.readsValue&&(this.readsValue=null,i==null||i.add(this,k.Updated)),i==null||i.attemptAutoclose("remove-value-writer",this.id),this}subscribe(){return this.activeVersion=!0,this.project.subscribeInstance(this),this}unsubscribe(){return this.project.unsubscribeInstance(this),this}metaSync(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"meta-sync"))){const o=Fi(this,i),f=this.toMeta();return this.index=i.index||(i.index!==0?f.index:0),this.name=i.name!==void 0?i.name:f.name,this.codeName=i.codeName!==void 0?i.codeName:f.codeName,this.description=i.description!==void 0?i.description:f.description,super.metaSync(i),i.deleted===!0&&!f.deleted?a==null||a.add(this,k.Removed):i.deleted===!1&&f.deleted?a==null||a.add(this,k.Added):o&&(a==null||a.add(this,k.Updated)),a==null||a.attemptAutoclose("meta-sync",this.id),this}async APILoad(i=Te,...a){return await qt.repository.APILoad(this.id,...a),this}async APICreate(i=Te,...a){return await qt.repository.APICreate(this.toShallowJSON(),...a),this}async APIUpdate(i=Te,...a){return await qt.repository.APIUpdate(this.toShallowJSON(),...a),this}async APIDelete(i=Te,...a){return await qt.repository.APIDelete(this.toShallowJSON(),...a),this}async APIClone(i=Te,...a){return await qt.repository.APIClone(this.id,...a),this}async APILoadVersion(i=Te,a,...o){return await qt.repository.APILoadVersion(this.id,a,...o)}removeFromParent(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"remove-from-parent"))){const a=[],o=[],f=[],e=[];return this.parent.removeInput(this,i),e.push(this.parent),i==null||i.attemptAutoclose("remove-from-parent",this.id),{added:R(f),updated:R(a),removed:R(o),affected:R(e),self:this}}remove({ignoreUpstream:i}={ignoreUpstream:!1},a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"remove-entity"))){var v,T,g,A;const o=[],f=[],e=[],h=[];if(a!=null&&a.hasRemoved(this.id))return a==null||a.attemptAutoclose("remove-entity",this.id),{added:[],updated:[],removed:[],affected:[],self:this};if(f.push(this),this.unsubscribe(),this.unsubscribeFromDependencies(),this.project.subscribeDeletedInstance(this),this.metaSync({deleted:!0},a),Object.values(this.detachedDependents).forEach(O=>{const{updated:V,removed:x,added:U}=O.entity.onDetachedDependencyRemoved(this,O.field,a);o.push(...V),f.push(...x),e.push(...U)}),this.defaultValue){const{updated:O,removed:V}=this.defaultValue.remove({ignoreUpstream:!0},a);o.push(...O),f.push(...V)}if(this.readsValue&&(o.push(this.readsValue),this.readsValue.removeValueReader(this,a)),this.defaultValue&&(o.push(this.defaultValue),this.defaultValue.remove({ignoreUpstream:!0},a)),this.declaration){if(this.declaration.type===c.Property&&((v=this.declaration.parent)==null?void 0:v.type)===c.DefinitionEntity&&((g=(T=this.declaration.parent)==null?void 0:T.parent)==null?void 0:g.type)===c.DataType&&!(a!=null&&a.hasRemoved(this.declaration.id))&&!this.declaration.deleted){const{updated:O,removed:V}=this.declaration.remove({ignoreUpstream:!1},a);o.push(...O),f.push(...V)}else if(this.declaration.type===c.ValueDescriptor&&((A=this.declaration.parent)==null?void 0:A.type)===c.Search&&!(a!=null&&a.hasRemoved(this.declaration.id))&&!this.declaration.deleted){const{updated:O,removed:V}=this.declaration.remove({ignoreUpstream:!1},a);o.push(...O),f.push(...V)}}if(!i){const O=this.removeFromParent(a);e.push(...O.added),o.push(...O.updated),f.push(...O.removed),h.push(...O.affected)}return a==null||a.attemptAutoclose("remove-entity",this.id),{added:R(e),updated:R(o),removed:R(f),affected:R(h),self:this}}restore({}={},i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"restore-entity"))){const a=[],o=[],f=[],e=[];if(i!=null&&i.hasAdded(this.id))return i==null||i.attemptAutoclose("restore-entity",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(h=>{const{updated:v,removed:T,added:g}=h.entity.onDetachedDependencyRestored(this,h.field,i);o.push(...v),f.push(...T),a.push(...g)}),this.defaultValue){const{updated:h}=this.defaultValue.restore({},i);o.push(...h)}return this.readsValue&&(o.push(this.readsValue),this.readsValue.addValueReader(this,i)),this.defaultValue&&(o.push(this.defaultValue),this.defaultValue.restore({},i)),e.push(this.parent),this.parent.addInput(this,i),i==null||i.attemptAutoclose("restore-entity",this.id),{added:R(a),updated:R(o),removed:R(f),affected:R(e),self:this}}toFlat(i=new Set){return i.has(this.id)?[]:(i.add(this.id),[this,...this.defaultValue?this.defaultValue.toFlat(i):[],...this.dataType?this.dataType.toFlat(i):[],...this.declaration?this.declaration.toFlat(i):[],...this.readsValue?this.readsValue.toFlat(i):[]])}toFlatIds(i=new Set){return i.has(this.id)?[]:(i.add(this.id),[this.id,...this.defaultValue?this.defaultValue.toFlatIds(i):[],...this.dataType?this.dataType.toFlatIds(i):[],...this.declaration?this.declaration.toFlatIds(i):[],...this.readsValue?this.readsValue.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,type:this.type,name:this.name}}toJSON(i=new Set){var a,o,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,index:this.index,name:this.name,codeName:this.codeName,description:this.description,defaultValue:((a=this.defaultValue)==null?void 0:a.toJSON(i))||null,declaration:((o=this.declaration)==null?void 0:o.toJSON(i))||null,readsValue:((f=this.readsValue)==null?void 0:f.toReference())||null,parent:this.parent.toReference()})}toJSONClone(i=qe){var o,f,e,h,v,T,g,A,O,V,x;let a;return(o=i.seenEntityMaps)!=null&&o.has(this.id)?a=i.seenEntityMaps.get(this.id):(a=i.newId||Zi(this,this.project,i.uuidStrategy),i.seenEntityMaps&&i.seenEntityMaps.set(this.id,a)),(f=i.seenEntities)!=null&&f.has(a)||(e=i.seenEntities)!=null&&e.has(this.id)?this.toReference({seenEntityMaps:i.seenEntityMaps}):((h=i.seenEntities)==null||h.add(a),(v=i.seenEntities)==null||v.add(this.id),{id:a,version:N.UUID.uuid(),createdAt:i.timestamp||B().toISOString(),previousVersion:null,author:this.author,deleted:this.deleted,type:this.type,index:this.index,name:this.name,codeName:this.codeName,description:this.description,defaultValue:((T=this.defaultValue)==null?void 0:T.toJSONClone({...i,newId:null}))||null,declaration:(g=this.declaration)!=null&&g.id&&this.project.getBuiltIn((A=this.declaration)==null?void 0:A.id)?(O=this.declaration)==null?void 0:O.toJSON(i.seenEntities):((V=this.declaration)==null?void 0:V.toJSONClone({...i,newId:null}))||null,readsValue:((x=this.readsValue)==null?void 0:x.toReference({seenEntityMaps:i.seenEntityMaps}))||null,parent:this.parent.toReference({seenEntityMaps:i.seenEntityMaps})})}toReference(i=qe){var o;let a=this.id;return(o=i.seenEntityMaps)!=null&&o.has(this.id)&&(a=i.seenEntityMaps.get(this.id)),{id:a+"--"+N.UUID.uuid()+"--ref",type:c.GenericReference,entityId:a,version:this.version,entityType:this.type}}toShallowJSON(i=qe){var o,f,e,h;let a=this.id;return(o=i.seenEntityMaps)!=null&&o.has(this.id)&&(a=i.seenEntityMaps.get(this.id)),{id:a,version:this.version,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,type:this.type,name:this.name,codeName:this.codeName,description:this.description,index:this.index,defaultValue:((f=this.defaultValue)==null?void 0:f.toReference(i))||null,declaration:((e=this.declaration)==null?void 0:e.toReference(i))||null,readsValue:((h=this.readsValue)==null?void 0:h.toReference(i))||null,parent:this.parent.toReference(i)}}toFlatJSON(i=new Set){return i.has(this.id)?[]:(i.add(this.id),[this.toShallowJSON(),...this.defaultValue?this.defaultValue.toFlatJSON(i):[],...this.dataType?this.dataType.toFlatJSON(i):[],...this.declaration?this.declaration.toFlatJSON(i):[],...this.readsValue?this.readsValue.toFlatJSON(i):[]])}toGenerationTarget(){var i;return{id:this.id,name:this.name||void 0,description:this.description||void 0,type:this.type,declaration:((i=this.declaration)==null?void 0:i.id)||null,parent:this.parent.id}}toFlatGenerationTarget(i=new Set){return i.has(this.id)?[]:(i.add(this.id),[this.toGenerationTarget(),...this.defaultValue?this.defaultValue.toFlatGenerationTarget(i):[],...this.dataType?this.dataType.toFlatGenerationTarget(i):[],...this.readsValue?this.readsValue.toFlatGenerationTarget(i):[],...this.declaration?this.declaration.toFlatGenerationTarget(i):[]])}clearErrors(){var i;return this.errors=[],(i=this.defaultValue)==null||i.clearErrors(),this}validate(){const i=d8(this);return this.errors=i,{success:!0}}getErrors(){var a;return[...this.errors,...((a=this.defaultValue)==null?void 0:a.getErrors())||[]]}getShallowErrors(){return this.errors}getDefaultValue(){var i;return this.defaultValue||((i=this.declaration)==null?void 0:i.getDefaultValue())||null}setDefaultValue(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"set-default-value"))){const o=this.defaultValue;return(o==null?void 0:o.id)!==(i==null?void 0:i.id)&&(o==null||o.remove({ignoreUpstream:!0},a),this.defaultValue=i,a==null||a.add(this,k.Affected)),a==null||a.attemptAutoclose("set-default-value",this.id),this}clone(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"clone-entity")),a=null,o=null,f=!0){var A;let e=Ki(a,this);const h=this.toJSON(),v=o||N.UUID.uuid();h.defaultValue=null,h.id=v,h.version=N.UUID.uuid(),h.createdAt=(i==null?void 0:i.timestamp)||B().toISOString(),h.author=(i==null?void 0:i.author)||"1",h.previousVersion=null,h.deleted=!1;const T=fi(h,e);a?T.setParent(a,null):T.setParent(this.parent,null),f&&T.subscribe(),T.initChildren(i),i==null||i.add(T,k.Added);const g=(A=this.defaultValue)==null?void 0:A.clone(i,T,N.UUID.uuid(),f);return T.defaultValue=g||null,i==null||i.attemptAutoclose("clone-entity",this.id),T}getDataType(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"get-data-type"))){var o;if(this.parent.type===c.Operation)return this.parent.declaration.inferInputMapDataType(this,i).self;At.includes(this.parent.type)&&Sr(this.parent).getDataType(i);const a=(o=this.declaration)==null?void 0:o.getDataType(i);if(!a){const f=Os(this,i);if(f)return f}return a||null}};D(qt,"repository",{APICreate:async(i,...a)=>i,APIUpdate:async(i,...a)=>i,APIDelete:async(i,...a)=>i,APIClone:async(i,...a)=>{},APILoad:async(i,...a)=>null,APILoadVersion:async(i,a,...o)=>null}),D(qt,"type",c.InputMap),D(qt,"USER_MANAGED_PARENT_TYPES",[...oi]),D(qt,"PARENT_TYPES",[...qt.USER_MANAGED_PARENT_TYPES]),D(qt,"MUTABLE_BASE_PROPERTIES",["name","codeName","description"]),D(qt,"INMUTABLE_BASE_PROPERTIES",["id","type","version","createdAt","author","previousVersion"]),D(qt,"BASE_PROPERTIES",[...qt.MUTABLE_BASE_PROPERTIES,...qt.INMUTABLE_BASE_PROPERTIES]),D(qt,"MUTABLE_META_PROPERTIES",[...qt.MUTABLE_BASE_PROPERTIES,"index"]),D(qt,"INMUTABLE_META_PROPERTIES",[...qt.INMUTABLE_BASE_PROPERTIES]),D(qt,"META_PROPERTIES",[...qt.MUTABLE_META_PROPERTIES,...qt.INMUTABLE_META_PROPERTIES]),D(qt,"MUTABLE_UPSTREAM_PROPERTIES",["readsValue"]),D(qt,"INMUTABLE_UPSTREAM_PROPERTIES",["parent","declaration"]),D(qt,"UPSTREAM_PROPERTIES",[...qt.MUTABLE_UPSTREAM_PROPERTIES,...qt.INMUTABLE_UPSTREAM_PROPERTIES]),D(qt,"MUTABLE_DOWNSTREAM_PROPERTIES",["defaultValue"]),D(qt,"INMUTABLE_DOWNSTREAM_PROPERTIES",[]),D(qt,"DOWNSTREAM_PROPERTIES",[...qt.MUTABLE_DOWNSTREAM_PROPERTIES,...qt.INMUTABLE_DOWNSTREAM_PROPERTIES]),D(qt,"PROPERTIES",[...qt.META_PROPERTIES,...qt.UPSTREAM_PROPERTIES,...qt.DOWNSTREAM_PROPERTIES]);let aa=qt;class X1e extends aa{constructor(i,a){super(i,a);D(this,"declaration",null);D(this,"errors",[])}toJSON(i=new Set){return super.toJSON(i)}}class Q1e extends aa{constructor(i,a){super(i,a);D(this,"name",null);D(this,"description",null);D(this,"errors",[])}toJSON(i=new Set){return super.toJSON(i)}}function c8(d){const u=[...So(d)];return gi(d.errors,u)}const eRe=Object.freeze(Object.defineProperty({__proto__:null,validate:c8},Symbol.toStringTag,{value:"Module"}));var p8=(d=>(d.Declaration="declaration",d.DataTypeEntity="data-type-entity",d))(p8||{});const Zt=class Zt extends Bi{constructor(i,a){super(i);D(this,"initialData");D(this,"id");D(this,"index");D(this,"type",c.OutputMap);D(this,"parentRelationType");D(this,"defaultValue",null);D(this,"declaration",null);D(this,"writesValues",[]);D(this,"dataType",null);D(this,"project");D(this,"errors",[]);D(this,"parent");D(this,"detachedDependents",{});D(this,"knownVersions",null);D(this,"activeVersion",!1);D(this,"initialized",!1);D(this,"startedInitialization",!1);D(this,"suggestion",!1);D(this,"_codeNativeValueValidation",null);this.initialData=i,this.project=a,this.id=i.id,this.index=i.index,this.parentRelationType=i.parentRelationType}static new(i=null){return{id:N.UUID.uuid(),version:N.UUID.uuid(),createdAt:(i==null?void 0:i.timestamp)||B().toISOString(),author:(i==null?void 0:i.author)||N.sessionAuthor,previousVersion:null,deleted:!1,type:c.OutputMap,declaration:null,writesValues:[],index:0,defaultValue:null,parent:null}}static fromGenerationTarget(i,a){const o=J(i.parent),f=a.get(o);let e;if(i.declaration){const T=J(i.declaration);e=a.get(T)}const h={id:i.id,version:N.UUID.uuid(),createdAt:B().toISOString(),author:N.sessionAuthor,previousVersion:null,deleted:!1,type:c.OutputMap,index:(f.outputs||[]).length,defaultValue:null,declaration:e,writesValues:[],parent:f},v=oe(h,a);return v.setParent(f,null),v}static validateGenerationTarget(i,a){var v;let o=JSON.parse(JSON.stringify(i));const f=[],e=ur(o,{parent:{list:!1,types:oi.filter(T=>T!==c.Condition)},declaration:{list:!1,types:[c.ReturnDeclaration,c.Property]}},a);o=e.modifiedData;const h=a.get(o.parent);if(h&&oi.filter(T=>T!==c.Condition).includes(h.type)){const T=h.outputs.find(g=>{var A;return((A=g.declaration)==null?void 0:A.id)===(o.declaration?J(o.declaration):null)});if(T)f.push(new le({id:`${o.id}--${K.OutputOverwrite}`,code:K.OutputOverwrite,severity:H.Error,message:`Entity of type '${c.OutputMap}' with id '${o.id}' cannot be added to the parent entity of type '${h.type}' with id '${h.id}'. The parent already has an output-map with id '${T.id}' that points to the same base 'return-declaration'.
194
194
  Any value reads can be done with that output-map instead.
195
195
  You can't edit output-map entities as they need to match their return declarations, so you can only choose to read their outputted value if you need it.`}));else{const g=o.declaration?a.get(o.declaration):null;if(g&&At.includes(h.type)){const A=Sr(h),O=A.dataType,V=(v=A.dataType)==null?void 0:v.entity;O?V?V.type===c.ActionDescriptor?f.push(new le({id:`${o.id}--${ae.NoOverlapWithImplementedSignature}`,code:ae.NoOverlapWithImplementedSignature,severity:H.Error,message:`Entity of type '${c.OutputMap}' with id '${o.id}' cannot be added to the parent entity of type '${h.type}' with id '${h.id}'. The data type of the 'variable-declaration' is a 'action-descriptor' entity.
196
196
  This means it can hold a function-call or operation as its value, to be executed programatically.
@@ -439,7 +439,7 @@ Please provide a unique 'name' string.`,severity:H.Error,code:ae.NameNotUniqueIn
439
439
  Please provide a unique 'name' string.`,severity:H.Error,code:ae.NameNotUniqueInScope}))}}return i}function PDe(d,u){switch(d.type){case c.DefinitionEntity:return bb(d,u);case c.FunctionDeclaration:return wb(d,u);case c.VariableDeclaration:return Rb(d,u);case c.Property:return _b(d,u);case c.ArgumentDeclaration:return Db(d,u);case c.ReturnDeclaration:return Cb(d,u);default:return[]}}function Ob(d,u){switch(d.type){case c.FunctionCall:case c.InternalCall:return tn(d.declaration,u).codeName}if(!e_.includes(d.type))return null;const i=d;switch(d.type){case c.ActionDescriptor:case c.DefinitionEntity:case c.VariableDeclaration:case c.ValueDescriptor:case c.FunctionDeclaration:return d.codeName||null;case c.ArgumentDeclaration:case c.ReturnDeclaration:{if(d.implements){const a=tn(d.implements,u);return Ob(a,u)||null}return d.codeName||null}case c.InputMap:case c.OutputMap:case c.VariableInstance:{if(d.declaration){const a=tn(d.declaration,u);return Ob(a,u)||""}break}}return i.codeName||null}function eH(d,u){let i=d;if(!!u.some(o=>o.name===i)){const o=d.split(" "),f=o.pop()||"",e=parseInt(f);return!isNaN(e)?o.push(`${e+1}`):(o.push(f),o.push("1")),i=o.join(" "),eH(i,u)}return i}function tH(d,u,i){const o=`${p0(d)}-${u}-id`;return i.instances[o]?N.UUID.uuid():o}function Pb(d,u){let i="",a=null;if(d.parent){const f=u.get(d.parent);f&&(a=f)}let o="";return a&&(o=`${p0(W(a,u))}-`),i=`${o}${p0(W(d,u))}-id`,u.instances[i]?N.UUID.uuid():i}function Zi(d,u,i="uuid"){return i==="semantic"?tH(W(d,u),d.type,u):N.UUID.uuid()}const $De=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i;function $b(d){return typeof d=="string"&&$De.test(d)}function iH(d){var a;const u=rH(d);return(a=d.dataType)==null||a.validate(),[...u,...So(d),...nH(d)]}function rH(d){const u=[];if(!d.implements)return u;const i=d.implements;if(!i.abstract){const o=wt({id:`${d.id}--${ie.PropertyImplementsNonAbstact}`,message:`Property "${W(d,d.project)}" with id "${d.id}" implements a non-abstract property "${W(i,d.project)}" with id "${i.id}".`,severity:H.Error,code:ie.PropertyImplementsNonAbstact,entity:d});u.push(o.error)}if(d.static&&!i.static){const o=wt({id:`${d.id}--${ie.NonStaticPropertyImplementsStatic}`,message:`Static property "${W(d,d.project)}" with id "${d.id}" implements a non-static property "${W(i,d.project)}" with id "${i.id}".`,severity:H.Error,code:ie.NonStaticPropertyImplementsStatic,entity:d});u.push(o.error)}if(!d.static&&i.static){const o=wt({id:`${d.id}--${ie.StaticPropertyImplementsNonStatic}`,message:`Non-static property "${W(d,d.project)}" with id "${d.id}" implements a static property "${W(i,d.project)}" with id "${i.id}".`,severity:H.Error,code:ie.StaticPropertyImplementsNonStatic,entity:d});u.push(o.error)}if(!as(d.dataType,i.dataType)){const o=wt({id:`${d.id}--${ie.PropertyImplementsIncompatibleType}`,message:`Property "${W(d,d.project)}" with id "${d.id}" implements a property "${W(i,d.project)}" with id "${i.id}" that has an incompatible data type.`,severity:H.Error,code:ie.PropertyImplementsIncompatibleType,entity:d});u.push(o.error)}return gi(d.errors,u)}function nH(d,u){const a=[...d.parent.allProperties].filter(o=>{var f,e;return o.id!==d.id&&o.id!==((f=d.implements)==null?void 0:f.id)&&o.id!==((e=d.extends)==null?void 0:e.id)});return Df(d,[qi],a,u)}const NDe=Object.freeze(Object.defineProperty({__proto__:null,validate:iH,validateImplementation:rH,validatePropertyEntityName:nH},Symbol.toStringTag,{value:"Module"}));function VDe(d,u){const i=[];if(d.parent){const o=u.get(d.parent);if(!o)i.push(new le({id:`${d.id}--${d.parent}--${K.ReferencedEntityNotFound}`,code:K.ReferencedEntityNotFound,severity:H.Error,message:`Entity of type "${d.type}" with id "${d.id}", is referencing an entity with id "${d.parent}" that isn't yet found in the project. Perhaps it should be created first. Or perhaps the ID is incorrect.`}));else{const f=Jo(o);if(f){const e=o!==f?`The entity of type '${d.type}' with id '${d.id}' have 'parent' with id '${d.parent}' because the entity belongs to a built-in '${f.type}' entity with id '${f.id}' (${W(f,o.project)}) higher up in the tree.`:`The entity of type '${d.type}' with id '${d.id}' have 'parent' with id '${d.parent}' because it is a built-in entity of type ${f.type}.`;i.push(new le({id:`${d.id}--${K.InvalidBuiltInEntityReference}`,code:K.InvalidBuiltInEntityReference,severity:H.Error,message:e}))}else if(![c.DefinitionEntity].includes(o.type))i.push(new le({id:`${d.id}--${d.parent}--${K.InvalidParentReference}`,code:K.InvalidParentReference,severity:H.Error,message:`Entity of type "${d.type}" with id "${d.id}", has a parent reference that isn't pointing to an entity of type 'definition-entity'.`}));else{const h=Lr(o).filter(v=>!v.interactive);if(h.length){let v=h.length>1?`The entity of type '${d.type}' with id '${d.id}' can't be added to the 'parent' entity with id '${o.id}' because it extends or implements multiple '${c.BuiltInBaseEntity}' entities that are non-interactive ("${lt(h.map(T=>W(T,T.project)),'", "','" and "')}").`:`The entity of type '${d.type}' with id '${d.id}' can't be added to the 'parent' entity with id '${o.id}' because it extends or implements a '${c.BuiltInBaseEntity}' entity that is non-interactive ("${W(h[0],h[0].project)}").`;v+=`
440
440
  ${ko}`,i.push(new le({id:`${d.id}--${K.NonInteractiveEntityReferenced}`,code:K.NonInteractiveEntityReferenced,severity:H.Error,message:v}))}else if(d.implements){const v=u.get(d.implements);if(d.id===d.implements)return i.push(new le({id:`${d.id}--${d.implements}--${K.SelfReference}`,code:K.SelfReference,severity:H.Error,message:`Entity of type "${d.type}" with id "${d.id}", has a reference to itself at 'implements'. This is not allowed. Change the reference string or the 'entityId' property of the reference object.`})),i;if(!v)i.push(new le({id:`${d.id}--${d.implements}--${K.ReferencedEntityNotFound}`,code:K.ReferencedEntityNotFound,severity:H.Error,message:`Entity of type "${d.type}" with id "${d.id}", is referencing an entity with id "${d.implements}" that isn't yet found in the project. Perhaps it should be created first. Or perhaps the ID is incorrect.`}));else{const T=o.properties.find(g=>{var A;return((A=g.implements)==null?void 0:A.id)===d.implements});T?i.push(new le({id:`${d.id}--${ae.PropertyOverwritesOtherSiblingWithSameImplementation}`,code:ae.PropertyOverwritesOtherSiblingWithSameImplementation,severity:H.Error,message:`The property with id "${d.id}" is trying to implement the property with id "${d.implements}", but the parent entity already has a property with id '${T.id}' that implements the same base property.`})):[c.Property].includes(v.type)?v.abstract||i.push(new le({id:`${d.id}--${d.implements}--${K.InvalidImplementsReference}`,code:K.InvalidImplementsReference,severity:H.Error,message:`Entity of type "${d.type}" with id "${d.id}", has an 'implements' reference that isn't pointing to an abstract entity.`})):i.push(new le({id:`${d.id}--${d.implements}--${K.InvalidImplementsReference}`,code:K.InvalidImplementsReference,severity:H.Error,message:`Entity of type "${d.type}" with id "${d.id}", has an 'implements' reference that isn't pointing to an entity of type 'property'.`}))}}}}}const a=ur(d,{},u);return i.push(...a.errors),i}function sH(d,u){var e;const i=[],a=[],o=[],f=[];if(((e=d.implements)==null?void 0:e.id)===ue["built-in-base-entity"].BUILT_IN_PERSISTED_ENTITY_ENTITY.properties.database.id){let h=d.defaultValue;if(!d.defaultValue){const v=Qr.new(u);v.name=se.EntityTemplate,v.parent=d.toReference();const T=oe(v,d.project);T.hydrateAncestors(),T.addSelfToProject(u),u==null||u.add(T,k.Added),a.push(T),T.initChildren(u),h=T}if(!h.valueAsTypeSingle){const v=ZZ(d.project);v&&h.setValueAsTypeSingle(v,u)}}return{updated:R(i),added:R(a),removed:R(o),affected:R(f),self:d}}var aH=(d=>(d.PropertyImplements="property-implements",d.PropertyExtends="property-extends",d.DataTypeEntity="data-type-entity",d))(aH||{});const Nt=class Nt extends Bi{constructor(i,a){super(i);D(this,"initialData");D(this,"id");D(this,"name");D(this,"codeName",null);D(this,"description",null);D(this,"private");D(this,"abstract");D(this,"index");D(this,"static");D(this,"required");D(this,"constant",!1);D(this,"interactive",!1);D(this,"type",c.Property);D(this,"hidden",!1);D(this,"defaultValue",null);D(this,"dataType",null);D(this,"implements",null);D(this,"extends",null);D(this,"project");D(this,"errors",[]);D(this,"parent");D(this,"detachedDependents",{});D(this,"knownVersions",null);D(this,"activeVersion",!1);D(this,"initialized",!1);D(this,"startedInitialization",!1);D(this,"suggestion",!1);D(this,"_codeNativeValueValidation",null);this.initialData=i,this.project=a,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.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:N.UUID.uuid(),version:N.UUID.uuid(),createdAt:(i==null?void 0:i.timestamp)||B().toISOString(),author:(i==null?void 0:i.author)||N.sessionAuthor,previousVersion:null,deleted:!1,type:c.Property,name:"",codeName:null,description:"",dataType:null,implements:null,extends:null,private:!1,abstract:!1,static:!1,constant:!1,interactive:!0,hidden:!1,index:0,required:!1,defaultValue:null,parent:null}}static fromGenerationTarget(i,a){const o=J(i.parent),f=a.get(o);let e=null;if(i.implements){const g=J(i.implements);e=a.get(g)}let h=null;if(i.extends){const g=J(i.extends);h=a.get(g)}const v={id:i.id,version:N.UUID.uuid(),createdAt:B().toISOString(),author:N.sessionAuthor,previousVersion:null,deleted:!1,name:i.name,type:c.Property,index:f.properties.length,private:i.private||!1,abstract:i.abstract||!1,static:i.static||!1,required:i.required||!1,constant:i.constant||!1,interactive:i.interactive||!1,hidden:!1,codeName:i.codeName||null,description:i.description||null,defaultValue:null,implements:e,extends:h,dataType:null,parent:f},T=oe(v,a);return T.setParent(f,null),T}static validateGenerationTarget(i,a){let o=JSON.parse(JSON.stringify(i));const f=[],e=VDe(o,a),h=_b(o,a);return f.push(...e,...h,...ji(o)),{errors:f,modifiedData:o}}get isExtendedProperty(){const i=this.parent.allBasePropertiesFromExtendedAndImplementedEntities.find(a=>{var o;return a.id===((o=this.extends)==null?void 0:o.id)});return!!i&&i.id!==this.id&&!i.abstract}get codeNativeValueValidation(){var i;return this._codeNativeValueValidation||((i=this.implements)==null?void 0:i.codeNativeValueValidation)||null}validateGeneratedUpdate(i){const a=[];return i.parent&&a.push(new le({id:`${this.id}--${K.InvalidParentUpdate}`,code:K.InvalidParentUpdate,severity:H.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.
441
441
  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)&&a.push(new le({id:`${this.id}--${ae.InvalidObjectStructure}`,code:ae.InvalidObjectStructure,severity:H.Error,message:`Entity of type '${this.type}' with id '${this.id}' is not a value reading or writing entity.
442
- ${qm}`})),{errors:a,modifiedData:i}}onProjectInitialized(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,new Date().toISOString(),this,!0,"on-property-received-project-initialized"))){return sH(this,a),a==null||a.attemptAutoclose("on-property-received-project-initialized",this.id),this}subscribeDependents(i){return i.forEach(a=>{this.detachedDependents[a.entity.id]||(this.detachedDependents[a.entity.id]=a)}),this}unsubscribeDependents(i){return i.forEach(a=>{this.detachedDependents[a.entity.id]&&delete this.detachedDependents[a.entity.id]}),this}syncDependents(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"sync-dependents"))){const a=[],o=[],f=[],e=[];return Object.values(this.detachedDependents).forEach(h=>{const v=h.entity.afterAllChildrenInitialized(i);a.push(...v.updated),o.push(...v.added),f.push(...v.removed),e.push(...v.affected)}),i==null||i.attemptAutoclose("sync-dependents",this.id),{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}onDetachedDependencyRemoved(i,a,o){const f=[],e=[],h=[],v=[];if(a==="property-implements"&&(this.setImplements(null,o),f.push(this)),a==="property-extends"){const{updated:T,added:g,removed:A,affected:O}=this.remove({ignoreUpstream:!1},o);f.push(...T),e.push(...g),h.push(...A),v.push(...O)}return{updated:R(f),added:R(e),removed:R(h),affected:R(v),self:this}}onDetachedDependencyRestored(i,a,o){const f=[],e=[],h=[],v=[];if(a==="property-implements"&&(this.setImplements(i,o),f.push(this)),a==="property-extends"){const{updated:T,added:g,removed:A,affected:O}=this.restore({},o);f.push(...T),e.push(...g),h.push(...A),v.push(...O)}return{updated:R(f),added:R(e),removed:R(h),affected:R(v),self:this}}unsubscribeFromDependencies(){var i,a,o,f,e,h,v;return(a=(i=this.implements)==null?void 0:i.unsubscribeDependents)==null||a.call(i,[{entity:this,field:"property-implements"}]),(f=(o=this.extends)==null?void 0:o.unsubscribeDependents)==null||f.call(o,[{entity:this,field:"property-extends"}]),(v=(h=(e=this.dataType)==null?void 0:e.entity)==null?void 0:h.unsubscribeDependents)==null||v.call(h,[{entity:this,field:"data-type-entity"}]),this.project.off(Li.PROJECT_INITIALIZED,this.onProjectInitialized),this}subscribeToDependencies(){var i,a,o,f,e,h,v;return(a=(i=this.implements)==null?void 0:i.subscribeDependents)==null||a.call(i,[{entity:this,field:"property-implements"}]),(f=(o=this.extends)==null?void 0:o.subscribeDependents)==null||f.call(o,[{entity:this,field:"property-extends"}]),(v=(h=(e=this.dataType)==null?void 0:e.entity)==null?void 0:h.subscribeDependents)==null||v.call(h,[{entity:this,field:"data-type-entity"}]),this.project.on(Li.PROJECT_INITIALIZED,this.onProjectInitialized),this}increaseVersion(i){if(i&&!B(i).isValid())throw new Error(`The shared timestamp '${i}' is not a valid ISO 8601 date string.`);return i&&B(i).isSame(B(this.createdAt))?this:(this.previousVersion=this.version,this.version=N.UUID.uuid(),this.createdAt=B(i).toISOString()||B().toISOString(),this)}captureVersion(){var a;const i=((a=this.knownVersions)==null?void 0:a.get(this.version))||new Nt(this,this.project);return i.metaSync(this.toMeta(),null),this.knownVersions=this.knownVersions?this.knownVersions.set(this.version,i):new Map([[this.version,i]]),i.defaultValue=this.defaultValue,i.dataType=this.dataType,i.implements=this.implements,i.extends=this.extends,i.parent=this.parent,this}recursiveCaptureUpstreamVersions(i){const a=[],o=[],f=[],e=[];if(this.parent&&this.parent.type!==c.PrimitiveEntity&&this.parent.type!==c.BuiltInBaseEntity){this.parent.increaseVersion(i);const h=this.parent.recursiveCaptureUpstreamVersions(i);a.push(this.parent,...h.updated),o.push(...h.added),f.push(...h.removed)}return{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}async restoreVersion(i){var v;const a=[],o=[],f=[],e=[];if(this.version===i)return{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this};if(!this.knownVersions){const T=new Map;for(const[g,A]of this.knownVersions||new Map){if(T.set(g,A),A.activeVersion=!1,A.knownVersions)for(const[O,V]of A.knownVersions)T.set(O,V);A.knownVersions=null}}let h=(v=this.knownVersions)==null?void 0:v.get(i);if(!h){const T=await this.APILoadVersion({},i);if(!T)throw new Error(`Version with id '${i}' for entity with id '${this.id}' not found.`);h=new Nt(T,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:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}updateWithShallowTransfer(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"update-with-shallow-transfer"))){if(this.metaSync(i,a),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 o=J(i.parent),f=this.project.get(o),e=this.parent;if(e&&e.id!==(f==null?void 0:f.id)&&this.removeFromParent(a),f)this.setParent(f,null);else throw a==null||a.attemptAutoclose("update-with-shallow-transfer",this.id),new Error(`${this.type} with id '${this.id}' has a 'parent' reference '${o}' that isn't found in the project`)}else throw a==null||a.attemptAutoclose("update-with-shallow-transfer",this.id),new Error(`${this.type} with id '${this.id}' must have a 'parent'`);if(i.implements){const o=J(i.implements),f=this.project.get(o);if(f)this.setImplements(f,a);else if(o)throw new Error(`${Or(this.type)} with id '${this.id}' has a 'implements' reference "${o}" which is missing in the project`)}if(i.extends){const o=J(i.extends),f=this.project.get(o);if(f)this.setExtends(f,a);else if(o)throw new Error(`${Or(this.type)} with id '${this.id}' has a 'extends' reference "${o}" which is missing in the project`)}return this.captureVersion(),this.subscribeToDependencies(),a==null||a.attemptAutoclose("update-with-shallow-transfer",this.id),this}hydrateAncestors(){const i=[],a=[],o=[],f=[];if(this.initialData.parent){const e=J(this.initialData.parent),h=this.project.get(e);if(h)this.setParent(h,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){const e=J(this.initialData.implements),h=this.project.get(e);if(h)this.setImplements(h,null),i.push(h);else if(e)throw new Error(`${Or(this.type)} with id '${this.id}' has a 'implements' reference "${e}" which is missing in the project`)}if(this.initialData.extends){const e=J(this.initialData.extends),h=this.project.get(e);if(h)this.setExtends(h,null),i.push(h);else if(e)throw new Error(`${Or(this.type)} with id '${this.id}' has a 'extends' reference "${e}" which is missing in the project`)}return{updated:R(i),added:R(a),removed:R(o),affected:R(f),self:this}}afterAllChildrenInitialized(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"after-all-children-initialized"))){const a=[],o=[],f=[],e=[];this.initialized=!0;const{updated:h,added:v,removed:T,affected:g}=this.syncWithImplementation(i);a.push(...h),o.push(...v),f.push(...T),e.push(...g);const{updated:A,added:O,removed:V,affected:x}=sH(this,i);return a.push(...A),o.push(...O),f.push(...V),e.push(...x),this.captureVersion(),i==null||i.attemptAutoclose("after-all-children-initialized",this.id),{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}addSelfToProject(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"add-self-to-project"))){const a=[this],o=[],f=[],e=[];return this.parent.addProperty(this),a.push(this.parent),this.subscribe(),this.subscribeToDependencies(),i==null||i.attemptAutoclose("add-self-to-project",this.id),{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}setParent(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"set-parent"))){var o;return((o=this.parent)==null?void 0:o.id)!==(i==null?void 0:i.id)&&(this.parent=i,a&&(a==null||a.add(this,k.Updated))),a==null||a.attemptAutoclose("set-parent",this.id),this}setImplements(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"set-implements"))){var o;return((o=this.implements)==null?void 0:o.id)!==(i==null?void 0:i.id)&&(this.implements=i,a&&(a==null||a.add(this,k.Updated))),a==null||a.attemptAutoclose("set-implements",this.id),this}setExtends(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"set-extends"))){var o;return((o=this.extends)==null?void 0:o.id)!==(i==null?void 0:i.id)&&(this.extends=i,a&&(a==null||a.add(this,k.Updated))),a==null||a.attemptAutoclose("set-extends",this.id),this}initChildren(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"init-children"))){if(this.initialized||this.startedInitialization)return this;if(this.startedInitialization=!0,this.initialData.defaultValue&&(this.defaultValue=oe(this.initialData.defaultValue,this.project),this.defaultValue.setParent(this,null),this.defaultValue.initChildren(i)),this.initialData.dataType){const a=oe(this.initialData.dataType,this.project);a.setParent(this,null),a.initChildren(i),this.dataType=a}if(this.initialData.implements){const a=oe(this.initialData.implements,this.project);this.setImplements(a,null)}if(this.initialData.extends){const a=oe(this.initialData.extends,this.project);this.setExtends(a,null)}return this.subscribeToDependencies(),this.afterAllChildrenInitialized(i),i==null||i.attemptAutoclose("init-children",this.id),this}subscribe(){return this.activeVersion=!0,this.project.subscribeInstance(this),this}unsubscribe(){return this.project.unsubscribeInstance(this),this}metaSync(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"meta-sync"))){const o=Fi(this,i),f=this.toMeta();return this.name=i.name!==void 0?i.name:f.name,this.codeName=i.codeName!==void 0?i.codeName:f.codeName,this.description=i.description!==void 0?i.description:f.description,this.abstract=i.abstract!==void 0?i.abstract:f.abstract,this.private=i.private!==void 0?i.private:f.private,this.index=i.index||(i.index!==0?f.index:0),this.static=i.static!==void 0?i.static:f.static,this.hidden=i.hidden!==void 0?i.hidden:f.hidden,this.constant=i.constant!==void 0?i.constant:f.constant,this.interactive=i.interactive!==void 0?i.interactive:f.interactive,this.required=i.required!==void 0?i.required:f.required,super.metaSync(i),i.deleted===!0&&!f.deleted?a==null||a.add(this,k.Removed):i.deleted===!1&&f.deleted?a==null||a.add(this,k.Added):o&&(a==null||a.add(this,k.Updated)),a==null||a.attemptAutoclose("meta-sync",this.id),this}async APILoad(i=Te,...a){return await Nt.repository.APILoad(this.id,...a),this}async APICreate(i=Te,...a){return await Nt.repository.APICreate(this.toShallowJSON(),...a),this}async APIUpdate(i=Te,...a){return await Nt.repository.APIUpdate(this.toShallowJSON(),...a),this}async APIDelete(i=Te,...a){return await Nt.repository.APIDelete(this.toShallowJSON(),...a),this}async APIClone(i=Te,...a){return await Nt.repository.APIClone(this.id,...a),this}async APILoadVersion(i=Te,a,...o){return await Nt.repository.APILoadVersion(this.id,a,...o)}removeFromParent(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"remove-from-parent"))){const a=[],o=[],f=[],e=[];return this.parent.type===c.DefinitionEntity&&(this.parent.removeProperty(this),e.push(this.parent)),i==null||i.attemptAutoclose("remove-from-parent",this.id),{added:R(f),updated:R(a),removed:R(o),affected:R(e),self:this}}remove({ignoreUpstream:i}={ignoreUpstream:!1},a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"remove-entity"))){const o=[],f=[],e=[],h=[];if(a!=null&&a.hasRemoved(this.id))return a==null||a.attemptAutoclose("remove-entity",this.id),{added:[],updated:[],removed:[],affected:[],self:this};if(f.push(this),this.unsubscribe(),this.unsubscribeFromDependencies(),this.project.subscribeDeletedInstance(this),this.metaSync({deleted:!0},a),Object.values(this.detachedDependents).forEach(v=>{const{updated:T,removed:g,added:A}=v.entity.onDetachedDependencyRemoved(this,v.field,a);o.push(...T),f.push(...g),e.push(...A)}),this.defaultValue){const{updated:v,removed:T}=this.defaultValue.remove({ignoreUpstream:!0},a);o.push(...v),f.push(...T)}if(this.dataType){const{updated:v,removed:T}=this.dataType.remove({ignoreUpstream:!0},a);o.push(...v),f.push(...T)}if(!i){const v=this.removeFromParent(a);e.push(...v.added),o.push(...v.updated),f.push(...v.removed),h.push(...v.affected)}return a==null||a.attemptAutoclose("remove-entity",this.id),{added:R(e),updated:R(o),removed:R(f),affected:R(h),self:this}}restore({}={},i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"restore-entity"))){const a=[],o=[],f=[],e=[];if(i!=null&&i.hasAdded(this.id))return i==null||i.attemptAutoclose("restore-entity",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(h=>{const{updated:v,removed:T,added:g}=h.entity.onDetachedDependencyRestored(this,h.field,i);o.push(...v),f.push(...T),a.push(...g)}),this.defaultValue){const{updated:h}=this.defaultValue.restore({},i);o.push(...h)}if(this.dataType){const{updated:h}=this.dataType.restore({},i);o.push(...h)}return this.parent.type===c.DefinitionEntity&&(this.parent.addProperty(this),e.push(this.parent)),i==null||i.attemptAutoclose("restore-entity",this.id),{added:R(a),updated:R(o),removed:R(f),affected:R(e),self:this}}toFlat(i=new Set){var o,f;return i.has(this.id)?[]:(i.add(this.id),[this,...((o=this.defaultValue)==null?void 0:o.toFlat(i))||[],...((f=this.dataType)==null?void 0:f.toFlat(i))||[],...this.parent.toFlat(i)])}toFlatIds(i=new Set){var o,f;return i.has(this.id)?[]:(i.add(this.id),[this.id,...((o=this.defaultValue)==null?void 0:o.toFlatIds(i))||[],...((f=this.dataType)==null?void 0:f.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,constant:this.constant,interactive:this.interactive,static:this.static,type:this.type,name:this.name}}toJSON(i=new Set){var a,o,f,e;return i.has(this.id)?this.toReference():(i.add(this.id),{id:this.id,version:this.version,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,type:this.type,name:this.name,codeName:this.codeName,description:this.description,index:this.index,private:this.private,required:this.required,static:this.static,constant:this.constant,interactive:this.interactive,abstract:this.abstract,hidden:this.hidden,defaultValue:((a=this.defaultValue)==null?void 0:a.toJSON(i))||null,dataType:((o=this.dataType)==null?void 0:o.toJSON(i))||null,implements:((f=this.implements)==null?void 0:f.toJSON(i))||null,extends:((e=this.extends)==null?void 0:e.toJSON(i))||null,parent:this.parent.toReference()})}toJSONClone(i=qe){var o,f,e,h,v,T,g;let a;return(o=i.seenEntityMaps)!=null&&o.has(this.id)?a=i.seenEntityMaps.get(this.id):(a=i.newId||Zi(this,this.project,i.uuidStrategy),i.seenEntityMaps&&i.seenEntityMaps.set(this.id,a)),(f=i.seenEntities)!=null&&f.has(a)||(e=i.seenEntities)!=null&&e.has(this.id)?this.toReference({seenEntityMaps:i.seenEntityMaps}):((h=i.seenEntities)==null||h.add(a),(v=i.seenEntities)==null||v.add(this.id),{id:a,version:N.UUID.uuid(),createdAt:i.timestamp||B().toISOString(),author:N.sessionAuthor,previousVersion:null,deleted:!1,type:this.type,name:this.name,codeName:this.codeName,description:this.description,index:this.index,private:this.private,required:this.required,static:this.static,constant:this.constant,interactive:this.interactive,abstract:this.abstract,hidden:this.hidden,defaultValue:((T=this.defaultValue)==null?void 0:T.toJSONClone({...i,newId:null}))||null,dataType:((g=this.dataType)==null?void 0:g.toJSONClone({...i,newId:null}))||null,implements:(()=>{var A;return this.implements&&this.project.getBuiltIn(this.implements.id)?this.implements.toJSON():((A=this.implements)==null?void 0:A.toJSONClone({...i,newId:null}))||null})(),extends:(()=>{var A;return this.extends&&this.project.getBuiltIn(this.extends.id)?this.extends.toJSON():((A=this.extends)==null?void 0:A.toJSONClone({...i,newId:null}))||null})(),parent:this.parent.toReference({seenEntityMaps:i.seenEntityMaps})})}toReference(i=qe){var o;let a=this.id;return(o=i.seenEntityMaps)!=null&&o.has(this.id)&&(a=i.seenEntityMaps.get(this.id)),{id:a+"--"+N.UUID.uuid()+"--ref",type:c.GenericReference,entityId:a,version:this.version,entityType:this.type}}toShallowJSON(i=qe){var o,f,e,h,v;let a=this.id;return(o=i.seenEntityMaps)!=null&&o.has(this.id)&&(a=i.seenEntityMaps.get(this.id)),{id:a,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,index:this.index,private:this.private,required:this.required,abstract:this.abstract,static:this.static,constant:this.constant,interactive:this.interactive,hidden:this.hidden,defaultValue:((f=this.defaultValue)==null?void 0:f.toReference(i))||null,dataType:((e=this.dataType)==null?void 0:e.toReference(i))||null,implements:((h=this.implements)==null?void 0:h.toReference(i))||null,extends:((v=this.extends)==null?void 0:v.toReference(i))||null,parent:this.parent.toReference(i)}}toFlatJSON(i=new Set){var o,f,e;return i.has(this.id)?[]:(i.add(this.id),[this.toShallowJSON(),...((o=this.defaultValue)==null?void 0:o.toFlatJSON(i))||[],...((f=this.dataType)==null?void 0:f.toFlatJSON(i))||[],...((e=this.implements)==null?void 0:e.toFlatJSON(i))||[],...this.parent.toFlatJSON(i)])}toGenerationTarget(){var i,a;return{id:this.id,name:this.name,description:this.description,type:this.type,private:this.private,required:this.required,abstract:this.abstract,static:this.static,implements:(i=this.implements)==null?void 0:i.id,extends:(a=this.extends)==null?void 0:a.id,parent:this.parent.id}}toFlatGenerationTarget(i=new Set){var o,f;return i.has(this.id)?[]:(i.add(this.id),[this.toGenerationTarget(),...((o=this.defaultValue)==null?void 0:o.toFlatGenerationTarget(i))||[],...((f=this.dataType)==null?void 0:f.toFlatGenerationTarget(i))||[]])}clearErrors(){var i,a;return this.errors=[],(i=this.defaultValue)==null||i.clearErrors(),(a=this.dataType)==null||a.clearErrors(),this}validate(){return this.errors=iH(this),this.errors.length,{success:!0}}getErrors(){var a,o;return[...this.errors,...((a=this.defaultValue)==null?void 0:a.getErrors())||[],...((o=this.dataType)==null?void 0:o.getErrors())||[]]}getShallowErrors(){return this.errors}implement(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"implement-self-as-property")),o=null){const f=o||N.UUID.uuid(),e=Nt.new(a);e.id=f,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.hidden=this.hidden,e.interactive=this.interactive,e.parent=i.toReference(),e.implements=this.toJSON();const h=oe(e,this.project);return h.hydrateAncestors(),h.addSelfToProject(a),h.initChildren(a),h}clone(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"clone-entity")),a=null,o=null,f=!0){var V,x;let e=Ki(a,this);const h=o||N.UUID.uuid();let v=a||this.parent;const T={hidden:!1,id:h,version:N.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,name:this.name,codeName:this.codeName,description:this.description,index:this.index,private:this.private,constant:this.constant,interactive:this.interactive,required:this.required,abstract:this.abstract,static:this.static,defaultValue:null,dataType:null,implements:this.implements,extends:this.extends,parent:v},g=fi(T,e);f&&g.subscribe(),g.hydrateAncestors(),f&&g.addSelfToProject(i),g.setParent(v,null),g.initChildren(i),i==null||i.add(g,k.Added);const A=((V=this.dataType)==null?void 0:V.clone(i,g,N.UUID.uuid(),f))||null;A&&g.setDataType(A,i);const O=(x=this.defaultValue)==null?void 0:x.clone(i,g,N.UUID.uuid(),f);return g.setDefaultValue(O||null,i),this.implements&&g.setImplements(this.implements,i),g.addSelfToProject(null),i==null||i.attemptAutoclose("clone-entity",this.id),g}setDataType(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"set-data-type"))){const o=this.dataType;return(o==null?void 0:o.id)!==(i==null?void 0:i.id)&&(o==null||o.remove({ignoreUpstream:!0},a),this.dataType=i,this.subscribeToDependencies(),a==null||a.add(this,k.Affected)),a==null||a.attemptAutoclose("set-data-type",this.id),this}removeDataType(){return this.dataType=null,this}getDataType(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"get-data-type"))){return i==null||i.attemptAutoclose("get-data-type",this.id),this.dataType}getDefaultValue(){return this.defaultValue}setDefaultValue(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"set-default-value"))){const o=this.defaultValue;return(o==null?void 0:o.id)!==(i==null?void 0:i.id)&&(o==null||o.remove({ignoreUpstream:!0},a),this.defaultValue=i,a==null||a.add(this,k.Affected)),a==null||a.attemptAutoclose("set-default-value",this.id),this}syncWithImplementation(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"sync-with-implementation"))){var h;const a=[],o=[],f=[],e=[];if(this.implements){const v=this.implements;if(!this.dataType&&v.dataType){const T=v.dataType.clone(i,this,N.UUID.uuid(),!0);this.setDataType(T,i),o.push(T)}if(this.implements.defaultValue&&!this.defaultValue){const T=(h=this.implements.defaultValue)==null?void 0:h.clone(i,this,N.UUID.uuid(),!0);this.setDefaultValue(T||null,i),o.push(T)}}return i==null||i.attemptAutoclose("sync-with-implementation",this.id),{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}};D(Nt,"repository",{APICreate:async(i,...a)=>i,APIUpdate:async(i,...a)=>i,APIDelete:async(i,...a)=>i,APIClone:async(i,...a)=>{},APILoad:async(i,...a)=>null,APILoadVersion:async(i,a,...o)=>null}),D(Nt,"type",c.Property),D(Nt,"USER_MANAGED_PARENT_TYPES",[c.DefinitionEntity]),D(Nt,"PARENT_TYPES",[...Nt.USER_MANAGED_PARENT_TYPES,c.PrimitiveEntity,c.BuiltInBaseEntity]),D(Nt,"MUTABLE_BASE_PROPERTIES",["name","codeName","description","private","abstract","static","required","constant","interactive"]),D(Nt,"INMUTABLE_BASE_PROPERTIES",["id","type","version","createdAt","author","previousVersion"]),D(Nt,"BASE_PROPERTIES",[...Nt.MUTABLE_BASE_PROPERTIES,...Nt.INMUTABLE_BASE_PROPERTIES]),D(Nt,"MUTABLE_META_PROPERTIES",[...Nt.MUTABLE_BASE_PROPERTIES,"index"]),D(Nt,"INMUTABLE_META_PROPERTIES",[...Nt.INMUTABLE_BASE_PROPERTIES]),D(Nt,"META_PROPERTIES",[...Nt.MUTABLE_META_PROPERTIES,...Nt.INMUTABLE_META_PROPERTIES]),D(Nt,"MUTABLE_UPSTREAM_PROPERTIES",[]),D(Nt,"INMUTABLE_UPSTREAM_PROPERTIES",["parent","implements","extends"]),D(Nt,"UPSTREAM_PROPERTIES",[...Nt.MUTABLE_UPSTREAM_PROPERTIES,...Nt.INMUTABLE_UPSTREAM_PROPERTIES]),D(Nt,"MUTABLE_DOWNSTREAM_PROPERTIES",["dataType"]),D(Nt,"INMUTABLE_DOWNSTREAM_PROPERTIES",[]),D(Nt,"DOWNSTREAM_PROPERTIES",[...Nt.MUTABLE_DOWNSTREAM_PROPERTIES,...Nt.INMUTABLE_DOWNSTREAM_PROPERTIES]),D(Nt,"PROPERTIES",[...Nt.META_PROPERTIES,...Nt.UPSTREAM_PROPERTIES,...Nt.DOWNSTREAM_PROPERTIES]);let da=Nt;function oH(d){const u=d.implements.flatMap(h=>BDe(d,h)),i=LDe(d,d.extends),a=xDe(d),o=MDe(d);d.methods.flatMap(h=>h.validate());const f=[...u,...i,...a,...o,...uH(d)];return gi(d.errors,f)}function lH(d,u){const i=u.properties.filter(f=>f.abstract),a=[];let o=[...d.properties];return i.forEach(f=>{const e=o.find(h=>{var v;return((v=h.implements)==null?void 0:v.id)===f.id});e?o=o.filter(h=>h.id!==e.id):a.push(f)}),a}function dH(d,u){const i=u.abstractMethods,a=[];let o=[...d.methods];return i.forEach(f=>{const e=o.find(h=>{var v;return((v=h.implements)==null?void 0:v.id)===f.id});e?o=o.filter(h=>h.id!==e.id):a.push(f)}),a}function BDe(d,u){const i=[];if(!u.abstract){const g=wt({id:d.id+"--"+ie.ImplementingNonAbstractEntity,message:`Entity "${d.name}" with id "${d.id}" is implementing a non-abstract entity "${u.name}" with id "${u.id}"`,severity:H.Error,code:ie.ImplementingNonAbstractEntity,entity:d});return i.push(g.error),i}const a=u.properties.filter(g=>g.abstract),o=[];let f=[...d.properties];a.forEach(g=>{const A=f.find(O=>{var V;return((V=O.implements)==null?void 0:V.id)===g.id});A?f=f.filter(O=>O.id!==A.id):o.push(g)}),o.length&&o.forEach(g=>{const A=wt({id:d.id+"--"+ie.MissingPropertyImplementation+"--"+g.id,message:`Property "${g.name}" with id "${g.id}" of entity "${u.name}" with id "${u.id}" is not implemented when entity "${d.name}" with id "${d.id}" implements it`,severity:H.Error,code:ie.MissingPropertyImplementation,entity:d});i.push(A.error)});const e=[];let h=[...d.methods];u.abstractMethods.forEach(g=>{const A=h.find(O=>{var V;return((V=O.implements)==null?void 0:V.id)===g.id});A?h=h.filter(O=>O.id!==A.id):e.push(g)}),e.length&&e.forEach(g=>{const A=wt({id:d.id+"--"+ie.MissingMethodImplementation+"--"+g.id,message:`Method "${g.name}" with id "${g.id}" of entity "${u.name}" with id "${u.id}" is not implemented when entity "${d.name}" with id "${d.id}" implements it`,severity:H.Error,code:ie.MissingMethodImplementation,entity:d});i.push(A.error)});const v=[];u.properties.forEach(g=>{const A=f.find(O=>O.name===g.name);A&&v.push([A,g])}),v.length&&v.forEach(([g])=>{const A=wt({id:d.id+"--"+ae.PropertyOverwritesOtherSiblingWithSameName+"--"+g.id,message:`Property "${g.name}" with id "${g.id}" of entity "${d.name}" with id "${d.id}" overwrites the property with the same name from the base entity "${u.name}" with id "${u.id}"`,severity:H.Error,code:ae.PropertyOverwritesOtherSiblingWithSameName,entity:d});i.push(A.error)});const T=[];return u.methods.forEach(g=>{const A=h.find(O=>O.name===g.name);A&&T.push([A,g])}),T.length&&T.forEach(([g])=>{const A=wt({id:d.id+"--"+ae.MethodOverwritesOtherSiblingWithSameName+"--"+g.id,message:`Method "${g.name}" with id "${g.id}" of entity "${d.name}" with id "${d.id}" overwrites the method with the same name from the base entity "${u.name}" with id "${u.id}"`,severity:H.Error,code:ae.MethodOverwritesOtherSiblingWithSameName,entity:d});i.push(A.error)}),i}function LDe(d,u){const i=[];if(!u)return i;const a=[];if(!d.abstract&&u.abstract){const f=wt({id:d.id+"--"+u.id+"--"+ie.NonAbstractExtendingAbstractEntity,message:`Entity "${d.name}" with id "${d.id}" is not-abstract but is extending an abstract entity "${u.name}" with id "${u.id}"`,severity:H.Error,code:ie.NonAbstractExtendingAbstractEntity,entity:d,firstRelationship:u});return i.push(f.error),i}if(d.abstract&&!u.abstract){const f=wt({id:d.id+"--"+u.id+"--"+ie.AbstractExtendingNonAbstractEntity,message:`Entity "${d.name}" with id "${d.id}" is abstract but is extending an non-abstract entity "${u.name}" with id "${u.id}"`,severity:H.Error,code:ie.AbstractExtendingNonAbstractEntity,entity:d,firstRelationship:u});return i.push(f.error),i}d.properties.forEach(f=>{var h;const e=u.properties.find(v=>{var T;return v.name===f.name&&((T=f.extends)==null?void 0:T.id)!==v.id});((h=f.implements)==null?void 0:h.id)!==(e==null?void 0:e.id)&&e&&a.push(f)}),a.length&&a.forEach(f=>{const e=wt({id:d.id+"--"+ae.PropertyOverwritesOtherSiblingWithSameName,message:`Property "${f.name}" with id "${f.id}" of entity "${d.name}" with id "${d.id}" overwrites the property with the same name from the extended entity "${u.name}" with id "${u.id}"`,severity:H.Error,code:ae.PropertyOverwritesOtherSiblingWithSameName,entity:d});i.push(e.error)});const o=[];return d.methods.forEach(f=>{var h;const e=u.methods.find(v=>{var T;return v.name===f.name&&((T=f.extends)==null?void 0:T.id)!==v.id});((h=f.implements)==null?void 0:h.id)!==(e==null?void 0:e.id)&&e&&o.push(f)}),o.length&&o.forEach(f=>{const e=wt({id:d.id+"--"+ae.MethodOverwritesOtherSiblingWithSameName,message:`Method "${f.name}" with id "${f.id}" of entity "${d.name}" with id "${d.id}" overwrites the method with the same name from the extended entity "${u.name}" with id "${u.id}"`,severity:H.Error,code:ae.MethodOverwritesOtherSiblingWithSameName,entity:d});i.push(e.error)}),i}function MDe(d){const u=[];if(!d.properties.length){const i=wt({id:d.id+"--"+ie.NoProperties,message:"No properties implemented",severity:H.Warning,code:ie.NoProperties,entity:d});u.push(i.error)}return d.properties.forEach(i=>{i.validate()}),u}function xDe(d){const u=[];if(d.abstract){if(d.methods.length){const i=wt({id:d.id+"--"+ie.AbstractEntityWithNonAbstractMethods,message:`Entity "${d.name}" with id "${d.id}" is marked as abstract but has non-abstract methods`,severity:H.Error,code:ie.AbstractEntityWithNonAbstractMethods,entity:d});u.push(i.error)}if(d.properties.some(i=>!i.abstract)){const i=wt({id:d.id+"--"+ie.AbstractEntityWithNonAbstractProperties,message:`Entity "${d.name}" with id "${d.id}" is marked as abstract but has non-abstract properties`,severity:H.Error,code:ie.AbstractEntityWithNonAbstractProperties,entity:d});u.push(i.error),d.properties.forEach(a=>{if(!a.abstract){const o=wt({id:d.id+"--"+ie.StaticEntityWithNonStaticProperties+"--"+a.id,message:`Property "${a.name}" with id "${a.id}" of entity "${d.name}" with id "${d.id}" is not marked as abstract but the entity is marked as abstract`,severity:H.Error,code:ie.StaticEntityWithNonStaticProperties,entity:d});u.push(o.error)}})}}else{if(d.abstractMethods.length){const i=wt({id:d.id+"--"+ie.AbstractPropertyInNonAbstractEntity,message:`Entity "${d.name}" with id "${d.id}" is not marked as abstract but has abstract methods`,severity:H.Error,code:ie.AbstractPropertyInNonAbstractEntity,entity:d});u.push(i.error)}d.properties.some(i=>i.abstract)&&d.properties.forEach(i=>{if(i.abstract){const a=wt({id:d.id+"--"+ie.AbstractPropertyInNonAbstractEntity+"--"+i.id,message:`Property "${i.name}" with id "${i.id}" of entity "${d.name}" with id "${d.id}" is marked as abstract but the entity is not marked as abstract`,severity:H.Error,code:ie.AbstractPropertyInNonAbstractEntity,entity:d,firstRelationship:i});u.push(a.error)}})}return d.static&&d.properties.some(i=>!i.static)&&d.properties.forEach(i=>{if(!i.static){const a=wt({id:d.id+"--"+ie.NonStaticPropertyInStaticEntity+"--"+i.id,message:`Property "${i.name}" with id "${i.id}" of entity "${d.name}" with id "${d.id}" is not marked as static but the entity is marked as static`,severity:H.Error,code:ie.NonStaticPropertyInStaticEntity,entity:d,firstRelationship:i});u.push(a.error)}}),u}function UDe(d,u){const i=[],a=Lr(u);if(!u.abstract){const e=new li({id:d.id+"--"+u.id+"--"+ie.ImplementingNonAbstractEntity,message:`Entity "${d.name}" with id "${d.id}" is implementing a non-abstract built-in entity "${u.name}" with id "${u.id}"`,severity:H.Error,code:ie.ImplementingNonAbstractEntity,entity:d,firstRelationship:u});i.push(e)}const o=d.implements.filter(e=>e.id!==u.id);if(d.abstract){const e=new li({id:d.id+"--"+u.id+"--"+ie.AbstractEntityImplements,message:`Entity "${d.name}" with id "${d.id}" is marked as abstract and cannot implement built-in entity "${u.name}" with id "${u.id}"`,severity:H.Error,code:ie.AbstractEntityImplements,entity:d,firstRelationship:u});i.push(e)}if(d.static&&!u.static){const e=new li({id:d.id+"--"+u.id+"--"+ie.StaticImplementingNonStaticEntity,message:`Entity "${d.name}" with id "${d.id}" is marked as static and cannot implement non-static built-in entity "${u.name}" with id "${u.id}"`,severity:H.Error,code:ie.StaticImplementingNonStaticEntity,entity:d,firstRelationship:u});i.push(e)}if(!d.static&&u.static){const e=new li({id:d.id+"--"+u.id+"--"+ie.NonStaticImplementingStaticEntity,message:`Entity "${d.name}" with id "${d.id}" is not marked as static and cannot implement static built-in entity "${u.name}" with id "${u.id}"`,severity:H.Error,code:ie.NonStaticImplementingStaticEntity,entity:d,firstRelationship:u});i.push(e)}return o.length&&o.forEach(e=>{if(e.type===c.BuiltInBaseEntity){const h=a.filter(v=>v.id!==e.id);h.length&&h.forEach(v=>{if(v.id!==e.id){const T=new li({id:d.id+"--"+v.id+"--"+e.id+"--"+ie.ImplementsIncompatibleEntities,message:`Entity "${d.name}" with id "${d.id}" is implementing built-in entity "${v.name}" with id "${v.id}" but also implements entity "${e.name}" with id "${e.id}" which is incompatible`,severity:H.Error,code:ie.ImplementsIncompatibleEntities,entity:d,firstRelationship:v,secondRelationship:e});i.push(T)}})}else{Lr(e).forEach(g=>{const A=a.filter(O=>O.id!==g.id);A.length&&A.forEach(O=>{if(O.id!==g.id){const V=new li({id:d.id+"--"+O.id+"--"+g.id+"--"+ie.ImplementsIncompatibleEntities,message:`Entity "${d.name}" with id "${d.id}" is implementing built-in entity "${O.name}" with id "${O.id}" but also implements entity "${g.name}" with id "${g.id}" which is incompatible`,severity:H.Error,code:ie.ImplementsIncompatibleEntities,entity:d,firstRelationship:O,secondRelationship:g});i.push(V)}})});const v=qa(u.ownDeclaredProperties,e.ownDeclaredProperties,ae.PropertyOverwritesOtherImplementedEntitysPropertyWithSameImplementation,ae.PropertyOverwritesOtherImplementedEntitysPropertyWithSameName);i.push(...v.errors);const T=qa(u.abstractMethods,[...e.abstractMethods,...e.methods],ae.MethodOverwritesOtherImplementedEntitysMethodWithSameImplementation,ae.MethodOverwritesOtherImplementedEntitysMethodWithSameName);i.push(...T.errors)}}),R(d.extends?Lr(d.extends):[]).forEach(e=>{if(!a.find(h=>h.id===e.id)){const h=new li({id:d.id+"--"+u.id+"--"+e.id+"--"+ie.ExtendsIncompatibleEntities,message:`Entity "${d.name}" with id "${d.id}" is implementing built-in entity "${u.name}" with id "${u.id}" but also extends entity "${e.name}" with id "${e.id}" which is incompatible`,severity:H.Error,code:ie.ExtendsIncompatibleEntities,entity:d,firstRelationship:u,secondRelationship:e});i.push(h)}}),i}function GDe(d,u,i=!1){var T,g;const a=[],o=Lr(u);if(!d.abstract&&u.abstract){const A=wt({id:d.id+"--"+u.id+"--"+ie.NonAbstractExtendingAbstractEntity,message:`Entity "${d.name}" with id "${d.id}" is not-abstract but is extending an abstract entity "${u.name}" with id "${u.id}"`,severity:H.Error,code:ie.NonAbstractExtendingAbstractEntity,entity:d,firstRelationship:u});a.push(A.error)}if(d.abstract&&!u.abstract){const A=wt({id:d.id+"--"+u.id+"--"+ie.AbstractExtendingNonAbstractEntity,message:`Entity "${d.name}" with id "${d.id}" is abstract but is extending an non-abstract entity "${u.name}" with id "${u.id}"`,severity:H.Error,code:ie.AbstractExtendingNonAbstractEntity,entity:d,firstRelationship:u});a.push(A.error)}if(!d.static&&u.static){const A=wt({id:d.id+"--"+u.id+"--"+ie.NonStaticExtendingStaticEntity,message:`Entity "${d.name}" with id "${d.id}" is not static but is extending a static entity "${u.name}" with id "${u.id}"`,severity:H.Error,code:ie.NonStaticExtendingStaticEntity,entity:d,firstRelationship:u});a.push(A.error)}if(d.static&&!u.static){const A=wt({id:d.id+"--"+u.id+"--"+ie.StaticExtendingNonStaticEntity,message:`Entity "${d.name}" with id "${d.id}" is static but is extending an non-static entity "${u.name}" with id "${u.id}"`,severity:H.Error,code:ie.StaticExtendingNonStaticEntity,entity:d,firstRelationship:u});a.push(A.error)}if(!Vf(u)){const A=wt({id:d.id+"--"+u.id+"--"+ie.ExtendingNonInteractiveEntity,message:`Entity "${d.name}" with id "${d.id}" is extending an non-interactive entity "${u.name}" with id "${u.id}"`,severity:H.Error,code:ie.ExtendingNonInteractiveEntity,entity:d,firstRelationship:u});a.push(A.error)}if(d.extends&&((T=d.extends)==null?void 0:T.id)!==u.id)if(((g=d.extends)==null?void 0:g.type)===c.BuiltInBaseEntity){const A=o.filter(O=>{var V;return O.id!==((V=d.extends)==null?void 0:V.id)});A.length&&A.forEach(O=>{var V,x,U,S;if(O.id!==((V=d.extends)==null?void 0:V.id)){const q=wt({id:d.id+"--"+O.id+"--"+((x=d.extends)==null?void 0:x.id)+"--"+ie.ExtendsIncompatibleEntities,message:`Entity "${d.name}" with id "${d.id}" is extending built-in entity "${O.name}" with id "${O.id}" but also extends entity "${(U=d.extends)==null?void 0:U.name}" with id "${(S=d.extends)==null?void 0:S.id}" which is incompatible`,severity:H.Error,code:ie.ExtendsIncompatibleEntities,entity:d,firstRelationship:O,secondRelationship:d.extends});a.push(q.error)}})}else{Lr(d.extends).forEach(q=>{const ne=o.filter(ee=>ee.id!==q.id);ne.length&&ne.forEach(ee=>{if(ee.id!==q.id){const ce=new li({id:d.id+"--"+ee.id+"--"+q.id+"--"+ie.ImplementsIncompatibleEntities,message:`Entity "${d.name}" with id "${d.id}" is extending built-in entity "${ee.name}" with id "${ee.id}" but also extends or implements entity "${q.name}" with id "${q.id}" which is incompatible`,severity:H.Error,code:ie.ImplementsIncompatibleEntities,entity:d,firstRelationship:ee,secondRelationship:q});a.push(ce)}})});const O=!!Lr(d.extends).find(q=>q.id===u.id);let V=[...d.extends.properties];O&&(V=V.filter(q=>!u.properties.find(ne=>{var ee;return ne.id===q.id||ne.name===q.name||ne.id===((ee=q.implements)==null?void 0:ee.id)})));let x=[...d.extends.methods];O&&(x=x.filter(q=>!u.methods.find(ne=>{var ee;return ne.id===q.id||ne.name===q.name||ne.id===((ee=q.implements)==null?void 0:ee.id)})));const U=qa(u.ownDeclaredProperties,V,ae.PropertyOverwritesOtherExtendedEntitysPropertyWithSameImplementation,ae.PropertyOverwritesOtherExtendedEntitysPropertyWithSameName);a.push(...U.errors);const S=qa(u.abstractMethods,x,ae.MethodOverwritesOtherExtendedEntitysMethodWithSameImplementation,ae.MethodOverwritesOtherExtendedEntitysMethodWithSameName);a.push(...S.errors)}i&&Ue.log("self.implements.length",d.implements.length),d.implements.length&&d.implements.forEach(A=>{if(A.type===c.BuiltInBaseEntity){const O=o.filter(V=>V.id!==A.id);O.length&&O.forEach(V=>{if(V.id!==A.id){const x=new li({id:d.id+"--"+V.id+"--"+A.id+"--"+ie.ImplementsIncompatibleEntities,message:`Entity "${d.name}" with id "${d.id}" is implementing built-in entity "${V.name}" with id "${V.id}" but also implements entity "${A.name}" with id "${A.id}" which is incompatible`,severity:H.Error,code:ie.ImplementsIncompatibleEntities,entity:d,firstRelationship:V,secondRelationship:A});a.push(x)}})}else{Lr(A).forEach(U=>{const S=o.filter(q=>q.id!==U.id);S.length&&S.forEach(q=>{if(q.id!==U.id){const ne=new li({id:d.id+"--"+q.id+"--"+U.id+"--"+ie.ImplementsIncompatibleEntities,message:`Entity "${d.name}" with id "${d.id}" is implementing built-in entity "${q.name}" with id "${q.id}" but also implements entity "${U.name}" with id "${U.id}" which is incompatible`,severity:H.Error,code:ie.ImplementsIncompatibleEntities,entity:d,firstRelationship:q,secondRelationship:U});a.push(ne)}})});const V=qa(u.ownDeclaredProperties,A.ownDeclaredProperties,ae.PropertyOverwritesOtherImplementedEntitysPropertyWithSameImplementation,ae.PropertyOverwritesOtherImplementedEntitysPropertyWithSameName);a.push(...V.errors);const x=qa(u.abstractMethods,[...A.abstractMethods,...A.methods],ae.MethodOverwritesOtherImplementedEntitysMethodWithSameImplementation,ae.MethodOverwritesOtherImplementedEntitysMethodWithSameName);a.push(...x.errors)}});const e=qa(d.ownDeclaredProperties,u.ownDeclaredProperties,ae.PropertyOverwritesOtherSiblingWithSameImplementation,ae.PropertyOverwritesOtherSiblingWithSameName);a.push(...e.errors);const h=qa(u.methods,u.abstractMethods,ae.MethodOverwritesOtherSiblingWithSameImplementation,ae.MethodOverwritesOtherSiblingWithSameName);return a.push(...h.errors),R(d.extends?Lr(d.extends):[]).forEach(A=>{if(!o.find(O=>O.id===A.id)){const O=new li({id:d.id+"--"+u.id+"--"+A.id+"--"+ie.ImplementsIncompatibleEntities,message:`Entity "${d.name}" with id "${d.id}" is extending built-in entity "${u.name}" with id "${u.id}" but also extends entity "${A.name}" with id "${A.id}" which is incompatible`,severity:H.Error,code:ie.ImplementsIncompatibleEntities,entity:d,firstRelationship:u,secondRelationship:A});a.push(O)}}),a}function jDe(d){const u=[];if(d.implements.forEach(i=>{if(!i.static){const a=new li({id:d.id+"--"+i.id+"--"+ie.StaticImplementingNonStaticEntity,message:`Entity "${d.name}" with id "${d.id}" is static but implements entity "${i.name}" with id "${i.id}" which is non-static`,severity:H.Error,code:ie.StaticImplementingNonStaticEntity,entity:d,firstRelationship:i});u.push(a)}}),d.extends&&!d.extends.static){const i=new li({id:d.id+"--"+d.extends.id+"--"+ie.StaticExtendingNonStaticEntity,message:`Entity "${d.name}" with id "${d.id}" is static but extends entity "${d.extends.name}" with id "${d.extends.id}" which is non-static`,severity:H.Error,code:ie.StaticExtendingNonStaticEntity,entity:d,firstRelationship:d.extends});u.push(i)}return u}function FDe(d){const u=[];if(d.implements.length){const i=new li({id:d.id+"--"+ie.AbstractEntityImplements,message:`Entity "${d.name}" with id "${d.id}" cannot be marked as abstract because it implements other entities`,severity:H.Error,code:ie.AbstractEntityImplements,entity:d});u.push(i)}if(d.extends&&!d.extends.abstract){const i=new li({id:d.id+"--"+d.extends.id+"--"+ie.AbstractExtendingNonAbstractEntity,message:`Entity "${d.name}" with id "${d.id}" is abstract but extends entity "${d.extends.name}" with id "${d.extends.id}" which is non-abstract`,severity:H.Error,code:ie.AbstractExtendingNonAbstractEntity,entity:d,firstRelationship:d.extends});u.push(i)}return u}function kDe(d){const u=[];if(d.extends&&d.extends.static){const i=new li({id:d.id+"--"+d.extends.id+"--"+ie.NonStaticExtendingStaticEntity,message:`Entity "${d.name}" with id "${d.id}" is non-static but extends entity "${d.extends.name}" with id "${d.extends.id}" which is static`,severity:H.Error,code:ie.NonStaticExtendingStaticEntity,entity:d,firstRelationship:d.extends});u.push(i)}return u}function SDe(d){const u=[];if(d.extends&&d.extends.abstract){const i=new li({id:d.id+"--"+d.extends.id+"--"+ie.NonAbstractExtendingAbstractEntity,message:`Entity "${d.name}" with id "${d.id}" is non-abstract but extends entity "${d.extends.name}" with id "${d.extends.id}" which is abstract`,severity:H.Error,code:ie.NonAbstractExtendingAbstractEntity,entity:d,firstRelationship:d.extends});u.push(i)}return u}function uH(d,u){const a=[...d.project.entities].filter(o=>o.id!==d.id);return Df(d,[qi,zl],a,u)}const KDe=Object.freeze(Object.defineProperty({__proto__:null,getBaseMethodsNotImplemented:dH,getBasePropertiesNotImplemented:lH,validate:oH,validateCanBecomeAbstract:FDe,validateCanBecomeNonAbstract:SDe,validateCanBecomeNonStatic:kDe,validateCanBecomeStatic:jDe,validateCanExtendEntity:GDe,validateCanImplementEntity:UDe,validateDefinitionEntityName:uH},Symbol.toStringTag,{value:"Module"}));function qDe(d,u){const i=[];if(d.parent)if(d.id===d.parent)i.push(new le({id:`${d.id}--${d.parent}--${K.SelfReference}`,code:K.SelfReference,severity:H.Error,message:`Entity of type "${d.type}" with id "${d.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=u.get(d.parent);a?[c.Project,c.DataType].includes(a.type)||i.push(new le({id:`${d.id}--${d.parent}--${K.InvalidParentReference}`,code:K.InvalidParentReference,severity:H.Error,message:`Entity of type "${d.type}" with id "${d.id}", has a parent reference that isn't pointing to an entity of type 'project' or 'data-type'.`})):i.push(new le({id:`${d.id}--${d.parent}--${K.ReferencedEntityNotFound}`,code:K.ReferencedEntityNotFound,severity:H.Error,message:`Entity of type "${d.type}" with id "${d.id}", is referencing an entity with id "${d.parent}" that isn't yet found in the project. Perhaps it should be created first. Or perhaps the ID is incorrect.`}))}return d.implements&&Array.isArray(d.implements)?d.implements.forEach(a=>{if(d.id===a){i.push(new le({id:`${d.id}--${a}--${K.SelfReference}`,code:K.SelfReference,severity:H.Error,message:`Entity of type "${d.type}" with id "${d.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 o=u.get(a);o?[c.DefinitionEntity,c.BuiltInBaseEntity].includes(o.type)?o.abstract||i.push(new le({id:`${d.id}--${a}--${K.InvalidImplementsReference}`,code:K.InvalidImplementsReference,severity:H.Error,message:`Entity of type "${d.type}" with id "${d.id}", has an 'implements' reference that isn't pointing to an abstract entity.`})):i.push(new le({id:`${d.id}--${a}--${K.InvalidImplementsReference}`,code:K.InvalidImplementsReference,severity:H.Error,message:`Entity of type "${d.type}" with id "${d.id}", has an 'implements' reference that isn't pointing to an entity of type 'definition-entity' or 'built-in-base-entity'.`})):i.push(new le({id:`${d.id}--${a}--${K.ReferencedEntityNotFound}`,code:K.ReferencedEntityNotFound,severity:H.Error,message:`Entity of type "${d.type}" with id "${d.id}", is referencing an entity with id "${a}" that isn't yet found in the project. Perhaps it should be created first. Or perhaps the ID is incorrect.`}))}):i.push(new le({id:`${d.id}--${ae.InvalidObjectStructure}`,code:ae.InvalidObjectStructure,severity:H.Error,message:`Entity of type "${d.type}" with id "${d.id}", has an 'implements' property that isn't an array.`})),d.extends&&Array.isArray(d.extends)&&d.extends.forEach(a=>{const o=u.get(a);o?[c.DefinitionEntity,c.BuiltInBaseEntity].includes(o.type)?o.abstract&&i.push(new le({id:`${d.id}--${a}--${K.InvalidExtendsReference}`,code:K.InvalidExtendsReference,severity:H.Error,message:`Entity of type "${d.type}" with id "${d.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?`})):i.push(new le({id:`${d.id}--${a}--${K.InvalidExtendsReference}`,code:K.InvalidExtendsReference,severity:H.Error,message:`Entity of type "${d.type}" with id "${d.id}", has an 'extends' reference that isn't pointing to an entity of type 'definition-entity' or 'built-in-base-entity'.`})):i.push(new le({id:`${d.id}--${a}--${K.ReferencedEntityNotFound}`,code:K.ReferencedEntityNotFound,severity:H.Error,message:`Entity of type "${d.type}" with id "${d.id}", is referencing an entity with id "${a}" that isn't yet found in the project. Perhaps it should be created first. Or perhaps the ID is incorrect.`}))}),i}var h0=(d=>(d.Extends="extends",d.Implements="implements",d))(h0||{});const Wt=class Wt extends Bi{constructor(i,a){super(i);D(this,"initialData");D(this,"id");D(this,"name");D(this,"codeName",null);D(this,"description",null);D(this,"x");D(this,"y");D(this,"static");D(this,"abstract");D(this,"type",c.DefinitionEntity);D(this,"properties",[]);D(this,"methods",[]);D(this,"abstractMethods",[]);D(this,"extends",null);D(this,"implements",[]);D(this,"project");D(this,"errors",[]);D(this,"parent");D(this,"detachedDependents",{});D(this,"knownVersions",null);D(this,"activeVersion",!1);D(this,"initialized",!1);D(this,"startedInitialization",!1);D(this,"suggestedProperties",[]);D(this,"suggestedMethods",[]);this.initialData=i,this.project=a,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:N.UUID.uuid(),version:N.UUID.uuid(),createdAt:(i==null?void 0:i.timestamp)||B().toISOString(),author:(i==null?void 0:i.author)||N.sessionAuthor,previousVersion:null,deleted:!1,type:c.DefinitionEntity,name:"",codeName:null,description:"",static:!1,abstract:!1,properties:[],methods:[],abstractMethods:[],extends:null,implements:[],x:0,y:0,parent:null}}static fromGenerationTarget(i,a){let o=a;if(i.parent){const T=J(i.parent);o=a.get(T)}const f=[];i.implements&&i.implements.forEach(T=>{f.push(a.get(T)||a.getBuiltIn(T))});let e=null;i.extends&&(e=a.get(i.extends)||a.getBuiltIn(i.extends));const h={id:i.id,version:N.UUID.uuid(),createdAt:B().toISOString(),author:N.sessionAuthor,previousVersion:null,deleted:!1,name:i.name,type:c.DefinitionEntity,codeName:i.codeName||null,description:i.description,static:i.static,abstract:i.abstract,properties:[],methods:[],abstractMethods:[],extends:e,implements:f,x:0,y:0,parent:o},v=oe(h,a);return v.setParent(o,null),v}static validateGenerationTarget(i,a){let o=JSON.parse(JSON.stringify(i));const f=[],e=qDe(o,a),h=bb(o,a);f.push(...e,...h,...ji(o));const v=o.parent?a.get(o.parent):null;if(v&&v.type===c.DataType){const T=v;T.entity&&f.push(new le({id:`${i.id}--${K.NewEntityWouldOverriteExisting}`,code:K.NewEntityWouldOverriteExisting,severity:H.Error,message:`The entity of type '${i.type}' with id '${i.id}' can't be added to the 'parent' entity with id '${T.id}' because it already has an 'entity' child. Data type entities can only have one 'entity' as children.
442
+ ${qm}`})),{errors:a,modifiedData:i}}onProjectInitialized(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,new Date().toISOString(),this,!0,"on-property-received-project-initialized"))){return sH(this,a),a==null||a.attemptAutoclose("on-property-received-project-initialized",this.id),this}subscribeDependents(i){return i.forEach(a=>{this.detachedDependents[a.entity.id]||(this.detachedDependents[a.entity.id]=a)}),this}unsubscribeDependents(i){return i.forEach(a=>{this.detachedDependents[a.entity.id]&&delete this.detachedDependents[a.entity.id]}),this}syncDependents(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"sync-dependents"))){const a=[],o=[],f=[],e=[];return Object.values(this.detachedDependents).forEach(h=>{const v=h.entity.afterAllChildrenInitialized(i);a.push(...v.updated),o.push(...v.added),f.push(...v.removed),e.push(...v.affected)}),i==null||i.attemptAutoclose("sync-dependents",this.id),{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}onDetachedDependencyRemoved(i,a,o){const f=[],e=[],h=[],v=[];if(a==="property-implements"&&(this.setImplements(null,o),f.push(this)),a==="property-extends"){const{updated:T,added:g,removed:A,affected:O}=this.remove({ignoreUpstream:!1},o);f.push(...T),e.push(...g),h.push(...A),v.push(...O)}return{updated:R(f),added:R(e),removed:R(h),affected:R(v),self:this}}onDetachedDependencyRestored(i,a,o){const f=[],e=[],h=[],v=[];if(a==="property-implements"&&(this.setImplements(i,o),f.push(this)),a==="property-extends"){const{updated:T,added:g,removed:A,affected:O}=this.restore({},o);f.push(...T),e.push(...g),h.push(...A),v.push(...O)}return{updated:R(f),added:R(e),removed:R(h),affected:R(v),self:this}}unsubscribeFromDependencies(){var i,a,o,f,e,h,v;return(a=(i=this.implements)==null?void 0:i.unsubscribeDependents)==null||a.call(i,[{entity:this,field:"property-implements"}]),(f=(o=this.extends)==null?void 0:o.unsubscribeDependents)==null||f.call(o,[{entity:this,field:"property-extends"}]),(v=(h=(e=this.dataType)==null?void 0:e.entity)==null?void 0:h.unsubscribeDependents)==null||v.call(h,[{entity:this,field:"data-type-entity"}]),this.project.off(Li.PROJECT_INITIALIZED,this.onProjectInitialized),this}subscribeToDependencies(){var i,a,o,f,e,h,v;return(a=(i=this.implements)==null?void 0:i.subscribeDependents)==null||a.call(i,[{entity:this,field:"property-implements"}]),(f=(o=this.extends)==null?void 0:o.subscribeDependents)==null||f.call(o,[{entity:this,field:"property-extends"}]),(v=(h=(e=this.dataType)==null?void 0:e.entity)==null?void 0:h.subscribeDependents)==null||v.call(h,[{entity:this,field:"data-type-entity"}]),this.project.on(Li.PROJECT_INITIALIZED,this.onProjectInitialized),this}increaseVersion(i){if(i&&!B(i).isValid())throw new Error(`The shared timestamp '${i}' is not a valid ISO 8601 date string.`);return i&&B(i).isSame(B(this.createdAt))?this:(this.previousVersion=this.version,this.version=N.UUID.uuid(),this.createdAt=B(i).toISOString()||B().toISOString(),this)}captureVersion(){var a;const i=((a=this.knownVersions)==null?void 0:a.get(this.version))||new Nt(this,this.project);return i.metaSync(this.toMeta(),null),this.knownVersions=this.knownVersions?this.knownVersions.set(this.version,i):new Map([[this.version,i]]),i.defaultValue=this.defaultValue,i.dataType=this.dataType,i.implements=this.implements,i.extends=this.extends,i.parent=this.parent,this}recursiveCaptureUpstreamVersions(i){const a=[],o=[],f=[],e=[];if(this.parent&&this.parent.type!==c.PrimitiveEntity&&this.parent.type!==c.BuiltInBaseEntity){this.parent.increaseVersion(i);const h=this.parent.recursiveCaptureUpstreamVersions(i);a.push(this.parent,...h.updated),o.push(...h.added),f.push(...h.removed)}return{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}async restoreVersion(i){var v;const a=[],o=[],f=[],e=[];if(this.version===i)return{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this};if(!this.knownVersions){const T=new Map;for(const[g,A]of this.knownVersions||new Map){if(T.set(g,A),A.activeVersion=!1,A.knownVersions)for(const[O,V]of A.knownVersions)T.set(O,V);A.knownVersions=null}}let h=(v=this.knownVersions)==null?void 0:v.get(i);if(!h){const T=await this.APILoadVersion({},i);if(!T)throw new Error(`Version with id '${i}' for entity with id '${this.id}' not found.`);h=new Nt(T,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:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}updateWithShallowTransfer(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"update-with-shallow-transfer"))){if(this.metaSync(i,a),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 o=J(i.parent),f=this.project.get(o),e=this.parent;if(e&&e.id!==(f==null?void 0:f.id)&&this.removeFromParent(a),f)this.setParent(f,null);else throw a==null||a.attemptAutoclose("update-with-shallow-transfer",this.id),new Error(`${this.type} with id '${this.id}' has a 'parent' reference '${o}' that isn't found in the project`)}else throw a==null||a.attemptAutoclose("update-with-shallow-transfer",this.id),new Error(`${this.type} with id '${this.id}' must have a 'parent'`);if(i.implements){const o=J(i.implements),f=this.project.get(o);if(f)this.setImplements(f,a);else if(o)throw new Error(`${Or(this.type)} with id '${this.id}' has a 'implements' reference "${o}" which is missing in the project`)}if(i.extends){const o=J(i.extends),f=this.project.get(o);if(f)this.setExtends(f,a);else if(o)throw new Error(`${Or(this.type)} with id '${this.id}' has a 'extends' reference "${o}" which is missing in the project`)}return this.captureVersion(),this.subscribeToDependencies(),a==null||a.attemptAutoclose("update-with-shallow-transfer",this.id),this}hydrateAncestors(){const i=[],a=[],o=[],f=[];if(this.initialData.parent){const e=J(this.initialData.parent),h=this.project.get(e);if(h)this.setParent(h,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){const e=J(this.initialData.implements),h=this.project.get(e);if(h)this.setImplements(h,null),i.push(h);else if(e)throw new Error(`${Or(this.type)} with id '${this.id}' has a 'implements' reference "${e}" which is missing in the project`)}if(this.initialData.extends){const e=J(this.initialData.extends),h=this.project.get(e);if(h)this.setExtends(h,null),i.push(h);else if(e)throw new Error(`${Or(this.type)} with id '${this.id}' has a 'extends' reference "${e}" which is missing in the project`)}return{updated:R(i),added:R(a),removed:R(o),affected:R(f),self:this}}afterAllChildrenInitialized(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"after-all-children-initialized"))){const a=[],o=[],f=[],e=[];this.initialized=!0;const{updated:h,added:v,removed:T,affected:g}=this.syncWithImplementation(i);a.push(...h),o.push(...v),f.push(...T),e.push(...g);const{updated:A,added:O,removed:V,affected:x}=sH(this,i);return a.push(...A),o.push(...O),f.push(...V),e.push(...x),this.captureVersion(),i==null||i.attemptAutoclose("after-all-children-initialized",this.id),{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}addSelfToProject(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"add-self-to-project"))){const a=[this],o=[],f=[],e=[];return this.parent.addProperty(this),a.push(this.parent),this.subscribe(),this.subscribeToDependencies(),i==null||i.attemptAutoclose("add-self-to-project",this.id),{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}setParent(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"set-parent"))){var o;return((o=this.parent)==null?void 0:o.id)!==(i==null?void 0:i.id)&&(this.parent=i,a&&(a==null||a.add(this,k.Updated))),a==null||a.attemptAutoclose("set-parent",this.id),this}setImplements(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"set-implements"))){var o;return((o=this.implements)==null?void 0:o.id)!==(i==null?void 0:i.id)&&(this.implements=i,a&&(a==null||a.add(this,k.Updated))),a==null||a.attemptAutoclose("set-implements",this.id),this}setExtends(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"set-extends"))){var o;return((o=this.extends)==null?void 0:o.id)!==(i==null?void 0:i.id)&&(this.extends=i,a&&(a==null||a.add(this,k.Updated))),a==null||a.attemptAutoclose("set-extends",this.id),this}initChildren(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"init-children"))){if(this.initialized||this.startedInitialization)return this;if(this.startedInitialization=!0,this.initialData.defaultValue&&(this.defaultValue=oe(this.initialData.defaultValue,this.project),this.defaultValue.setParent(this,null),this.defaultValue.initChildren(i)),this.initialData.dataType){const a=oe(this.initialData.dataType,this.project);a.setParent(this,null),a.initChildren(i),this.dataType=a}if(this.initialData.implements){const a=oe(this.initialData.implements,this.project);this.setImplements(a,null)}if(this.initialData.extends){const a=oe(this.initialData.extends,this.project);this.setExtends(a,null)}return this.subscribeToDependencies(),this.afterAllChildrenInitialized(i),i==null||i.attemptAutoclose("init-children",this.id),this}subscribe(){return this.activeVersion=!0,this.project.subscribeInstance(this),this}unsubscribe(){return this.project.unsubscribeInstance(this),this}metaSync(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"meta-sync"))){const o=Fi(this,i),f=this.toMeta();return this.name=i.name!==void 0?i.name:f.name,this.codeName=i.codeName!==void 0?i.codeName:f.codeName,this.description=i.description!==void 0?i.description:f.description,this.abstract=i.abstract!==void 0?i.abstract:f.abstract,this.private=i.private!==void 0?i.private:f.private,this.index=i.index||(i.index!==0?f.index:0),this.static=i.static!==void 0?i.static:f.static,this.hidden=i.hidden!==void 0?i.hidden:f.hidden,this.constant=i.constant!==void 0?i.constant:f.constant,this.interactive=i.interactive!==void 0?i.interactive:f.interactive,this.required=i.required!==void 0?i.required:f.required,super.metaSync(i),i.deleted===!0&&!f.deleted?a==null||a.add(this,k.Removed):i.deleted===!1&&f.deleted?a==null||a.add(this,k.Added):o&&(a==null||a.add(this,k.Updated)),a==null||a.attemptAutoclose("meta-sync",this.id),this}async APILoad(i=Te,...a){return await Nt.repository.APILoad(this.id,...a),this}async APICreate(i=Te,...a){return await Nt.repository.APICreate(this.toShallowJSON(),...a),this}async APIUpdate(i=Te,...a){return await Nt.repository.APIUpdate(this.toShallowJSON(),...a),this}async APIDelete(i=Te,...a){return await Nt.repository.APIDelete(this.toShallowJSON(),...a),this}async APIClone(i=Te,...a){return await Nt.repository.APIClone(this.id,...a),this}async APILoadVersion(i=Te,a,...o){return await Nt.repository.APILoadVersion(this.id,a,...o)}removeFromParent(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"remove-from-parent"))){const a=[],o=[],f=[],e=[];return this.parent.type===c.DefinitionEntity&&(this.parent.removeProperty(this),e.push(this.parent)),i==null||i.attemptAutoclose("remove-from-parent",this.id),{added:R(f),updated:R(a),removed:R(o),affected:R(e),self:this}}remove({ignoreUpstream:i}={ignoreUpstream:!1},a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"remove-entity"))){const o=[],f=[],e=[],h=[];if(a!=null&&a.hasRemoved(this.id))return a==null||a.attemptAutoclose("remove-entity",this.id),{added:[],updated:[],removed:[],affected:[],self:this};if(f.push(this),this.unsubscribe(),this.unsubscribeFromDependencies(),this.project.subscribeDeletedInstance(this),this.metaSync({deleted:!0},a),Object.values(this.detachedDependents).forEach(v=>{const{updated:T,removed:g,added:A}=v.entity.onDetachedDependencyRemoved(this,v.field,a);o.push(...T),f.push(...g),e.push(...A)}),this.defaultValue){const{updated:v,removed:T}=this.defaultValue.remove({ignoreUpstream:!0},a);o.push(...v),f.push(...T)}if(this.dataType){const{updated:v,removed:T}=this.dataType.remove({ignoreUpstream:!0},a);o.push(...v),f.push(...T)}if(!i){const v=this.removeFromParent(a);e.push(...v.added),o.push(...v.updated),f.push(...v.removed),h.push(...v.affected)}return a==null||a.attemptAutoclose("remove-entity",this.id),{added:R(e),updated:R(o),removed:R(f),affected:R(h),self:this}}restore({}={},i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"restore-entity"))){const a=[],o=[],f=[],e=[];if(i!=null&&i.hasAdded(this.id))return i==null||i.attemptAutoclose("restore-entity",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(h=>{const{updated:v,removed:T,added:g}=h.entity.onDetachedDependencyRestored(this,h.field,i);o.push(...v),f.push(...T),a.push(...g)}),this.defaultValue){const{updated:h}=this.defaultValue.restore({},i);o.push(...h)}if(this.dataType){const{updated:h}=this.dataType.restore({},i);o.push(...h)}return this.parent.type===c.DefinitionEntity&&(this.parent.addProperty(this),e.push(this.parent)),i==null||i.attemptAutoclose("restore-entity",this.id),{added:R(a),updated:R(o),removed:R(f),affected:R(e),self:this}}toFlat(i=new Set){var o,f;return i.has(this.id)?[]:(i.add(this.id),[this,...((o=this.defaultValue)==null?void 0:o.toFlat(i))||[],...((f=this.dataType)==null?void 0:f.toFlat(i))||[],...this.parent.toFlat(i)])}toFlatIds(i=new Set){var o,f;return i.has(this.id)?[]:(i.add(this.id),[this.id,...((o=this.defaultValue)==null?void 0:o.toFlatIds(i))||[],...((f=this.dataType)==null?void 0:f.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,constant:this.constant,interactive:this.interactive,static:this.static,type:this.type,name:this.name}}toJSON(i=new Set){var a,o,f,e;return i.has(this.id)?this.toReference():(i.add(this.id),{id:this.id,version:this.version,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,type:this.type,name:this.name,codeName:this.codeName,description:this.description,index:this.index,private:this.private,required:this.required,static:this.static,constant:this.constant,interactive:this.interactive,abstract:this.abstract,hidden:this.hidden,defaultValue:((a=this.defaultValue)==null?void 0:a.toJSON(i))||null,dataType:((o=this.dataType)==null?void 0:o.toJSON(i))||null,implements:((f=this.implements)==null?void 0:f.toJSON(i))||null,extends:((e=this.extends)==null?void 0:e.toJSON(i))||null,parent:this.parent.toReference()})}toJSONClone(i=qe){var o,f,e,h,v,T,g;let a;return(o=i.seenEntityMaps)!=null&&o.has(this.id)?a=i.seenEntityMaps.get(this.id):(a=i.newId||Zi(this,this.project,i.uuidStrategy),i.seenEntityMaps&&i.seenEntityMaps.set(this.id,a)),(f=i.seenEntities)!=null&&f.has(a)||(e=i.seenEntities)!=null&&e.has(this.id)?this.toReference({seenEntityMaps:i.seenEntityMaps}):((h=i.seenEntities)==null||h.add(a),(v=i.seenEntities)==null||v.add(this.id),{id:a,version:N.UUID.uuid(),createdAt:i.timestamp||B().toISOString(),author:N.sessionAuthor,previousVersion:null,deleted:!1,type:this.type,name:this.name,codeName:this.codeName,description:this.description,index:this.index,private:this.private,required:this.required,static:this.static,constant:this.constant,interactive:this.interactive,abstract:this.abstract,hidden:this.hidden,defaultValue:((T=this.defaultValue)==null?void 0:T.toJSONClone({...i,newId:null}))||null,dataType:((g=this.dataType)==null?void 0:g.toJSONClone({...i,newId:null}))||null,implements:(()=>{var A;return this.implements&&this.project.getBuiltIn(this.implements.id)?this.implements.toJSON():((A=this.implements)==null?void 0:A.toJSONClone({...i,newId:null}))||null})(),extends:(()=>{var A;return this.extends&&this.project.getBuiltIn(this.extends.id)?this.extends.toJSON():((A=this.extends)==null?void 0:A.toJSONClone({...i,newId:null}))||null})(),parent:this.parent.toReference({seenEntityMaps:i.seenEntityMaps})})}toReference(i=qe){var o;let a=this.id;return(o=i.seenEntityMaps)!=null&&o.has(this.id)&&(a=i.seenEntityMaps.get(this.id)),{id:a+"--"+N.UUID.uuid()+"--ref",type:c.GenericReference,entityId:a,version:this.version,entityType:this.type}}toShallowJSON(i=qe){var o,f,e,h,v;let a=this.id;return(o=i.seenEntityMaps)!=null&&o.has(this.id)&&(a=i.seenEntityMaps.get(this.id)),{id:a,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,index:this.index,private:this.private,required:this.required,abstract:this.abstract,static:this.static,constant:this.constant,interactive:this.interactive,hidden:this.hidden,defaultValue:((f=this.defaultValue)==null?void 0:f.toReference(i))||null,dataType:((e=this.dataType)==null?void 0:e.toReference(i))||null,implements:((h=this.implements)==null?void 0:h.toReference(i))||null,extends:((v=this.extends)==null?void 0:v.toReference(i))||null,parent:this.parent.toReference(i)}}toFlatJSON(i=new Set){var o,f,e;return i.has(this.id)?[]:(i.add(this.id),[this.toShallowJSON(),...((o=this.defaultValue)==null?void 0:o.toFlatJSON(i))||[],...((f=this.dataType)==null?void 0:f.toFlatJSON(i))||[],...((e=this.implements)==null?void 0:e.toFlatJSON(i))||[],...this.parent.toFlatJSON(i)])}toGenerationTarget(){var i,a;return{id:this.id,name:this.name,description:this.description,type:this.type,private:this.private,required:this.required,abstract:this.abstract,static:this.static,implements:(i=this.implements)==null?void 0:i.id,extends:(a=this.extends)==null?void 0:a.id,parent:this.parent.id}}toFlatGenerationTarget(i=new Set){var o,f;return i.has(this.id)?[]:(i.add(this.id),[this.toGenerationTarget(),...((o=this.defaultValue)==null?void 0:o.toFlatGenerationTarget(i))||[],...((f=this.dataType)==null?void 0:f.toFlatGenerationTarget(i))||[]])}clearErrors(){var i,a;return this.errors=[],(i=this.defaultValue)==null||i.clearErrors(),(a=this.dataType)==null||a.clearErrors(),this}validate(){return this.errors=iH(this),this.errors.length,{success:!0}}getErrors(){var a,o;return[...this.errors,...((a=this.defaultValue)==null?void 0:a.getErrors())||[],...((o=this.dataType)==null?void 0:o.getErrors())||[]]}getShallowErrors(){return this.errors}implement(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"implement-self-as-property")),o=null){const f=o||N.UUID.uuid(),e=Nt.new(a);e.id=f,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.hidden=this.hidden,e.interactive=this.interactive,e.parent=i.toReference(),e.implements=this.toJSON();const h=oe(e,this.project);return h.hydrateAncestors(),h.addSelfToProject(a),h.initChildren(a),h}clone(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"clone-entity")),a=null,o=null,f=!0){var V,x;let e=Ki(a,this);const h=o||N.UUID.uuid();let v=a||this.parent;const T={hidden:!1,id:h,version:N.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,name:this.name,codeName:this.codeName,description:this.description,index:this.index,private:this.private,constant:this.constant,interactive:this.interactive,required:this.required,abstract:this.abstract,static:this.static,defaultValue:null,dataType:null,implements:this.implements,extends:this.extends,parent:v},g=fi(T,e);f&&g.subscribe(),g.hydrateAncestors(),f&&g.addSelfToProject(i),g.setParent(v,null),g.initChildren(i),i==null||i.add(g,k.Added);const A=((V=this.dataType)==null?void 0:V.clone(i,g,N.UUID.uuid(),f))||null;A&&g.setDataType(A,i);const O=(x=this.defaultValue)==null?void 0:x.clone(i,g,N.UUID.uuid(),f);return g.setDefaultValue(O||null,i),this.implements&&g.setImplements(this.implements,i),g.addSelfToProject(null),i==null||i.attemptAutoclose("clone-entity",this.id),g}setDataType(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"set-data-type"))){const o=this.dataType;return(o==null?void 0:o.id)!==(i==null?void 0:i.id)&&(o==null||o.remove({ignoreUpstream:!0},a),this.dataType=i,this.subscribeToDependencies(),a==null||a.add(this,k.Affected)),a==null||a.attemptAutoclose("set-data-type",this.id),this}removeDataType(){return this.dataType=null,this}getDataType(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"get-data-type"))){return i==null||i.attemptAutoclose("get-data-type",this.id),this.dataType}getDefaultValue(){var i,a;return this.defaultValue||((i=this.extends)==null?void 0:i.getDefaultValue())||((a=this.implements)==null?void 0:a.getDefaultValue())||null}setDefaultValue(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"set-default-value"))){const o=this.defaultValue;return(o==null?void 0:o.id)!==(i==null?void 0:i.id)&&(o==null||o.remove({ignoreUpstream:!0},a),this.defaultValue=i,a==null||a.add(this,k.Affected)),a==null||a.attemptAutoclose("set-default-value",this.id),this}syncWithImplementation(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"sync-with-implementation"))){var h;const a=[],o=[],f=[],e=[];if(this.implements){const v=this.implements;if(!this.dataType&&v.dataType){const T=v.dataType.clone(i,this,N.UUID.uuid(),!0);this.setDataType(T,i),o.push(T)}if(this.implements.defaultValue&&!this.defaultValue){const T=(h=this.implements.defaultValue)==null?void 0:h.clone(i,this,N.UUID.uuid(),!0);this.setDefaultValue(T||null,i),o.push(T)}}return i==null||i.attemptAutoclose("sync-with-implementation",this.id),{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}};D(Nt,"repository",{APICreate:async(i,...a)=>i,APIUpdate:async(i,...a)=>i,APIDelete:async(i,...a)=>i,APIClone:async(i,...a)=>{},APILoad:async(i,...a)=>null,APILoadVersion:async(i,a,...o)=>null}),D(Nt,"type",c.Property),D(Nt,"USER_MANAGED_PARENT_TYPES",[c.DefinitionEntity]),D(Nt,"PARENT_TYPES",[...Nt.USER_MANAGED_PARENT_TYPES,c.PrimitiveEntity,c.BuiltInBaseEntity]),D(Nt,"MUTABLE_BASE_PROPERTIES",["name","codeName","description","private","abstract","static","required","constant","interactive"]),D(Nt,"INMUTABLE_BASE_PROPERTIES",["id","type","version","createdAt","author","previousVersion"]),D(Nt,"BASE_PROPERTIES",[...Nt.MUTABLE_BASE_PROPERTIES,...Nt.INMUTABLE_BASE_PROPERTIES]),D(Nt,"MUTABLE_META_PROPERTIES",[...Nt.MUTABLE_BASE_PROPERTIES,"index"]),D(Nt,"INMUTABLE_META_PROPERTIES",[...Nt.INMUTABLE_BASE_PROPERTIES]),D(Nt,"META_PROPERTIES",[...Nt.MUTABLE_META_PROPERTIES,...Nt.INMUTABLE_META_PROPERTIES]),D(Nt,"MUTABLE_UPSTREAM_PROPERTIES",[]),D(Nt,"INMUTABLE_UPSTREAM_PROPERTIES",["parent","implements","extends"]),D(Nt,"UPSTREAM_PROPERTIES",[...Nt.MUTABLE_UPSTREAM_PROPERTIES,...Nt.INMUTABLE_UPSTREAM_PROPERTIES]),D(Nt,"MUTABLE_DOWNSTREAM_PROPERTIES",["dataType"]),D(Nt,"INMUTABLE_DOWNSTREAM_PROPERTIES",[]),D(Nt,"DOWNSTREAM_PROPERTIES",[...Nt.MUTABLE_DOWNSTREAM_PROPERTIES,...Nt.INMUTABLE_DOWNSTREAM_PROPERTIES]),D(Nt,"PROPERTIES",[...Nt.META_PROPERTIES,...Nt.UPSTREAM_PROPERTIES,...Nt.DOWNSTREAM_PROPERTIES]);let da=Nt;function oH(d){const u=d.implements.flatMap(h=>BDe(d,h)),i=LDe(d,d.extends),a=xDe(d),o=MDe(d);d.methods.flatMap(h=>h.validate());const f=[...u,...i,...a,...o,...uH(d)];return gi(d.errors,f)}function lH(d,u){const i=u.properties.filter(f=>f.abstract),a=[];let o=[...d.properties];return i.forEach(f=>{const e=o.find(h=>{var v;return((v=h.implements)==null?void 0:v.id)===f.id});e?o=o.filter(h=>h.id!==e.id):a.push(f)}),a}function dH(d,u){const i=u.abstractMethods,a=[];let o=[...d.methods];return i.forEach(f=>{const e=o.find(h=>{var v;return((v=h.implements)==null?void 0:v.id)===f.id});e?o=o.filter(h=>h.id!==e.id):a.push(f)}),a}function BDe(d,u){const i=[];if(!u.abstract){const g=wt({id:d.id+"--"+ie.ImplementingNonAbstractEntity,message:`Entity "${d.name}" with id "${d.id}" is implementing a non-abstract entity "${u.name}" with id "${u.id}"`,severity:H.Error,code:ie.ImplementingNonAbstractEntity,entity:d});return i.push(g.error),i}const a=u.properties.filter(g=>g.abstract),o=[];let f=[...d.properties];a.forEach(g=>{const A=f.find(O=>{var V;return((V=O.implements)==null?void 0:V.id)===g.id});A?f=f.filter(O=>O.id!==A.id):o.push(g)}),o.length&&o.forEach(g=>{const A=wt({id:d.id+"--"+ie.MissingPropertyImplementation+"--"+g.id,message:`Property "${g.name}" with id "${g.id}" of entity "${u.name}" with id "${u.id}" is not implemented when entity "${d.name}" with id "${d.id}" implements it`,severity:H.Error,code:ie.MissingPropertyImplementation,entity:d});i.push(A.error)});const e=[];let h=[...d.methods];u.abstractMethods.forEach(g=>{const A=h.find(O=>{var V;return((V=O.implements)==null?void 0:V.id)===g.id});A?h=h.filter(O=>O.id!==A.id):e.push(g)}),e.length&&e.forEach(g=>{const A=wt({id:d.id+"--"+ie.MissingMethodImplementation+"--"+g.id,message:`Method "${g.name}" with id "${g.id}" of entity "${u.name}" with id "${u.id}" is not implemented when entity "${d.name}" with id "${d.id}" implements it`,severity:H.Error,code:ie.MissingMethodImplementation,entity:d});i.push(A.error)});const v=[];u.properties.forEach(g=>{const A=f.find(O=>O.name===g.name);A&&v.push([A,g])}),v.length&&v.forEach(([g])=>{const A=wt({id:d.id+"--"+ae.PropertyOverwritesOtherSiblingWithSameName+"--"+g.id,message:`Property "${g.name}" with id "${g.id}" of entity "${d.name}" with id "${d.id}" overwrites the property with the same name from the base entity "${u.name}" with id "${u.id}"`,severity:H.Error,code:ae.PropertyOverwritesOtherSiblingWithSameName,entity:d});i.push(A.error)});const T=[];return u.methods.forEach(g=>{const A=h.find(O=>O.name===g.name);A&&T.push([A,g])}),T.length&&T.forEach(([g])=>{const A=wt({id:d.id+"--"+ae.MethodOverwritesOtherSiblingWithSameName+"--"+g.id,message:`Method "${g.name}" with id "${g.id}" of entity "${d.name}" with id "${d.id}" overwrites the method with the same name from the base entity "${u.name}" with id "${u.id}"`,severity:H.Error,code:ae.MethodOverwritesOtherSiblingWithSameName,entity:d});i.push(A.error)}),i}function LDe(d,u){const i=[];if(!u)return i;const a=[];if(!d.abstract&&u.abstract){const f=wt({id:d.id+"--"+u.id+"--"+ie.NonAbstractExtendingAbstractEntity,message:`Entity "${d.name}" with id "${d.id}" is not-abstract but is extending an abstract entity "${u.name}" with id "${u.id}"`,severity:H.Error,code:ie.NonAbstractExtendingAbstractEntity,entity:d,firstRelationship:u});return i.push(f.error),i}if(d.abstract&&!u.abstract){const f=wt({id:d.id+"--"+u.id+"--"+ie.AbstractExtendingNonAbstractEntity,message:`Entity "${d.name}" with id "${d.id}" is abstract but is extending an non-abstract entity "${u.name}" with id "${u.id}"`,severity:H.Error,code:ie.AbstractExtendingNonAbstractEntity,entity:d,firstRelationship:u});return i.push(f.error),i}d.properties.forEach(f=>{var h;const e=u.properties.find(v=>{var T;return v.name===f.name&&((T=f.extends)==null?void 0:T.id)!==v.id});((h=f.implements)==null?void 0:h.id)!==(e==null?void 0:e.id)&&e&&a.push(f)}),a.length&&a.forEach(f=>{const e=wt({id:d.id+"--"+ae.PropertyOverwritesOtherSiblingWithSameName,message:`Property "${f.name}" with id "${f.id}" of entity "${d.name}" with id "${d.id}" overwrites the property with the same name from the extended entity "${u.name}" with id "${u.id}"`,severity:H.Error,code:ae.PropertyOverwritesOtherSiblingWithSameName,entity:d});i.push(e.error)});const o=[];return d.methods.forEach(f=>{var h;const e=u.methods.find(v=>{var T;return v.name===f.name&&((T=f.extends)==null?void 0:T.id)!==v.id});((h=f.implements)==null?void 0:h.id)!==(e==null?void 0:e.id)&&e&&o.push(f)}),o.length&&o.forEach(f=>{const e=wt({id:d.id+"--"+ae.MethodOverwritesOtherSiblingWithSameName,message:`Method "${f.name}" with id "${f.id}" of entity "${d.name}" with id "${d.id}" overwrites the method with the same name from the extended entity "${u.name}" with id "${u.id}"`,severity:H.Error,code:ae.MethodOverwritesOtherSiblingWithSameName,entity:d});i.push(e.error)}),i}function MDe(d){const u=[];if(!d.properties.length){const i=wt({id:d.id+"--"+ie.NoProperties,message:"No properties implemented",severity:H.Warning,code:ie.NoProperties,entity:d});u.push(i.error)}return d.properties.forEach(i=>{i.validate()}),u}function xDe(d){const u=[];if(d.abstract){if(d.methods.length){const i=wt({id:d.id+"--"+ie.AbstractEntityWithNonAbstractMethods,message:`Entity "${d.name}" with id "${d.id}" is marked as abstract but has non-abstract methods`,severity:H.Error,code:ie.AbstractEntityWithNonAbstractMethods,entity:d});u.push(i.error)}if(d.properties.some(i=>!i.abstract)){const i=wt({id:d.id+"--"+ie.AbstractEntityWithNonAbstractProperties,message:`Entity "${d.name}" with id "${d.id}" is marked as abstract but has non-abstract properties`,severity:H.Error,code:ie.AbstractEntityWithNonAbstractProperties,entity:d});u.push(i.error),d.properties.forEach(a=>{if(!a.abstract){const o=wt({id:d.id+"--"+ie.StaticEntityWithNonStaticProperties+"--"+a.id,message:`Property "${a.name}" with id "${a.id}" of entity "${d.name}" with id "${d.id}" is not marked as abstract but the entity is marked as abstract`,severity:H.Error,code:ie.StaticEntityWithNonStaticProperties,entity:d});u.push(o.error)}})}}else{if(d.abstractMethods.length){const i=wt({id:d.id+"--"+ie.AbstractPropertyInNonAbstractEntity,message:`Entity "${d.name}" with id "${d.id}" is not marked as abstract but has abstract methods`,severity:H.Error,code:ie.AbstractPropertyInNonAbstractEntity,entity:d});u.push(i.error)}d.properties.some(i=>i.abstract)&&d.properties.forEach(i=>{if(i.abstract){const a=wt({id:d.id+"--"+ie.AbstractPropertyInNonAbstractEntity+"--"+i.id,message:`Property "${i.name}" with id "${i.id}" of entity "${d.name}" with id "${d.id}" is marked as abstract but the entity is not marked as abstract`,severity:H.Error,code:ie.AbstractPropertyInNonAbstractEntity,entity:d,firstRelationship:i});u.push(a.error)}})}return d.static&&d.properties.some(i=>!i.static)&&d.properties.forEach(i=>{if(!i.static){const a=wt({id:d.id+"--"+ie.NonStaticPropertyInStaticEntity+"--"+i.id,message:`Property "${i.name}" with id "${i.id}" of entity "${d.name}" with id "${d.id}" is not marked as static but the entity is marked as static`,severity:H.Error,code:ie.NonStaticPropertyInStaticEntity,entity:d,firstRelationship:i});u.push(a.error)}}),u}function UDe(d,u){const i=[],a=Lr(u);if(!u.abstract){const e=new li({id:d.id+"--"+u.id+"--"+ie.ImplementingNonAbstractEntity,message:`Entity "${d.name}" with id "${d.id}" is implementing a non-abstract built-in entity "${u.name}" with id "${u.id}"`,severity:H.Error,code:ie.ImplementingNonAbstractEntity,entity:d,firstRelationship:u});i.push(e)}const o=d.implements.filter(e=>e.id!==u.id);if(d.abstract){const e=new li({id:d.id+"--"+u.id+"--"+ie.AbstractEntityImplements,message:`Entity "${d.name}" with id "${d.id}" is marked as abstract and cannot implement built-in entity "${u.name}" with id "${u.id}"`,severity:H.Error,code:ie.AbstractEntityImplements,entity:d,firstRelationship:u});i.push(e)}if(d.static&&!u.static){const e=new li({id:d.id+"--"+u.id+"--"+ie.StaticImplementingNonStaticEntity,message:`Entity "${d.name}" with id "${d.id}" is marked as static and cannot implement non-static built-in entity "${u.name}" with id "${u.id}"`,severity:H.Error,code:ie.StaticImplementingNonStaticEntity,entity:d,firstRelationship:u});i.push(e)}if(!d.static&&u.static){const e=new li({id:d.id+"--"+u.id+"--"+ie.NonStaticImplementingStaticEntity,message:`Entity "${d.name}" with id "${d.id}" is not marked as static and cannot implement static built-in entity "${u.name}" with id "${u.id}"`,severity:H.Error,code:ie.NonStaticImplementingStaticEntity,entity:d,firstRelationship:u});i.push(e)}return o.length&&o.forEach(e=>{if(e.type===c.BuiltInBaseEntity){const h=a.filter(v=>v.id!==e.id);h.length&&h.forEach(v=>{if(v.id!==e.id){const T=new li({id:d.id+"--"+v.id+"--"+e.id+"--"+ie.ImplementsIncompatibleEntities,message:`Entity "${d.name}" with id "${d.id}" is implementing built-in entity "${v.name}" with id "${v.id}" but also implements entity "${e.name}" with id "${e.id}" which is incompatible`,severity:H.Error,code:ie.ImplementsIncompatibleEntities,entity:d,firstRelationship:v,secondRelationship:e});i.push(T)}})}else{Lr(e).forEach(g=>{const A=a.filter(O=>O.id!==g.id);A.length&&A.forEach(O=>{if(O.id!==g.id){const V=new li({id:d.id+"--"+O.id+"--"+g.id+"--"+ie.ImplementsIncompatibleEntities,message:`Entity "${d.name}" with id "${d.id}" is implementing built-in entity "${O.name}" with id "${O.id}" but also implements entity "${g.name}" with id "${g.id}" which is incompatible`,severity:H.Error,code:ie.ImplementsIncompatibleEntities,entity:d,firstRelationship:O,secondRelationship:g});i.push(V)}})});const v=qa(u.ownDeclaredProperties,e.ownDeclaredProperties,ae.PropertyOverwritesOtherImplementedEntitysPropertyWithSameImplementation,ae.PropertyOverwritesOtherImplementedEntitysPropertyWithSameName);i.push(...v.errors);const T=qa(u.abstractMethods,[...e.abstractMethods,...e.methods],ae.MethodOverwritesOtherImplementedEntitysMethodWithSameImplementation,ae.MethodOverwritesOtherImplementedEntitysMethodWithSameName);i.push(...T.errors)}}),R(d.extends?Lr(d.extends):[]).forEach(e=>{if(!a.find(h=>h.id===e.id)){const h=new li({id:d.id+"--"+u.id+"--"+e.id+"--"+ie.ExtendsIncompatibleEntities,message:`Entity "${d.name}" with id "${d.id}" is implementing built-in entity "${u.name}" with id "${u.id}" but also extends entity "${e.name}" with id "${e.id}" which is incompatible`,severity:H.Error,code:ie.ExtendsIncompatibleEntities,entity:d,firstRelationship:u,secondRelationship:e});i.push(h)}}),i}function GDe(d,u,i=!1){var T,g;const a=[],o=Lr(u);if(!d.abstract&&u.abstract){const A=wt({id:d.id+"--"+u.id+"--"+ie.NonAbstractExtendingAbstractEntity,message:`Entity "${d.name}" with id "${d.id}" is not-abstract but is extending an abstract entity "${u.name}" with id "${u.id}"`,severity:H.Error,code:ie.NonAbstractExtendingAbstractEntity,entity:d,firstRelationship:u});a.push(A.error)}if(d.abstract&&!u.abstract){const A=wt({id:d.id+"--"+u.id+"--"+ie.AbstractExtendingNonAbstractEntity,message:`Entity "${d.name}" with id "${d.id}" is abstract but is extending an non-abstract entity "${u.name}" with id "${u.id}"`,severity:H.Error,code:ie.AbstractExtendingNonAbstractEntity,entity:d,firstRelationship:u});a.push(A.error)}if(!d.static&&u.static){const A=wt({id:d.id+"--"+u.id+"--"+ie.NonStaticExtendingStaticEntity,message:`Entity "${d.name}" with id "${d.id}" is not static but is extending a static entity "${u.name}" with id "${u.id}"`,severity:H.Error,code:ie.NonStaticExtendingStaticEntity,entity:d,firstRelationship:u});a.push(A.error)}if(d.static&&!u.static){const A=wt({id:d.id+"--"+u.id+"--"+ie.StaticExtendingNonStaticEntity,message:`Entity "${d.name}" with id "${d.id}" is static but is extending an non-static entity "${u.name}" with id "${u.id}"`,severity:H.Error,code:ie.StaticExtendingNonStaticEntity,entity:d,firstRelationship:u});a.push(A.error)}if(!Vf(u)){const A=wt({id:d.id+"--"+u.id+"--"+ie.ExtendingNonInteractiveEntity,message:`Entity "${d.name}" with id "${d.id}" is extending an non-interactive entity "${u.name}" with id "${u.id}"`,severity:H.Error,code:ie.ExtendingNonInteractiveEntity,entity:d,firstRelationship:u});a.push(A.error)}if(d.extends&&((T=d.extends)==null?void 0:T.id)!==u.id)if(((g=d.extends)==null?void 0:g.type)===c.BuiltInBaseEntity){const A=o.filter(O=>{var V;return O.id!==((V=d.extends)==null?void 0:V.id)});A.length&&A.forEach(O=>{var V,x,U,S;if(O.id!==((V=d.extends)==null?void 0:V.id)){const q=wt({id:d.id+"--"+O.id+"--"+((x=d.extends)==null?void 0:x.id)+"--"+ie.ExtendsIncompatibleEntities,message:`Entity "${d.name}" with id "${d.id}" is extending built-in entity "${O.name}" with id "${O.id}" but also extends entity "${(U=d.extends)==null?void 0:U.name}" with id "${(S=d.extends)==null?void 0:S.id}" which is incompatible`,severity:H.Error,code:ie.ExtendsIncompatibleEntities,entity:d,firstRelationship:O,secondRelationship:d.extends});a.push(q.error)}})}else{Lr(d.extends).forEach(q=>{const ne=o.filter(ee=>ee.id!==q.id);ne.length&&ne.forEach(ee=>{if(ee.id!==q.id){const ce=new li({id:d.id+"--"+ee.id+"--"+q.id+"--"+ie.ImplementsIncompatibleEntities,message:`Entity "${d.name}" with id "${d.id}" is extending built-in entity "${ee.name}" with id "${ee.id}" but also extends or implements entity "${q.name}" with id "${q.id}" which is incompatible`,severity:H.Error,code:ie.ImplementsIncompatibleEntities,entity:d,firstRelationship:ee,secondRelationship:q});a.push(ce)}})});const O=!!Lr(d.extends).find(q=>q.id===u.id);let V=[...d.extends.properties];O&&(V=V.filter(q=>!u.properties.find(ne=>{var ee;return ne.id===q.id||ne.name===q.name||ne.id===((ee=q.implements)==null?void 0:ee.id)})));let x=[...d.extends.methods];O&&(x=x.filter(q=>!u.methods.find(ne=>{var ee;return ne.id===q.id||ne.name===q.name||ne.id===((ee=q.implements)==null?void 0:ee.id)})));const U=qa(u.ownDeclaredProperties,V,ae.PropertyOverwritesOtherExtendedEntitysPropertyWithSameImplementation,ae.PropertyOverwritesOtherExtendedEntitysPropertyWithSameName);a.push(...U.errors);const S=qa(u.abstractMethods,x,ae.MethodOverwritesOtherExtendedEntitysMethodWithSameImplementation,ae.MethodOverwritesOtherExtendedEntitysMethodWithSameName);a.push(...S.errors)}i&&Ue.log("self.implements.length",d.implements.length),d.implements.length&&d.implements.forEach(A=>{if(A.type===c.BuiltInBaseEntity){const O=o.filter(V=>V.id!==A.id);O.length&&O.forEach(V=>{if(V.id!==A.id){const x=new li({id:d.id+"--"+V.id+"--"+A.id+"--"+ie.ImplementsIncompatibleEntities,message:`Entity "${d.name}" with id "${d.id}" is implementing built-in entity "${V.name}" with id "${V.id}" but also implements entity "${A.name}" with id "${A.id}" which is incompatible`,severity:H.Error,code:ie.ImplementsIncompatibleEntities,entity:d,firstRelationship:V,secondRelationship:A});a.push(x)}})}else{Lr(A).forEach(U=>{const S=o.filter(q=>q.id!==U.id);S.length&&S.forEach(q=>{if(q.id!==U.id){const ne=new li({id:d.id+"--"+q.id+"--"+U.id+"--"+ie.ImplementsIncompatibleEntities,message:`Entity "${d.name}" with id "${d.id}" is implementing built-in entity "${q.name}" with id "${q.id}" but also implements entity "${U.name}" with id "${U.id}" which is incompatible`,severity:H.Error,code:ie.ImplementsIncompatibleEntities,entity:d,firstRelationship:q,secondRelationship:U});a.push(ne)}})});const V=qa(u.ownDeclaredProperties,A.ownDeclaredProperties,ae.PropertyOverwritesOtherImplementedEntitysPropertyWithSameImplementation,ae.PropertyOverwritesOtherImplementedEntitysPropertyWithSameName);a.push(...V.errors);const x=qa(u.abstractMethods,[...A.abstractMethods,...A.methods],ae.MethodOverwritesOtherImplementedEntitysMethodWithSameImplementation,ae.MethodOverwritesOtherImplementedEntitysMethodWithSameName);a.push(...x.errors)}});const e=qa(d.ownDeclaredProperties,u.ownDeclaredProperties,ae.PropertyOverwritesOtherSiblingWithSameImplementation,ae.PropertyOverwritesOtherSiblingWithSameName);a.push(...e.errors);const h=qa(u.methods,u.abstractMethods,ae.MethodOverwritesOtherSiblingWithSameImplementation,ae.MethodOverwritesOtherSiblingWithSameName);return a.push(...h.errors),R(d.extends?Lr(d.extends):[]).forEach(A=>{if(!o.find(O=>O.id===A.id)){const O=new li({id:d.id+"--"+u.id+"--"+A.id+"--"+ie.ImplementsIncompatibleEntities,message:`Entity "${d.name}" with id "${d.id}" is extending built-in entity "${u.name}" with id "${u.id}" but also extends entity "${A.name}" with id "${A.id}" which is incompatible`,severity:H.Error,code:ie.ImplementsIncompatibleEntities,entity:d,firstRelationship:u,secondRelationship:A});a.push(O)}}),a}function jDe(d){const u=[];if(d.implements.forEach(i=>{if(!i.static){const a=new li({id:d.id+"--"+i.id+"--"+ie.StaticImplementingNonStaticEntity,message:`Entity "${d.name}" with id "${d.id}" is static but implements entity "${i.name}" with id "${i.id}" which is non-static`,severity:H.Error,code:ie.StaticImplementingNonStaticEntity,entity:d,firstRelationship:i});u.push(a)}}),d.extends&&!d.extends.static){const i=new li({id:d.id+"--"+d.extends.id+"--"+ie.StaticExtendingNonStaticEntity,message:`Entity "${d.name}" with id "${d.id}" is static but extends entity "${d.extends.name}" with id "${d.extends.id}" which is non-static`,severity:H.Error,code:ie.StaticExtendingNonStaticEntity,entity:d,firstRelationship:d.extends});u.push(i)}return u}function FDe(d){const u=[];if(d.implements.length){const i=new li({id:d.id+"--"+ie.AbstractEntityImplements,message:`Entity "${d.name}" with id "${d.id}" cannot be marked as abstract because it implements other entities`,severity:H.Error,code:ie.AbstractEntityImplements,entity:d});u.push(i)}if(d.extends&&!d.extends.abstract){const i=new li({id:d.id+"--"+d.extends.id+"--"+ie.AbstractExtendingNonAbstractEntity,message:`Entity "${d.name}" with id "${d.id}" is abstract but extends entity "${d.extends.name}" with id "${d.extends.id}" which is non-abstract`,severity:H.Error,code:ie.AbstractExtendingNonAbstractEntity,entity:d,firstRelationship:d.extends});u.push(i)}return u}function kDe(d){const u=[];if(d.extends&&d.extends.static){const i=new li({id:d.id+"--"+d.extends.id+"--"+ie.NonStaticExtendingStaticEntity,message:`Entity "${d.name}" with id "${d.id}" is non-static but extends entity "${d.extends.name}" with id "${d.extends.id}" which is static`,severity:H.Error,code:ie.NonStaticExtendingStaticEntity,entity:d,firstRelationship:d.extends});u.push(i)}return u}function SDe(d){const u=[];if(d.extends&&d.extends.abstract){const i=new li({id:d.id+"--"+d.extends.id+"--"+ie.NonAbstractExtendingAbstractEntity,message:`Entity "${d.name}" with id "${d.id}" is non-abstract but extends entity "${d.extends.name}" with id "${d.extends.id}" which is abstract`,severity:H.Error,code:ie.NonAbstractExtendingAbstractEntity,entity:d,firstRelationship:d.extends});u.push(i)}return u}function uH(d,u){const a=[...d.project.entities].filter(o=>o.id!==d.id);return Df(d,[qi,zl],a,u)}const KDe=Object.freeze(Object.defineProperty({__proto__:null,getBaseMethodsNotImplemented:dH,getBasePropertiesNotImplemented:lH,validate:oH,validateCanBecomeAbstract:FDe,validateCanBecomeNonAbstract:SDe,validateCanBecomeNonStatic:kDe,validateCanBecomeStatic:jDe,validateCanExtendEntity:GDe,validateCanImplementEntity:UDe,validateDefinitionEntityName:uH},Symbol.toStringTag,{value:"Module"}));function qDe(d,u){const i=[];if(d.parent)if(d.id===d.parent)i.push(new le({id:`${d.id}--${d.parent}--${K.SelfReference}`,code:K.SelfReference,severity:H.Error,message:`Entity of type "${d.type}" with id "${d.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=u.get(d.parent);a?[c.Project,c.DataType].includes(a.type)||i.push(new le({id:`${d.id}--${d.parent}--${K.InvalidParentReference}`,code:K.InvalidParentReference,severity:H.Error,message:`Entity of type "${d.type}" with id "${d.id}", has a parent reference that isn't pointing to an entity of type 'project' or 'data-type'.`})):i.push(new le({id:`${d.id}--${d.parent}--${K.ReferencedEntityNotFound}`,code:K.ReferencedEntityNotFound,severity:H.Error,message:`Entity of type "${d.type}" with id "${d.id}", is referencing an entity with id "${d.parent}" that isn't yet found in the project. Perhaps it should be created first. Or perhaps the ID is incorrect.`}))}return d.implements&&Array.isArray(d.implements)?d.implements.forEach(a=>{if(d.id===a){i.push(new le({id:`${d.id}--${a}--${K.SelfReference}`,code:K.SelfReference,severity:H.Error,message:`Entity of type "${d.type}" with id "${d.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 o=u.get(a);o?[c.DefinitionEntity,c.BuiltInBaseEntity].includes(o.type)?o.abstract||i.push(new le({id:`${d.id}--${a}--${K.InvalidImplementsReference}`,code:K.InvalidImplementsReference,severity:H.Error,message:`Entity of type "${d.type}" with id "${d.id}", has an 'implements' reference that isn't pointing to an abstract entity.`})):i.push(new le({id:`${d.id}--${a}--${K.InvalidImplementsReference}`,code:K.InvalidImplementsReference,severity:H.Error,message:`Entity of type "${d.type}" with id "${d.id}", has an 'implements' reference that isn't pointing to an entity of type 'definition-entity' or 'built-in-base-entity'.`})):i.push(new le({id:`${d.id}--${a}--${K.ReferencedEntityNotFound}`,code:K.ReferencedEntityNotFound,severity:H.Error,message:`Entity of type "${d.type}" with id "${d.id}", is referencing an entity with id "${a}" that isn't yet found in the project. Perhaps it should be created first. Or perhaps the ID is incorrect.`}))}):i.push(new le({id:`${d.id}--${ae.InvalidObjectStructure}`,code:ae.InvalidObjectStructure,severity:H.Error,message:`Entity of type "${d.type}" with id "${d.id}", has an 'implements' property that isn't an array.`})),d.extends&&Array.isArray(d.extends)&&d.extends.forEach(a=>{const o=u.get(a);o?[c.DefinitionEntity,c.BuiltInBaseEntity].includes(o.type)?o.abstract&&i.push(new le({id:`${d.id}--${a}--${K.InvalidExtendsReference}`,code:K.InvalidExtendsReference,severity:H.Error,message:`Entity of type "${d.type}" with id "${d.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?`})):i.push(new le({id:`${d.id}--${a}--${K.InvalidExtendsReference}`,code:K.InvalidExtendsReference,severity:H.Error,message:`Entity of type "${d.type}" with id "${d.id}", has an 'extends' reference that isn't pointing to an entity of type 'definition-entity' or 'built-in-base-entity'.`})):i.push(new le({id:`${d.id}--${a}--${K.ReferencedEntityNotFound}`,code:K.ReferencedEntityNotFound,severity:H.Error,message:`Entity of type "${d.type}" with id "${d.id}", is referencing an entity with id "${a}" that isn't yet found in the project. Perhaps it should be created first. Or perhaps the ID is incorrect.`}))}),i}var h0=(d=>(d.Extends="extends",d.Implements="implements",d))(h0||{});const Wt=class Wt extends Bi{constructor(i,a){super(i);D(this,"initialData");D(this,"id");D(this,"name");D(this,"codeName",null);D(this,"description",null);D(this,"x");D(this,"y");D(this,"static");D(this,"abstract");D(this,"type",c.DefinitionEntity);D(this,"properties",[]);D(this,"methods",[]);D(this,"abstractMethods",[]);D(this,"extends",null);D(this,"implements",[]);D(this,"project");D(this,"errors",[]);D(this,"parent");D(this,"detachedDependents",{});D(this,"knownVersions",null);D(this,"activeVersion",!1);D(this,"initialized",!1);D(this,"startedInitialization",!1);D(this,"suggestedProperties",[]);D(this,"suggestedMethods",[]);this.initialData=i,this.project=a,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:N.UUID.uuid(),version:N.UUID.uuid(),createdAt:(i==null?void 0:i.timestamp)||B().toISOString(),author:(i==null?void 0:i.author)||N.sessionAuthor,previousVersion:null,deleted:!1,type:c.DefinitionEntity,name:"",codeName:null,description:"",static:!1,abstract:!1,properties:[],methods:[],abstractMethods:[],extends:null,implements:[],x:0,y:0,parent:null}}static fromGenerationTarget(i,a){let o=a;if(i.parent){const T=J(i.parent);o=a.get(T)}const f=[];i.implements&&i.implements.forEach(T=>{f.push(a.get(T)||a.getBuiltIn(T))});let e=null;i.extends&&(e=a.get(i.extends)||a.getBuiltIn(i.extends));const h={id:i.id,version:N.UUID.uuid(),createdAt:B().toISOString(),author:N.sessionAuthor,previousVersion:null,deleted:!1,name:i.name,type:c.DefinitionEntity,codeName:i.codeName||null,description:i.description,static:i.static,abstract:i.abstract,properties:[],methods:[],abstractMethods:[],extends:e,implements:f,x:0,y:0,parent:o},v=oe(h,a);return v.setParent(o,null),v}static validateGenerationTarget(i,a){let o=JSON.parse(JSON.stringify(i));const f=[],e=qDe(o,a),h=bb(o,a);f.push(...e,...h,...ji(o));const v=o.parent?a.get(o.parent):null;if(v&&v.type===c.DataType){const T=v;T.entity&&f.push(new le({id:`${i.id}--${K.NewEntityWouldOverriteExisting}`,code:K.NewEntityWouldOverriteExisting,severity:H.Error,message:`The entity of type '${i.type}' with id '${i.id}' can't be added to the 'parent' entity with id '${T.id}' because it already has an 'entity' child. Data type entities can only have one 'entity' as children.
443
443
  You can inspect the existing 'entity' field with the 'describe_entity' action. Like so:
444
444
  ${oa({describe_entity:T.entity.id})}
445
445
  Alternatively you can update the parent data-type entity with 'update' action to remove the existing value of the field.`}))}return{errors:f,modifiedData:o}}get interactive(){return this.implements.length?this.implements.every(i=>i.interactive):!0}get allMethods(){return R([...this.ownDeclaredMethods,...this.allBaseMethodsFromOriginalParents])}get allProperties(){return R([...this.ownDeclaredProperties,...this.allBasePropertiesFromOriginalParents])}get allBaseMethodsFromOriginalParents(){var o;const i=((o=this.extends)==null?void 0:o.allMethods)||[],a=[...i].filter(f=>!i.some(e=>{var h,v;return e.id!==f.id&&(((h=e.implements)==null?void 0:h.id)===f.id||((v=e.extends)==null?void 0:v.id)===f.id)}));return R([...a,...this.implements.flatMap(f=>{const e=[...f.allMethods];return[...e].filter(v=>!e.some(T=>{var g,A;return T.id!==v.id&&(((g=T.implements)==null?void 0:g.id)===v.id||((A=T.extends)==null?void 0:A.id)===v.id)}))})])}get allBasePropertiesFromOriginalParents(){var f;const i=((f=this.extends)==null?void 0:f.allProperties)||[],a=[...i].filter(e=>!i.some(h=>{var v,T;return h.id!==e.id&&(((v=h.implements)==null?void 0:v.id)===e.id||((T=h.extends)==null?void 0:T.id)===e.id)}));return R([...a,...this.implements.flatMap(e=>{const h=[...e.allProperties];return[...h].filter(T=>!h.some(g=>{var A,O;return g.id!==T.id&&(((A=g.implements)==null?void 0:A.id)===T.id||((O=g.extends)==null?void 0:O.id)===T.id)}))})])}get allBasePropertiesFromExtendedAndImplementedEntities(){var f,e;const i=[...((f=this.extends)==null?void 0:f.ownDeclaredProperties)||[],...((e=this.extends)==null?void 0:e.allBasePropertiesFromExtendedAndImplementedEntities)||[]].filter(h=>!h.abstract),a=[...i].filter(h=>!i.some(v=>{var T,g;return v.id!==h.id&&(((T=v.implements)==null?void 0:T.id)===h.id||((g=v.extends)==null?void 0:g.id)===h.id)})),o=this.implements.reduce((h,v)=>{const T=v.implementedPropertiesFromOriginalParents,g=[...v.ownDeclaredProperties].filter(V=>!V.abstract),A=[...T,...g,...h];return[...A].filter(V=>!!!A.find(U=>{var S,q;return((S=U.implements)==null?void 0:S.id)===V.id||((q=U.extends)==null?void 0:q.id)===V.id}))},[]);return R([...a,...o])}get allBaseMethodsFromExtendedAndImplementedEntities(){return R([...(this.extends?[this.extends]:[]).reduce((i,a)=>a.type!==c.DefinitionEntity?[]:[...[...a.ownDeclaredMethods,...a.allBaseMethodsFromExtendedAndImplementedEntities].filter(f=>f.type!==c.ActionDescriptor),...i],[]),...this.implements.reduce((i,a)=>a.type!==c.DefinitionEntity?a.abstractMethods:[...[...a.ownDeclaredMethods,...a.allBaseMethodsFromExtendedAndImplementedEntities].filter(f=>f.type!==c.ActionDescriptor),...i],[])])}get extendedPropertiesFromOriginalParents(){var o,f;const i=[...((o=this.extends)==null?void 0:o.ownDeclaredProperties)||[],...((f=this.extends)==null?void 0:f.extendedPropertiesFromOriginalParents)||[]].filter(e=>!e.abstract),a=[...i].filter(e=>!i.some(h=>{var v,T;return h.id!==e.id&&(((v=h.implements)==null?void 0:v.id)===e.id||((T=h.extends)==null?void 0:T.id)===e.id)}));return R(a)}get implementedPropertiesFromOriginalParents(){return R([...(this.extends?[this.extends]:[]).reduce((i,a)=>{const o=a.implementedPropertiesFromOriginalParents,f=[...a.ownDeclaredProperties].filter(v=>!!v.abstract),e=[...o,...f,...i];return[...e].filter(v=>!!!e.find(g=>{var A,O;return((A=g.extends)==null?void 0:A.id)===v.id||((O=g.implements)==null?void 0:O.id)===v.id}))},[]),...this.implements.reduce((i,a)=>{const o=a.implementedPropertiesFromOriginalParents,f=[...a.ownDeclaredProperties].filter(v=>!!v.abstract),e=[...o,...f,...i];return[...e].filter(v=>!!!e.find(g=>{var A,O;return((A=g.implements)==null?void 0:A.id)===v.id||((O=g.extends)==null?void 0:O.id)===v.id}))},[])].filter(i=>!!i.abstract))}get extendedMethodsFromOriginalParents(){return R((this.extends?[this.extends]:[]).reduce((i,a)=>{if(a.type!==c.DefinitionEntity)return[];const o=[...a.ownDeclaredMethods,...a.extendedMethodsFromOriginalParents].filter(f=>f.type!==c.ActionDescriptor);return[...i,...o]},[]))}get implementedMethodsFromOriginalParents(){return R([...(this.extends?[this.extends]:[]).reduce((i,a)=>{const o=a.type===c.DefinitionEntity?a.methods:[],f=[...a.abstractMethods].filter(e=>!o.find(h=>h.name===e.name));return[...o,...f,...i]},[]),...this.implements.reduce((i,a)=>[...a.abstractMethods,...i],[])].filter(i=>i.type===c.ActionDescriptor))}get extendedProperties(){return this.properties.filter(i=>i.isExtendedProperty)}get ownDeclaredProperties(){return this.properties.filter(a=>!a.isExtendedProperty)}get extendedMethods(){return this.methods.filter(i=>i.isExtendedMethod)}get ownDeclaredMethods(){return this.methods.filter(i=>!i.isExtendedMethod)}validateGeneratedUpdate(i){const a=[];return i.parent&&a.push(new le({id:`${this.id}--${K.InvalidParentUpdate}`,code:K.InvalidParentUpdate,severity:H.Error,message:`Entity of type '${this.type}' with id '${this.id}' cannot have the 'parent' property updated. The 'parent' on an '${this.type}', must be the root project as it is a globally declared entity.`})),{errors:a,modifiedData:i}}subscribeDependents(i){return i.forEach(a=>{this.detachedDependents[a.entity.id]||(this.detachedDependents[a.entity.id]=a)}),this}unsubscribeDependents(i){return i.forEach(a=>{this.detachedDependents[a.entity.id]&&delete this.detachedDependents[a.entity.id]}),this}syncDependents(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"sync-dependents"))){const a=[],o=[],f=[],e=[];return Object.values(this.detachedDependents).forEach(h=>{const v=h.entity.afterAllChildrenInitialized(i);a.push(...v.updated),o.push(...v.added),f.push(...v.removed),e.push(...v.affected)}),i==null||i.attemptAutoclose("sync-dependents",this.id),{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}onDetachedDependencyRemoved(i,a,o){const f=[],e=[],h=[],v=[];return a==="implements"&&this.removeImplementation(i),a==="extends"&&this.setExtension(null,o),{updated:R(f),added:R(e),removed:R(h),affected:R(v),self:this}}onDetachedDependencyRestored(i,a,o){const f=[],e=[],h=[],v=[];return a==="implements"&&this.addImplementation(i),a==="extends"&&this.setExtension(i,o),{updated:R(f),added:R(e),removed:R(h),affected:R(v),self:this}}unsubscribeFromDependencies(){return this.implements.forEach(i=>{rn.includes(i.type)||i.unsubscribeDependents([{entity:this,field:"implements"}])}),this}subscribeToDependencies(){return this.implements.forEach(i=>{rn.includes(i.type)||i.subscribeDependents([{entity:this,field:"implements"}])}),this.extends&&(rn.includes(this.extends.type)||this.extends.subscribeDependents([{entity:this,field:"extends"}])),this}increaseVersion(i){if(i&&!B(i).isValid())throw new Error(`The shared timestamp '${i}' is not a valid ISO 8601 date string.`);return i&&B(i).isSame(B(this.createdAt))?this:(this.previousVersion=this.version,this.version=N.UUID.uuid(),this.createdAt=B(i).toISOString()||B().toISOString(),this)}captureVersion(){var a;const i=((a=this.knownVersions)==null?void 0:a.get(this.version))||new Wt(this,this.project);return i.metaSync(this.toMeta(),null),this.knownVersions=this.knownVersions?this.knownVersions.set(this.version,i):new Map([[this.version,i]]),i.properties=[...this.properties],i.methods=[...this.methods],i.abstractMethods=[...this.abstractMethods],i.extends=this.extends,i.implements=[...this.implements],i.parent=this.parent,this}recursiveCaptureUpstreamVersions(i){const a=[],o=[],f=[],e=[];if(this.parent){this.parent.increaseVersion(i);const h=this.parent.recursiveCaptureUpstreamVersions(i);a.push(this.parent,...h.updated),o.push(...h.added),f.push(...h.removed)}return{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}async restoreVersion(i){var v;const a=[],o=[],f=[],e=[];if(this.version===i)return{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this};if(!this.knownVersions){const T=new Map;for(const[g,A]of this.knownVersions||new Map){if(T.set(g,A),A.activeVersion=!1,A.knownVersions)for(const[O,V]of A.knownVersions)T.set(O,V);A.knownVersions=null}}let h=(v=this.knownVersions)==null?void 0:v.get(i);if(!h){const T=await this.APILoadVersion({},i);if(!T)throw new Error(`Version with id '${i}' for entity with id '${this.id}' not found.`);h=new Wt(T,this.project)}return this.metaSync(h.toShallowJSON(),null),this.previousVersion=h.previousVersion,this.version=h.version,this.createdAt=h.createdAt,this.author=h.author,this.deleted=h.deleted,this.properties=h.properties,this.methods=h.methods,this.abstractMethods=h.abstractMethods,this.extends=h.extends,this.implements=h.implements,this.parent=h.parent,{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}updateWithShallowTransfer(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"update-with-shallow-transfer"))){if(this.metaSync(i,a),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 o=J(i.parent),f=this.project.get(o),e=this.parent;if(e&&e.id!==(f==null?void 0:f.id)&&this.removeFromParent(a),f)this.setParent(f,a);else throw a==null||a.attemptAutoclose("update-with-shallow-transfer",this.id),new Error(`${this.type} with id '${this.id}' has a 'parent' reference '${o}' that isn't found in the project`)}else throw a==null||a.attemptAutoclose("update-with-shallow-transfer",this.id),new Error(`${this.type} with id '${this.id}' must have a 'parent'`);if(i.extends){const o=J(i.extends),f=this.project.get(o);f&&this.setExtension(f,a)}return i.implements.forEach(o=>{const f=J(o),e=this.project.get(f);e&&this.addImplementation(e)}),this.captureVersion(),this.subscribeToDependencies(),a==null||a.attemptAutoclose("update-with-shallow-transfer",this.id),this}hydrateAncestors(){const i=[],a=[],o=[],f=[];if(this.initialData.parent){const e=J(this.initialData.parent),h=this.project.get(e);if(h)this.setParent(h,null),i.push(h);else throw new Error(`${this.type} with id '${this.id}' has a 'parent' reference '${e}' that isn't found in the project`)}else throw new Error(`${this.type} with id '${this.id}' must have a 'parent'`);if(this.initialData.extends){const e=J(this.initialData.extends),h=this.project.get(e);h&&(this.setExtension(h,null),h.type!==c.BuiltInBaseEntity&&i.push(h))}return this.initialData.implements.forEach(e=>{const h=J(e),v=this.project.get(h);v&&(this.addImplementation(v),v.type!==c.BuiltInBaseEntity&&i.push(v))}),{updated:R(i),added:R(a),removed:R(o),affected:R(f),self:this}}afterAllChildrenInitialized(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"after-all-children-initialized"))){const a=[],o=[],f=[],e=[];this.initialized=!0;const{updated:h,added:v,removed:T,affected:g}=this.syncImplementationProperties(i);a.push(...h),o.push(...v),f.push(...T),e.push(...g);const{updated:A,added:O,removed:V,affected:x}=this.addExtendedProperties(i);a.push(...A),o.push(...O),f.push(...V),e.push(...x);const{updated:U,added:S,removed:q}=this.removeUnrecognizedProperties(i);a.push(...U),o.push(...S),f.push(...q);const{updated:ne,added:ee,removed:ce,affected:Y}=this.syncImplementationMethods(i);a.push(...ne),o.push(...ee),f.push(...ce),e.push(...Y);const{updated:pe,added:z,removed:X,affected:he}=this.addExtendedMethods(i);a.push(...pe),o.push(...z),f.push(...X),e.push(...he);const{updated:Q,added:fe,removed:Ae}=this.removeUnrecognizedMethods(i);return a.push(...Q),o.push(...fe),f.push(...Ae),this.addSuggestions(),this.captureVersion(),i==null||i.attemptAutoclose("after-all-children-initialized",this.id),{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}addSelfToProject(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"add-self-to-project"))){const a=[this],o=[],f=[],e=[];if(this.parent.type===c.DataType){const h=this.parent;h.entity=this,a.push(h)}else this.project.addDefinitionEntity(this);return this.subscribe(),this.subscribeToDependencies(),i==null||i.attemptAutoclose("add-self-to-project",this.id),{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}setParent(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"set-parent"))){var o;return((o=this.parent)==null?void 0:o.id)!==(i==null?void 0:i.id)&&(this.parent=i,a&&(a==null||a.add(this,k.Updated))),a==null||a.attemptAutoclose("set-parent",this.id),this}setExtension(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"set-extension"))){var o;return((o=this.extends)==null?void 0:o.id)!==(i==null?void 0:i.id)&&(this.extends=i,a&&(a==null||a.add(this,k.Updated))),a==null||a.attemptAutoclose("set-extension",this.id),this}addImplementation(i){return this.implements.includes(i)||this.implements.push(i),this}removeImplementation(i){return this.implements=this.implements.filter(a=>a.id!==i.id),this}removeProperty(i){return this.properties=this.properties.filter(a=>a.id!==i.id),this}addMethod(i){return this.methods.includes(i)||(this.methods.push(i),this.suggestedMethods=this.suggestedMethods.filter(a=>a.name!==i.name)),this}removeMethod(i){return this.methods=this.methods.filter(a=>a.id!==i.id),this}addProperty(i){return this.properties.includes(i)||(this.properties.push(i),this.suggestedProperties=this.suggestedProperties.filter(a=>a.name!==i.name)),this}addSuggestedProperty(i){return this.suggestedProperties.includes(i)||this.suggestedProperties.push(i),this}addSuggestedMethod(i){return this.suggestedMethods.includes(i)||this.suggestedMethods.push(i),this}removeSuggestedProperty(i){return this.suggestedProperties=this.suggestedProperties.filter(a=>a.id!==i.id),this}removeSuggestedMethod(i){return this.suggestedMethods=this.suggestedMethods.filter(a=>a.id!==i.id),this}addAbstractMethod(i){return this.abstractMethods.includes(i)||this.abstractMethods.push(i),this}removeAbstractMethod(i){return this.abstractMethods=this.abstractMethods.filter(a=>a.id!==i.id),this}initChildren(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"init-children"))){return this.initialized||this.startedInitialization?this:(this.startedInitialization=!0,this.properties=this.initialData.properties.map(a=>{const o=oe(a,this.project);return o.setParent(this,null),o.initChildren(i),o}),this.methods=this.initialData.methods.map(a=>{const o=oe(a,this.project);return o.setParent(this,null),o.initChildren(i),o}),this.abstractMethods=this.initialData.abstractMethods.map(a=>{const o=oe(a,this.project);return o.setParent(this,null),o.initChildren(i),o}),this.initialData.extends&&(this.extends=oe(this.initialData.extends,this.project)),this.implements=this.initialData.implements.map(a=>oe(a,this.project)),this.subscribeToDependencies(),this.afterAllChildrenInitialized(i),i==null||i.attemptAutoclose("init-children",this.id),this)}removeUnrecognizedProperties(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"remove-unrecognized-properties"))){const a=[],o=[],f=[],e=[];let h=[...this.properties];h=h.filter(T=>T.parent.id===this.id),h=h.filter(T=>!T.isExtendedProperty);const v=this.implementedPropertiesFromOriginalParents;return h=h.filter(T=>this.interactive&&!T.implements?!1:!v.find(g=>{var A;return g.id===((A=T.implements)==null?void 0:A.id)})),h.forEach(T=>{const g=T.remove({ignoreUpstream:!1},i);f.push(...g.removed),a.push(...g.updated)}),i==null||i.attemptAutoclose("remove-unrecognized-properties",this.id),{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}removeUnrecognizedMethods(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"remove-unrecognized-methods"))){const a=[],o=[],f=[],e=[];let h=[...this.methods];h=h.filter(T=>T.parent.id===this.id),h=h.filter(T=>!T.isExtendedMethod);const v=this.implementedMethodsFromOriginalParents;return h=h.filter(T=>this.interactive&&!T.implements?!1:!v.find(g=>{var A;return g.id===((A=T.implements)==null?void 0:A.id)})),h.forEach(T=>{const g=T.remove({ignoreUpstream:!1},i);f.push(...g.removed),a.push(...g.updated)}),i==null||i.attemptAutoclose("remove-unrecognized-methods",this.id),{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}syncImplementationMethods(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"sync-implementation-methods"))){const a=[],o=[],f=[],e=[],h=this.methods,v=this.implementedMethodsFromOriginalParents,T=[...this.allBaseMethodsFromExtendedAndImplementedEntities,...h];return v.filter(A=>!T.find(V=>{var x;return((x=V.implements)==null?void 0:x.id)===A.id})).forEach(A=>{if(this.methods.find(U=>{var S;return((S=U.implements)==null?void 0:S.id)===A.id}))return;const V=this.methods.find(U=>{var ce,Y;if(U.name===A.name&&!U.implements)return!0;const S=Xi(this,de.CRON_JOB),q=Xi(this,de.HTTP_ENDPOINT),ne=((ce=U.implements)==null?void 0:ce.id)===ue["built-in-base-entity"].BUILT_IN_HTTP_ENDPOINT_ENTITY.methods.handler.id,ee=((Y=U.implements)==null?void 0:Y.id)===ue["built-in-base-entity"].BUILT_IN_CRON_JOB_ENTITY.methods.handler.id;return!!(S&&!ee&&!q&&ne||q&&!ne&&!S&&ee)});if(V&&V.type===c.FunctionDeclaration){V.setImplements(A,i),V.metaSync({name:A.name},i),i==null||i.add(V,k.Updated),i==null||i.add(this,k.Updated);return}const x=A.implementAsFunctionDeclaration(i,this);o.push(x),i==null||i.add(x,k.Added),this.addMethod(x)}),i==null||i.attemptAutoclose("sync-implementation-methods",this.id),{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}syncImplementationProperties(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"sync-implementation-properties"))){const a=[],o=[],f=[],e=[],h=this.properties,v=this.implementedPropertiesFromOriginalParents.filter(A=>!this.allBasePropertiesFromExtendedAndImplementedEntities.find(V=>{var x;return((x=V.implements)==null?void 0:x.id)===A.id})),T=[...this.allBasePropertiesFromExtendedAndImplementedEntities,...h];return v.filter(A=>!T.find(V=>{var x;return((x=V.implements)==null?void 0:x.id)===A.id})).forEach(A=>{if(this.properties.find(U=>{var S;return((S=U.implements)==null?void 0:S.id)===A.id}))return;const V=this.properties.find(U=>U.name===A.name&&!!U.abstract&&!U.implements);if(V){V.setImplements(A,i),V.metaSync({abstract:!1},i),V.afterAllChildrenInitialized(i);return}const x=A.implement(this,i,N.UUID.uuid());o.push(x),i==null||i.add(x,k.Added)}),i==null||i.attemptAutoclose("sync-implementation-properties",this.id),{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}addExtendedMethods(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"add-extended-methods"))){const a=[],o=[],f=[],e=[],h=this.methods,T=this.extendedMethodsFromOriginalParents.filter(A=>A.type===c.FunctionDeclaration),g=new Set(h.filter(A=>{var O;return!!((O=A.extends)!=null&&O.id)}).map(A=>A.extends.id));return T.forEach(A=>{if(g.has(A.id))return;g.add(A.id);const O=A.clone(i,this,N.UUID.uuid());O.setExtends(A,i),O.initChildren(i),o.push(O),i==null||i.add(O,k.Added),this.addMethod(O)}),i==null||i.attemptAutoclose("add-extended-methods",this.id),{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}addExtendedProperties(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"add-extended-properties"))){const a=[],o=[],f=[],e=[],h=this.properties,v=this.extendedPropertiesFromOriginalParents,T=v.filter(A=>v.find(V=>{var x;return((x=V.implements)==null?void 0:x.id)===A.id})?!1:!A.abstract),g=new Set(h.filter(A=>{var O;return!!((O=A.extends)!=null&&O.id)}).map(A=>A.extends.id));return T.forEach(A=>{if(g.has(A.id))return;g.add(A.id);const O=A.clone(i,this,N.UUID.uuid());O.setExtends(A,i),O.initChildren(i),o.push(O),i==null||i.add(O,k.Added),this.addProperty(O)}),i==null||i.attemptAutoclose("add-extended-properties",this.id),{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}addSuggestions(){return this.implements.forEach(i=>{lH(this,i).forEach(f=>{const e=f.toJSON();e.id=`_suggestion--parent--${this.id}--${f.id}`;const h=oe(e,this.project);h.suggestion=!0,h.setParent(this,null),h.initChildren(null),this.addSuggestedProperty(h)}),dH(this,i).forEach(f=>{const e=`_suggestion--parent--${this.id}--${f.id}`,h=f.implementAsFunctionDeclaration(null,this,e),v=oe(h,this.project);if(v.suggestion=!0,v.setParent(this,null),v.initChildren(null),this.methods=this.methods.filter(T=>T.id!==e),v.inputs.forEach(T=>{T.suggestion=!0}),v.returnStatements.length){const T=v.returnStatements[0];T.suggestion=!0,T.outputs.forEach(g=>{g.suggestion=!0})}this.addSuggestedMethod(v)})}),this}subscribe(){return this.activeVersion=!0,this.project.subscribeInstance(this),this}unsubscribe(){return this.project.unsubscribeInstance(this),this}metaSync(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"meta-sync"))){const o=Fi(this,i),f=this.toMeta();return this.name=i.name!==void 0?i.name:f.name,this.codeName=i.codeName!==void 0?i.codeName:f.codeName,this.description=i.description!==void 0?i.description:f.description,this.x=i.x||f.x,this.y=i.y||f.y,this.static=i.static!==void 0?i.static:this.static,this.abstract=i.abstract!==void 0?i.abstract:this.abstract,super.metaSync(i),i.deleted===!0&&!f.deleted?a==null||a.add(this,k.Removed):i.deleted===!1&&f.deleted?a==null||a.add(this,k.Added):o&&(a==null||a.add(this,k.Updated)),a==null||a.attemptAutoclose("meta-sync",this.id),this}async APILoad(i=Te,...a){return await Wt.repository.APILoad(this.id,...a),this}async APICreate(i=Te,...a){return await Wt.repository.APICreate(this.toShallowJSON(),...a),this}async APIUpdate(i=Te,...a){return await Wt.repository.APIUpdate(this.toShallowJSON(),...a),this}async APIDelete(i=Te,...a){return await Wt.repository.APIDelete(this.toShallowJSON(),...a),this}async APIClone(i=Te,...a){return await Wt.repository.APIClone(this.id,...a),this}async APILoadVersion(i=Te,a,...o){return await Wt.repository.APILoadVersion(this.id,a,...o)}removeFromParent(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"remove-from-parent"))){const a=[],o=[],f=[],e=[];if(this.parent.type===c.Project)this.parent.removeDefinitionEntity(this);else if(this.parent.type===c.DataType&&this.parent.entity&&this.parent.entity.id===this.id){const h=this.parent.setEntity(null,i);a.push(h)}return i==null||i.attemptAutoclose("remove-from-parent",this.id),{added:R(f),updated:R(a),removed:R(o),affected:R(e),self:this}}remove({ignoreUpstream:i}={ignoreUpstream:!1},a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"remove-entity"))){const o=[],f=[],e=[],h=[];if(a!=null&&a.hasRemoved(this.id))return a==null||a.attemptAutoclose("remove-entity",this.id),{added:[],updated:[],removed:[],affected:[],self:this};if(f.push(this),this.unsubscribe(),this.unsubscribeFromDependencies(),this.project.subscribeDeletedInstance(this),this.metaSync({deleted:!0},a),Object.values(this.detachedDependents).forEach(v=>{const{updated:T,removed:g,added:A}=v.entity.onDetachedDependencyRemoved(this,v.field,a);o.push(...T),f.push(...g),e.push(...A)}),this.properties.forEach(v=>{const{updated:T,removed:g}=v.remove({ignoreUpstream:!0},a);o.push(...T),f.push(...g)}),this.methods.forEach(v=>{const{updated:T,removed:g}=v.remove({ignoreUpstream:!0},a);o.push(...T),f.push(...g)}),this.abstractMethods.forEach(v=>{const{updated:T,removed:g}=v.remove({ignoreUpstream:!0},a);o.push(...T),f.push(...g)}),this.suggestedProperties.forEach(v=>{const{updated:T,removed:g}=v.remove({ignoreUpstream:!0},a);o.push(...T),f.push(...g)}),this.suggestedMethods.forEach(v=>{const{updated:T,removed:g}=v.remove({ignoreUpstream:!0},a);o.push(...T),f.push(...g)}),!i){const v=this.removeFromParent(a);e.push(...v.added),o.push(...v.updated),f.push(...v.removed),h.push(...v.affected)}return a==null||a.attemptAutoclose("remove-entity",this.id),{added:R(e),updated:R(o),removed:R(f),affected:R(h),self:this}}restore({}={},i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"restore-entity"))){const a=[],o=[],f=[],e=[];return i!=null&&i.hasAdded(this.id)?(i==null||i.attemptAutoclose("restore-entity",this.id),{added:[],updated:[],removed:[],affected:[],self:this}):(this.subscribe(),this.project.unsubscribeDeletedInstance(this),this.metaSync({deleted:!1},i),Object.values(this.detachedDependents).forEach(h=>{const{updated:v,removed:T,added:g}=h.entity.onDetachedDependencyRestored(this,h.field,i);o.push(...v),f.push(...T),a.push(...g)}),this.properties.forEach(h=>{const{updated:v}=h.restore({},i);o.push(...v)}),this.methods.forEach(h=>{const{updated:v}=h.restore({},i);o.push(...v)}),this.abstractMethods.forEach(h=>{const{updated:v}=h.restore({},i);o.push(...v)}),this.suggestedProperties.forEach(h=>{const{updated:v}=h.restore({},i);o.push(...v)}),this.suggestedMethods.forEach(h=>{const{updated:v}=h.restore({},i);o.push(...v)}),i==null||i.attemptAutoclose("restore-entity",this.id),{added:R(a),updated:R(o),removed:R(f),affected:R(e),self:this})}toFlat(i=new Set){var o;return i.has(this.id)?[]:(i.add(this.id),[this,...((o=this.extends)==null?void 0:o.toFlat(i))||[],...this.implements.flatMap(f=>f.toFlat(i)),...this.properties.flatMap(f=>f.toFlat(i)),...this.methods.flatMap(f=>f.toFlat(i)),...this.abstractMethods.flatMap(f=>f.toFlat(i)),...this.parent.toFlat(i)])}toFlatIds(i=new Set){var o;return i.has(this.id)?[]:(i.add(this.id),[this.id,...((o=this.extends)==null?void 0:o.toFlatIds(i))||[],...this.implements.flatMap(f=>f.toFlatIds(i)),...this.properties.flatMap(f=>f.toFlatIds(i)),...this.methods.flatMap(f=>f.toFlatIds(i)),...this.abstractMethods.flatMap(f=>f.toFlatIds(i)),...this.parent.toFlatIds(i)])}toMeta(){return{id:this.id,version:this.version,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,codeName:this.codeName,description:this.description,static:this.static,abstract:this.abstract,x:this.x,y:this.y,type:this.type,name:this.name}}toJSON(i=new Set){var a;return i.has(this.id)?this.toReference():(i.add(this.id),{id:this.id,version:this.version,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,type:this.type,name:this.name,codeName:this.codeName,description:this.description,x:this.x,y:this.y,static:this.static,abstract:this.abstract,properties:this.properties.map(o=>o.toJSON(i)),methods:this.methods.map(o=>o.toJSON(i)),abstractMethods:this.abstractMethods.map(o=>o.toJSON(i)),implements:this.implements.map(o=>o.toJSON(i)),extends:((a=this.extends)==null?void 0:a.toJSON(i))||null,parent:this.parent.toReference()})}toJSONClone(i=qe){var o,f,e,h,v,T,g,A;let a;return(o=i.seenEntityMaps)!=null&&o.has(this.id)?a=i.seenEntityMaps.get(this.id):(a=i.newId||Zi(this,this.project,i.uuidStrategy),i.seenEntityMaps&&i.seenEntityMaps.set(this.id,a)),(f=i.seenEntities)!=null&&f.has(a)||(e=i.seenEntities)!=null&&e.has(this.id)?this.toReference({seenEntityMaps:i.seenEntityMaps}):((h=i.seenEntities)==null||h.add(a),(v=i.seenEntities)==null||v.add(this.id),{id:a,version:N.UUID.uuid(),createdAt:i.timestamp||B().toISOString(),author:N.sessionAuthor,previousVersion:null,deleted:!1,type:this.type,name:this.name,codeName:this.codeName,description:this.description,x:this.x,y:this.y,static:this.static,abstract:this.abstract,properties:this.properties.map(O=>O.toJSONClone({...i,newId:null})),methods:this.methods.map(O=>O.toJSONClone({...i,newId:null})),abstractMethods:this.abstractMethods.map(O=>O.toJSONClone({...i,newId:null})),implements:this.implements.map(O=>O.type===c.BuiltInBaseEntity?O.toJSON(i.seenEntities):O.toJSONClone({...i,newId:null})),extends:((T=this.extends)==null?void 0:T.type)===c.BuiltInBaseEntity?(g=this.extends)==null?void 0:g.toJSON(i.seenEntities):(A=this.extends)==null?void 0:A.toJSONClone({...i,newId:null}),parent:this.parent.toReference({seenEntityMaps:i.seenEntityMaps})})}toReference(i=qe){var o;let a=this.id;return(o=i.seenEntityMaps)!=null&&o.has(this.id)&&(a=i.seenEntityMaps.get(this.id)),{id:a+"--"+N.UUID.uuid()+"--ref",type:c.GenericReference,entityId:a,version:this.version,entityType:this.type}}toShallowJSON(i=qe){var o,f;let a=this.id;return(o=i.seenEntityMaps)!=null&&o.has(this.id)&&(a=i.seenEntityMaps.get(this.id)),{id:a,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,x:this.x,y:this.y,static:this.static,abstract:this.abstract,properties:this.properties.map(e=>e.toReference(i)),methods:this.methods.map(e=>e.toReference(i)),abstractMethods:this.abstractMethods.map(e=>e.toReference(i)),implements:this.implements.map(e=>e.toReference(i)),extends:((f=this.extends)==null?void 0:f.toReference(i))||null,parent:this.parent.toReference(i)}}toFlatJSON(i=new Set){var o;return i.has(this.id)?[]:(i.add(this.id),[this.toShallowJSON(),...this.properties.flatMap(f=>f.toFlatJSON(i)),...this.methods.flatMap(f=>f.toFlatJSON(i)),...this.abstractMethods.flatMap(f=>f.toFlatJSON(i)),...this.implements.flatMap(f=>f.toFlatJSON(i)),...((o=this.extends)==null?void 0:o.toFlatJSON(i))||[],...this.parent.toFlatJSON(i)])}toGenerationTarget(){var a;const i=this.parent.type===c.Project?void 0:this.parent.id;return{id:this.id,name:this.name,description:this.description,type:this.type,static:this.static,abstract:this.abstract,extends:(a=this.extends)==null?void 0:a.id,implements:this.implements.map(o=>o.id),parent:i}}toFlatGenerationTarget(i=new Set){return i.has(this.id)?[]:(i.add(this.id),[this.toGenerationTarget(),...this.properties.flatMap(o=>o.toFlatGenerationTarget(i)),...this.methods.flatMap(o=>o.toFlatGenerationTarget(i)),...this.abstractMethods.flatMap(o=>o.toFlatGenerationTarget(i)),...this.implements.filter(o=>o.type===c.DefinitionEntity).flatMap(o=>o.toFlatGenerationTarget(i)),...this.implements.filter(o=>o.type===c.DefinitionEntity).flatMap(o=>o.toFlatGenerationTarget(i)),...this.parent.toFlatGenerationTarget(i)])}clearErrors(){return this.errors=[],this.properties.forEach(i=>i.clearErrors()),this.methods.forEach(i=>i.clearErrors()),this.abstractMethods.forEach(i=>i.clearErrors()),this}validate(){return this.errors=oH(this),{success:!0}}getErrors(){return[...this.errors,...this.properties.flatMap(a=>a.getErrors()),...this.methods.flatMap(a=>a.getErrors()),...this.abstractMethods.flatMap(a=>a.getErrors())]}getShallowErrors(){return this.errors}clone(i=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"clone-entity")),a=null,o=null,f=!0){var U,S,q;let e=Ki(a,this);const h=this.toJSON(),v=o||N.UUID.uuid();h.properties=[],h.methods=[],h.abstractMethods=[];const T=v.split("-id"),g=T[T.length-1||0]||v;h.id=v,h.version=N.UUID.uuid(),h.createdAt=(i==null?void 0:i.timestamp)||B().toISOString(),h.author=(i==null?void 0:i.author)||"1",h.previousVersion=null,h.deleted=!1;const A=fi(h,e);a&&A.setParent(a,null),f&&A.subscribe(),A.initChildren(i),i==null||i.add(A,k.Added);const O=(U=this.properties)==null?void 0:U.map(ne=>ne.clone(i,A,N.UUID.uuid(),f));A.properties=O;const V=(S=this.methods)==null?void 0:S.map((ne,ee)=>ne.clone(i,A,g+"-method-"+ee+"-id",f));A.methods=V;const x=(q=this.abstractMethods)==null?void 0:q.map((ne,ee)=>ne.clone(i,A,g+"-abstract-method-"+ee+"-id",f));return A.abstractMethods=x,i==null||i.attemptAutoclose("clone-entity",this.id),A}getFunctionDeclaration(i){return this.methods.find(a=>a.id===i)}implement(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"implement-definition-entity")),o){const f=zm(this,i,a,o);return a==null||a.attemptAutoclose("implement-definition-entity",this.id),f}getAllInteractiveMethods(){var o;const i=this.implements.filter(f=>f.type===c.DefinitionEntity||f.type===c.BuiltInBaseEntity&&f.interactive);return R([...this.methods,...((o=this.extends)==null?void 0:o.getAllInteractiveMethods())||[],...i.flatMap(f=>f.getAllInteractiveMethods())])}inferFromInputs(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),this,!0,"infer-definition-entity-from-inputs"))){const o=[],f=[],e=[],h=[];if(this.parent.type!==c.DataType||!this.parent.inferred)return a==null||a.attemptAutoclose("infer-definition-entity-from-inputs",this.id),{added:[],updated:[],removed:[],affected:[],self:this};const v=[];i.forEach(A=>{v.find(V=>W(V,this.project)===W(A,this.project))||v.push(A)});const T=this.properties.filter(A=>!A.dataType);v.forEach(A=>{var ne,ee,ce;const O=T.find(Y=>W(Y,this.project)===W(A,this.project));if(!O)return;const x=Sr(A.parent).getMasterInputWithValueWritterFromAllInstances(A),U=Os(x,a),S=U==null?void 0:U.clone(a,O,N.UUID.uuid(),!0);S&&((ne=O.dataType)==null||ne.merge(S,a),S.id!==((ee=O.dataType)==null?void 0:ee.id)&&S.remove({ignoreUpstream:!1},a),O.dataType&&(O.dataType.metaSync({inferred:!0,like:!0},a),O.setDataType(O.dataType,a),a==null||a.add(O,k.Affected)));let q=null;if(A.declaration&&O.id!==((ce=A.declaration)==null?void 0:ce.id)&&(q=A.declaration),A.setDeclaration(O,a),a==null||a.add(A,k.Updated),q){const{updated:Y,removed:pe}=q.remove({ignoreUpstream:!1},a);f.push(...Y),e.push(...pe)}});const g=[];return v.forEach(A=>{if(!A.declaration){g.push(A);return}}),g.length===0?(a==null||a.attemptAutoclose("infer-definition-entity-from-inputs",this.id),{added:[],updated:[],removed:[],affected:[],self:this}):(g.forEach(A=>{var ee,ce,Y,pe;const O=this.properties.find(z=>W(z,this.project)===W(A,this.project));if(O){if(A.setDeclaration(O,a),!O.getDataType(a)){const X=Sr(A.parent).getMasterInputWithValueWritterFromAllInstances(A),he=Os(X),Q=he==null?void 0:he.clone(a,O,N.UUID.uuid(),!0);Q&&((ee=O.dataType)==null||ee.merge(Q,a),Q.id!==((ce=O.dataType)==null?void 0:ce.id)&&Q.remove({ignoreUpstream:!1},a),O.dataType&&(O.dataType.metaSync({inferred:!0,like:!0},a),O.setDataType(O.dataType,a),a==null||a.add(O,k.Affected)))}return}const V=da.new(a);V.parent=this.toReference(),V.index=A.index,V.name=W(A,this.project),V.codeName=A.codeName,V.description=A.description;const x=oe(V,this.project);x.hydrateAncestors(),a==null||a.add(x,k.Added),x.setParent(this,a),x.initChildren(a);const S=Sr(A.parent).getMasterInputWithValueWritterFromAllInstances(A),q=Os(S),ne=q==null?void 0:q.clone(a,x,N.UUID.uuid(),!0);return ne&&((Y=x.dataType)==null||Y.merge(ne,a),ne.id!==((pe=x.dataType)==null?void 0:pe.id)&&ne.remove({ignoreUpstream:!1},a),x.dataType&&(x.dataType.metaSync({inferred:!0,like:!0},a),x.setDataType(x.dataType,a),a==null||a.add(x,k.Affected))),this.addProperty(x),A.setDeclaration(x,a),a==null||a.add(A,k.Updated),x}),a==null||a.attemptAutoclose("infer-definition-entity-from-inputs",this.id),{added:R(o),updated:R(f),removed:R(e),affected:R(h),self:this})}getRawDefaultValue(){const i={};return this.properties.forEach(a=>{var f;if(!Ab(a))return;const o=qi(a.name);i[o]=((f=a.getDefaultValue())==null?void 0:f.value)||null}),i}getActiveRawDefaultValue(){const i={};return this.properties.forEach(a=>{var e;if(!Ab(a))return;const o=qi(a.name),f=(e=this.project.requestActiveDynamicValue(a,!0))==null?void 0:e.value;i[o]=(f==null?void 0:f.value)||null}),i}};D(Wt,"repository",{APICreate:async(i,...a)=>i,APIUpdate:async(i,...a)=>i,APIDelete:async(i,...a)=>i,APIClone:async(i,...a)=>{},APILoad:async(i,...a)=>null,APILoadVersion:async(i,a,...o)=>null}),D(Wt,"type",c.DefinitionEntity),D(Wt,"USER_MANAGED_PARENT_TYPES",[c.Project,c.DataType]),D(Wt,"PARENT_TYPES",[...Wt.USER_MANAGED_PARENT_TYPES]),D(Wt,"MUTABLE_BASE_PROPERTIES",["name","codeName","description","static","abstract"]),D(Wt,"INMUTABLE_BASE_PROPERTIES",["id","type","version","createdAt","author","previousVersion"]),D(Wt,"BASE_PROPERTIES",[...Wt.MUTABLE_BASE_PROPERTIES,...Wt.INMUTABLE_BASE_PROPERTIES]),D(Wt,"MUTABLE_META_PROPERTIES",[...Wt.MUTABLE_BASE_PROPERTIES,"x","y"]),D(Wt,"INMUTABLE_META_PROPERTIES",[...Wt.INMUTABLE_BASE_PROPERTIES]),D(Wt,"META_PROPERTIES",[...Wt.MUTABLE_META_PROPERTIES,...Wt.INMUTABLE_META_PROPERTIES]),D(Wt,"MUTABLE_UPSTREAM_PROPERTIES",["extends","implements"]),D(Wt,"INMUTABLE_UPSTREAM_PROPERTIES",["parent"]),D(Wt,"UPSTREAM_PROPERTIES",[...Wt.MUTABLE_UPSTREAM_PROPERTIES,...Wt.INMUTABLE_UPSTREAM_PROPERTIES]),D(Wt,"MUTABLE_DOWNSTREAM_PROPERTIES",["properties","methods","abstractMethods"]),D(Wt,"INMUTABLE_DOWNSTREAM_PROPERTIES",[]),D(Wt,"DOWNSTREAM_PROPERTIES",[...Wt.MUTABLE_DOWNSTREAM_PROPERTIES,...Wt.INMUTABLE_DOWNSTREAM_PROPERTIES]),D(Wt,"PROPERTIES",[...Wt.META_PROPERTIES,...Wt.UPSTREAM_PROPERTIES,...Wt.DOWNSTREAM_PROPERTIES]);let ua=Wt;function ZDe(d){const u=[];return gi(d.errors,u)}const Ff=class Ff extends Bi{constructor(i,a){super(i);D(this,"initialData");D(this,"id");D(this,"version");D(this,"name");D(this,"description",null);D(this,"type",c.BuiltInBaseEntity);D(this,"abstract",!1);D(this,"static");D(this,"properties",[]);D(this,"methods",[]);D(this,"abstractMethods",[]);D(this,"extends",null);D(this,"interactive",!1);D(this,"errors",[]);D(this,"project");this.initialData=this.initialData||i,this.project=this.project||a,this.id=this.id||i.id,this.version=this.version||i.version,this.name=this.name||i.name,this.static=this.static||i.static,this.interactive=this.interactive||i.interactive,this.abstract=i.abstract,this.properties=this.initialData.properties.map(o=>{const f=oe(o,this.project);return f.setParent(this,null),f.initChildren(null),f}),this.methods=this.initialData.methods.map(o=>{const f=oe(o,this.project);return f.setParent(this,null),f.initChildren(null),f}),this.abstractMethods=this.initialData.abstractMethods.map(o=>{const f=oe(o,this.project);return f.setParent(this,null),f.initChildren(null),f}),this.initialData.extends&&(this.extends=oe(this.initialData.extends,this.project))}get allMethods(){return R([...this.ownDeclaredMethods,...this.allBaseMethodsFromOriginalParents])}get allProperties(){return R([...this.ownDeclaredProperties,...this.allBasePropertiesFromOriginalParents])}get allBaseMethodsFromOriginalParents(){var o;const i=((o=this.extends)==null?void 0:o.allMethods)||[],a=[...i].filter(f=>!i.some(e=>{var h,v;return e.id!==f.id&&(((h=e.implements)==null?void 0:h.id)===f.id||((v=e.extends)==null?void 0:v.id)===f.id)}));return R(a)}get allBasePropertiesFromOriginalParents(){var o;const i=((o=this.extends)==null?void 0:o.allProperties)||[],a=[...i].filter(f=>!i.some(e=>{var h,v;return e.id!==f.id&&(((h=e.implements)==null?void 0:h.id)===f.id||((v=e.extends)==null?void 0:v.id)===f.id)}));return R(a)}get allBasePropertiesFromExtendedAndImplementedEntities(){var o,f;const i=[...((o=this.extends)==null?void 0:o.ownDeclaredProperties)||[],...((f=this.extends)==null?void 0:f.allBasePropertiesFromExtendedAndImplementedEntities)||[]].filter(e=>!e.abstract),a=[...i].filter(e=>!i.some(h=>{var v,T;return h.id!==e.id&&(((v=h.implements)==null?void 0:v.id)===e.id||((T=h.extends)==null?void 0:T.id)===e.id)}));return R([...a])}get allBaseMethodsFromExtendedAndImplementedEntities(){return R([...(this.extends?[this.extends]:[]).reduce((i,a)=>a.type===c.PrimitiveEntity?i:[...[...a.ownDeclaredMethods,...a.allBaseMethodsFromExtendedAndImplementedEntities].filter(f=>f.type!==c.ActionDescriptor),...i],[])])}get extendedPropertiesFromOriginalParents(){var o,f;const i=[...((o=this.extends)==null?void 0:o.ownDeclaredProperties)||[],...((f=this.extends)==null?void 0:f.extendedPropertiesFromOriginalParents)||[]].filter(e=>!e.abstract),a=[...i].filter(e=>!i.some(h=>{var v,T;return h.id!==e.id&&(((v=h.implements)==null?void 0:v.id)===e.id||((T=h.extends)==null?void 0:T.id)===e.id)}));return R(a)}get implementedPropertiesFromOriginalParents(){return R([...(this.extends?[this.extends]:[]).reduce((i,a)=>{const o=a.implementedPropertiesFromOriginalParents,f=[...a.ownDeclaredProperties].filter(v=>!!v.abstract),e=[...o,...f,...i];return[...e].filter(v=>!!!e.find(g=>{var A,O;return((A=g.extends)==null?void 0:A.id)===v.id||((O=g.implements)==null?void 0:O.id)===v.id}))},[])].filter(i=>!!i.abstract))}get extendedProperties(){return this.properties.filter(i=>i.isExtendedProperty)}get ownDeclaredMethods(){return this.methods.filter(i=>!i.isExtendedMethod)}get ownDeclaredProperties(){return this.properties.filter(i=>!i.isExtendedProperty)}subscribe(){return this.project.subscribeInstance(this),this}unsubscribe(){return this.project.unsubscribeInstance(this),this}async APILoad(i=Te,...a){return await Ff.repository.APILoad(this.id,...a),this}toFlat(i=new Set){var o;return i.has(this.id)?[]:(i.add(this.id),[this,...this.properties.flatMap(f=>f.toFlat(i)),...this.methods.flatMap(f=>f.toFlat(i)),...this.abstractMethods.flatMap(f=>f.toFlat(i)),...((o=this.extends)==null?void 0:o.toFlat(i))||[]])}toFlatIds(i=new Set){var o;return i.has(this.id)?[]:(i.add(this.id),[this.id,...this.properties.flatMap(f=>f.toFlatIds(i)),...this.methods.flatMap(f=>f.toFlatIds(i)),...this.abstractMethods.flatMap(f=>f.toFlatIds(i)),...((o=this.extends)==null?void 0:o.toFlatIds(i))||[]])}toMeta(){return{id:this.id,version:this.version,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,description:this.description,interactive:this.interactive,abstract:this.abstract,static:this.static,type:this.type,name:this.name}}toJSON(i=new Set){var a;return i.has(this.id)?this.toReference():(i.add(this.id),{id:this.id,version:this.version,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,type:this.type,name:this.name,description:this.description,abstract:this.abstract,static:this.static,interactive:this.interactive,properties:this.properties.map(o=>o.toJSON(i)),methods:this.methods.map(o=>o.toJSON(i)),abstractMethods:this.abstractMethods.map(o=>o.toJSON(i)),extends:((a=this.extends)==null?void 0:a.toJSON(i))||null})}toReference(i=qe){return{id:this.id+"--"+N.UUID.uuid()+"--ref",type:c.GenericReference,entityId:this.id,version:this.version,entityType:this.type}}toShallowJSON(i=qe){var a;return{id:this.id,version:this.version,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,type:this.type,name:this.name,description:this.description,abstract:this.abstract,static:this.static,interactive:this.interactive,properties:this.properties.map(o=>o.toReference()),methods:this.methods.map(o=>o.toReference()),abstractMethods:this.abstractMethods.map(o=>o.toReference()),extends:((a=this.extends)==null?void 0:a.toReference())||null}}toFlatJSON(i=new Set){return i.has(this.id)?[]:(i.add(this.id),[this.toShallowJSON(),...this.properties.flatMap(o=>o.toFlatJSON(i)),...this.methods.flatMap(o=>o.toFlatJSON(i)),...this.abstractMethods.flatMap(o=>o.toFlatJSON(i))])}toGenerationTarget(){var i;return{id:this.id,type:this.type,name:this.name,description:this.description,static:this.static,abstract:this.abstract,interactive:this.interactive,extends:(i=this.extends)==null?void 0:i.id}}toFlatGenerationTarget(i=new Set){return i.has(this.id)?[]:(i.add(this.id),[this.toGenerationTarget(),...this.properties.flatMap(o=>o.toFlatGenerationTarget(i)),...this.methods.flatMap(o=>o.toFlatGenerationTarget(i)),...this.abstractMethods.flatMap(o=>o.toFlatGenerationTarget(i))])}clearErrors(){return this.errors=[],this.properties.forEach(i=>i.clearErrors()),this.methods.forEach(i=>i.clearErrors()),this.abstractMethods.forEach(i=>i.clearErrors()),this}validate(){const i=ZDe(this);return this.errors=i,{success:!0}}getErrors(){return[...this.errors,...this.properties.flatMap(a=>a.getErrors()),...this.methods.flatMap(a=>a.getErrors()),...this.abstractMethods.flatMap(a=>a.getErrors())]}getShallowErrors(){return this.errors}implement(i,a=this.project.addChangeSet(new F(this.project,N.sessionAuthor,B().toISOString(),null,!0,"implement-built-in-base-entity")),o){const f=zm(this,i,a,o);return a==null||a.attemptAutoclose("implement-built-in-base-entity",this.id),f}getAllInteractiveMethods(){const i=[];if(this.interactive){if(i.push(...this.methods),!this.extends||this.extends.type===c.BuiltInBaseEntity&&this.extends.interactive||this.extends.type===c.PrimitiveEntity)return i;this.extends instanceof Ff&&i.push(...this.extends.getAllInteractiveMethods())}return R(i)}};D(Ff,"repository",{APILoad:async(i,...a)=>null});let ca=Ff;function HDe(d){const u=[];return gi(d.errors,u)}const T0=class T0 extends Bi{constructor(i,a){super(i);D(this,"initialData");D(this,"id");D(this,"name");D(this,"description",null);D(this,"type",c.PrimitiveEntity);D(this,"static");D(this,"abstract");D(this,"properties",[]);D(this,"methods",[]);D(this,"abstractMethods",[]);D(this,"extends",null);D(this,"errors",[]);D(this,"project");this.initialData=i,this.project=a,this.id=i.id,this.name=i.name,this.static=i.static,this.abstract=i.abstract,this.properties=this.initialData.properties.map(o=>{const f=oe(o,this.project);return f.setParent(this,null),f.initChildren(null),f}),this.methods=this.initialData.methods.map(o=>{const f=oe(o,this.project);return f.parent=this,f}),this.abstractMethods=this.initialData.abstractMethods.map(o=>{const f=oe(o,this.project);return f.parent=this,f})}get allMethods(){return R([...this.ownDeclaredMethods,...this.allBaseMethodsFromOriginalParents])}get allProperties(){return R([...this.ownDeclaredProperties,...this.allBasePropertiesFromOriginalParents])}get allBaseMethodsFromOriginalParents(){var o;const i=((o=this.extends)==null?void 0:o.allMethods)||[],a=[...i].filter(f=>!i.some(e=>{var h,v;return e.id!==f.id&&(((h=e.implements)==null?void 0:h.id)===f.id||((v=e.extends)==null?void 0:v.id)===f.id)}));return R(a)}get allBasePropertiesFromOriginalParents(){var o;const i=((o=this.extends)==null?void 0:o.allProperties)||[],a=[...i].filter(f=>!i.some(e=>{var h,v;return e.id!==f.id&&(((h=e.implements)==null?void 0:h.id)===f.id||((v=e.extends)==null?void 0:v.id)===f.id)}));return R(a)}get allBasePropertiesFromExtendedAndImplementedEntities(){var o,f;const i=[...((o=this.extends)==null?void 0:o.ownDeclaredProperties)||[],...((f=this.extends)==null?void 0:f.allBasePropertiesFromExtendedAndImplementedEntities)||[]].filter(e=>!e.abstract),a=[...i].filter(e=>!i.some(h=>{var v,T;return h.id!==e.id&&(((v=h.implements)==null?void 0:v.id)===e.id||((T=h.extends)==null?void 0:T.id)===e.id)}));return R(a)}get extendedPropertiesFromOriginalParents(){var o,f;const i=[...((o=this.extends)==null?void 0:o.ownDeclaredProperties)||[],...((f=this.extends)==null?void 0:f.extendedPropertiesFromOriginalParents)||[]].filter(e=>!e.abstract),a=[...i].filter(e=>!i.some(h=>{var v,T;return h.id!==e.id&&(((v=h.implements)==null?void 0:v.id)===e.id||((T=h.extends)==null?void 0:T.id)===e.id)}));return R(a)}get implementedPropertiesFromOriginalParents(){return R([...(this.extends?[this.extends]:[]).reduce((i,a)=>{const o=a.implementedPropertiesFromOriginalParents,f=[...a.ownDeclaredProperties].filter(v=>!!v.abstract),e=[...o,...f,...i];return[...e].filter(v=>!!!e.find(g=>{var A,O;return((A=g.extends)==null?void 0:A.id)===v.id||((O=g.implements)==null?void 0:O.id)===v.id}))},[])])}get extendedProperties(){return this.properties.filter(i=>i.isExtendedProperty)}get ownDeclaredMethods(){return this.methods.filter(i=>!i.isExtendedMethod)}get ownDeclaredProperties(){return this.properties.filter(i=>!i.isExtendedProperty)}subscribe(){return this.project.subscribeInstance(this),this}unsubscribe(){return this.project.unsubscribeInstance(this),this}async APILoad(i=Te,...a){return await T0.repository.APILoad(this.id,...a),this}toFlat(i=new Set){return i.has(this.id)?[]:(i.add(this.id),[this,...this.properties.flatMap(o=>o.toFlat(i)),...this.methods.flatMap(o=>o.toFlat(i)),...this.abstractMethods.flatMap(o=>o.toFlat(i))])}toFlatIds(i=new Set){return i.has(this.id)?[]:(i.add(this.id),[this.id,...this.properties.flatMap(o=>o.toFlatIds(i)),...this.methods.flatMap(o=>o.toFlatIds(i)),...this.abstractMethods.flatMap(o=>o.toFlatIds(i))])}toMeta(){return{id:this.id,version:this.version,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,description:this.description,static:this.static,abstract:this.abstract,type:this.type,name:this.name}}toJSON(i=new Set){var a;return i.has(this.id)?this.toReference():(i.add(this.id),{id:this.id,version:this.version,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,type:this.type,name:this.name,description:this.description,static:this.static,abstract:this.abstract,properties:this.properties.map(o=>o.toJSON(i)),methods:this.methods.map(o=>o.toJSON(i)),abstractMethods:this.abstractMethods.map(o=>o.toJSON(i)),extends:((a=this.extends)==null?void 0:a.toJSON(i))||null})}toReference(i=qe){return{id:this.id+"--"+N.UUID.uuid()+"--ref",type:c.GenericReference,entityId:this.id,version:this.version,entityType:this.type}}toShallowJSON(i=qe){var a;return{id:this.id,version:this.version,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,type:this.type,name:this.name,description:this.description,abstract:this.abstract,static:this.static,properties:this.properties.map(o=>o.toReference()),methods:this.methods.map(o=>o.toReference()),abstractMethods:this.abstractMethods.map(o=>o.toReference()),extends:((a=this.extends)==null?void 0:a.toReference())||null}}toFlatJSON(i=new Set){return i.has(this.id)?[]:(i.add(this.id),[this.toShallowJSON(),...this.properties.flatMap(o=>o.toFlatJSON(i)),...this.methods.flatMap(o=>o.toFlatJSON(i)),...this.abstractMethods.flatMap(o=>o.toFlatJSON(i))])}toGenerationTarget(){var i;return{id:this.id,type:this.type,name:this.name,description:this.description,static:this.static,abstract:this.abstract,extends:(i=this.extends)==null?void 0:i.id}}toFlatGenerationTarget(i=new Set){return i.has(this.id)?[]:(i.add(this.id),[this.toGenerationTarget(),...this.properties.flatMap(o=>o.toFlatGenerationTarget(i)),...this.methods.flatMap(o=>o.toFlatGenerationTarget(i)),...this.abstractMethods.flatMap(o=>o.toFlatGenerationTarget(i))])}clearErrors(){return this.errors=[],this.properties.forEach(i=>i.clearErrors()),this.methods.forEach(i=>i.clearErrors()),this.abstractMethods.forEach(i=>i.clearErrors()),this}validate(){const i=HDe(this);return this.errors=i,{success:!0}}getErrors(){return[...this.errors,...this.properties.flatMap(a=>a.getErrors()),...this.methods.flatMap(a=>a.getErrors()),...this.abstractMethods.flatMap(a=>a.getErrors())]}getShallowErrors(){return this.errors}getAllInteractiveMethods(){const i=[];return i.push(...this.methods),!this.extends||this.extends.type===c.BuiltInBaseEntity&&this.extends.interactive||this.extends.type===c.PrimitiveEntity?i:(this.extends instanceof ca&&i.push(...this.extends.getAllInteractiveMethods()),R(i))}};D(T0,"repository",{APILoad:async(i,...a)=>null});let cn=T0;function fi(d,u){if(!d)throw new Error("Entity is null");const i=u.get(d.id);switch(d.type){case c.LiteralValue:return i||new Qr(d,u);case c.DefinitionEntity:return i||new ua(d,u);case c.PrimitiveEntity:return i||new cn(d,u);case c.FunctionDeclaration:return i||new Ro(d,u);case c.GlobalEvent:return i||new Co(d,u);case c.DataType:return i||new bn(d,u);case c.Property:return i||new da(d,u);case c.FunctionCall:return i||new Ko(d,u);case c.Condition:return i||new Oo(d,u);case c.Operation:return i||new _o(d,u);case c.VariableDeclaration:return i||new Vo(d,u);case c.VariableInstance:return i||new No(d,u);case c.OutputMap:return i||new Ps(d,u);case c.ReturnDeclaration:return i||new un(d,u);case c.ArgumentDeclaration:return i||new ta(d,u);case c.InputMap:return i||new aa(d,u);case c.Project:return i||new N(d);case c.InstalledProject:return i||new Lo(d,u);case c.ActionDescriptor:return i||new Ot(d,u);case c.ReturnStatement:return i||new Do(d,u);case c.Loop:return i||new zr(d,u);case c.Search:return i||new Bo(d,u);case c.ValueDescriptor:return i||new $s(d,u);case c.BuiltInBaseEntity:return i||new ca(d,u);case c.InternalCall:return i||new Mo(d,u);case c.ContinueStatement:return i||new kr(d,u);case c.BreakStatement:return i||new xo(d,u);case c.GenericReference:return u.get(d.entityId);default:throw new Error("Invalid entity type: "+d.type)}}function oe(d,u){if(!d)throw new Error("Entity is null");const i=fi(d,u);return i.subscribe(),i}function JDe(d,u){if(!d)throw new Error("Entity is null");switch(d.type){case c.LiteralValue:return Qr.fromGenerationTarget(d,u);case c.DefinitionEntity:return ua.fromGenerationTarget(d,u);case c.FunctionDeclaration:return Ro.fromGenerationTarget(d,u);case c.GlobalEvent:return Co.fromGenerationTarget(d,u);case c.DataType:return bn.fromGenerationTarget(d,u);case c.Property:return da.fromGenerationTarget(d,u);case c.FunctionCall:return Ko.fromGenerationTarget(d,u);case c.Condition:return Oo.fromGenerationTarget(d,u);case c.Operation:return _o.fromGenerationTarget(d,u);case c.VariableDeclaration:return Vo.fromGenerationTarget(d,u);case c.VariableInstance:return No.fromGenerationTarget(d,u);case c.OutputMap:return Ps.fromGenerationTarget(d,u);case c.ReturnDeclaration:return un.fromGenerationTarget(d,u);case c.ArgumentDeclaration:return ta.fromGenerationTarget(d,u);case c.InputMap:return aa.fromGenerationTarget(d,u);case c.InstalledProject:return Lo.fromGenerationTarget(d,u);case c.ReturnStatement:return Do.fromGenerationTarget(d,u);case c.Loop:return zr.fromGenerationTarget(d,u);case c.Search:return Bo.fromGenerationTarget(d,u);case c.ActionDescriptor:return Ot.fromGenerationTarget(d,u);case c.ValueDescriptor:return $s.fromGenerationTarget(d,u);case c.InternalCall:return Mo.fromGenerationTarget(d,u);case c.ContinueStatement:return kr.fromGenerationTarget(d,u);case c.BreakStatement:return xo.fromGenerationTarget(d,u);default:throw new Error("Invalid entity type: "+d.type)}}const qe={seenEntityMaps:new Map,seenEntities:new Set,timestamp:B().toISOString()};class cH{constructor(){D(this,"initialData")}}const Te={cascade:!1},pH={APILoad:async(d,...u)=>null},WDe={APICreate:async(d,...u)=>d,APIUpdate:async(d,...u)=>d,APIDelete:async(d,...u)=>d,APIClone:async(d,...u)=>{},APILoadVersion:async(d,u,...i)=>null,...pH};class zDe{}class YDe extends cH{}class XDe{}class QDe{}class eCe{}class Nb{}class tCe extends Nb{}class iCe extends Nb{}class rCe{}class Uf{static initReadsValue(u){if(u.initialData.readsValue&&u.initialData.readsValue.type!==c.GenericReference)u.readsValue=oe(u.initialData.readsValue,u.project);else if(u.initialData.readsValue&&u.initialData.readsValue.type===c.GenericReference){const i=tn(u.initialData.readsValue,u.project);i&&(u.readsValue=i)}if(u.readsValue){if(At.includes(u.readsValue.type)){let i=u.parent;xi.includes(i.type)||(i=i.parent);const a=u.type===c.InputMap&&u.parent.type===c.Loop;a&&(i=u.parent.parent),u.readsValue.setParent(i,null),u.readsValue.initChildren(null),i&&i.type!==c.Project&&!a&&i.detachedChildren.includes(u)?i.replaceDetachedChild(u,u.readsValue):i&&i.type!==c.Project&&!a&&i.subscribeDetachedChild(u.readsValue)}u.readsValue.addValueReader(u,null)}return u.readsValue}}class Gf{static initWritesValues(u,i){const a=u.initialData.writesValues.reduce((f,e)=>{if(e.type===c.GenericReference||u.writesValues.some(v=>v.id===e.id))return f;const h=oe(e,u.project);return h.setValueWriter(u,null),At.includes(h.type)&&(h.setParent(i,null),h.initChildren(null)),[...f,h]},[]),o=[...u.writesValues];return u.writesValues=R([...o,...a]),u.writesValues}}class nCe{}var Li=(d=>(d.PROJECT_INITIALIZED="project-initialized",d.CHANGE_SET_CLOSED="change-set-closed",d.EXPLICIT_DEFINITION_ENTITY_ADDED="explicit-definition-entity-added",d.EXPLICIT_DEFINITION_ENTITY_REMOVED="explicit-definition-entity-removed",d.EXPLICIT_DEFINITION_ENTITY_UPDATED="explicit-definition-entity-updated",d.PERSISTED_DEFINITION_ENTITY_ADDED="persisted-definition-entity-added",d.PERSISTED_DEFINITION_ENTITY_REMOVED="persisted-definition-entity-removed",d.PERSISTED_DEFINITION_ENTITY_UPDATED="persisted-definition-entity-updated",d.RELATIONAL_DATABASE_DEFINITION_ENTITY_ADDED="relational-database-definition-entity-added",d.RELATIONAL_DATABASE_DEFINITION_ENTITY_REMOVED="relational-database-definition-entity-removed",d.RELATIONAL_DATABASE_DEFINITION_ENTITY_UPDATED="relational-database-definition-entity-updated",d))(Li||{});const Vb={...JA,events:new np},fH={requestActiveDynamicValue:(d,u=!1)=>null,...Vb},mt=class mt extends Bi{constructor(i,a={...fH,events:new np}){super(i);D(this,"initialData");D(this,"id");D(this,"type",c.Project);D(this,"name",null);D(this,"description",null);D(this,"x");D(this,"y");D(this,"entities",[]);D(this,"projects",[]);D(this,"functions",[]);D(this,"events",[]);D(this,"variableDeclarations",[]);D(this,"variableInstances",[]);D(this,"conditions",[]);D(this,"operations",[]);D(this,"functionCalls",[]);D(this,"loops",[]);D(this,"searches",[]);D(this,"primitives",[]);D(this,"builtInBaseEntities",[]);D(this,"operationDeclarations",[]);D(this,"globalEventActionDescriptors",[]);D(this,"loopDeclarations",[]);D(this,"loopDeclarationsBodies",[]);D(this,"conditionDeclarations",[]);D(this,"valueDescriptors",[]);D(this,"dataTypes",[]);D(this,"project");D(this,"instances",{});D(this,"builtInInstances",{});D(this,"deletedInstances",{});D(this,"errors",[]);D(this,"references",[]);D(this,"history",[]);D(this,"undoableStackValueIndex",-1);D(this,"detachedDependents",{});D(this,"knownVersions",null);D(this,"activeVersion",!1);D(this,"initialized",!1);D(this,"startedInitialization",!1);D(this,"onCloseChangeSetCallback",null);D(this,"onAddChangeSetCallback",null);D(this,"onDiscardChangeSetCallback",null);if(this.parentContext=a,this.initialData=i,this.id=i.id,this.name=i.name,this.description=i.description,this.x=0,this.y=0,this.instances[this.id]=this,!mt.UUID)throw new Error("UUID module is already initialized. Please inject a valid UUID module.")}static get UUID(){return this.parentContext.requestModule("uuid")}static new(i=null){return{id:mt.UUID.uuid(),version:mt.UUID.uuid(),createdAt:(i==null?void 0:i.timestamp)||B().toISOString(),author:(i==null?void 0:i.author)||mt.sessionAuthor,previousVersion:null,deleted:!1,type:c.Project,name:"",description:"",entities:[],functions:[],events:[],projects:[],variableDeclarations:[],variableInstances:[],conditions:[],operations:[],functionCalls:[],loops:[],searches:[]}}static validateGenerationTarget(i,a){let o=JSON.parse(JSON.stringify(i));const f=[];return f.push(...ji(o)),{errors:f,modifiedData:o}}get off(){return this.parentContext.events.off}get on(){return this.parentContext.events.on}get emit(){return this.parentContext.events.emit}async closePendingChangeSets(){const i=this.history.find(a=>a.dirty&&!a.open);i&&await this.closeChangeSet(i)}async onCloseChangeSet(i){this.onCloseChangeSetCallback=i,await this.closePendingChangeSets()}onAddChangeSet(i){this.onAddChangeSetCallback=i}onDiscardChangeSet(i){this.onDiscardChangeSetCallback=i}async closeChangeSet(i){const a=this.history.findIndex(e=>e.id===i.id),o=this.history.slice(0,a),f=o[o.length-1];if(!(f!=null&&f.dirty)&&this.onCloseChangeSetCallback){(await this.onCloseChangeSetCallback(i)).success&&(i.dirty=!1,this.emit("change-set-closed",i),this.closePendingChangeSets());return}}toLatestChangeSet(i,a,o,f=!1,e="here-this"){if(!this.history.length)return new F(this,i,a,o,f,e);const h=this.history[this.history.length-1];return h.open?h:this.addChangeSet(new F(this,i,a,o,f,e))}addChangeSet(i){var f,e;if(!this.history.length)return this.undoableStackValueIndex=AA(this.undoableStackValueIndex,this.history,i),(f=this.onAddChangeSetCallback)==null||f.call(this,i,this.undoableStackValueIndex),i;const a=this.history.find(h=>h.id===(i==null?void 0:i.id));if(a)return a;const o=this.history.find(h=>h.open);if(o)throw Ue.warn("Previous still open: ",o),Ue.warn("New change set: ",i),new Error(`There is already an open change-set with id '${o.id}'.`);return this.undoableStackValueIndex=AA(this.undoableStackValueIndex,this.history,i),(e=this.onAddChangeSetCallback)==null||e.call(this,i,this.undoableStackValueIndex),i}discardChangeSet(i){var o;const a=this.history.findIndex(f=>f.id===(i==null?void 0:i.id));return a!==-1&&(this.history.splice(a,1),this.undoableStackValueIndex=this.undoableStackValueIndex-1,(o=this.onDiscardChangeSetCallback)==null||o.call(this,i)),this}validateGeneratedUpdate(i){return{errors:[],modifiedData:i}}subscribeDependents(i){return i.forEach(a=>{this.detachedDependents[a.entity.id]||(this.detachedDependents[a.entity.id]=a)}),this}unsubscribeDependents(i){return i.forEach(a=>{this.detachedDependents[a.entity.id]&&delete this.detachedDependents[a.entity.id]}),this}syncDependents(i=this.project.addChangeSet(new F(this.project,mt.sessionAuthor,B().toISOString(),this,!0,"sync-dependents"))){const a=[],o=[],f=[],e=[];return Object.values(this.detachedDependents).forEach(h=>{const v=h.entity.afterAllChildrenInitialized(i);a.push(...v.updated),o.push(...v.added),f.push(...v.removed),e.push(...v.affected)}),i==null||i.attemptAutoclose("sync-dependents",this.id),{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}onDetachedDependencyRemoved(i,a,o){const f=[],e=[],h=[],v=[];return{updated:R(f),added:R(e),removed:R(h),affected:R(v),self:this}}onDetachedDependencyRestored(i,a,o){const f=[],e=[],h=[],v=[];return{updated:R(f),added:R(e),removed:R(h),affected:R(v),self:this}}unsubscribeFromDependencies(){return this}subscribeToDependencies(){return this}increaseVersion(i){if(i&&!B(i).isValid())throw new Error(`The shared timestamp '${i}' is not a valid ISO 8601 date string.`);return i&&B(i).isSame(B(this.createdAt))?this:(this.previousVersion=this.version,this.version=mt.UUID.uuid(),this.createdAt=B(i).toISOString()||B().toISOString(),this)}captureVersion(){var a;const i=((a=this.knownVersions)==null?void 0:a.get(this.version))||new mt(this);return i.metaSync(this.toMeta(),null),this.knownVersions=this.knownVersions?this.knownVersions.set(this.version,i):new Map([[this.version,i]]),i.entities=[...this.entities],i.projects=[...this.projects],i.functions=[...this.functions],i.events=[...this.events],i.variableDeclarations=[...this.variableDeclarations],i.variableInstances=[...this.variableInstances],i.conditions=[...this.conditions],i.operations=[...this.operations],i.functionCalls=[...this.functionCalls],i.loops=[...this.loops],i.searches=[...this.searches],this}recursiveCaptureUpstreamVersions(i){const a=[],o=[],f=[],e=[];return{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}async restoreVersion(i){var v;const a=[],o=[],f=[],e=[];if(this.version===i)return{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this};if(!this.knownVersions){const T=new Map;for(const[g,A]of this.knownVersions||new Map){if(T.set(g,A),A.activeVersion=!1,A.knownVersions)for(const[O,V]of A.knownVersions)T.set(O,V);A.knownVersions=null}}let h=(v=this.knownVersions)==null?void 0:v.get(i);if(!h){const T=await this.APILoadVersion({},i);if(!T)throw new Error(`Version with id '${i}' for entity with id '${this.id}' not found.`);h=new mt(T)}return this.metaSync(h.toShallowJSON(),null),this.previousVersion=h.previousVersion,this.version=h.version,this.createdAt=h.createdAt,this.author=h.author,this.deleted=h.deleted,this.entities=h.entities,this.projects=h.projects,this.functions=h.functions,this.events=h.events,this.variableDeclarations=h.variableDeclarations,this.variableInstances=h.variableInstances,this.conditions=h.conditions,this.operations=h.operations,this.functionCalls=h.functionCalls,this.loops=h.loops,this.searches=h.searches,{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}updateWithShallowTransfer(i,a=this.project.addChangeSet(new F(this.project,mt.sessionAuthor,B().toISOString(),this,!0,"update-with-shallow-transfer"))){return this.metaSync(i,a),this.version=i.version,this.createdAt=i.createdAt,this.author=i.author,this.deleted=i.deleted,this.previousVersion=i.previousVersion,this.captureVersion(),this.subscribeToDependencies(),a==null||a.attemptAutoclose("update-with-shallow-transfer",this.id),this}hydrateAncestors(){const i=[],a=[],o=[],f=[];return{updated:R(i),added:R(a),removed:R(o),affected:R(f),self:this}}afterAllChildrenInitialized(i=null){const a=[],o=[],f=[],e=[];return this.initialized||(this.initialized=!0,this.emit("project-initialized",this,i)),this.validate(),this.captureVersion(),{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}addSelfToProject(i){const a=[],o=[],f=[],e=[];return this.subscribe(),this.subscribeToDependencies(),{updated:R(a),added:R(o),removed:R(f),affected:R(e),self:this}}get instancesList(){return Object.values(this.instances)}isOperationDeclaration(i){return this.operationDeclarations.includes(i)}isGlobalEventActionDescriptor(i){return this.globalEventActionDescriptors.includes(i)}isLoopDeclaration(i){return this.loopDeclarations.includes(i)}isConditionDeclaration(i){return this.conditionDeclarations.includes(i)}initChildren(i=this.project.addChangeSet(new F(this.project,mt.sessionAuthor,B().toISOString(),this,!0,"init-children"))){return this.initialized||this.startedInitialization?this:(this.startedInitialization=!0,this.entities=this.initialData.entities.map(a=>{const o=oe(a,this);return o.setParent(this,null),o.initChildren(i),o}),this.projects=this.initialData.projects.map(a=>{const o=oe(a,this);return o.setParent(this,null),o.initChildren(i),o}),this.variableDeclarations=this.initialData.variableDeclarations.map(a=>{const o=oe(a,this);return o.setParent(this,null),o.initChildren(i),o}),this.variableInstances=this.initialData.variableInstances.map(a=>{const o=oe(a,this);return o.setParent(this,null),o.initChildren(i),o}),this.conditions=this.initialData.conditions.map(a=>{const o=oe(a,this);return o.setParent(this,null),o.initChildren(i),o}),this.operations=this.initialData.operations.map(a=>{const o=oe(a,this);return o.setParent(this,null),o.initChildren(i),o}),this.functions=this.initialData.functions.map(a=>{const o=oe(a,this);return o.setParent(this,null),o.initChildren(i),o}),this.events=this.initialData.events.map(a=>{const o=oe(a,this);return o.setParent(this,null),o.initChildren(i),o}),this.functionCalls=this.initialData.functionCalls.map(a=>{const o=oe(a,this);return o.setParent(this,null),o.initChildren(i),o}),this.loops=this.initialData.loops.map(a=>{const o=oe(a,this);return o.setParent(this,null),o.initChildren(i),o}),this.searches=this.initialData.searches.map(a=>{const o=oe(a,this);return o.setParent(this,null),o.initChildren(i),o}),this.attachOrphanReferences(),this.subscribeToDependencies(),this.afterAllChildrenInitialized(i),i==null||i.attemptAutoclose("init-children",this.id),this)}subscribeInstance(i){return(!this.instances[i.id]||this.instances[i.id]!==i)&&(this.instances[i.id]=i),this}subscribeDeletedInstance(i){return(!this.deletedInstances[i.id]||this.deletedInstances[i.id]!==i)&&(this.deletedInstances[i.id]=i),this}subscribeBuiltInInstance(i){return(!this.builtInInstances[i.id]||this.builtInInstances[i.id]!==i)&&(this.builtInInstances[i.id]=i),this}subscribe(){return this}unsubscribe(){return this}unsubscribeInstance(i){return delete this.instances[i.id],this}unsubscribeDeletedInstance(i){return delete this.deletedInstances[i.id],this}findSubscribedBuiltInInstance(i){return this.builtInInstances[i.id]||null}get(i){return this.instances[i]||this.builtInInstances[i]||null}getDeleted(i){return this.deletedInstances[i]||null}getManaged(i){return this.getBuiltIn(i)?null:this.instances[i]||null}getBuiltIn(i){return this.builtInInstances[i]||null}findSubscribedInstanceFromReference(i){return this.instances[i.entityId]||null}findSubscribedBuiltInInstanceFromReference(i){return this.builtInInstances[i.entityId]||null}metaSync(i,a=this.project.addChangeSet(new F(this.project,mt.sessionAuthor,B().toISOString(),this,!0,"meta-sync"))){const o=Fi(this,i),f=this.toMeta();return this.name=i.name!==void 0?i.name:f.name,this.description=i.description!==void 0?i.description:f.description,this.x=i.x||f.x,this.y=i.y||f.y,super.metaSync(i),i.deleted===!0&&!f.deleted?a==null||a.add(this,k.Removed):i.deleted===!1&&f.deleted?a==null||a.add(this,k.Added):o&&(a==null||a.add(this,k.Updated)),a==null||a.attemptAutoclose("meta-sync",this.id),this}async APILoad(i=Te,...a){return await mt.repository.APILoad(this.id,...a),this}async APICreate(i=Te,...a){return await mt.repository.APICreate(this.toShallowJSON(),...a),this}async APIUpdate(i=Te,...a){return await mt.repository.APIUpdate(this.toShallowJSON(),...a),this}async APIDelete(i=Te,...a){return await mt.repository.APIDelete(this.toShallowJSON(),...a),this}async APIClone(i=Te,...a){return await mt.repository.APIClone(this.id,...a),this}async APILoadVersion(i=Te,a,...o){return await mt.repository.APILoadVersion(this.id,a,...o)}remove({ignoreUpstream:i}={ignoreUpstream:!1},a=this.project.addChangeSet(new F(this.project,mt.sessionAuthor,B().toISOString(),this,!0,"remove-entity"))){return{added:[],updated:[],removed:[],affected:[],self:this}}restore({}={},i=this.project.addChangeSet(new F(this.project,mt.sessionAuthor,B().toISOString(),this,!0,"restore-entity"))){return{added:[],updated:[],removed:[],affected:[],self:this}}getAllBuiltInIds(){const i=new Set;return[...this.primitives.flatMap(a=>a.toFlatIds(i)),...this.builtInBaseEntities.flatMap(a=>a.toFlatIds(i)),...this.operationDeclarations.flatMap(a=>a.toFlatIds(i)),...this.globalEventActionDescriptors.flatMap(a=>a.toFlatIds(i)),...this.loopDeclarations.flatMap(a=>a.toFlatIds(i)),...this.conditionDeclarations.flatMap(a=>a.toFlatIds(i)),...this.valueDescriptors.flatMap(a=>a.toFlatIds(i)),...this.dataTypes.flatMap(a=>a.toFlatIds(i))]}getAllBuiltIn(){const i=new Set;return[...this.primitives.flatMap(a=>a.toFlat(i)),...this.builtInBaseEntities.flatMap(a=>a.toFlat(i)),...this.operationDeclarations.flatMap(a=>a.toFlat(i)),...this.globalEventActionDescriptors.flatMap(a=>a.toFlat(i)),...this.loopDeclarations.flatMap(a=>a.toFlat(i)),...this.conditionDeclarations.flatMap(a=>a.toFlat(i)),...this.valueDescriptors.flatMap(a=>a.toFlat(i)),...this.dataTypes.flatMap(a=>a.toFlat(i))]}toFlat(i=new Set){return i.has(this.id)?[]:(i.add(this.id),[this,...this.entities.flatMap(o=>o.toFlat(i)),...this.functions.flatMap(o=>o.toFlat(i)),...this.events.flatMap(o=>o.toFlat(i)),...this.projects.flatMap(o=>o.toFlat(i)),...this.variableDeclarations.flatMap(o=>o.toFlat(i)),...this.variableInstances.flatMap(o=>o.toFlat(i)),...this.conditions.flatMap(o=>o.toFlat(i)),...this.operations.flatMap(o=>o.toFlat(i)),...this.functionCalls.flatMap(o=>o.toFlat(i)),...this.loops.flatMap(o=>o.toFlat(i)),...this.searches.flatMap(o=>o.toFlat(i))])}toFlatIds(i=new Set){return i.has(this.id)?[]:(i.add(this.id),[this.id,...this.entities.flatMap(o=>o.toFlatIds(i)),...this.functions.flatMap(o=>o.toFlatIds(i)),...this.events.flatMap(o=>o.toFlatIds(i)),...this.projects.flatMap(o=>o.toFlatIds(i)),...this.variableDeclarations.flatMap(o=>o.toFlatIds(i)),...this.variableInstances.flatMap(o=>o.toFlatIds(i)),...this.conditions.flatMap(o=>o.toFlatIds(i)),...this.operations.flatMap(o=>o.toFlatIds(i)),...this.functionCalls.flatMap(o=>o.toFlatIds(i)),...this.loops.flatMap(o=>o.toFlatIds(i)),...this.searches.flatMap(o=>o.toFlatIds(i))])}toMeta(){return{id:this.id,version:this.version,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,description:this.description,type:this.type,name:this.name}}toJSON(i=new Set){return i.has(this.id)?this.toReference():(i.add(this.id),{id:this.id,version:this.version,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,type:this.type,name:this.name,description:this.description,entities:this.entities.map(a=>a.toJSON(i)),variableDeclarations:this.variableDeclarations.map(a=>a.toJSON(i)),variableInstances:this.variableInstances.map(a=>a.toJSON(i)),conditions:this.conditions.map(a=>a.toJSON(i)),operations:this.operations.map(a=>a.toJSON(i)),loops:this.loops.map(a=>a.toJSON(i)),searches:this.searches.map(a=>a.toJSON(i)),functions:this.functions.map(a=>a.toJSON(i)),events:this.events.map(a=>a.toJSON(i)),projects:this.projects.map(a=>a.toJSON(i)),functionCalls:this.functionCalls.map(a=>a.toJSON(i))})}toJSONClone(i={uuidStrategy:"uuid"}){const a=new Map,o=new Set,f=this.getAllBuiltInIds();return Object.keys(this.instances).forEach(e=>{if(f.includes(e)){a.set(e,e);return}a.set(e,mt.UUID.uuid())}),o.add(this.id),{id:a.get(this.id),version:this.version,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,type:this.type,name:this.name,description:this.description,entities:this.entities.map(e=>e.toJSONClone({...i,seenEntityMaps:a,seenEntities:o,newId:null})),projects:this.projects.map(e=>e.toJSONClone({...i,seenEntityMaps:a,seenEntities:o,newId:null})),variableDeclarations:this.variableDeclarations.map(e=>e.toJSONClone({...i,seenEntityMaps:a,seenEntities:o,newId:null})),variableInstances:this.variableInstances.map(e=>e.toJSONClone({...i,seenEntityMaps:a,seenEntities:o,newId:null})),conditions:this.conditions.map(e=>e.toJSONClone({...i,seenEntityMaps:a,seenEntities:o,newId:null})),operations:this.operations.map(e=>e.toJSONClone({...i,seenEntityMaps:a,seenEntities:o,newId:null})),functions:this.functions.map(e=>e.toJSONClone({...i,seenEntityMaps:a,seenEntities:o,newId:null})),events:this.events.map(e=>e.toJSONClone({...i,seenEntityMaps:a,seenEntities:o,newId:null})),functionCalls:this.functionCalls.map(e=>e.toJSONClone({...i,seenEntityMaps:a,seenEntities:o,newId:null})),loops:this.loops.map(e=>e.toJSONClone({...i,seenEntityMaps:a,seenEntities:o,newId:null})),searches:this.searches.map(e=>e.toJSONClone({...i,seenEntityMaps:a,seenEntities:o,newId:null}))}}toReference(i=qe){var o;let a=this.id;return(o=i.seenEntityMaps)!=null&&o.has(this.id)&&(a=i.seenEntityMaps.get(this.id)),{id:a+"--"+mt.UUID.uuid()+"--ref",type:c.GenericReference,entityId:a,version:this.version,entityType:this.type}}toShallowJSON(i=qe){var o;let a=this.id;return(o=i.seenEntityMaps)!=null&&o.has(this.id)&&(a=i.seenEntityMaps.get(this.id)),{id:a,version:this.version,createdAt:this.createdAt,previousVersion:this.previousVersion,author:this.author,deleted:this.deleted,type:this.type,name:this.name,description:this.description,entities:this.entities.map(f=>f.toReference(i)),functions:this.functions.map(f=>f.toReference(i)),events:this.events.map(f=>f.toReference(i)),projects:this.projects.map(f=>f.toReference(i)),variableDeclarations:this.variableDeclarations.map(f=>f.toReference(i)),variableInstances:this.variableInstances.map(f=>f.toReference(i)),conditions:this.conditions.map(f=>f.toReference(i)),operations:this.operations.map(f=>f.toReference(i)),functionCalls:this.functionCalls.map(f=>f.toReference(i)),loops:this.loops.map(f=>f.toReference(i)),searches:this.searches.map(f=>f.toReference(i))}}toFlatJSON(i=new Set){return i.has(this.id)?[]:(i.add(this.id),[this.toShallowJSON(),...this.entities.flatMap(o=>o.toFlatJSON(i)),...this.functions.flatMap(o=>o.toFlatJSON(i)),...this.events.flatMap(o=>o.toFlatJSON(i)),...this.projects.flatMap(o=>o.toFlatJSON(i)),...this.variableDeclarations.flatMap(o=>o.toFlatJSON(i)),...this.variableInstances.flatMap(o=>o.toFlatJSON(i)),...this.conditions.flatMap(o=>o.toFlatJSON(i)),...this.operations.flatMap(o=>o.toFlatJSON(i)),...this.functionCalls.flatMap(o=>o.toFlatJSON(i)),...this.loops.flatMap(o=>o.toFlatJSON(i)),...this.searches.flatMap(o=>o.toFlatJSON(i))])}toGenerationTarget(){return{id:this.id,type:this.type,name:this.name,description:this.description}}toFlatGenerationTarget(i=new Set){return i.has(this.id)?[]:(i.add(this.id),[...this.entities.flatMap(o=>o.toFlatGenerationTarget(i)),...this.functions.flatMap(o=>o.toFlatGenerationTarget(i)),...this.events.flatMap(o=>o.toFlatGenerationTarget(i)),...this.projects.flatMap(o=>o.toFlatGenerationTarget(i)),...this.variableDeclarations.flatMap(o=>o.toFlatGenerationTarget(i)),...this.variableInstances.flatMap(o=>o.toFlatGenerationTarget(i)),...this.conditions.flatMap(o=>o.toFlatGenerationTarget(i)),...this.operations.flatMap(o=>o.toFlatGenerationTarget(i)),...this.functionCalls.flatMap(o=>o.toFlatGenerationTarget(i)),...this.loops.flatMap(o=>o.toFlatGenerationTarget(i)),...this.searches.flatMap(o=>o.toFlatGenerationTarget(i))])}clearErrors(){return this.errors=[],this.entities.forEach(i=>i.clearErrors()),this.projects.forEach(i=>i.clearErrors()),this.functions.forEach(i=>i.clearErrors()),this.events.forEach(i=>i.clearErrors()),this.variableDeclarations.forEach(i=>i.clearErrors()),this.variableInstances.forEach(i=>i.clearErrors()),this.conditions.forEach(i=>i.clearErrors()),this.operations.forEach(i=>i.clearErrors()),this.functionCalls.forEach(i=>i.clearErrors()),this.loops.forEach(i=>i.clearErrors()),this.searches.forEach(i=>i.clearErrors()),this}validate(){return this.validateChildren(),qI([...this.errors]),{success:!0}}validateChildren(){this.entities.forEach(i=>i.validate()),this.projects.forEach(i=>i.validate()),this.functions.forEach(i=>i.validate()),this.events.forEach(i=>i.validate()),this.variableDeclarations.forEach(i=>i.validate()),this.variableInstances.forEach(i=>i.validate()),this.conditions.forEach(i=>i.validate()),this.operations.forEach(i=>i.validate()),this.functionCalls.forEach(i=>i.validate()),this.loops.forEach(i=>i.validate()),this.searches.forEach(i=>i.validate())}getErrors(){return[...this.errors,...this.entities.flatMap(a=>a.getErrors()),...this.projects.flatMap(a=>a.getErrors()),...this.functions.flatMap(a=>a.getErrors()),...this.events.flatMap(a=>a.getErrors()),...this.variableDeclarations.flatMap(a=>a.getErrors()),...this.variableInstances.flatMap(a=>a.getErrors()),...this.conditions.flatMap(a=>a.getErrors()),...this.operations.flatMap(a=>a.getErrors()),...this.functionCalls.flatMap(a=>a.getErrors()),...this.loops.flatMap(a=>a.getErrors()),...this.searches.flatMap(a=>a.getErrors())]}getShallowErrors(){return this.errors}clone(){return this}getDefinitionEntity(i){return this.entities.find(a=>a.id===i)||null}addDefinitionEntity(i){return this.entities.includes(i)||this.entities.push(i),i}addFunctionDeclaration(i){return this.functions.includes(i)||this.functions.push(i),i}addFunctionCall(i){return this.functionCalls.includes(i)||this.functionCalls.push(i),i}addVariableDeclaration(i){return this.variableDeclarations.includes(i)||this.variableDeclarations.push(i),i}addVariableInstance(i){return this.variableInstances.includes(i)||this.variableInstances.push(i),i}addInstalledProject(i){return this.projects.includes(i)||this.projects.push(i),this}addGlobalEvent(i){return this.events.includes(i)||this.events.push(i),this}addCondition(i){return this.conditions.includes(i)||this.conditions.push(i),this}addOperation(i){return this.operations.includes(i)||this.operations.push(i),this}addLoop(i){return this.loops.includes(i)||this.loops.push(i),this}addSearch(i){return this.searches.includes(i)||this.searches.push(i),this}removeDefinitionEntity(i){const a=this.entities.findIndex(o=>o.id===i.id);if(a>-1){const o=this.entities[a];return this.entities.splice(a,1),o}return null}removeCondition(i){const a=this.conditions.findIndex(o=>o.id===i.id);if(a>-1){const o=this.conditions[a];return this.conditions.splice(a,1),o}return null}removeOperation(i){const a=this.operations.findIndex(o=>o.id===i.id);if(a>-1){const o=this.operations[a];return this.operations.splice(a,1),o}return null}removeLoop(i){const a=this.loops.findIndex(o=>o.id===i.id);if(a>-1){const o=this.loops[a];return this.loops.splice(a,1),o}return null}removeSearch(i){const a=this.searches.findIndex(o=>o.id===i.id);if(a>-1){const o=this.searches[a];return this.searches.splice(a,1),o}return null}removeFunctionCall(i){const a=this.functionCalls.findIndex(o=>o.id===i.id);if(a>-1){const o=this.functionCalls[a];return this.functionCalls.splice(a,1),o}return null}removeVariableInstance(i){const a=this.variableInstances.findIndex(o=>o.id===i.id);if(a>-1){const o=this.variableInstances[a];return this.variableInstances.splice(a,1),o}return null}removeVariableDeclaration(i){const a=this.variableDeclarations.findIndex(o=>o.id===i.id);if(a>-1){const o=this.variableDeclarations[a];return this.variableDeclarations.splice(a,1),o}return null}removeFunctionDeclaration(i){const a=this.functions.findIndex(o=>o.id===i.id);if(a>-1){const o=this.functions[a];return this.functions.splice(a,1),o}return null}removeInstalledProject(i){const a=this.projects.findIndex(o=>o.id===i.id);if(a>-1){const o=this.projects[a];return this.projects.splice(a,1),o}return null}removeGlobalEvent(i){const a=this.events.findIndex(o=>o.id===i.id);if(a>-1){const o=this.events[a];return this.events.splice(a,1),o}return null}removeTopLevelVariableDeclaration(i){if(i.type!==c.VariableDeclaration)return null;const a=this.variableDeclarations.findIndex(o=>o.id===i.id);if(a>-1){const o=this.variableDeclarations[a];return this.variableDeclarations.splice(a,1),o}return null}getEntryPoints(){return[...this.functions,...this.events,...this.entities.flatMap(a=>a.methods)]}getTerminationStatements(){return[...this.getEntryPoints().reduce((a,o)=>{const f=dt(o);return[...a,...f.filter(e=>e.type===c.ReturnStatement||e.type===c.ContinueStatement||e.type===c.BreakStatement)]},[])]}getFunctionDeclaration(i){return this.functions.find(a=>a.id===i)||null}getConditions(){return[...this.conditions,...this.getEntryPoints().reduce((a,o)=>{const f=dt(o);return[...a,...f.filter(e=>e.type===c.Condition)]},[]),...this.functionCalls.reduce((a,o)=>{const f=dt(o);return[...a,...f.filter(e=>e.type===c.Condition)]},[]),...this.operations.reduce((a,o)=>{const f=dt(o);return[...a,...f.filter(e=>e.type===c.Condition)]},[]),...this.loops.reduce((a,o)=>{const f=dt(o);return[...a,...f.filter(e=>e.type===c.Condition)]},[]),...this.searches.reduce((a,o)=>{const f=dt(o);return[...a,...f.filter(e=>e.type===c.Condition)]},[])]}getOperations(){return[...this.operations,...this.getEntryPoints().reduce((a,o)=>{const f=dt(o);return[...a,...f.filter(e=>e.type===c.Operation)]},[]),...this.functionCalls.reduce((a,o)=>{const f=dt(o);return[...a,...f.filter(e=>e.type===c.Operation)]},[]),...this.conditions.reduce((a,o)=>{const f=dt(o);return[...a,...f.filter(e=>e.type===c.Operation)]},[]),...this.loops.reduce((a,o)=>{const f=dt(o);return[...a,...f.filter(e=>e.type===c.Operation)]},[]),...this.searches.reduce((a,o)=>{const f=dt(o);return[...a,...f.filter(e=>e.type===c.Operation)]},[])]}getFunctionCalls(){return[...this.functionCalls,...this.getEntryPoints().reduce((a,o)=>{const f=dt(o);return[...a,...f.filter(e=>e.type===c.FunctionCall)]},[]),...this.conditions.reduce((a,o)=>{const f=dt(o);return[...a,...f.filter(e=>e.type===c.FunctionCall)]},[]),...this.operations.reduce((a,o)=>{const f=dt(o);return[...a,...f.filter(e=>e.type===c.FunctionCall)]},[]),...this.loops.reduce((a,o)=>{const f=dt(o);return[...a,...f.filter(e=>e.type===c.FunctionCall)]},[]),...this.searches.reduce((a,o)=>{const f=dt(o);return[...a,...f.filter(e=>e.type===c.FunctionCall)]},[])]}getVariables(){return[...this.variableDeclarations,...this.getEntryPoints().reduce((a,o)=>{const f=Ai(o);return[...a,...f]},[]),...this.functionCalls.reduce((a,o)=>{const f=Ai(o);return[...a,...f]},[]),...this.conditions.reduce((a,o)=>{const f=Ai(o);return[...a,...f]},[]),...this.operations.reduce((a,o)=>{const f=Ai(o);return[...a,...f]},[]),...this.loops.reduce((a,o)=>{const f=Ai(o);return[...a,...f]},[]),...this.searches.reduce((a,o)=>{const f=Ai(o);return[...a,...f]},[])]}getVariableInstances(){return[...this.variableInstances,...this.entities.reduce((a,o)=>[...a,...o.methods.flatMap(f=>{const h=dt(f).filter(v=>v.type===c.VariableInstance);return[...a,...h]})],[]),...this.getEntryPoints().reduce((a,o)=>{const e=Ai(o).filter(h=>h.type===c.VariableInstance);return[...a,...e]},[]),...this.functionCalls.reduce((a,o)=>{const e=Ai(o).filter(h=>h.type===c.VariableInstance);return[...a,...e]},[]),...this.conditions.reduce((a,o)=>{const e=Ai(o).filter(h=>h.type===c.VariableInstance);return[...a,...e]},[]),...this.operations.reduce((a,o)=>{const e=Ai(o).filter(h=>h.type===c.VariableInstance);return[...a,...e]},[]),...this.loops.reduce((a,o)=>{const e=Ai(o).filter(h=>h.type===c.VariableInstance);return[...a,...e]},[]),...this.searches.reduce((a,o)=>{const e=Ai(o).filter(h=>h.type===c.VariableInstance);return[...a,...e]},[])]}getVariableDeclarations(){return R([...this.variableDeclarations,...this.entities.reduce((a,o)=>[...a,...o.methods.flatMap(f=>{const h=dt(f).filter(v=>v.type===c.VariableDeclaration);return[...a,...h]})],[]),...this.getEntryPoints().reduce((a,o)=>{const e=Ai(o).filter(h=>h.type===c.VariableDeclaration);return[...a,...e]},[]),...this.functionCalls.reduce((a,o)=>{const e=Ai(o).filter(h=>h.type===c.VariableDeclaration);return[...a,...e]},[]),...this.conditions.reduce((a,o)=>{const e=Ai(o).filter(h=>h.type===c.VariableDeclaration);return[...a,...e]},[]),...this.operations.reduce((a,o)=>{const e=Ai(o).filter(h=>h.type===c.VariableDeclaration);return[...a,...e]},[]),...this.loops.reduce((a,o)=>{const e=Ai(o).filter(h=>h.type===c.VariableDeclaration);return[...a,...e]},[]),...this.searches.reduce((a,o)=>{const e=Ai(o).filter(h=>h.type===c.VariableDeclaration);return[...a,...e]},[])])}getLoops(){return[...this.loops,...this.getEntryPoints().reduce((a,o)=>{const f=dt(o);return[...a,...f.filter(e=>e.type===c.Loop)]},[]),...this.functionCalls.reduce((a,o)=>{const f=dt(o);return[...a,...f.filter(e=>e.type===c.Loop)]},[]),...this.conditions.reduce((a,o)=>{const f=dt(o);return[...a,...f.filter(e=>e.type===c.Loop)]},[]),...this.operations.reduce((a,o)=>{const f=dt(o);return[...a,...f.filter(e=>e.type===c.Loop)]},[]),...this.searches.reduce((a,o)=>{const f=dt(o);return[...a,...f.filter(e=>e.type===c.Loop)]},[])]}getSearches(){return[...this.searches,...this.getEntryPoints().reduce((a,o)=>{const f=dt(o);return[...a,...f.filter(e=>e.type===c.Search)]},[]),...this.functionCalls.reduce((a,o)=>{const f=dt(o);return[...a,...f.filter(e=>e.type===c.Search)]},[]),...this.conditions.reduce((a,o)=>{const f=dt(o);return[...a,...f.filter(e=>e.type===c.Search)]},[]),...this.operations.reduce((a,o)=>{const f=dt(o);return[...a,...f.filter(e=>e.type===c.Search)]},[]),...this.loops.reduce((a,o)=>{const f=dt(o);return[...a,...f.filter(e=>e.type===c.Search)]},[])]}attachOrphanReferences(){const i=this.getVariableInstances(),a=this.getVariableDeclarations();return i.forEach(o=>{if(!o.declaration){const f=o.initialData,e=f.declaration.entityId||f.declaration.id,h=a.find(v=>v.id===e);h&&o.setDeclaration(h)}}),this}getBuiltInPersistedEntity(){return this.builtInBaseEntities.find(i=>i.name===de.PERSISTED_ENTITY)||null}requestActiveDynamicValue(i,a=!1){var f,e;const o=(e=(f=this.parentContext).requestActiveDynamicValue)==null?void 0:e.call(f,i,a);if(!o){const h=i.getDefaultValue();return h?{value:h,type:ge.DefaultValue,inheritanceLink:null,valueOwner:i}:null}return o||null}requestModule(i){if(this.parentContext.requestModule){const a=this.parentContext.requestModule(i);return!a&&i==="uuid"?Ec:a||null}return i==="uuid"?Ec:null}undo(){Ue.log("Undoing, from: ",this.undoableStackValueIndex),this.undoableStackValueIndex=this.undoableStackValueIndex-1,Ue.log("To: ",this.undoableStackValueIndex);const i=this.history[this.undoableStackValueIndex+1],a=this.history[this.undoableStackValueIndex];return Ue.log("Current change set: ",i==null?void 0:i.toJSON()),Ue.log("Change set to restore: ",a==null?void 0:a.toJSON()),EA(i||"initial",a||"initial",this)}redo(){Ue.log("Undoing, from: ",this.undoableStackValueIndex),this.undoableStackValueIndex=this.undoableStackValueIndex+1,Ue.log("To: ",this.undoableStackValueIndex);const i=this.history[this.undoableStackValueIndex-1],a=this.history[this.undoableStackValueIndex];return Ue.log("Current change set: ",i==null?void 0:i.toJSON()),Ue.log("Change set to restore: ",a.toJSON()),EA(i||"initial",a||"initial",this)}applyExternalChangeSet(i){const a=i.payload,o=this.addChangeSet(new F(this,i.userAuthor,i.emittedAt,this)),f=a.updated[this.id];if(!f)throw new Error("Project root not found in change set transfer. Cannot apply changes.");const e={...a.added,...a.updated,...a.removed},h=[...Object.keys(a.added),...Object.keys(a.updated),...Object.keys(a.removed)];h.forEach(T=>{var g;if(!e[T]){Ue.warn(`Entity '${T}' not found in change set transfer. Cannot apply changes.`);const A=(g=this.get(T))==null?void 0:g.toShallowJSON();throw A?Ue.warn("Entity in project: ",A):Ue.warn("Entity not in project"),new Error(`Entity '${T}' not found in change set transfer. Cannot apply changes.`)}});const v=new la(f);return v.flatRecord=e,v.order=h,v.orderEntities(),Ue.log("All entities: ",v.order.map((T,g)=>`${g+1}: ${e[T].type} - ${T}`).join(`,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@elyx-code/project-logic-tree",
3
- "version": "0.0.6520",
3
+ "version": "0.0.6521",
4
4
  "author": "Sergio Herrero",
5
5
  "license": "UNLICENSED",
6
6
  "description": "An installable module which contains the type definitions and ephemeral state management for a projects' logic tree data structure",