UNPKG

@alphanova/builder

Version:

A fully fledged facade that facilitates object manipulation

71 lines (70 loc) 3.19 kB
/// <reference types="react" /> import { Structure } from './Models/Document'; import { StoreAction } from './Models/Redux'; import { Builder } from './Models/Builder'; import { Config, Rule } from './Models/Config'; export interface Functions<Model extends Structure, Container extends Builder<Model, Container>> { ADD: (params: { payload: Container['extract']; extra?: Record<string, unknown>; }) => Promise<Container>; UPDATE: (params: { id: string; object: Container['extract']; }) => Promise<Container>; DELETE: (params: { id: string; }) => Promise<Container>; ASYNC_ADD: (params: { payload: Container['extract']; extra: Record<string, unknown>; dummy_id?: string; }) => Promise<Container>; LOCAL_ADD: (id: string, payload: Container['extract']) => Container; LOCAL_DELETE: (id: string) => Container; LOCAL_UPDATE: (id: string, object: Model) => Container; SERVER_ADD: (params: { payload: Container['extract']; extra: Record<string, unknown>; }) => Promise<Container>; SERVER_UPDATE: (params: { id: string; object: Model; }) => Promise<Container>; SERVER_DELETE: (params: { id: string; }) => Promise<Container>; FETCH_MANY: (params?: { override_url?: string; }) => Promise<Container[]>; FETCH_ONE: (params: { id: string; }) => Promise<Container[]>; FETCH_ANY: (params: { route: string[]; }) => Promise<Container[]>; } export interface MoreFunctions<Model extends Structure, Container extends Builder<Model, Container>> extends Functions<Model, Container> { GET: () => Map<string, Container>; } export declare function setConfig<T extends string, C extends Config<T, Structure, any>>(conf: C): Array<Extract<C['rules'][number], { action: T; }>>; export declare function getConfig(): Config<any, Structure, any>; export declare function actionBuilder<Model extends Structure, Container extends Builder<Model, Container>>(model_name: string, api: string, dispatch: React.Dispatch<StoreAction<Model>>, override_url?: string): Functions<Model, Container>; export declare function CreateBuilder(builder: Builder<any, any>): Builder<Structure, any>; export declare function stateSorter<Container extends Builder<Structure, Container>>(type: string): Rule<string, Structure, Builder<Structure, Container>>; export type useStorageReturn<T extends Rule<string, Structure, any>[], Action extends T[number]['action']> = Map<string, Extract<T[number], { action: Action; }>['builder']>; export type returnType<T extends Rule<string, Structure, any>[], Action extends T[number]['action']> = MoreFunctions<Extract<T[number], { action: Action; }>['builder']['getObj'], Extract<T[number], { action: Action; }>['builder']>; export type useContainerType<T extends Rule<string, Structure, any>[], Action extends T[number]['action']> = Extract<T[number], { action: Action; }>['builder']; export type useStructureType<T extends Rule<string, Structure, any>[], Action extends T[number]['action']> = Extract<T[number], { action: Action; }>['builder']['getObj'];