@360works/fmpromise
Version:
A modern JS toolkit for FileMaker Web Viewers, including a dev server and type generation.
143 lines (142 loc) • 4.34 kB
TypeScript
/**
* Note: The interfaces in this file are intentionally written in a verbose, flat manner
* without using `extends` or complex intersections. This significantly improves the
* autocompletion and type-hinting performance in modern IDEs like IntelliJ and VS Code.
*/
interface DataAPIMessage {
code: string;
message: string;
}
export type DataAPIRecord<T> = T & {
recordId: string;
modId: string;
};
export interface DataAPIRecordArray<T> extends Array<DataAPIRecord<T>> {
readonly foundCount: number;
readonly totalRecordCount: number;
}
type SortObject = {
fieldName: string;
sortOrder: 'ascend' | 'descend';
};
/** The raw structure of a single portal record from the Data API. */
export type PortalRowData = Record<string, string | number> & {
recordId: string;
modId: string;
};
/** Metadata for a single portal from the `portalDataInfo` array. */
export interface PortalDataInfo {
portalObjectName?: string;
database: string;
table: string;
foundCount: number;
returnedCount: number;
}
/** The raw structure of a single record from the Data API `data` array. */
interface RawDataAPIRecord<T> {
fieldData: T;
portalData: Record<string, PortalRowData[]>;
recordId: string;
modId: string;
portalDataInfo?: PortalDataInfo[];
}
/** A find request performed using a query object. */
export interface DataAPIReadByQueryRequest {
action: 'read';
layouts: string;
query: any[];
limit?: number;
offset?: number;
sort?: SortObject[];
portal?: string[];
version?: 'v1' | 'v2' | 'vLatest';
}
/** A find request performed using a specific record ID. */
export interface DataAPIReadByRecordIdRequest {
action: 'read';
layouts: string;
recordId: number | string;
limit?: number;
offset?: number;
sort?: SortObject[];
portal?: string[];
version?: 'v1' | 'v2' | 'vLatest';
}
export type DataAPIReadRequest = DataAPIReadByQueryRequest | DataAPIReadByRecordIdRequest;
export interface DataAPIReadResponse<T> {
messages: DataAPIMessage[];
response: {
dataInfo?: {
database: string;
layout: string;
table: string;
totalRecordCount: number;
foundCount: number;
returnedCount: number;
};
data?: Array<RawDataAPIRecord<T>>;
};
toRecords: () => DataAPIRecordArray<T>;
}
export interface DataAPICreateRequest {
action: 'create';
layouts: string;
fieldData: Record<string, any>;
version?: 'v1' | 'v2' | 'vLatest';
}
export interface DataAPICreateResponse {
messages: DataAPIMessage[];
response: {
recordId: string;
modId: string;
};
}
export interface DataAPIUpdateRequest {
action: 'update';
layouts: string;
recordId: number | string;
modId?: number | string;
fieldData?: Record<string, any>;
portalData?: Record<string, Array<{
recordId: number | string;
[key: string]: any;
}>>;
version?: 'v1' | 'v2' | 'vLatest';
}
export interface DataAPIUpdateResponse {
messages: DataAPIMessage[];
response: {
modId: string;
};
}
export interface DataAPIDeleteRequest {
action: 'delete';
layouts: string;
recordId: number | string;
modId?: number | string;
version?: 'v1' | 'v2' | 'vLatest';
}
export interface DataAPIDeleteResponse {
messages: DataAPIMessage[];
response: {};
}
/** A metadata request for one or more layouts. */
export interface DataAPIMetaDataByLayoutRequest {
action: 'metaData';
layouts: string;
version?: 'v1' | 'v2' | 'vLatest';
}
/** A metadata request for a specific base table. */
export interface DataAPIMetaDataByTableRequest {
action: 'metaData';
tables: string;
version?: 'v1' | 'v2' | 'vLatest';
}
export type DataAPIMetaDataRequest = DataAPIMetaDataByLayoutRequest | DataAPIMetaDataByTableRequest;
export interface DataAPIMetaDataResponse {
messages: DataAPIMessage[];
response: Record<string, any>;
}
export type DataAPIRequest = DataAPIReadRequest | DataAPICreateRequest | DataAPIUpdateRequest | DataAPIDeleteRequest | DataAPIMetaDataRequest;
export type DataAPIResponse<T> = DataAPIReadResponse<T> | DataAPICreateResponse | DataAPIUpdateResponse | DataAPIDeleteResponse | DataAPIMetaDataResponse;
export {};