@data-client/endpoint
Version:
Declarative Network Interface Definitions
86 lines (85 loc) • 3.88 kB
TypeScript
import { GetEntity, PolymorphicInterface } from '../interface.js';
import { Values, Array as ArraySchema } from '../schema.js';
import type { DefaultArgs } from '../schemaTypes.js';
/**
* Entities but for Arrays instead of classes
* @see https://dataclient.io/rest/api/Collection
*/
export default class CollectionSchema<S extends PolymorphicInterface = any, Args extends any[] = DefaultArgs, Parent = any> {
protected nestKey: (parent: any, key: string) => Record<string, any>;
protected argsKey?: (...args: any) => Record<string, any>;
readonly schema: S;
readonly key: string;
push: S extends ArraySchema<any> ? CollectionSchema<S, Args, Parent> : undefined;
unshift: S extends ArraySchema<any> ? CollectionSchema<S, Args, Parent> : undefined;
assign: S extends Values<any> ? CollectionSchema<S, Args, Parent> : undefined;
addWith<P extends any[] = Args>(merge: (existing: any, incoming: any) => any, createCollectionFilter?: (...args: P) => (collectionKey: Record<string, string>) => boolean): CollectionSchema<S, P>;
protected createCollectionFilter(...args: Args): (collectionKey: Record<string, string>) => boolean;
protected nonFilterArgumentKeys(key: string): boolean;
constructor(schema: S, options?: CollectionOptions<Args, Parent>);
get cacheWith(): object;
toString(): string;
toJSON(): {
key: string;
schema: any;
};
pk(value: any, parent: any, key: string, args: readonly any[]): string;
normalize(input: any, parent: Parent, key: string, args: any[], visit: (...args: any) => any, addEntity: (...args: any) => any, getEntity: any, checkLoop: any): string;
merge(existing: any, incoming: any): any;
shouldReorder(existingMeta: {
date: number;
fetchedAt: number;
}, incomingMeta: {
date: number;
fetchedAt: number;
}, existing: any, incoming: any): boolean;
mergeWithStore(existingMeta: {
date: number;
fetchedAt: number;
}, incomingMeta: {
date: number;
fetchedAt: number;
}, existing: any, incoming: any): any;
mergeMetaWithStore(existingMeta: {
fetchedAt: number;
date: number;
expiresAt: number;
}, incomingMeta: {
fetchedAt: number;
date: number;
expiresAt: number;
}, existing: any, incoming: any): {
fetchedAt: number;
date: number;
expiresAt: number;
};
queryKey(args: Args, queryKey: unknown, getEntity: GetEntity, getIndex: unknown): any;
createIfValid: (value: any) => any | undefined;
denormalize(input: any, args: readonly any[], unvisit: (schema: any, input: any) => any): ReturnType<S['denormalize']>;
}
export type CollectionOptions<Args extends any[] = DefaultArgs, Parent = any> = ({
/** Defines lookups for Collections nested in other schemas.
*
* @see https://dataclient.io/rest/api/Collection#nestKey
*/
nestKey?: (parent: Parent, key: string) => Record<string, any>;
} | {
/** Defines lookups top-level Collections using ...args.
*
* @see https://dataclient.io/rest/api/Collection#argsKey
*/
argsKey?: (...args: Args) => Record<string, any>;
}) & ({
/** Sets a default createCollectionFilter for addWith(), push, unshift, and assign.
*
* @see https://dataclient.io/rest/api/Collection#createcollectionfilter
*/
createCollectionFilter?: (...args: Args) => (collectionKey: Record<string, string>) => boolean;
} | {
/** Test to determine which arg keys should **not** be used for filtering results.
*
* @see https://dataclient.io/rest/api/Collection#nonfilterargumentkeys
*/
nonFilterArgumentKeys?: ((key: string) => boolean) | string[] | RegExp;
});
//# sourceMappingURL=Collection.d.ts.map