/// import { Patch } from 'immer/dist/internal'; import * as t from 'io-ts'; import { Component, UnknownComponent } from '../component'; import { Entity } from '../entity'; import { Plugin } from '../plugin'; import { Resource } from '../resource'; import { Serializer } from './serializer_plugin'; export interface OptionalComponentDelta { componentType: t.Type; deltaType?: t.Type; getDelta?: (a: Data, b: Data, patches: Patch[]) => Delta | undefined; applyDelta?: (componentData: Data, delta: Delta) => Data | void; } export declare type ComponentDelta = { [K in keyof OptionalComponentDelta]-?: OptionalComponentDelta[K]; }; interface ComponentDeltaMap> extends Map> { get(key: Component): ComponentDelta | undefined; set(key: Component, val: ComponentDelta): this; } export declare const EntityDelta: t.PartialC<{ componentStates: t.Type, [string, unknown][], unknown>; componentDeltas: t.Type, [string, unknown][], unknown>; removeComponents: t.Type, string[], unknown>; }>; export declare type EntityDelta = t.TypeOf; export declare class DeltaMaker { private serializer; readonly componentDeltas: ComponentDeltaMap; constructor(serializer: Serializer); addComponent(component: Component, componentDelta: OptionalComponentDelta): void; /** * Removes the immer draftedness of an entity's components. */ untrack(entity: Entity): void; /** * Gets the changes that have been made to an entity since the last * call to `getDelta`. Uses Immer to track changes on components. */ getDelta(entity: Entity): EntityDelta | undefined; /** * Apply a delta to an entity. Returns the set of components that * the delta had but the entity was missing. */ applyDelta(entity: Entity, delta: EntityDelta): Set; } export declare const DeltaResource: Resource; export declare const DeltaPlugin: Plugin; declare const Patch: t.IntersectionC<[t.TypeC<{ op: t.UnionC<[t.LiteralC<"replace">, t.LiteralC<"remove">, t.LiteralC<"add">]>; path: t.ArrayC>; }>, t.PartialC<{ value: t.UnknownC; }>]>; export declare const immerDeltaType: t.ArrayC, t.LiteralC<"remove">, t.LiteralC<"add">]>; path: t.ArrayC>; }>, t.PartialC<{ value: t.UnknownC; }>]>>; export declare function immerGetDelta(_a: T, _b: T, patches: Patch[]): Patch[] | undefined; export declare function immerApplyDelta(componentData: T, delta: Patch[]): T; export {};