@proofkit/fmdapi
Version:
FileMaker Data API client
134 lines (133 loc) • 13.8 kB
TypeScript
import { Adapter } from './adapters/core.js';
import { CreateResponse, DeleteResponse, FMRecord, FieldData, GenericPortalData, GetResponse, GetResponseOne, ListParams, Query, UpdateResponse } from './client-types.js';
import { StandardSchemaV1 } from '@standard-schema/spec';
export type ClientObjectProps = {
/**
* The layout to use by default for all requests. Can be overrridden on each request.
*/
layout: string;
schema?: {
/**
* The schema for the field data.
*/
fieldData: StandardSchemaV1<FieldData>;
/**
* The schema for the portal data.
*/
portalData?: Record<string, StandardSchemaV1<FieldData>>;
};
};
type FetchOptions = {
fetch?: RequestInit;
};
declare function DataApi<Fd extends FieldData = FieldData, Pd extends GenericPortalData = GenericPortalData, Opts extends ClientObjectProps = ClientObjectProps, Adp extends Adapter = Adapter>(options: Opts & {
adapter: Adp;
}): Omit<Adp, "create" | "delete" | "find" | "get" | "list" | "update" | "layoutMetadata" | "containerUpload"> & {
layout: Opts["layout"];
list: {
(): Promise<GetResponse<Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd, Opts["schema"] extends object ? Opts["schema"]["portalData"] extends object ? { [K in keyof Opts["schema"]["portalData"]]: StandardSchemaV1.InferOutput<Opts["schema"]["portalData"][K]>; } : Pd : Pd>>;
(args: ListParams<Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd, Opts["schema"] extends object ? Opts["schema"]["portalData"] extends object ? { [K in keyof Opts["schema"]["portalData"]]: StandardSchemaV1.InferOutput<Opts["schema"]["portalData"][K]>; } : Pd : Pd> & FetchOptions): Promise<GetResponse<Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd, Opts["schema"] extends object ? Opts["schema"]["portalData"] extends object ? { [K in keyof Opts["schema"]["portalData"]]: StandardSchemaV1.InferOutput<Opts["schema"]["portalData"][K]>; } : Pd : Pd>>;
};
listAll: {
<T extends FieldData = Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd, U extends Opts["schema"] extends object ? Opts["schema"]["portalData"] extends object ? { [K in keyof Opts["schema"]["portalData"]]: StandardSchemaV1.InferOutput<Opts["schema"]["portalData"][K]>; } : Pd : Pd = Opts["schema"] extends object ? Opts["schema"]["portalData"] extends object ? { [K in keyof Opts["schema"]["portalData"]]: StandardSchemaV1.InferOutput<Opts["schema"]["portalData"][K]>; } : Pd : Pd>(): Promise<FMRecord<T, U>[]>;
<T extends FieldData = Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd, U extends Opts["schema"] extends object ? Opts["schema"]["portalData"] extends object ? { [K in keyof Opts["schema"]["portalData"]]: StandardSchemaV1.InferOutput<Opts["schema"]["portalData"][K]>; } : Pd : Pd = Opts["schema"] extends object ? Opts["schema"]["portalData"] extends object ? { [K in keyof Opts["schema"]["portalData"]]: StandardSchemaV1.InferOutput<Opts["schema"]["portalData"][K]>; } : Pd : Pd>(args: ListParams<T, U> & FetchOptions): Promise<FMRecord<T, U>[]>;
};
create: <T extends Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd = Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd, U extends Opts["schema"] extends object ? Opts["schema"]["portalData"] extends object ? { [K in keyof Opts["schema"]["portalData"]]: StandardSchemaV1.InferOutput<Opts["schema"]["portalData"][K]>; } : Pd : Pd = Opts["schema"] extends object ? Opts["schema"]["portalData"] extends object ? { [K in keyof Opts["schema"]["portalData"]]: StandardSchemaV1.InferOutput<Opts["schema"]["portalData"][K]>; } : Pd : Pd>(args: (import('./client-types.js').ScriptParams & {
portalData?: import('./client-types.js').UpdatePortalsWithIds<U> | undefined;
} & {
fieldData: Partial<T>;
}) & FetchOptions) => Promise<CreateResponse>;
get: (args: (import('./client-types.js').ScriptParams & import('./client-types.js').PortalRangesParams<Opts["schema"] extends object ? Opts["schema"]["portalData"] extends object ? { [K in keyof Opts["schema"]["portalData"]]: StandardSchemaV1.InferOutput<Opts["schema"]["portalData"][K]>; } : Pd : Pd> & {
"layout.response"?: string;
dateformats?: "US" | "file_locale" | "ISO8601";
} & {
recordId: number | string;
}) & FetchOptions) => Promise<GetResponse<Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd, Opts["schema"] extends object ? Opts["schema"]["portalData"] extends object ? { [K in keyof Opts["schema"]["portalData"]]: StandardSchemaV1.InferOutput<Opts["schema"]["portalData"][K]>; } : Pd : Pd>>;
update: (args: (import('./client-types.js').ScriptParams & {
portalData?: import('./client-types.js').UpdatePortalsWithIds<Opts["schema"] extends object ? Opts["schema"]["portalData"] extends object ? { [K in keyof Opts["schema"]["portalData"]]: StandardSchemaV1.InferOutput<Opts["schema"]["portalData"][K]>; } : Pd : Pd> | undefined;
} & {
modId?: number;
} & {
fieldData: Partial<Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd>;
recordId: number | string;
}) & FetchOptions) => Promise<UpdateResponse>;
delete: (args: (import('./client-types.js').ScriptParams & {
recordId: number | string;
}) & FetchOptions) => Promise<DeleteResponse>;
find: (args: (import('./client-types.js').ScriptParams & import('./client-types.js').PortalRangesParams<Opts["schema"] extends object ? Opts["schema"]["portalData"] extends object ? { [K in keyof Opts["schema"]["portalData"]]: StandardSchemaV1.InferOutput<Opts["schema"]["portalData"][K]>; } : Pd : Pd> & {
"layout.response"?: string;
dateformats?: "US" | "file_locale" | "ISO8601";
} & import('./client-types.js').RangeParams & {
sort?: import('./client-types.js').Sort<Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd> | import('./client-types.js').Sort<Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd>[] | undefined;
} & {
query: Query<Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd> | Query<Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd>[];
timeout?: number;
}) & {
/**
* If true, a find that returns no results will retun an empty array instead of throwing an error.
* @default false
*/
ignoreEmptyResult?: boolean;
} & FetchOptions) => Promise<GetResponse<Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd, Opts["schema"] extends object ? Opts["schema"]["portalData"] extends object ? { [K in keyof Opts["schema"]["portalData"]]: StandardSchemaV1.InferOutput<Opts["schema"]["portalData"][K]>; } : Pd : Pd>>;
findOne: (args: (import('./client-types.js').ScriptParams & import('./client-types.js').PortalRangesParams<Opts["schema"] extends object ? Opts["schema"]["portalData"] extends object ? { [K in keyof Opts["schema"]["portalData"]]: StandardSchemaV1.InferOutput<Opts["schema"]["portalData"][K]>; } : Pd : Pd> & {
"layout.response"?: string;
dateformats?: "US" | "file_locale" | "ISO8601";
} & import('./client-types.js').RangeParams & {
sort?: import('./client-types.js').Sort<Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd> | import('./client-types.js').Sort<Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd>[] | undefined;
} & {
query: Query<Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd> | Query<Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd>[];
timeout?: number;
}) & FetchOptions) => Promise<GetResponseOne<Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd, Opts["schema"] extends object ? Opts["schema"]["portalData"] extends object ? { [K in keyof Opts["schema"]["portalData"]]: StandardSchemaV1.InferOutput<Opts["schema"]["portalData"][K]>; } : Pd : Pd>>;
findFirst: (args: (import('./client-types.js').ScriptParams & import('./client-types.js').PortalRangesParams<Opts["schema"] extends object ? Opts["schema"]["portalData"] extends object ? { [K in keyof Opts["schema"]["portalData"]]: StandardSchemaV1.InferOutput<Opts["schema"]["portalData"][K]>; } : Pd : Pd> & {
"layout.response"?: string;
dateformats?: "US" | "file_locale" | "ISO8601";
} & import('./client-types.js').RangeParams & {
sort?: import('./client-types.js').Sort<Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd> | import('./client-types.js').Sort<Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd>[] | undefined;
} & {
query: Query<Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd> | Query<Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd>[];
timeout?: number;
}) & {
/**
* If true, a find that returns no results will retun an empty array instead of throwing an error.
* @default false
*/
ignoreEmptyResult?: boolean;
} & FetchOptions) => Promise<GetResponseOne<Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd, Opts["schema"] extends object ? Opts["schema"]["portalData"] extends object ? { [K in keyof Opts["schema"]["portalData"]]: StandardSchemaV1.InferOutput<Opts["schema"]["portalData"][K]>; } : Pd : Pd>>;
maybeFindFirst: (args: (import('./client-types.js').ScriptParams & import('./client-types.js').PortalRangesParams<Opts["schema"] extends object ? Opts["schema"]["portalData"] extends object ? { [K in keyof Opts["schema"]["portalData"]]: StandardSchemaV1.InferOutput<Opts["schema"]["portalData"][K]>; } : Pd : Pd> & {
"layout.response"?: string;
dateformats?: "US" | "file_locale" | "ISO8601";
} & import('./client-types.js').RangeParams & {
sort?: import('./client-types.js').Sort<Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd> | import('./client-types.js').Sort<Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd>[] | undefined;
} & {
query: Query<Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd> | Query<Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd>[];
timeout?: number;
}) & {
/**
* If true, a find that returns no results will retun an empty array instead of throwing an error.
* @default false
*/
ignoreEmptyResult?: boolean;
} & FetchOptions) => Promise<GetResponseOne<Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd, Opts["schema"] extends object ? Opts["schema"]["portalData"] extends object ? { [K in keyof Opts["schema"]["portalData"]]: StandardSchemaV1.InferOutput<Opts["schema"]["portalData"][K]>; } : Pd : Pd> | null>;
findAll: (args: (import('./client-types.js').ScriptParams & import('./client-types.js').PortalRangesParams<Opts["schema"] extends object ? Opts["schema"]["portalData"] extends object ? { [K in keyof Opts["schema"]["portalData"]]: StandardSchemaV1.InferOutput<Opts["schema"]["portalData"][K]>; } : Pd : Pd> & {
"layout.response"?: string;
dateformats?: "US" | "file_locale" | "ISO8601";
} & import('./client-types.js').RangeParams & {
sort?: import('./client-types.js').Sort<Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd> | import('./client-types.js').Sort<Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd>[] | undefined;
} & {
query: Query<Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd> | Query<Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd>[];
timeout?: number;
}) & FetchOptions) => Promise<FMRecord<Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd, Opts["schema"] extends object ? Opts["schema"]["portalData"] extends object ? { [K in keyof Opts["schema"]["portalData"]]: StandardSchemaV1.InferOutput<Opts["schema"]["portalData"][K]>; } : Pd : Pd>[]>;
layoutMetadata: (args?: {
timeout?: number;
} & FetchOptions) => Promise<import('./client-types.js').LayoutMetadataResponse>;
containerUpload: <T extends Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd = Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd>(args: {
containerFieldName: keyof T;
containerFieldRepetition?: string | number;
file: Blob;
recordId: number | string;
modId?: number;
timeout?: number;
} & FetchOptions) => Promise<void>;
};
export default DataApi;
export { DataApi };