UNPKG

fm-data-api-client

Version:
103 lines (102 loc) 3.96 kB
import type Client from './Client'; export type Numerish = string | number; export type FieldValue = string | Numerish; export type FieldData = Record<string, FieldValue>; export type GenericPortalData = Record<string, FieldData>; export type RecordResponse<T extends FieldData = FieldData, U extends GenericPortalData = GenericPortalData> = { fieldData: T; recordId: string; modId: string; portalData: { [key in keyof U]: Array<U[key] & { recordId: string; modId: string; }>; }; }; export type ScriptParams = { 'script'?: string; 'script.param'?: string; 'script.prerequest'?: string; 'script.prerequest.param'?: string; 'script.presort'?: string; 'script.presort.param'?: string; }; export type ScriptResponse = { 'scriptResult'?: string; 'scriptError'?: string; 'scriptResult.prerequest'?: string; 'scriptError.prerequest'?: string; 'scriptResult.presort'?: string; 'scriptError.presort'?: string; }; export type CreateParams = ScriptParams; export type CreateResponse = ScriptResponse & { recordId: string; modId: string; }; export type UpdateParams = CreateParams & { modId?: number; }; export type UpdateResponse = ScriptResponse & { modId: string; }; export type DeleteParams = ScriptParams; export type DeleteResponse = ScriptResponse; export type RangeParams = { offset?: number; limit?: number; }; export type PortalRanges<U extends GenericPortalData = GenericPortalData> = Partial<{ [key in keyof U]: RangeParams; }>; export type PortalRangesParams<U extends GenericPortalData = GenericPortalData> = { 'portalRanges'?: PortalRanges<U>; }; export type GetParams<U extends GenericPortalData = GenericPortalData> = ScriptParams & PortalRangesParams<U> & { 'layout.response'?: string; }; export type Sort<T extends FieldData = FieldData> = { fieldName: keyof T; sortOrder: 'ascend' | 'descend'; }; export type ListParams<T extends FieldData = FieldData, U extends GenericPortalData = GenericPortalData> = GetParams<U> & RangeParams & { sort?: Sort<T> | Array<Sort<T>>; }; export type GetResponse<T extends FieldData = FieldData, U extends GenericPortalData = GenericPortalData> = ScriptResponse & { data: Array<RecordResponse<T, U>>; }; export type FindResponse<T extends FieldData = FieldData, U extends GenericPortalData = GenericPortalData> = GetResponse<T, U> & { dataInfo: { foundCount: number; returnedCount: number; totalRecordCount: number; }; }; export type Query<T extends FieldData = FieldData> = Partial<{ [key in keyof T]: T[key] | string; }> & { omit?: boolean; }; export type File = { name: string; buffer: Buffer; }; export type ExecuteScriptResponse = Pick<ScriptResponse, 'scriptResult' | 'scriptError'>; export default class Layout<T extends FieldData = FieldData, U extends GenericPortalData = GenericPortalData> { private readonly layout; private readonly client; constructor(layout: string, client: Client); create(fieldData: Partial<T>, params?: CreateParams): Promise<CreateResponse>; update(recordId: number, fieldData: Partial<T>, params?: UpdateParams): Promise<UpdateResponse>; delete(recordId: number, params?: DeleteParams): Promise<DeleteResponse>; upload(file: File | string, recordId: number, fieldName: string, fieldRepetition?: number): Promise<void>; get(recordId: number, params?: GetParams<U>): Promise<GetResponse<T, U>>; range(params?: ListParams<T, U>): Promise<GetResponse<T, U>>; find(query: Query<T> | Array<Query<T>>, params?: ListParams<T, U>, ignoreEmptyResult?: boolean): Promise<FindResponse<T, U>>; /** * The script parameter will be in the query parameter so do not send sensitive information in it. */ executeScript(scriptName: string, scriptParam?: string): Promise<ExecuteScriptResponse>; private addPortalRangesToRequest; }