@javelin/ecs
Version:
59 lines • 2.23 kB
TypeScript
import { CollatedNode } from "@javelin/core";
import { Component } from "./component";
export declare const $self: unique symbol;
export declare const $touched: unique symbol;
export declare const $changes: unique symbol;
export declare const $delete: unique symbol;
export declare type ChangesBase = {
node: CollatedNode;
dirty: boolean;
};
export declare type StructChanges = ChangesBase & {
changes: {
[key: string]: unknown;
};
};
export declare type ArrayChanges = StructChanges;
export declare type ObjectChanges = ChangesBase & {
changes: {
[key: string]: typeof $delete | unknown;
};
};
export declare type SetChanges = ChangesBase & {
changes: {
add: unknown[];
delete: unknown[];
};
};
export declare type MapChanges = ChangesBase & {
changes: Map<unknown, typeof $delete | unknown>;
};
export declare type Changes = StructChanges | ArrayChanges | ObjectChanges | SetChanges | MapChanges;
declare type Observed<$Type = unknown, $Changes = Changes> = {
[$touched]: boolean;
[$changes]: $Changes;
[$self]: Observed<$Type, $Changes>;
} & $Type;
export declare type ObservedStruct = Observed<{
[key: string]: unknown;
}, StructChanges>;
export declare type ObservedArray = Observed<unknown[], ArrayChanges>;
export declare type ObservedObject = Observed<{
[key: string]: unknown;
}, ObjectChanges>;
export declare type ObservedSet = Observed<Set<unknown>, SetChanges>;
export declare type ObservedMap = Observed<Map<unknown, unknown>, MapChanges>;
export declare function observe<$Type extends Component>(component: $Type): $Type;
export declare function clearObservedChanges(component: Component | Observed<Component, unknown>): void;
export declare function getFieldValue(node: CollatedNode, object: object, fieldId: number, traverse: (number | string)[]): object;
export declare type PatchNode = {
changes: Map<unknown, unknown>;
children: Map<unknown, PatchNode>;
};
export declare type Patch = PatchNode & {
schemaId: number;
};
export declare function createPatch(component: Component, patch?: Patch): Patch;
export declare function resetPatch(patch: Patch): void;
export {};
//# sourceMappingURL=observe.d.ts.map