fm-data-api-client
Version:
FileMaker Data API Client
103 lines (102 loc) • 3.96 kB
TypeScript
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;
}