@adpt/core
Version:
AdaptJS core library
65 lines • 3.22 kB
TypeScript
import { Logger } from "@adpt/utils";
import { AdaptElement, AdaptElementOrNull } from "../jsx";
import { Action, ActionInfo, Plugin, PluginOptions } from "./deploy_types";
export interface WidgetPair<E extends AdaptElement, O extends object> {
queryDomainKey: QueryDomainKey;
actionInfo: ActionInfo;
element?: E;
observed?: O;
}
export interface QueryDomain<Id, Secret> {
id: Id;
secret: Secret;
}
declare type QueryDomainKey = string;
export declare type WidgetId = string;
export interface WidgetChange<E extends AdaptElement> {
id: WidgetId;
from?: E;
to?: E;
}
interface Expected<E extends AdaptElement> {
[queryDomainKey: string]: WidgetChange<E>[];
}
export interface Observed<O extends object> {
[queryDomainKey: string]: O[];
}
declare type ComputeChanges<E extends AdaptElement, O extends object> = (e: WidgetChange<E>, o: O | undefined) => ActionInfo;
declare type TranslateAction<QD extends QueryDomain<any, any>, E extends AdaptElement, O extends object> = (d: QD, p: WidgetPair<E, O>) => void | Promise<void>;
export declare abstract class WidgetPlugin<WidgetElem extends AdaptElement, WidgetObs extends object, QDomain extends QueryDomain<any, any>> implements Plugin<Observed<WidgetObs>> {
deployID_?: string;
log_?: Logger;
dataDir_?: string;
queryDomains: Map<string, QDomain>;
findElems: (dom: AdaptElementOrNull) => WidgetElem[];
getElemQueryDomain: (el: WidgetElem) => QDomain;
getWidgetTypeFromElem: (el: WidgetElem) => string;
getWidgetTypeFromObs: (obs: WidgetObs) => string;
getWidgetIdFromElem: (el: WidgetElem) => WidgetId;
getWidgetIdFromObs: (obs: WidgetObs) => WidgetId;
computeChanges: ComputeChanges<WidgetElem, WidgetObs>;
getObservations: (domain: QDomain, deployID: string, elemsInQDomain: WidgetChange<WidgetElem>[]) => Promise<WidgetObs[]>;
createWidget: (domain: QDomain, deployID: string, resource: WidgetPair<WidgetElem, WidgetObs>) => Promise<void>;
destroyWidget: (domain: QDomain, deployID: string, resource: WidgetPair<WidgetElem, WidgetObs>) => Promise<void>;
modifyWidget: (domain: QDomain, deployID: string, resource: WidgetPair<WidgetElem, WidgetObs>) => Promise<void>;
start(options: PluginOptions): Promise<void>;
createExpected(oldDom: AdaptElementOrNull, newDom: AdaptElementOrNull, createQueryDomains?: boolean): Expected<WidgetElem>;
observe(oldDom: AdaptElementOrNull, dom: AdaptElementOrNull): Promise<Observed<WidgetObs>>;
analyze(oldDom: AdaptElementOrNull, dom: AdaptElementOrNull, obs: Observed<WidgetObs>): Action[];
finish(): Promise<void>;
readonly deployID: string;
readonly dataDir: string;
log: (arg: any, ...args: any[]) => void;
queryDomain(key: QueryDomainKey): QDomain | undefined;
widgetInfo(pair: WidgetPair<WidgetElem, WidgetObs>): {
type: string;
id: string;
key: string | undefined;
};
/**
* Translate WidgetPairs into plugin Actions
*/
translatePairs(actions: Action[], pairs: WidgetPair<WidgetElem, WidgetObs>[], actionType: string, action: TranslateAction<QDomain, WidgetElem, WidgetObs>): void;
}
export {};
//# sourceMappingURL=widget_plugin.d.ts.map