graphile-build
Version:
Build a GraphQL schema from plugins
89 lines (70 loc) • 2.13 kB
TypeScript
// @flow
/* eslint-disable flowtype/no-weak-types */
import { GraphQLResolveInfo } from "graphql";
type SubscriptionReleaser = () => void;
type SubscriptionCallback = () => void;
type Predicate = (record: any) => boolean;
type PredicateGenerator = (data: any) => Predicate;
export abstract class LiveSource {
abstract subscribeCollection(
_callback: SubscriptionCallback,
_collectionIdentifier: any,
_predicate?: (record: any) => boolean
): SubscriptionReleaser | null;
abstract subscribeRecord(
_callback: SubscriptionCallback,
_collectionIdentifier: any,
_recordIdentifier: any
): SubscriptionReleaser | null;
}
export abstract class LiveProvider {
sources: Array<LiveSource>;
namespace: string;
constructor(namespace: string);
registerSource(source: LiveSource): void;
abstract collectionIdentifierIsValid(_collectionIdentifier: any): boolean;
abstract recordIdentifierIsValid(
_collectionIdentifier: any,
_recordIdentifier: any
): boolean;
}
export class LiveMonitor {
providers: { [namespace: string]: LiveProvider };
subscriptionReleasersByCounter: {
[counter: string]: (() => void)[];
};
liveConditionsByCounter: { [counter: string]: Array<PredicateGenerator> };
changeCounter: number;
constructor(
providers: { [namespace: string]: LiveProvider },
extraRootValue: any
);
resetBefore(currentCounter: number): void;
release(): void;
handleChange(): void;
onChange(callback: () => void): void;
liveCollection(
counter: number,
namespace: string,
collectionIdentifier: any,
predicate?: (record: any) => boolean
): void;
liveRecord(
counter: number,
namespace: string,
collectionIdentifier: any,
recordIdentifier: any
): void;
}
export class LiveCoordinator {
providers: { [namespace: string]: LiveProvider };
registerProvider(provider: LiveProvider): void;
registerSource(namespace: string, source: LiveSource): void;
getMonitor(): LiveMonitor;
subscribe(
_parent: any,
_args: any,
context: any,
_info: GraphQLResolveInfo
): AsyncIterable<void>;
}