@alphanova/builder
Version:
A fully fledged facade that facilitates object manipulation
71 lines (70 loc) • 3.19 kB
TypeScript
/// <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'];