import { AwareTypes, } from '../relations/AwareTypes'; import { EpistemicTypes, } from './EpistemicTypes'; import { IAwarenessRelation, } from '../relations/IAwarenessRelation'; import { FindEpistemicArgs, IFindBaseArgs, } from '../querying/FindModelArgs'; import { IModel, } from '../models/IModel'; import { ISerializedEpistemology, } from './ISerializedEpistemology'; import { ITag, } from '../../tags/ITag'; import { IThoughtRelation, } from '../relations/IThoughtRelation'; import { IWorld, } from '../world/IWorld'; import { ModelType, } from '../models/ModelType'; import { OnticTypes, } from '../ontology/OnticTypes'; import { Tag, } from '../../tags/Tag'; export interface IEpistemology< Type extends EpistemicTypes | ModelType.Thought, /* This reflects knowledge *of*, not types which are capable of knowledge. */ Knowledge extends ModelType, > { /* Thoughts may not be "aware" of anything. Models must have ontology in * order to be aware and for something to be aware of them, given that * awareness is considered an epistemic perspective of ontic aspects. */ readonly awareness: Type extends AwareTypes ? IAwarenessRelation : null; readonly modelType: Type; readonly tags: readonly ITag[]; readonly thoughts: IThoughtRelation; readonly type: symbol; readonly world: IWorld; readonly addTag: (tag: Tag) => void; readonly clone: ( self: IEpistemology, ) => IEpistemology; readonly destroy: ( self: IEpistemology, ) => void; readonly find: ( args: string | (IFindBaseArgs & FindEpistemicArgs), ) => IModel | null; readonly findAll: ( args: '*' | (IFindBaseArgs & FindEpistemicArgs), ) => readonly IModel[]; readonly findAllGenerator: ( args: '*' | (IFindBaseArgs & FindEpistemicArgs), ) => IterableIterator>; readonly getTag: (toSearch: Tag) => ITag | null; readonly removeTag: (tag: Tag) => void; readonly serialize: ( self: IEpistemology, spaces?: number, ) => string; readonly serializeToObject: ( self: IEpistemology, ) => ISerializedEpistemology; readonly finalize?: (self: IEpistemology) => void; readonly initialize?: (self: IEpistemology) => void; }