UNPKG

@data-client/endpoint

Version:

Declarative Network Interface Definitions

155 lines (154 loc) 9.27 kB
import type { Schema, EntityInterface, PolymorphicInterface, SchemaClass, GetIndex, GetEntity, CheckLoop, } from './interface.js'; import type { AbstractInstanceType, Normalize, NormalizeNullable, Denormalize, DenormalizeNullable, DenormalizeObject, DenormalizeNullableObject, NormalizeObject, NormalizedNullableObject, EntityMap, ObjectArgs, } from './normal.js'; import { EntityFields } from './schemas/EntityFields.js'; import { default as EntityMixin, default as Entity, } from './schemas/EntityMixin.js'; import { default as Invalidate } from './schemas/Invalidate.js'; import { default as Query } from './schemas/Query.js'; import type { CollectionConstructor, DefaultArgs, SchemaAttributeFunction, SchemaFunction, UnionResult, } from './schemaTypes.js'; export { EntityMap, Invalidate, Query, EntityMixin, Entity }; export type { SchemaClass }; export { EntityInterface } from './interface.js'; export * from './schemaTypes.js'; /** * Represents arrays * @see https://dataclient.io/rest/api/Array */ export class Array<S extends Schema = Schema> implements SchemaClass { /** * Represents arrays * @see https://dataclient.io/rest/api/Array */ constructor(definition: S, schemaAttribute?: S extends EntityMap<infer T> ? keyof T | SchemaFunction<keyof S> : undefined); define(definition: Schema): void; readonly isSingleSchema: S extends EntityMap ? false : true; schemaKey(): string; readonly schema: S; normalize(input: any, parent: any, key: any, args: any[], visit: (...args: any) => any, addEntity: (...args: any) => any, getEntity: GetEntity, checkLoop: CheckLoop): (S extends EntityMap ? UnionResult<S> : Normalize<S>)[]; _normalizeNullable(): (S extends EntityMap ? UnionResult<S> : Normalize<S>)[] | undefined; _denormalizeNullable(): (S extends EntityMap<infer T> ? T : Denormalize<S>)[] | undefined; denormalize(input: {}, args: readonly any[], unvisit: (schema: any, input: any) => any): (S extends EntityMap<infer T> ? T : Denormalize<S>)[]; queryKey(args: readonly any[], queryKey: (...args: any) => any, getEntity: any, getIndex: any): undefined; } /** * Retrieves all entities in cache * * @see https://dataclient.io/rest/api/All */ export class All<S extends EntityMap | EntityInterface = EntityMap | EntityInterface> implements SchemaClass { /** * Retrieves all entities in cache * * @see https://dataclient.io/rest/api/All */ constructor(definition: S, schemaAttribute?: S extends EntityMap<infer T> ? keyof T | SchemaFunction<keyof S> : undefined); define(definition: Schema): void; readonly isSingleSchema: S extends EntityMap ? false : true; schemaKey(): string; readonly schema: S; schemaKey(): string; normalize(input: any, parent: any, key: any, args: any[], visit: (...args: any) => any, addEntity: (...args: any) => any, getEntity: GetEntity, checkLoop: CheckLoop): (S extends EntityMap ? UnionResult<S> : Normalize<S>)[]; _normalizeNullable(): (S extends EntityMap ? UnionResult<S> : Normalize<S>)[] | undefined; _denormalizeNullable(): (S extends EntityMap<infer T> ? T : Denormalize<S>)[] | undefined; denormalize(input: {}, args: readonly any[], unvisit: (schema: any, input: any) => any): (S extends EntityMap<infer T> ? T : Denormalize<S>)[]; queryKey( // TODO: hack for now to allow for variable arg combinations with Query args: [ ] | [ unknown ], queryKey: (...args: any) => any, getEntity: GetEntity, getIndex: GetIndex): any; } /** * Represents objects with statically known members * @see https://dataclient.io/rest/api/Object */ export class Object<O extends Record<string, any> = Record<string, any>> implements SchemaClass { /** * Represents objects with statically known members * @see https://dataclient.io/rest/api/Object */ constructor(definition: O); define(definition: Schema): void; readonly schema: O; normalize(input: any, parent: any, key: any, args: any[], visit: (...args: any) => any, addEntity: (...args: any) => any, getEntity: GetEntity, checkLoop: CheckLoop): NormalizeObject<O>; _normalizeNullable(): NormalizedNullableObject<O>; _denormalizeNullable(): DenormalizeNullableObject<O>; denormalize(input: {}, args: readonly any[], unvisit: (schema: any, input: any) => any): DenormalizeObject<O>; queryKey(args: ObjectArgs<O>, queryKey: (...args: any) => any, getEntity: GetEntity, getIndex: GetIndex): any; } type RequiredMember<O extends Record<string | number | symbol, unknown>, Required extends keyof O> = { [K in Required]: O[K]; }; type UnionSchemaToArgs<Choices extends EntityMap, SchemaAttribute extends keyof AbstractInstanceType<Choices[keyof Choices]> | SchemaFunction<keyof Choices>> = SchemaAttribute extends keyof AbstractInstanceType<Choices[keyof Choices]> ? RequiredMember<AbstractInstanceType<Choices[keyof Choices]>, SchemaAttribute> : SchemaAttribute extends (value: infer Args, ...rest: any) => unknown ? Args : never; /** * Represents polymorphic values. * @see https://dataclient.io/rest/api/Union */ export interface UnionConstructor { /** * Represents polymorphic values. * @see https://dataclient.io/rest/api/Union */ new <Choices extends EntityMap, SchemaAttribute extends keyof AbstractInstanceType<Choices[keyof Choices]> | SchemaFunction<keyof Choices>>(definition: Choices, schemaAttribute: SchemaAttribute): UnionInstance<Choices, UnionSchemaToArgs<Choices, SchemaAttribute> & Partial<AbstractInstanceType<Choices[keyof Choices]>>>; readonly prototype: UnionInstance; } /** * Represents polymorphic values. * @see https://dataclient.io/rest/api/Union */ export interface UnionInstance<Choices extends EntityMap = any, Args extends EntityFields<AbstractInstanceType<Choices[keyof Choices]>> = EntityFields<AbstractInstanceType<Choices[keyof Choices]>>> { define(definition: Schema): void; inferSchema: SchemaAttributeFunction<Choices[keyof Choices]>; getSchemaAttribute: SchemaFunction<keyof Choices>; schemaKey(): string; readonly schema: Choices; normalize(input: any, parent: any, key: any, args: any[], visit: (...args: any) => any, addEntity: (...args: any) => any, getEntity: GetEntity, checkLoop: CheckLoop): UnionResult<Choices>; _normalizeNullable(): UnionResult<Choices> | undefined; _denormalizeNullable(): AbstractInstanceType<Choices[keyof Choices]> | undefined; denormalize(input: {}, args: readonly any[], unvisit: (schema: any, input: any) => any): AbstractInstanceType<Choices[keyof Choices]>; queryKey(args: [ Args ], queryKey: (...args: any) => any, getEntity: GetEntity, getIndex: GetIndex): { id: any; schema: string; }; } /** * Represents polymorphic values. * @see https://dataclient.io/rest/api/Union */ export declare let UnionRoot: UnionConstructor; /** * Represents polymorphic values. * @see https://dataclient.io/rest/api/Union */ export declare class Union<Choices extends EntityMap, SchemaAttribute extends keyof AbstractInstanceType<Choices[keyof Choices]> | SchemaFunction<keyof Choices>> extends UnionRoot<Choices, SchemaAttribute> { } /** * Represents variably sized objects * @see https://dataclient.io/rest/api/Values */ export class Values<Choices extends Schema = any> implements SchemaClass { /** * Represents variably sized objects * @see https://dataclient.io/rest/api/Values */ constructor(definition: Choices, schemaAttribute?: Choices extends EntityMap<infer T> ? keyof T | SchemaFunction<keyof Choices> : undefined); define(definition: Schema): void; readonly isSingleSchema: Choices extends EntityMap ? false : true; schemaKey(): string; inferSchema: SchemaAttributeFunction<Choices extends EntityMap ? Choices[keyof Choices] : Choices>; getSchemaAttribute: Choices extends EntityMap ? SchemaFunction<keyof Choices> : false; readonly schema: Choices; normalize(input: any, parent: any, key: any, args: any[], visit: (...args: any) => any, addEntity: (...args: any) => any, getEntity: GetEntity, checkLoop: CheckLoop): Record<string, Choices extends EntityMap ? UnionResult<Choices> : Normalize<Choices>>; _normalizeNullable(): Record<string, Choices extends EntityMap ? UnionResult<Choices> : NormalizeNullable<Choices>> | undefined; _denormalizeNullable(): Record<string, Choices extends EntityMap<infer T> ? T | undefined : DenormalizeNullable<Choices>>; denormalize(input: {}, args: readonly any[], unvisit: (schema: any, input: any) => any): Record<string, Choices extends EntityMap<infer T> ? T : Denormalize<Choices>>; queryKey(args: readonly any[], queryKey: (...args: any) => any, getEntity: GetEntity, getIndex: GetIndex): undefined; } export declare let CollectionRoot: CollectionConstructor; /** * Entities but for Arrays instead of classes * @see https://dataclient.io/rest/api/Collection */ export declare class Collection<S extends any[] | PolymorphicInterface = any, Args extends any[] = DefaultArgs, Parent = any> extends CollectionRoot<S, Args, Parent> { }