@proofkit/fmdapi 5.0.3-beta.0 → 5.0.3-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/esm/adapters/core.d.ts +4 -4
  2. package/dist/esm/adapters/fetch-base-types.d.ts +4 -4
  3. package/dist/esm/adapters/fetch-base.d.ts +2 -2
  4. package/dist/esm/adapters/fetch-base.js +36 -49
  5. package/dist/esm/adapters/fetch-base.js.map +1 -1
  6. package/dist/esm/adapters/fetch.d.ts +5 -5
  7. package/dist/esm/adapters/fetch.js +11 -10
  8. package/dist/esm/adapters/fetch.js.map +1 -1
  9. package/dist/esm/adapters/otto.d.ts +2 -2
  10. package/dist/esm/adapters/otto.js +3 -5
  11. package/dist/esm/adapters/otto.js.map +1 -1
  12. package/dist/esm/client-types.d.ts +41 -41
  13. package/dist/esm/client-types.js +1 -6
  14. package/dist/esm/client-types.js.map +1 -1
  15. package/dist/esm/client.d.ts +27 -43
  16. package/dist/esm/client.js +75 -80
  17. package/dist/esm/client.js.map +1 -1
  18. package/dist/esm/index.d.ts +4 -6
  19. package/dist/esm/index.js +5 -5
  20. package/dist/esm/tokenStore/index.d.ts +1 -1
  21. package/dist/esm/tokenStore/types.d.ts +2 -2
  22. package/dist/esm/tokenStore/upstash.d.ts +1 -1
  23. package/dist/esm/utils.d.ts +7 -7
  24. package/dist/esm/utils.js +6 -4
  25. package/dist/esm/utils.js.map +1 -1
  26. package/package.json +11 -13
  27. package/src/adapters/core.ts +6 -9
  28. package/src/adapters/fetch-base-types.ts +5 -3
  29. package/src/adapters/fetch-base.ts +53 -78
  30. package/src/adapters/fetch.ts +19 -24
  31. package/src/adapters/otto.ts +8 -8
  32. package/src/client-types.ts +59 -83
  33. package/src/client.ts +131 -167
  34. package/src/index.ts +4 -9
  35. package/src/tokenStore/file.ts +2 -4
  36. package/src/tokenStore/index.ts +1 -1
  37. package/src/tokenStore/types.ts +2 -2
  38. package/src/tokenStore/upstash.ts +2 -5
  39. package/src/utils.ts +16 -23
@@ -1 +1 @@
1
- {"version":3,"file":"client-types.js","sources":["../../src/client-types.ts"],"sourcesContent":["import { z } from \"zod/v4\";\n\nexport const ZFieldValue = z.union([\n z.string(),\n z.number(),\n z.null(),\n z.unknown(),\n]);\nexport type FieldValue = z.infer<typeof ZFieldValue>;\n\nexport const ZFieldData = z.record(z.string(), ZFieldValue);\nexport type FieldData = Record<string, unknown>;\n\nexport type GenericPortalData = {\n [key: string]: {\n [x: string]: string | number | null | unknown;\n };\n};\n\nexport type PortalsWithIds<U extends GenericPortalData = GenericPortalData> = {\n [key in keyof U]: Array<\n U[key] & {\n recordId: string;\n modId: string;\n }\n >;\n};\nexport type UpdatePortalsWithIds<\n U extends GenericPortalData = GenericPortalData,\n> = {\n [key in keyof U]: Array<\n U[key] & {\n recordId: string;\n modId?: string;\n }\n >;\n};\n\nexport type FMRecord<\n T extends FieldData = FieldData,\n U extends GenericPortalData = GenericPortalData,\n> = {\n fieldData: T;\n recordId: string;\n modId: string;\n portalData: PortalsWithIds<U>;\n};\n\nexport type ScriptParams = {\n script?: string;\n \"script.param\"?: string;\n \"script.prerequest\"?: string;\n \"script.prerequest.param\"?: string;\n \"script.presort\"?: string;\n \"script.presort.param\"?: string;\n timeout?: number;\n};\n\nconst ZScriptResponse = z.object({\n scriptResult: z.string().optional(),\n scriptError: z.string().optional(),\n \"scriptResult.prerequest\": z.string().optional(),\n \"scriptError.prerequest\": z.string().optional(),\n \"scriptResult.presort\": z.string().optional(),\n \"scriptError.presort\": z.string().optional(),\n});\nexport type ScriptResponse = z.infer<typeof ZScriptResponse>;\n\nexport const ZDataInfo = z.object({\n database: z.string(),\n layout: z.string(),\n table: z.string(),\n totalRecordCount: z.number(),\n foundCount: z.number(),\n returnedCount: z.number(),\n});\nexport type DataInfo = z.infer<typeof ZDataInfo>;\n\nexport type CreateParams<U extends GenericPortalData = GenericPortalData> =\n ScriptParams & { portalData?: UpdatePortalsWithIds<U> };\n\nexport type CreateResponse = ScriptResponse & {\n recordId: string;\n modId: string;\n};\n\nexport type UpdateParams<U extends GenericPortalData = GenericPortalData> =\n CreateParams<U> & {\n modId?: number;\n };\n\nexport type UpdateResponse = ScriptResponse & {\n modId: string;\n};\n\nexport type DeleteParams = ScriptParams;\n\nexport type DeleteResponse = ScriptResponse;\n\nexport type RangeParams = {\n offset?: number;\n limit?: number;\n};\nexport type RangeParamsRaw = {\n _offset?: number;\n _limit?: number;\n};\n\nexport type PortalRanges<U extends GenericPortalData = GenericPortalData> =\n Partial<{ [key in keyof U]: RangeParams }>;\n\nexport type PortalRangesParams<\n U extends GenericPortalData = GenericPortalData,\n> = {\n portalRanges?: PortalRanges<U>;\n};\n\nexport type GetParams<U extends GenericPortalData = GenericPortalData> =\n ScriptParams &\n PortalRangesParams<U> & {\n \"layout.response\"?: string;\n dateformats?: \"US\" | \"file_locale\" | \"ISO8601\";\n };\n\nexport type Sort<T extends FieldData = FieldData> = {\n fieldName: keyof T;\n sortOrder?: \"ascend\" | \"descend\" | (string & {});\n};\n\nexport type ListParams<\n T extends FieldData = FieldData,\n U extends GenericPortalData = GenericPortalData,\n> = GetParams<U> &\n RangeParams & {\n sort?: Sort<T> | Array<Sort<T>>;\n };\n\nexport type ListParamsRaw<\n T extends FieldData = FieldData,\n U extends GenericPortalData = GenericPortalData,\n> = GetParams<U> &\n RangeParamsRaw & {\n _sort?: Array<Sort<T>>;\n };\n\nexport type GetResponse<\n T extends FieldData = FieldData,\n U extends GenericPortalData = GenericPortalData,\n> = ScriptResponse & {\n data: Array<FMRecord<T, U>>;\n dataInfo: DataInfo;\n};\nexport type GetResponseOne<\n T extends FieldData = FieldData,\n U extends GenericPortalData = GenericPortalData,\n> = ScriptResponse & {\n data: FMRecord<T, U>;\n dataInfo: DataInfo;\n};\n\ntype SecondLevelKeys<T> = {\n [K in keyof T]: keyof T[K];\n}[keyof T];\nexport type Query<\n T extends FieldData = FieldData,\n U extends GenericPortalData = GenericPortalData,\n> = Partial<{\n [key in keyof T]: T[key] extends number ? number | string : string;\n}> &\n Partial<{ [key in SecondLevelKeys<U>]?: string }> & {\n omit?: \"true\";\n };\n\nexport type LayoutMetadataResponse = {\n fieldMetaData: FieldMetaData[];\n portalMetaData: { [key: string]: FieldMetaData[] };\n valueLists?: ValueList[];\n};\nexport type ProductInfoMetadataResponse = {\n name: string;\n dateFormat: string;\n timeFormat: string;\n timeStampFormat: string;\n};\nexport type DatabaseMetadataResponse = {\n databases: Array<{\n name: string;\n }>;\n};\n\nexport type FieldMetaData = {\n name: string;\n type: \"normal\" | \"calculation\" | \"summary\";\n displayType:\n | \"editText\"\n | \"popupList\"\n | \"popupMenu\"\n | \"checkBox\"\n | \"calendar\"\n | \"radioButtons\"\n | \"secureText\";\n result: \"text\" | \"number\" | \"date\" | \"time\" | \"timeStamp\" | \"container\";\n global: boolean;\n autoEnter: boolean;\n fourDigitYear: boolean;\n maxRepeat: number;\n maxCharacters: number;\n notEmpty: boolean;\n numeric: boolean;\n repetitions: number;\n timeOfDay: boolean;\n valueList?: string;\n};\n\ntype ValueList = {\n name: string;\n // TODO need to test type of value list from other file\n type: \"customList\" | \"byField\";\n values: Array<{ value: string; displayValue: string }>;\n};\n\n/**\n * Represents the data returned by a call to the Data API `layouts` endpoint.\n */\nexport type AllLayoutsMetadataResponse = {\n /**\n * A list of `Layout` or `LayoutsFolder` objects.\n */\n layouts: LayoutOrFolder[];\n};\n\n/**\n * Represents a FileMaker layout.\n */\nexport type Layout = {\n /**\n * The name of the layout\n */\n name: string;\n /**\n * If the node is a layout, `table` may contain the name of the table\n * the layout is associated with.\n */\n table: string;\n};\n\n/**\n * Represents a folder of `Layout` or `LayoutsFolder` objects.\n */\nexport type LayoutsFolder = {\n /**\n * The name of the folder\n */\n name: string;\n isFolder: boolean;\n /**\n * A list of the Layout or LayoutsFolder objects in the folder.\n */\n folderLayoutNames?: LayoutOrFolder[];\n};\n\nexport type LayoutOrFolder = Layout | LayoutsFolder;\n\n/**\n * Represents the data returned by a call to the Data API `scripts` endpoint.\n */\nexport type ScriptsMetadataResponse = {\n /**\n * A list of `Layout` or `LayoutsFolder` objects.\n */\n scripts: ScriptOrFolder[];\n};\ntype Script = {\n name: string;\n isFolder: false;\n};\ntype ScriptFolder = {\n name: string;\n isFolder: true;\n folderScriptNames: ScriptOrFolder[];\n};\nexport type ScriptOrFolder = Script | ScriptFolder;\n\nexport type RawFMResponse<T = unknown> = {\n response?: T;\n messages?: [{ code: string }];\n};\n\nexport class FileMakerError extends Error {\n public readonly code: string;\n\n public constructor(code: string, message: string) {\n super(message);\n this.code = code;\n }\n}\n"],"names":[],"mappings":";;;;AAEa,MAAA,cAAc,EAAE,MAAM;AAAA,EACjC,EAAE,OAAO;AAAA,EACT,EAAE,OAAO;AAAA,EACT,EAAE,KAAK;AAAA,EACP,EAAE,QAAQ;AACZ,CAAC;AAGM,MAAM,aAAa,EAAE,OAAO,EAAE,UAAU,WAAW;AAgDlC,EAAE,OAAO;AAAA,EAC/B,cAAc,EAAE,OAAO,EAAE,SAAS;AAAA,EAClC,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA,EACjC,2BAA2B,EAAE,OAAO,EAAE,SAAS;AAAA,EAC/C,0BAA0B,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9C,wBAAwB,EAAE,OAAO,EAAE,SAAS;AAAA,EAC5C,uBAAuB,EAAE,OAAO,EAAE,SAAS;AAC7C,CAAC;AAGY,MAAA,YAAY,EAAE,OAAO;AAAA,EAChC,UAAU,EAAE,OAAO;AAAA,EACnB,QAAQ,EAAE,OAAO;AAAA,EACjB,OAAO,EAAE,OAAO;AAAA,EAChB,kBAAkB,EAAE,OAAO;AAAA,EAC3B,YAAY,EAAE,OAAO;AAAA,EACrB,eAAe,EAAE,OAAO;AAC1B,CAAC;AAqNM,MAAM,uBAAuB,MAAM;AAAA,EAGjC,YAAY,MAAc,SAAiB;AAChD,UAAM,OAAO;AAHC;AAId,SAAK,OAAO;AAAA,EAAA;AAEhB;"}
1
+ {"version":3,"file":"client-types.js","sources":["../../src/client-types.ts"],"sourcesContent":["import { z } from \"zod/v4\";\n\nexport const ZFieldValue = z.union([z.string(), z.number(), z.null(), z.unknown()]);\nexport type FieldValue = z.infer<typeof ZFieldValue>;\n\nexport const ZFieldData = z.record(z.string(), ZFieldValue);\nexport type FieldData = Record<string, unknown>;\n\nexport interface GenericPortalData {\n [key: string]: {\n [x: string]: string | number | null | unknown;\n };\n}\n\nexport type PortalsWithIds<U extends GenericPortalData = GenericPortalData> = {\n [key in keyof U]: Array<\n U[key] & {\n recordId: string;\n modId: string;\n }\n >;\n};\nexport type UpdatePortalsWithIds<U extends GenericPortalData = GenericPortalData> = {\n [key in keyof U]: Array<\n U[key] & {\n recordId: string;\n modId?: string;\n }\n >;\n};\n\nexport interface FMRecord<T extends FieldData = FieldData, U extends GenericPortalData = GenericPortalData> {\n fieldData: T;\n recordId: string;\n modId: string;\n portalData: PortalsWithIds<U>;\n}\n\nexport interface ScriptParams {\n script?: string;\n \"script.param\"?: string;\n \"script.prerequest\"?: string;\n \"script.prerequest.param\"?: string;\n \"script.presort\"?: string;\n \"script.presort.param\"?: string;\n timeout?: number;\n}\n\nconst ZScriptResponse = z.object({\n scriptResult: z.string().optional(),\n scriptError: z.string().optional(),\n \"scriptResult.prerequest\": z.string().optional(),\n \"scriptError.prerequest\": z.string().optional(),\n \"scriptResult.presort\": z.string().optional(),\n \"scriptError.presort\": z.string().optional(),\n});\nexport type ScriptResponse = z.infer<typeof ZScriptResponse>;\n\nexport const ZDataInfo = z.object({\n database: z.string(),\n layout: z.string(),\n table: z.string(),\n totalRecordCount: z.number(),\n foundCount: z.number(),\n returnedCount: z.number(),\n});\nexport type DataInfo = z.infer<typeof ZDataInfo>;\n\nexport type CreateParams<U extends GenericPortalData = GenericPortalData> = ScriptParams & {\n portalData?: UpdatePortalsWithIds<U>;\n};\n\nexport type CreateResponse = ScriptResponse & {\n recordId: string;\n modId: string;\n};\n\nexport type UpdateParams<U extends GenericPortalData = GenericPortalData> = CreateParams<U> & {\n modId?: number;\n};\n\nexport type UpdateResponse = ScriptResponse & {\n modId: string;\n};\n\nexport type DeleteParams = ScriptParams;\n\nexport type DeleteResponse = ScriptResponse;\n\nexport interface RangeParams {\n offset?: number;\n limit?: number;\n}\nexport interface RangeParamsRaw {\n _offset?: number;\n _limit?: number;\n}\n\nexport type PortalRanges<U extends GenericPortalData = GenericPortalData> = Partial<{ [key in keyof U]: RangeParams }>;\n\nexport interface PortalRangesParams<U extends GenericPortalData = GenericPortalData> {\n portalRanges?: PortalRanges<U>;\n}\n\nexport type GetParams<U extends GenericPortalData = GenericPortalData> = ScriptParams &\n PortalRangesParams<U> & {\n \"layout.response\"?: string;\n dateformats?: \"US\" | \"file_locale\" | \"ISO8601\";\n };\n\nexport interface Sort<T extends FieldData = FieldData> {\n fieldName: keyof T;\n sortOrder?: \"ascend\" | \"descend\" | (string & {});\n}\n\nexport type ListParams<\n T extends FieldData = FieldData,\n U extends GenericPortalData = GenericPortalData,\n> = GetParams<U> &\n RangeParams & {\n sort?: Sort<T> | Sort<T>[];\n };\n\nexport type ListParamsRaw<\n T extends FieldData = FieldData,\n U extends GenericPortalData = GenericPortalData,\n> = GetParams<U> &\n RangeParamsRaw & {\n _sort?: Sort<T>[];\n };\n\nexport type GetResponse<\n T extends FieldData = FieldData,\n U extends GenericPortalData = GenericPortalData,\n> = ScriptResponse & {\n data: FMRecord<T, U>[];\n dataInfo: DataInfo;\n};\nexport type GetResponseOne<\n T extends FieldData = FieldData,\n U extends GenericPortalData = GenericPortalData,\n> = ScriptResponse & {\n data: FMRecord<T, U>;\n dataInfo: DataInfo;\n};\n\ntype SecondLevelKeys<T> = {\n [K in keyof T]: keyof T[K];\n}[keyof T];\nexport type Query<T extends FieldData = FieldData, U extends GenericPortalData = GenericPortalData> = Partial<{\n [key in keyof T]: T[key] extends number ? number | string : string;\n}> &\n Partial<{ [key in SecondLevelKeys<U>]?: string }> & {\n omit?: \"true\";\n };\n\nexport interface LayoutMetadataResponse {\n fieldMetaData: FieldMetaData[];\n portalMetaData: { [key: string]: FieldMetaData[] };\n valueLists?: ValueList[];\n}\nexport interface ProductInfoMetadataResponse {\n name: string;\n dateFormat: string;\n timeFormat: string;\n timeStampFormat: string;\n}\nexport interface DatabaseMetadataResponse {\n databases: Array<{\n name: string;\n }>;\n}\n\nexport interface FieldMetaData {\n name: string;\n type: \"normal\" | \"calculation\" | \"summary\";\n displayType: \"editText\" | \"popupList\" | \"popupMenu\" | \"checkBox\" | \"calendar\" | \"radioButtons\" | \"secureText\";\n result: \"text\" | \"number\" | \"date\" | \"time\" | \"timeStamp\" | \"container\";\n global: boolean;\n autoEnter: boolean;\n fourDigitYear: boolean;\n maxRepeat: number;\n maxCharacters: number;\n notEmpty: boolean;\n numeric: boolean;\n repetitions: number;\n timeOfDay: boolean;\n valueList?: string;\n}\n\ninterface ValueList {\n name: string;\n // TODO need to test type of value list from other file\n type: \"customList\" | \"byField\";\n values: Array<{ value: string; displayValue: string }>;\n}\n\n/**\n * Represents the data returned by a call to the Data API `layouts` endpoint.\n */\nexport interface AllLayoutsMetadataResponse {\n /**\n * A list of `Layout` or `LayoutsFolder` objects.\n */\n layouts: LayoutOrFolder[];\n}\n\n/**\n * Represents a FileMaker layout.\n */\nexport interface Layout {\n /**\n * The name of the layout\n */\n name: string;\n /**\n * If the node is a layout, `table` may contain the name of the table\n * the layout is associated with.\n */\n table: string;\n}\n\n/**\n * Represents a folder of `Layout` or `LayoutsFolder` objects.\n */\nexport interface LayoutsFolder {\n /**\n * The name of the folder\n */\n name: string;\n isFolder: boolean;\n /**\n * A list of the Layout or LayoutsFolder objects in the folder.\n */\n folderLayoutNames?: LayoutOrFolder[];\n}\n\nexport type LayoutOrFolder = Layout | LayoutsFolder;\n\n/**\n * Represents the data returned by a call to the Data API `scripts` endpoint.\n */\nexport interface ScriptsMetadataResponse {\n /**\n * A list of `Layout` or `LayoutsFolder` objects.\n */\n scripts: ScriptOrFolder[];\n}\ninterface Script {\n name: string;\n isFolder: false;\n}\ninterface ScriptFolder {\n name: string;\n isFolder: true;\n folderScriptNames: ScriptOrFolder[];\n}\nexport type ScriptOrFolder = Script | ScriptFolder;\n\nexport interface RawFMResponse<T = unknown> {\n response?: T;\n messages?: [{ code: string }];\n}\n\nexport class FileMakerError extends Error {\n readonly code: string;\n\n constructor(code: string, message: string) {\n super(message);\n this.code = code;\n }\n}\n"],"names":[],"mappings":";;;;AAEO,MAAM,cAAc,EAAE,MAAM,CAAC,EAAE,UAAU,EAAE,OAAO,GAAG,EAAE,KAAK,GAAG,EAAE,QAAA,CAAS,CAAC;AAG3E,MAAM,aAAa,EAAE,OAAO,EAAE,UAAU,WAAW;AA2ClC,EAAE,OAAO;AAAA,EAC/B,cAAc,EAAE,OAAO,EAAE,SAAS;AAAA,EAClC,aAAa,EAAE,OAAO,EAAE,SAAS;AAAA,EACjC,2BAA2B,EAAE,OAAO,EAAE,SAAS;AAAA,EAC/C,0BAA0B,EAAE,OAAO,EAAE,SAAS;AAAA,EAC9C,wBAAwB,EAAE,OAAO,EAAE,SAAS;AAAA,EAC5C,uBAAuB,EAAE,OAAO,EAAE,SAAS;AAC7C,CAAC;AAGY,MAAA,YAAY,EAAE,OAAO;AAAA,EAChC,UAAU,EAAE,OAAO;AAAA,EACnB,QAAQ,EAAE,OAAO;AAAA,EACjB,OAAO,EAAE,OAAO;AAAA,EAChB,kBAAkB,EAAE,OAAO;AAAA,EAC3B,YAAY,EAAE,OAAO;AAAA,EACrB,eAAe,EAAE,OAAO;AAC1B,CAAC;AAuMM,MAAM,uBAAuB,MAAM;AAAA,EAGxC,YAAY,MAAc,SAAiB;AACzC,UAAM,OAAO;AAHN;AAIP,SAAK,OAAO;AAAA,EAAA;AAEhB;"}
@@ -1,7 +1,7 @@
1
- import { Adapter, ExecuteScriptOptions } from './adapters/core.js';
2
- import { CreateResponse, DeleteResponse, FMRecord, FieldData, GenericPortalData, GetResponse, GetResponseOne, ListParams, Query, UpdateResponse } from './client-types.js';
3
1
  import { StandardSchemaV1 } from '@standard-schema/spec';
4
- export type ClientObjectProps = {
2
+ import { Adapter, ExecuteScriptOptions } from './adapters/core.js';
3
+ import { CreateResponse, DeleteResponse, FieldData, FMRecord, GenericPortalData, GetResponse, GetResponseOne, ListParams, Query, UpdateResponse } from './client-types.js';
4
+ export interface ClientObjectProps {
5
5
  /**
6
6
  * The layout to use by default for all requests. Can be overrridden on each request.
7
7
  */
@@ -16,22 +16,31 @@ export type ClientObjectProps = {
16
16
  */
17
17
  portalData?: Record<string, StandardSchemaV1<FieldData>>;
18
18
  };
19
- };
20
- type FetchOptions = {
19
+ }
20
+ interface FetchOptions {
21
21
  fetch?: RequestInit;
22
- };
22
+ }
23
+ export interface IgnoreEmptyResult {
24
+ /**
25
+ * If true, a find that returns no results will retun an empty array instead of throwing an error.
26
+ * @default false
27
+ */
28
+ ignoreEmptyResult?: boolean;
29
+ }
30
+ export interface ContainerUploadArgs<T extends FieldData = FieldData> {
31
+ containerFieldName: keyof T;
32
+ containerFieldRepetition?: string | number;
33
+ file: Blob;
34
+ recordId: number | string;
35
+ modId?: number;
36
+ timeout?: number;
37
+ }
23
38
  declare function DataApi<Fd extends FieldData = FieldData, Pd extends GenericPortalData = GenericPortalData, Opts extends ClientObjectProps = ClientObjectProps, Adp extends Adapter = Adapter>(options: Opts & {
24
39
  adapter: Adp;
25
40
  }): Omit<Adp, "create" | "delete" | "find" | "get" | "list" | "update" | "layoutMetadata" | "containerUpload" | "executeScript"> & {
26
41
  layout: Opts["layout"];
27
- list: {
28
- (): 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>>;
29
- (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>>;
30
- };
31
- listAll: {
32
- <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>[]>;
33
- <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>[]>;
34
- };
42
+ list: (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>>;
43
+ listAll: (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<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>[]>;
35
44
  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 & {
36
45
  portalData?: import('./client-types.js').UpdatePortalsWithIds<U> | undefined;
37
46
  } & {
@@ -62,13 +71,7 @@ declare function DataApi<Fd extends FieldData = FieldData, Pd extends GenericPor
62
71
  } & {
63
72
  query: Query<Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd> | Query<Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd>[];
64
73
  timeout?: number;
65
- }) & {
66
- /**
67
- * If true, a find that returns no results will retun an empty array instead of throwing an error.
68
- * @default false
69
- */
70
- ignoreEmptyResult?: boolean;
71
- } & 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>>;
74
+ }) & IgnoreEmptyResult & 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>>;
72
75
  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> & {
73
76
  "layout.response"?: string;
74
77
  dateformats?: "US" | "file_locale" | "ISO8601";
@@ -86,13 +89,7 @@ declare function DataApi<Fd extends FieldData = FieldData, Pd extends GenericPor
86
89
  } & {
87
90
  query: Query<Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd> | Query<Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd>[];
88
91
  timeout?: number;
89
- }) & {
90
- /**
91
- * If true, a find that returns no results will retun an empty array instead of throwing an error.
92
- * @default false
93
- */
94
- ignoreEmptyResult?: boolean;
95
- } & 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>>;
92
+ }) & IgnoreEmptyResult & 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>>;
96
93
  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> & {
97
94
  "layout.response"?: string;
98
95
  dateformats?: "US" | "file_locale" | "ISO8601";
@@ -101,13 +98,7 @@ declare function DataApi<Fd extends FieldData = FieldData, Pd extends GenericPor
101
98
  } & {
102
99
  query: Query<Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd> | Query<Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd>[];
103
100
  timeout?: number;
104
- }) & {
105
- /**
106
- * If true, a find that returns no results will retun an empty array instead of throwing an error.
107
- * @default false
108
- */
109
- ignoreEmptyResult?: boolean;
110
- } & 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>;
101
+ }) & IgnoreEmptyResult & 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>;
111
102
  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> & {
112
103
  "layout.response"?: string;
113
104
  dateformats?: "US" | "file_locale" | "ISO8601";
@@ -120,14 +111,7 @@ declare function DataApi<Fd extends FieldData = FieldData, Pd extends GenericPor
120
111
  layoutMetadata: (args?: {
121
112
  timeout?: number;
122
113
  } & FetchOptions) => Promise<import('./client-types.js').LayoutMetadataResponse>;
123
- containerUpload: <T extends Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd = Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd>(args: {
124
- containerFieldName: keyof T;
125
- containerFieldRepetition?: string | number;
126
- file: Blob;
127
- recordId: number | string;
128
- modId?: number;
129
- timeout?: number;
130
- } & FetchOptions) => Promise<void>;
114
+ containerUpload: (args: ContainerUploadArgs<Opts["schema"] extends object ? StandardSchemaV1.InferOutput<Opts["schema"]["fieldData"]> : Fd> & FetchOptions) => Promise<void>;
131
115
  executeScript: (args: Omit<ExecuteScriptOptions, "layout"> & FetchOptions) => Promise<{
132
116
  scriptResult?: string | undefined;
133
117
  scriptError?: string | undefined;
@@ -1,12 +1,10 @@
1
1
  import { FileMakerError } from "./client-types.js";
2
2
  function asNumber(input) {
3
- return typeof input === "string" ? parseInt(input) : input;
3
+ return typeof input === "string" ? Number.parseInt(input, 10) : input;
4
4
  }
5
5
  function DataApi(options) {
6
6
  if ("zodValidators" in options) {
7
- throw new Error(
8
- "zodValidators is no longer supported. Use schema instead, or re-run the typegen command"
9
- );
7
+ throw new Error("zodValidators is no longer supported. Use schema instead, or re-run the typegen command");
10
8
  }
11
9
  const schema = options.schema;
12
10
  const layout = options.layout;
@@ -24,33 +22,33 @@ function DataApi(options) {
24
22
  } = options.adapter;
25
23
  async function _list(args) {
26
24
  const { fetch, timeout, ...params } = args ?? {};
27
- if ("limit" in params && params.limit !== void 0)
28
- delete Object.assign(params, { _limit: params.limit })["limit"];
25
+ if ("limit" in params && params.limit !== void 0) {
26
+ Object.assign(params, { _limit: params.limit }).limit = void 0;
27
+ }
29
28
  if ("offset" in params && params.offset !== void 0) {
30
- if (params.offset <= 1) delete params.offset;
31
- else delete Object.assign(params, { _offset: params.offset })["offset"];
29
+ if (params.offset <= 1) {
30
+ params.offset = void 0;
31
+ } else {
32
+ Object.assign(params, { _offset: params.offset }).offset = void 0;
33
+ }
32
34
  }
33
- if ("sort" in params && params.sort !== void 0)
34
- delete Object.assign(params, {
35
+ if ("sort" in params && params.sort !== void 0) {
36
+ Object.assign(params, {
35
37
  _sort: Array.isArray(params.sort) ? params.sort : [params.sort]
36
- })["sort"];
38
+ }).sort = void 0;
39
+ }
37
40
  const result = await list({
38
41
  layout,
39
42
  data: params,
40
43
  fetch,
41
44
  timeout
42
45
  });
43
- if (result.dataInfo.foundCount > result.dataInfo.returnedCount) {
44
- if ((args == null ? void 0 : args.limit) === void 0 && (args == null ? void 0 : args.offset) === void 0) {
45
- console.warn(
46
- `🚨 @proofkit/fmdapi: Loaded only ${result.dataInfo.returnedCount} of the ${result.dataInfo.foundCount} records from your "${layout}" layout. Use the "listAll" method to automatically paginate through all records, or specify a "limit" and "offset" to handle pagination yourself.`
47
- );
48
- }
46
+ if (result.dataInfo.foundCount > result.dataInfo.returnedCount && (args == null ? void 0 : args.limit) === void 0 && (args == null ? void 0 : args.offset) === void 0) {
47
+ console.warn(
48
+ `🚨 @proofkit/fmdapi: Loaded only ${result.dataInfo.returnedCount} of the ${result.dataInfo.foundCount} records from your "${layout}" layout. Use the "listAll" method to automatically paginate through all records, or specify a "limit" and "offset" to handle pagination yourself.`
49
+ );
49
50
  }
50
- return await runSchemaValidationAndTransform(
51
- schema,
52
- result
53
- );
51
+ return await runSchemaValidationAndTransform(schema, result);
54
52
  }
55
53
  async function listAll(args) {
56
54
  let runningData = [];
@@ -60,11 +58,12 @@ function DataApi(options) {
60
58
  const data = await _list({
61
59
  ...args,
62
60
  offset
63
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
64
61
  });
65
62
  runningData = [...runningData, ...data.data];
66
- if (runningData.length >= data.dataInfo.foundCount) break;
67
- offset = offset + limit;
63
+ if (runningData.length >= data.dataInfo.foundCount) {
64
+ break;
65
+ }
66
+ offset += limit;
68
67
  }
69
68
  return runningData;
70
69
  }
@@ -86,10 +85,7 @@ function DataApi(options) {
86
85
  fetch,
87
86
  timeout
88
87
  });
89
- return await runSchemaValidationAndTransform(
90
- schema,
91
- result
92
- );
88
+ return await runSchemaValidationAndTransform(schema, result);
93
89
  }
94
90
  async function _update(args) {
95
91
  args.recordId = asNumber(args.recordId);
@@ -101,7 +97,7 @@ function DataApi(options) {
101
97
  timeout
102
98
  });
103
99
  }
104
- async function deleteRecord(args) {
100
+ function deleteRecord(args) {
105
101
  args.recordId = asNumber(args.recordId);
106
102
  const { recordId, fetch, timeout, ...params } = args;
107
103
  return _adapterDelete({
@@ -112,19 +108,23 @@ function DataApi(options) {
112
108
  });
113
109
  }
114
110
  async function _find(args) {
115
- const {
116
- query: queryInput,
117
- ignoreEmptyResult = false,
118
- timeout,
119
- fetch,
120
- ...params
121
- } = args;
122
- const query = !Array.isArray(queryInput) ? [queryInput] : queryInput;
123
- if ("offset" in params && params.offset !== void 0) {
124
- if (params.offset <= 1) delete params.offset;
111
+ const { query: queryInput, ignoreEmptyResult = false, timeout, fetch, ...params } = args;
112
+ const query = Array.isArray(queryInput) ? queryInput : [queryInput];
113
+ if ("offset" in params && params.offset !== void 0 && params.offset <= 1) {
114
+ params.offset = void 0;
125
115
  }
126
116
  if ("dateformats" in params && params.dateformats !== void 0) {
127
- params.dateformats = (params.dateformats === "US" ? 0 : params.dateformats === "file_locale" ? 1 : params.dateformats === "ISO8601" ? 2 : 0).toString();
117
+ let dateFormatValue;
118
+ if (params.dateformats === "US") {
119
+ dateFormatValue = 0;
120
+ } else if (params.dateformats === "file_locale") {
121
+ dateFormatValue = 1;
122
+ } else if (params.dateformats === "ISO8601") {
123
+ dateFormatValue = 2;
124
+ } else {
125
+ dateFormatValue = 0;
126
+ }
127
+ params.dateformats = dateFormatValue.toString();
128
128
  }
129
129
  const result = await find({
130
130
  data: { ...params, query },
@@ -132,48 +132,43 @@ function DataApi(options) {
132
132
  fetch,
133
133
  timeout
134
134
  }).catch((e) => {
135
- if (ignoreEmptyResult && e instanceof FileMakerError && e.code === "401")
135
+ if (ignoreEmptyResult && e instanceof FileMakerError && e.code === "401") {
136
136
  return { data: [], dataInfo: { foundCount: 0, returnedCount: 0 } };
137
+ }
137
138
  throw e;
138
139
  });
139
- if (result.dataInfo.foundCount > result.dataInfo.returnedCount) {
140
- if ((args == null ? void 0 : args.limit) === void 0 && (args == null ? void 0 : args.offset) === void 0) {
141
- console.warn(
142
- `🚨 @proofkit/fmdapi: Loaded only ${result.dataInfo.returnedCount} of the ${result.dataInfo.foundCount} records from your "${layout}" layout. Use the "findAll" method to automatically paginate through all records, or specify a "limit" and "offset" to handle pagination yourself.`
143
- );
144
- }
140
+ if (result.dataInfo.foundCount > result.dataInfo.returnedCount && (args == null ? void 0 : args.limit) === void 0 && (args == null ? void 0 : args.offset) === void 0) {
141
+ console.warn(
142
+ `🚨 @proofkit/fmdapi: Loaded only ${result.dataInfo.returnedCount} of the ${result.dataInfo.foundCount} records from your "${layout}" layout. Use the "findAll" method to automatically paginate through all records, or specify a "limit" and "offset" to handle pagination yourself.`
143
+ );
145
144
  }
146
145
  return await runSchemaValidationAndTransform(schema, result);
147
146
  }
148
147
  async function findOne(args) {
149
148
  const result = await _find(args);
150
- if (result.data.length !== 1)
151
- throw new Error(
152
- `${result.data.length} records found; expecting exactly 1`
153
- );
154
- const transformedResult = await runSchemaValidationAndTransform(
155
- schema,
156
- result
157
- );
158
- if (!transformedResult.data[0]) throw new Error("No data found");
149
+ if (result.data.length !== 1) {
150
+ throw new Error(`${result.data.length} records found; expecting exactly 1`);
151
+ }
152
+ const transformedResult = await runSchemaValidationAndTransform(schema, result);
153
+ if (!transformedResult.data[0]) {
154
+ throw new Error("No data found");
155
+ }
159
156
  return { ...transformedResult, data: transformedResult.data[0] };
160
157
  }
161
158
  async function findFirst(args) {
162
159
  const result = await _find(args);
163
- const transformedResult = await runSchemaValidationAndTransform(
164
- schema,
165
- result
166
- );
167
- if (!transformedResult.data[0]) throw new Error("No data found");
160
+ const transformedResult = await runSchemaValidationAndTransform(schema, result);
161
+ if (!transformedResult.data[0]) {
162
+ throw new Error("No data found");
163
+ }
168
164
  return { ...transformedResult, data: transformedResult.data[0] };
169
165
  }
170
166
  async function maybeFindFirst(args) {
171
167
  const result = await _find({ ...args, ignoreEmptyResult: true });
172
- const transformedResult = await runSchemaValidationAndTransform(
173
- schema,
174
- result
175
- );
176
- if (!transformedResult.data[0]) return null;
168
+ const transformedResult = await runSchemaValidationAndTransform(schema, result);
169
+ if (!transformedResult.data[0]) {
170
+ return null;
171
+ }
177
172
  return { ...transformedResult, data: transformedResult.data[0] };
178
173
  }
179
174
  async function findAll(args) {
@@ -187,9 +182,10 @@ function DataApi(options) {
187
182
  ignoreEmptyResult: true
188
183
  });
189
184
  runningData = [...runningData, ...data.data];
190
- if (runningData.length === 0 || runningData.length >= data.dataInfo.foundCount)
185
+ if (runningData.length === 0 || runningData.length >= data.dataInfo.foundCount) {
191
186
  break;
192
- offset = offset + limit;
187
+ }
188
+ offset += limit;
193
189
  }
194
190
  return runningData;
195
191
  }
@@ -221,29 +217,28 @@ function DataApi(options) {
221
217
  var _a;
222
218
  const fieldDataIssues = [];
223
219
  const portalDataIssues = [];
224
- if (!schema2) return result;
220
+ if (!schema2) {
221
+ return result;
222
+ }
225
223
  const transformedData = [];
226
224
  for (const record of result.data) {
227
- let fieldResult = schema2.fieldData["~standard"].validate(
228
- record.fieldData
229
- );
230
- if (fieldResult instanceof Promise) fieldResult = await fieldResult;
225
+ let fieldResult = schema2.fieldData["~standard"].validate(record.fieldData);
226
+ if (fieldResult instanceof Promise) {
227
+ fieldResult = await fieldResult;
228
+ }
231
229
  if ("value" in fieldResult) {
232
230
  record.fieldData = fieldResult.value;
233
231
  } else {
234
232
  fieldDataIssues.push(...fieldResult.issues);
235
233
  }
236
234
  if (schema2.portalData) {
237
- for (const [portalName, portalRecords] of Object.entries(
238
- record.portalData
239
- )) {
235
+ for (const [portalName, portalRecords] of Object.entries(record.portalData)) {
240
236
  const validatedPortalRecords = [];
241
237
  for (const portalRecord of portalRecords) {
242
- let portalResult = (_a = schema2.portalData[portalName]) == null ? void 0 : _a["~standard"].validate(
243
- portalRecord
244
- );
245
- if (portalResult instanceof Promise)
238
+ let portalResult = (_a = schema2.portalData[portalName]) == null ? void 0 : _a["~standard"].validate(portalRecord);
239
+ if (portalResult instanceof Promise) {
246
240
  portalResult = await portalResult;
241
+ }
247
242
  if (portalResult && "value" in portalResult) {
248
243
  validatedPortalRecords.push({
249
244
  ...portalResult.value,
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sources":["../../src/client.ts"],"sourcesContent":["import type { Adapter, ExecuteScriptOptions } from \"./adapters/core.js\";\nimport type {\n CreateParams,\n CreateResponse,\n DeleteParams,\n DeleteResponse,\n FMRecord,\n FieldData,\n GenericPortalData,\n GetParams,\n GetResponse,\n GetResponseOne,\n ListParams,\n PortalsWithIds,\n Query,\n UpdateParams,\n UpdateResponse,\n} from \"./client-types.js\";\nimport { FileMakerError } from \"./index.js\";\nimport type { StandardSchemaV1 } from \"@standard-schema/spec\";\n\nfunction asNumber(input: string | number): number {\n return typeof input === \"string\" ? parseInt(input) : input;\n}\n\nexport type ClientObjectProps = {\n /**\n * The layout to use by default for all requests. Can be overrridden on each request.\n */\n layout: string;\n schema?: {\n /**\n * The schema for the field data.\n */\n fieldData: StandardSchemaV1<FieldData>;\n /**\n * The schema for the portal data.\n */\n portalData?: Record<string, StandardSchemaV1<FieldData>>;\n };\n};\n\ntype FetchOptions = {\n fetch?: RequestInit;\n};\n\nfunction DataApi<\n Fd extends FieldData = FieldData,\n Pd extends GenericPortalData = GenericPortalData,\n Opts extends ClientObjectProps = ClientObjectProps,\n Adp extends Adapter = Adapter,\n>(options: Opts & { adapter: Adp }) {\n type InferredFieldData = Opts[\"schema\"] extends object\n ? StandardSchemaV1.InferOutput<Opts[\"schema\"][\"fieldData\"]>\n : Fd;\n type InferredPortalData = Opts[\"schema\"] extends object\n ? Opts[\"schema\"][\"portalData\"] extends object\n ? {\n [K in keyof Opts[\"schema\"][\"portalData\"]]: StandardSchemaV1.InferOutput<\n Opts[\"schema\"][\"portalData\"][K]\n >;\n }\n : Pd\n : Pd;\n\n if (\"zodValidators\" in options) {\n throw new Error(\n \"zodValidators is no longer supported. Use schema instead, or re-run the typegen command\",\n );\n }\n\n const schema = options.schema;\n const layout = options.layout;\n const {\n create,\n delete: _adapterDelete,\n find,\n get,\n list,\n update,\n layoutMetadata,\n containerUpload,\n executeScript,\n ...otherMethods\n } = options.adapter;\n\n type CreateArgs<\n T extends InferredFieldData = InferredFieldData,\n U extends InferredPortalData = InferredPortalData,\n > = CreateParams<U> & {\n fieldData: Partial<T>;\n };\n type GetArgs<U extends InferredPortalData = InferredPortalData> =\n GetParams<U> & {\n recordId: number | string;\n };\n type UpdateArgs<\n T extends InferredFieldData = InferredFieldData,\n U extends InferredPortalData = InferredPortalData,\n > = UpdateParams<U> & {\n fieldData: Partial<T>;\n recordId: number | string;\n };\n type ContainerUploadArgs<T extends InferredFieldData = InferredFieldData> = {\n containerFieldName: keyof T;\n containerFieldRepetition?: string | number;\n file: Blob;\n recordId: number | string;\n modId?: number;\n timeout?: number;\n };\n type DeleteArgs = DeleteParams & {\n recordId: number | string;\n };\n type IgnoreEmptyResult = {\n /**\n * If true, a find that returns no results will retun an empty array instead of throwing an error.\n * @default false\n */\n ignoreEmptyResult?: boolean;\n };\n type FindArgs<\n T extends FieldData = InferredFieldData,\n U extends InferredPortalData = InferredPortalData,\n > = ListParams<T, U> & {\n query: Query<T> | Array<Query<T>>;\n timeout?: number;\n };\n\n type ExecuteScriptArgs = Omit<ExecuteScriptOptions, \"layout\">;\n\n /**\n * List all records from a given layout, no find criteria applied.\n */\n async function _list(): Promise<\n GetResponse<InferredFieldData, InferredPortalData>\n >;\n async function _list(\n args: ListParams<InferredFieldData, InferredPortalData> & FetchOptions,\n ): Promise<GetResponse<InferredFieldData, InferredPortalData>>;\n async function _list(\n args?: ListParams<InferredFieldData, InferredPortalData> & FetchOptions,\n ): Promise<GetResponse<InferredFieldData, InferredPortalData>> {\n const { fetch, timeout, ...params } = args ?? {};\n\n // rename and refactor limit, offset, and sort keys for this request\n if (\"limit\" in params && params.limit !== undefined)\n delete Object.assign(params, { _limit: params.limit })[\"limit\"];\n if (\"offset\" in params && params.offset !== undefined) {\n if (params.offset <= 1) delete params.offset;\n else delete Object.assign(params, { _offset: params.offset })[\"offset\"];\n }\n if (\"sort\" in params && params.sort !== undefined)\n delete Object.assign(params, {\n _sort: Array.isArray(params.sort) ? params.sort : [params.sort],\n })[\"sort\"];\n\n const result = await list({\n layout,\n data: params,\n fetch,\n timeout,\n });\n\n if (result.dataInfo.foundCount > result.dataInfo.returnedCount) {\n // more records found than returned\n if (args?.limit === undefined && args?.offset === undefined) {\n // and the user didn't specify a limit or offset, so we should warn them\n console.warn(\n `🚨 @proofkit/fmdapi: Loaded only ${result.dataInfo.returnedCount} of the ${result.dataInfo.foundCount} records from your \"${layout}\" layout. Use the \"listAll\" method to automatically paginate through all records, or specify a \"limit\" and \"offset\" to handle pagination yourself.`,\n );\n }\n }\n\n return await runSchemaValidationAndTransform(\n schema,\n result as GetResponse<InferredFieldData, InferredPortalData>,\n );\n }\n\n /**\n * Paginate through all records from a given layout, no find criteria applied.\n * ⚠️ WARNING: Use this method with caution, as it can be slow with large datasets\n */\n async function listAll<\n T extends FieldData = InferredFieldData,\n U extends InferredPortalData = InferredPortalData,\n >(): Promise<FMRecord<T, U>[]>;\n async function listAll<\n T extends FieldData = InferredFieldData,\n U extends InferredPortalData = InferredPortalData,\n >(args: ListParams<T, U> & FetchOptions): Promise<FMRecord<T, U>[]>;\n async function listAll<\n T extends FieldData = InferredFieldData,\n U extends InferredPortalData = InferredPortalData,\n >(args?: ListParams<T, U> & FetchOptions): Promise<FMRecord<T, U>[]> {\n let runningData: GetResponse<T, U>[\"data\"] = [];\n const limit = args?.limit ?? 100;\n let offset = args?.offset ?? 1;\n\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const data = (await _list({\n ...args,\n offset,\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n } as any)) as unknown as GetResponse<T, U>;\n runningData = [...runningData, ...data.data];\n if (runningData.length >= data.dataInfo.foundCount) break;\n offset = offset + limit;\n }\n return runningData;\n }\n\n /**\n * Create a new record in a given layout\n */\n async function _create<\n T extends InferredFieldData = InferredFieldData,\n U extends InferredPortalData = InferredPortalData,\n >(args: CreateArgs<T, U> & FetchOptions): Promise<CreateResponse> {\n const { fetch, timeout, ...params } = args ?? {};\n return await create({\n layout,\n data: params,\n fetch,\n timeout,\n });\n }\n\n /**\n * Get a single record by Internal RecordId\n */\n async function _get(\n args: GetArgs<InferredPortalData> & FetchOptions,\n ): Promise<GetResponse<InferredFieldData, InferredPortalData>> {\n args.recordId = asNumber(args.recordId);\n const { recordId, fetch, timeout, ...params } = args;\n\n const result = await get({\n layout,\n data: { ...params, recordId },\n fetch,\n timeout,\n });\n return await runSchemaValidationAndTransform(\n schema,\n result as GetResponse<InferredFieldData, InferredPortalData>,\n );\n }\n\n /**\n * Update a single record by internal RecordId\n */\n async function _update(\n args: UpdateArgs<InferredFieldData, InferredPortalData> & FetchOptions,\n ): Promise<UpdateResponse> {\n args.recordId = asNumber(args.recordId);\n const { recordId, fetch, timeout, ...params } = args;\n return await update({\n layout,\n data: { ...params, recordId },\n fetch,\n timeout,\n });\n }\n\n /**\n * Delete a single record by internal RecordId\n */\n async function deleteRecord(\n args: DeleteArgs & FetchOptions,\n ): Promise<DeleteResponse> {\n args.recordId = asNumber(args.recordId);\n const { recordId, fetch, timeout, ...params } = args;\n\n return _adapterDelete({\n layout,\n data: { ...params, recordId },\n fetch,\n timeout,\n });\n }\n\n /**\n * Find records in a given layout\n */\n async function _find(\n args: FindArgs<InferredFieldData, InferredPortalData> &\n IgnoreEmptyResult &\n FetchOptions,\n ): Promise<GetResponse<InferredFieldData, InferredPortalData>> {\n const {\n query: queryInput,\n ignoreEmptyResult = false,\n timeout,\n fetch,\n ...params\n } = args;\n const query = !Array.isArray(queryInput) ? [queryInput] : queryInput;\n\n // rename and refactor limit, offset, and sort keys for this request\n if (\"offset\" in params && params.offset !== undefined) {\n if (params.offset <= 1) delete params.offset;\n }\n if (\"dateformats\" in params && params.dateformats !== undefined) {\n // reassign dateformats to match FileMaker's expected values\n // @ts-expect-error FM wants a string, so this is fine\n params.dateformats = (\n params.dateformats === \"US\"\n ? 0\n : params.dateformats === \"file_locale\"\n ? 1\n : params.dateformats === \"ISO8601\"\n ? 2\n : 0\n ).toString();\n }\n const result = (await find({\n data: { ...params, query },\n layout,\n fetch,\n timeout,\n }).catch((e: unknown) => {\n if (ignoreEmptyResult && e instanceof FileMakerError && e.code === \"401\")\n return { data: [], dataInfo: { foundCount: 0, returnedCount: 0 } };\n throw e;\n })) as GetResponse<InferredFieldData, InferredPortalData>;\n\n if (result.dataInfo.foundCount > result.dataInfo.returnedCount) {\n // more records found than returned\n if (args?.limit === undefined && args?.offset === undefined) {\n console.warn(\n `🚨 @proofkit/fmdapi: Loaded only ${result.dataInfo.returnedCount} of the ${result.dataInfo.foundCount} records from your \"${layout}\" layout. Use the \"findAll\" method to automatically paginate through all records, or specify a \"limit\" and \"offset\" to handle pagination yourself.`,\n );\n }\n }\n\n return await runSchemaValidationAndTransform(schema, result);\n }\n\n /**\n * Helper method for `find`. Will only return the first result or throw error if there is more than 1 result.\n */\n async function findOne(\n args: FindArgs<InferredFieldData, InferredPortalData> & FetchOptions,\n ): Promise<GetResponseOne<InferredFieldData, InferredPortalData>> {\n const result = await _find(args);\n if (result.data.length !== 1)\n throw new Error(\n `${result.data.length} records found; expecting exactly 1`,\n );\n const transformedResult = await runSchemaValidationAndTransform(\n schema,\n result,\n );\n if (!transformedResult.data[0]) throw new Error(\"No data found\");\n return { ...transformedResult, data: transformedResult.data[0] };\n }\n\n /**\n * Helper method for `find`. Will only return the first result instead of an array.\n */\n async function findFirst(\n args: FindArgs<InferredFieldData, InferredPortalData> &\n IgnoreEmptyResult &\n FetchOptions,\n ): Promise<GetResponseOne<InferredFieldData, InferredPortalData>> {\n const result = await _find(args);\n const transformedResult = await runSchemaValidationAndTransform(\n schema,\n result,\n );\n\n if (!transformedResult.data[0]) throw new Error(\"No data found\");\n return { ...transformedResult, data: transformedResult.data[0] };\n }\n\n /**\n * Helper method for `find`. Will return the first result or null if no results are found.\n */\n async function maybeFindFirst(\n args: FindArgs<InferredFieldData, InferredPortalData> &\n IgnoreEmptyResult &\n FetchOptions,\n ): Promise<GetResponseOne<InferredFieldData, InferredPortalData> | null> {\n const result = await _find({ ...args, ignoreEmptyResult: true });\n const transformedResult = await runSchemaValidationAndTransform(\n schema,\n result,\n );\n if (!transformedResult.data[0]) return null;\n return { ...transformedResult, data: transformedResult.data[0] };\n }\n\n /**\n * Helper method for `find` to page through all found results.\n * ⚠️ WARNING: Use with caution as this can be a slow operation with large datasets\n */\n async function findAll(\n args: FindArgs<InferredFieldData, InferredPortalData> & FetchOptions,\n ): Promise<FMRecord<InferredFieldData, InferredPortalData>[]> {\n let runningData: GetResponse<\n InferredFieldData,\n InferredPortalData\n >[\"data\"] = [];\n const limit = args.limit ?? 100;\n let offset = args.offset ?? 1;\n // eslint-disable-next-line no-constant-condition\n while (true) {\n const data = await _find({\n ...args,\n offset,\n ignoreEmptyResult: true,\n });\n runningData = [...runningData, ...data.data];\n if (\n runningData.length === 0 ||\n runningData.length >= data.dataInfo.foundCount\n )\n break;\n offset = offset + limit;\n }\n return runningData;\n }\n\n async function _layoutMetadata(args?: { timeout?: number } & FetchOptions) {\n const { ...restArgs } = args ?? {};\n // Explicitly define the type for params based on FetchOptions\n const params: FetchOptions & { timeout?: number } = restArgs;\n\n return await layoutMetadata({\n layout,\n fetch: params.fetch, // Now should correctly resolve to undefined if not present\n timeout: params.timeout, // Now should correctly resolve to undefined if not present\n });\n }\n\n async function _containerUpload<\n T extends InferredFieldData = InferredFieldData,\n >(args: ContainerUploadArgs<T> & FetchOptions) {\n const { ...params } = args;\n return await containerUpload({\n layout,\n data: {\n ...params,\n containerFieldName: params.containerFieldName as string,\n repetition: params.containerFieldRepetition,\n },\n fetch: params.fetch,\n timeout: params.timeout,\n });\n }\n\n async function runSchemaValidationAndTransform(\n schema: ClientObjectProps[\"schema\"],\n result: GetResponse<InferredFieldData, InferredPortalData>,\n ): Promise<GetResponse<InferredFieldData, InferredPortalData>> {\n const fieldDataIssues: StandardSchemaV1.Issue[] = [];\n const portalDataIssues: StandardSchemaV1.Issue[] = [];\n\n if (!schema) return result;\n const transformedData: FMRecord<InferredFieldData, InferredPortalData>[] =\n [];\n for (const record of result.data) {\n let fieldResult = schema.fieldData[\"~standard\"].validate(\n record.fieldData,\n );\n if (fieldResult instanceof Promise) fieldResult = await fieldResult;\n if (\"value\" in fieldResult) {\n record.fieldData = fieldResult.value as InferredFieldData;\n } else {\n fieldDataIssues.push(...fieldResult.issues);\n }\n\n if (schema.portalData) {\n for (const [portalName, portalRecords] of Object.entries(\n record.portalData,\n )) {\n const validatedPortalRecords: PortalsWithIds<GenericPortalData>[] =\n [];\n for (const portalRecord of portalRecords) {\n let portalResult =\n schema.portalData[portalName]?.[\"~standard\"].validate(\n portalRecord,\n );\n if (portalResult instanceof Promise)\n portalResult = await portalResult;\n if (portalResult && \"value\" in portalResult) {\n validatedPortalRecords.push({\n ...portalResult.value,\n recordId: portalRecord.recordId,\n modId: portalRecord.modId,\n });\n } else {\n portalDataIssues.push(...(portalResult?.issues ?? []));\n }\n }\n // @ts-expect-error We know portalName is a valid key, but can't figure out the right assertions\n record.portalData[portalName] = validatedPortalRecords;\n }\n }\n\n transformedData.push(record);\n }\n result.data = transformedData;\n\n if (fieldDataIssues.length > 0 || portalDataIssues.length > 0) {\n console.error(\n `🚨 @proofkit/fmdapi: Validation issues for layout \"${layout}\". Run the typegen command again to generate the latest field definitions from your layout.`,\n {\n fieldDataIssues,\n portalDataIssues,\n },\n );\n throw new Error(\"Schema validation issues\");\n }\n\n return result;\n }\n\n async function _executeScript(args: ExecuteScriptArgs & FetchOptions) {\n return await executeScript({\n ...args,\n layout,\n });\n }\n\n return {\n ...otherMethods,\n layout: options.layout as Opts[\"layout\"],\n list: _list,\n listAll,\n create: _create,\n get: _get,\n update: _update,\n delete: deleteRecord,\n find: _find,\n findOne,\n findFirst,\n maybeFindFirst,\n findAll,\n layoutMetadata: _layoutMetadata,\n containerUpload: _containerUpload,\n executeScript: _executeScript,\n };\n}\n\nexport default DataApi;\nexport { DataApi };\n"],"names":["schema"],"mappings":"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"}
1
+ {"version":3,"file":"client.js","sources":["../../src/client.ts"],"sourcesContent":["import type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport type { Adapter, ExecuteScriptOptions } from \"./adapters/core.js\";\nimport type {\n CreateParams,\n CreateResponse,\n DeleteParams,\n DeleteResponse,\n FieldData,\n FMRecord,\n GenericPortalData,\n GetParams,\n GetResponse,\n GetResponseOne,\n ListParams,\n PortalsWithIds,\n Query,\n UpdateParams,\n UpdateResponse,\n} from \"./client-types.js\";\nimport { FileMakerError } from \"./index.js\";\n\nfunction asNumber(input: string | number): number {\n return typeof input === \"string\" ? Number.parseInt(input, 10) : input;\n}\n\nexport interface ClientObjectProps {\n /**\n * The layout to use by default for all requests. Can be overrridden on each request.\n */\n layout: string;\n schema?: {\n /**\n * The schema for the field data.\n */\n fieldData: StandardSchemaV1<FieldData>;\n /**\n * The schema for the portal data.\n */\n portalData?: Record<string, StandardSchemaV1<FieldData>>;\n };\n}\n\ninterface FetchOptions {\n fetch?: RequestInit;\n}\n\nexport interface IgnoreEmptyResult {\n /**\n * If true, a find that returns no results will retun an empty array instead of throwing an error.\n * @default false\n */\n ignoreEmptyResult?: boolean;\n}\n\nexport interface ContainerUploadArgs<T extends FieldData = FieldData> {\n containerFieldName: keyof T;\n containerFieldRepetition?: string | number;\n file: Blob;\n recordId: number | string;\n modId?: number;\n timeout?: number;\n}\n\nfunction DataApi<\n Fd extends FieldData = FieldData,\n Pd extends GenericPortalData = GenericPortalData,\n Opts extends ClientObjectProps = ClientObjectProps,\n Adp extends Adapter = Adapter,\n>(options: Opts & { adapter: Adp }) {\n type InferredFieldData = Opts[\"schema\"] extends object\n ? StandardSchemaV1.InferOutput<Opts[\"schema\"][\"fieldData\"]>\n : Fd;\n type InferredPortalData = Opts[\"schema\"] extends object\n ? Opts[\"schema\"][\"portalData\"] extends object\n ? {\n [K in keyof Opts[\"schema\"][\"portalData\"]]: StandardSchemaV1.InferOutput<Opts[\"schema\"][\"portalData\"][K]>;\n }\n : Pd\n : Pd;\n\n if (\"zodValidators\" in options) {\n throw new Error(\"zodValidators is no longer supported. Use schema instead, or re-run the typegen command\");\n }\n\n const schema = options.schema;\n const layout = options.layout;\n const {\n create,\n delete: _adapterDelete,\n find,\n get,\n list,\n update,\n layoutMetadata,\n containerUpload,\n executeScript,\n ...otherMethods\n } = options.adapter;\n\n type CreateArgs<\n T extends InferredFieldData = InferredFieldData,\n U extends InferredPortalData = InferredPortalData,\n > = CreateParams<U> & {\n fieldData: Partial<T>;\n };\n type GetArgs<U extends InferredPortalData = InferredPortalData> = GetParams<U> & {\n recordId: number | string;\n };\n type UpdateArgs<\n T extends InferredFieldData = InferredFieldData,\n U extends InferredPortalData = InferredPortalData,\n > = UpdateParams<U> & {\n fieldData: Partial<T>;\n recordId: number | string;\n };\n type DeleteArgs = DeleteParams & {\n recordId: number | string;\n };\n type FindArgs<\n T extends FieldData = InferredFieldData,\n U extends InferredPortalData = InferredPortalData,\n > = ListParams<T, U> & {\n query: Query<T> | Query<T>[];\n timeout?: number;\n };\n\n type ExecuteScriptArgs = Omit<ExecuteScriptOptions, \"layout\">;\n\n /**\n * List all records from a given layout, no find criteria applied.\n */\n async function _list(\n args?: ListParams<InferredFieldData, InferredPortalData> & FetchOptions,\n ): Promise<GetResponse<InferredFieldData, InferredPortalData>>;\n async function _list(\n args?: ListParams<InferredFieldData, InferredPortalData> & FetchOptions,\n ): Promise<GetResponse<InferredFieldData, InferredPortalData>> {\n const { fetch, timeout, ...params } = args ?? {};\n\n // rename and refactor limit, offset, and sort keys for this request\n if (\"limit\" in params && params.limit !== undefined) {\n Object.assign(params, { _limit: params.limit }).limit = undefined;\n }\n if (\"offset\" in params && params.offset !== undefined) {\n if (params.offset <= 1) {\n params.offset = undefined;\n } else {\n Object.assign(params, { _offset: params.offset }).offset = undefined;\n }\n }\n if (\"sort\" in params && params.sort !== undefined) {\n Object.assign(params, {\n _sort: Array.isArray(params.sort) ? params.sort : [params.sort],\n }).sort = undefined;\n }\n\n const result = await list({\n layout,\n data: params,\n fetch,\n timeout,\n });\n\n if (\n result.dataInfo.foundCount > result.dataInfo.returnedCount &&\n args?.limit === undefined &&\n args?.offset === undefined\n ) {\n // more records found than returned and the user didn't specify a limit or offset, so we should warn them\n console.warn(\n `🚨 @proofkit/fmdapi: Loaded only ${result.dataInfo.returnedCount} of the ${result.dataInfo.foundCount} records from your \"${layout}\" layout. Use the \"listAll\" method to automatically paginate through all records, or specify a \"limit\" and \"offset\" to handle pagination yourself.`,\n );\n }\n\n return await runSchemaValidationAndTransform(schema, result as GetResponse<InferredFieldData, InferredPortalData>);\n }\n\n /**\n * Paginate through all records from a given layout, no find criteria applied.\n * ⚠️ WARNING: Use this method with caution, as it can be slow with large datasets\n */\n async function listAll(\n args?: ListParams<InferredFieldData, InferredPortalData> & FetchOptions,\n ): Promise<FMRecord<InferredFieldData, InferredPortalData>[]>;\n async function listAll(\n args?: ListParams<InferredFieldData, InferredPortalData> & FetchOptions,\n ): Promise<FMRecord<InferredFieldData, InferredPortalData>[]> {\n let runningData: GetResponse<InferredFieldData, InferredPortalData>[\"data\"] = [];\n const limit = args?.limit ?? 100;\n let offset = args?.offset ?? 1;\n\n while (true) {\n const data = await _list({\n ...args,\n offset,\n });\n runningData = [...runningData, ...data.data];\n if (runningData.length >= data.dataInfo.foundCount) {\n break;\n }\n offset += limit;\n }\n return runningData;\n }\n\n /**\n * Create a new record in a given layout\n */\n async function _create<\n T extends InferredFieldData = InferredFieldData,\n U extends InferredPortalData = InferredPortalData,\n >(args: CreateArgs<T, U> & FetchOptions): Promise<CreateResponse> {\n const { fetch, timeout, ...params } = args ?? {};\n return await create({\n layout,\n data: params,\n fetch,\n timeout,\n });\n }\n\n /**\n * Get a single record by Internal RecordId\n */\n async function _get(\n args: GetArgs<InferredPortalData> & FetchOptions,\n ): Promise<GetResponse<InferredFieldData, InferredPortalData>> {\n args.recordId = asNumber(args.recordId);\n const { recordId, fetch, timeout, ...params } = args;\n\n const result = await get({\n layout,\n data: { ...params, recordId },\n fetch,\n timeout,\n });\n return await runSchemaValidationAndTransform(schema, result as GetResponse<InferredFieldData, InferredPortalData>);\n }\n\n /**\n * Update a single record by internal RecordId\n */\n async function _update(\n args: UpdateArgs<InferredFieldData, InferredPortalData> & FetchOptions,\n ): Promise<UpdateResponse> {\n args.recordId = asNumber(args.recordId);\n const { recordId, fetch, timeout, ...params } = args;\n return await update({\n layout,\n data: { ...params, recordId },\n fetch,\n timeout,\n });\n }\n\n /**\n * Delete a single record by internal RecordId\n */\n function deleteRecord(args: DeleteArgs & FetchOptions): Promise<DeleteResponse> {\n args.recordId = asNumber(args.recordId);\n const { recordId, fetch, timeout, ...params } = args;\n\n return _adapterDelete({\n layout,\n data: { ...params, recordId },\n fetch,\n timeout,\n });\n }\n\n /**\n * Find records in a given layout\n */\n async function _find(\n args: FindArgs<InferredFieldData, InferredPortalData> & IgnoreEmptyResult & FetchOptions,\n ): Promise<GetResponse<InferredFieldData, InferredPortalData>> {\n const { query: queryInput, ignoreEmptyResult = false, timeout, fetch, ...params } = args;\n const query = Array.isArray(queryInput) ? queryInput : [queryInput];\n\n // rename and refactor limit, offset, and sort keys for this request\n if (\"offset\" in params && params.offset !== undefined && params.offset <= 1) {\n params.offset = undefined;\n }\n if (\"dateformats\" in params && params.dateformats !== undefined) {\n // reassign dateformats to match FileMaker's expected values\n let dateFormatValue: number;\n if (params.dateformats === \"US\") {\n dateFormatValue = 0;\n } else if (params.dateformats === \"file_locale\") {\n dateFormatValue = 1;\n } else if (params.dateformats === \"ISO8601\") {\n dateFormatValue = 2;\n } else {\n dateFormatValue = 0;\n }\n // @ts-expect-error FM wants a string, so this is fine\n params.dateformats = dateFormatValue.toString();\n }\n const result = (await find({\n data: { ...params, query },\n layout,\n fetch,\n timeout,\n }).catch((e: unknown) => {\n if (ignoreEmptyResult && e instanceof FileMakerError && e.code === \"401\") {\n return { data: [], dataInfo: { foundCount: 0, returnedCount: 0 } };\n }\n throw e;\n })) as GetResponse<InferredFieldData, InferredPortalData>;\n\n if (\n result.dataInfo.foundCount > result.dataInfo.returnedCount &&\n args?.limit === undefined &&\n args?.offset === undefined\n ) {\n // more records found than returned and the user didn't specify a limit or offset\n console.warn(\n `🚨 @proofkit/fmdapi: Loaded only ${result.dataInfo.returnedCount} of the ${result.dataInfo.foundCount} records from your \"${layout}\" layout. Use the \"findAll\" method to automatically paginate through all records, or specify a \"limit\" and \"offset\" to handle pagination yourself.`,\n );\n }\n\n return await runSchemaValidationAndTransform(schema, result);\n }\n\n /**\n * Helper method for `find`. Will only return the first result or throw error if there is more than 1 result.\n */\n async function findOne(\n args: FindArgs<InferredFieldData, InferredPortalData> & FetchOptions,\n ): Promise<GetResponseOne<InferredFieldData, InferredPortalData>> {\n const result = await _find(args);\n if (result.data.length !== 1) {\n throw new Error(`${result.data.length} records found; expecting exactly 1`);\n }\n const transformedResult = await runSchemaValidationAndTransform(schema, result);\n if (!transformedResult.data[0]) {\n throw new Error(\"No data found\");\n }\n return { ...transformedResult, data: transformedResult.data[0] };\n }\n\n /**\n * Helper method for `find`. Will only return the first result instead of an array.\n */\n async function findFirst(\n args: FindArgs<InferredFieldData, InferredPortalData> & IgnoreEmptyResult & FetchOptions,\n ): Promise<GetResponseOne<InferredFieldData, InferredPortalData>> {\n const result = await _find(args);\n const transformedResult = await runSchemaValidationAndTransform(schema, result);\n\n if (!transformedResult.data[0]) {\n throw new Error(\"No data found\");\n }\n return { ...transformedResult, data: transformedResult.data[0] };\n }\n\n /**\n * Helper method for `find`. Will return the first result or null if no results are found.\n */\n async function maybeFindFirst(\n args: FindArgs<InferredFieldData, InferredPortalData> & IgnoreEmptyResult & FetchOptions,\n ): Promise<GetResponseOne<InferredFieldData, InferredPortalData> | null> {\n const result = await _find({ ...args, ignoreEmptyResult: true });\n const transformedResult = await runSchemaValidationAndTransform(schema, result);\n if (!transformedResult.data[0]) {\n return null;\n }\n return { ...transformedResult, data: transformedResult.data[0] };\n }\n\n /**\n * Helper method for `find` to page through all found results.\n * ⚠️ WARNING: Use with caution as this can be a slow operation with large datasets\n */\n async function findAll(\n args: FindArgs<InferredFieldData, InferredPortalData> & FetchOptions,\n ): Promise<FMRecord<InferredFieldData, InferredPortalData>[]> {\n let runningData: GetResponse<InferredFieldData, InferredPortalData>[\"data\"] = [];\n const limit = args.limit ?? 100;\n let offset = args.offset ?? 1;\n\n while (true) {\n const data = await _find({\n ...args,\n offset,\n ignoreEmptyResult: true,\n });\n runningData = [...runningData, ...data.data];\n if (runningData.length === 0 || runningData.length >= data.dataInfo.foundCount) {\n break;\n }\n offset += limit;\n }\n return runningData;\n }\n\n async function _layoutMetadata(args?: { timeout?: number } & FetchOptions) {\n const { ...restArgs } = args ?? {};\n // Explicitly define the type for params based on FetchOptions\n const params: FetchOptions & { timeout?: number } = restArgs;\n\n return await layoutMetadata({\n layout,\n fetch: params.fetch, // Now should correctly resolve to undefined if not present\n timeout: params.timeout, // Now should correctly resolve to undefined if not present\n });\n }\n\n async function _containerUpload(args: ContainerUploadArgs<InferredFieldData> & FetchOptions) {\n const { ...params } = args;\n return await containerUpload({\n layout,\n data: {\n ...params,\n containerFieldName: params.containerFieldName as string,\n repetition: params.containerFieldRepetition,\n },\n fetch: params.fetch,\n timeout: params.timeout,\n });\n }\n\n async function runSchemaValidationAndTransform(\n schema: ClientObjectProps[\"schema\"],\n result: GetResponse<InferredFieldData, InferredPortalData>,\n ): Promise<GetResponse<InferredFieldData, InferredPortalData>> {\n const fieldDataIssues: StandardSchemaV1.Issue[] = [];\n const portalDataIssues: StandardSchemaV1.Issue[] = [];\n\n if (!schema) {\n return result;\n }\n const transformedData: FMRecord<InferredFieldData, InferredPortalData>[] = [];\n for (const record of result.data) {\n let fieldResult = schema.fieldData[\"~standard\"].validate(record.fieldData);\n if (fieldResult instanceof Promise) {\n fieldResult = await fieldResult;\n }\n if (\"value\" in fieldResult) {\n record.fieldData = fieldResult.value as InferredFieldData;\n } else {\n fieldDataIssues.push(...fieldResult.issues);\n }\n\n if (schema.portalData) {\n for (const [portalName, portalRecords] of Object.entries(record.portalData)) {\n const validatedPortalRecords: PortalsWithIds<GenericPortalData>[] = [];\n for (const portalRecord of portalRecords) {\n let portalResult = schema.portalData[portalName]?.[\"~standard\"].validate(portalRecord);\n if (portalResult instanceof Promise) {\n portalResult = await portalResult;\n }\n if (portalResult && \"value\" in portalResult) {\n validatedPortalRecords.push({\n ...portalResult.value,\n recordId: portalRecord.recordId,\n modId: portalRecord.modId,\n });\n } else {\n portalDataIssues.push(...(portalResult?.issues ?? []));\n }\n }\n // @ts-expect-error We know portalName is a valid key, but can't figure out the right assertions\n record.portalData[portalName] = validatedPortalRecords;\n }\n }\n\n transformedData.push(record);\n }\n result.data = transformedData;\n\n if (fieldDataIssues.length > 0 || portalDataIssues.length > 0) {\n console.error(\n `🚨 @proofkit/fmdapi: Validation issues for layout \"${layout}\". Run the typegen command again to generate the latest field definitions from your layout.`,\n {\n fieldDataIssues,\n portalDataIssues,\n },\n );\n throw new Error(\"Schema validation issues\");\n }\n\n return result;\n }\n\n async function _executeScript(args: ExecuteScriptArgs & FetchOptions) {\n return await executeScript({\n ...args,\n layout,\n });\n }\n\n return {\n ...otherMethods,\n layout: options.layout as Opts[\"layout\"],\n list: _list,\n listAll,\n create: _create,\n get: _get,\n update: _update,\n delete: deleteRecord,\n find: _find,\n findOne,\n findFirst,\n maybeFindFirst,\n findAll,\n layoutMetadata: _layoutMetadata,\n containerUpload: _containerUpload,\n executeScript: _executeScript,\n };\n}\n\nexport default DataApi;\nexport { DataApi };\n"],"names":["schema"],"mappings":";AAqBA,SAAS,SAAS,OAAgC;AAChD,SAAO,OAAO,UAAU,WAAW,OAAO,SAAS,OAAO,EAAE,IAAI;AAClE;AAwCA,SAAS,QAKP,SAAkC;AAYlC,MAAI,mBAAmB,SAAS;AACxB,UAAA,IAAI,MAAM,yFAAyF;AAAA,EAAA;AAG3G,QAAM,SAAS,QAAQ;AACvB,QAAM,SAAS,QAAQ;AACjB,QAAA;AAAA,IACJ;AAAA,IACA,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,GAAG;AAAA,MACD,QAAQ;AAqCZ,iBAAe,MACb,MAC6D;AAC7D,UAAM,EAAE,OAAO,SAAS,GAAG,OAAO,IAAI,QAAQ,CAAC;AAG/C,QAAI,WAAW,UAAU,OAAO,UAAU,QAAW;AAC5C,aAAA,OAAO,QAAQ,EAAE,QAAQ,OAAO,MAAM,CAAC,EAAE,QAAQ;AAAA,IAAA;AAE1D,QAAI,YAAY,UAAU,OAAO,WAAW,QAAW;AACjD,UAAA,OAAO,UAAU,GAAG;AACtB,eAAO,SAAS;AAAA,MAAA,OACX;AACE,eAAA,OAAO,QAAQ,EAAE,SAAS,OAAO,OAAO,CAAC,EAAE,SAAS;AAAA,MAAA;AAAA,IAC7D;AAEF,QAAI,UAAU,UAAU,OAAO,SAAS,QAAW;AACjD,aAAO,OAAO,QAAQ;AAAA,QACpB,OAAO,MAAM,QAAQ,OAAO,IAAI,IAAI,OAAO,OAAO,CAAC,OAAO,IAAI;AAAA,MAAA,CAC/D,EAAE,OAAO;AAAA,IAAA;AAGN,UAAA,SAAS,MAAM,KAAK;AAAA,MACxB;AAAA,MACA,MAAM;AAAA,MACN;AAAA,MACA;AAAA,IAAA,CACD;AAGC,QAAA,OAAO,SAAS,aAAa,OAAO,SAAS,kBAC7C,6BAAM,WAAU,WAChB,6BAAM,YAAW,QACjB;AAEQ,cAAA;AAAA,QACN,oCAAoC,OAAO,SAAS,aAAa,WAAW,OAAO,SAAS,UAAU,uBAAuB,MAAM;AAAA,MACrI;AAAA,IAAA;AAGK,WAAA,MAAM,gCAAgC,QAAQ,MAA4D;AAAA,EAAA;AAUnH,iBAAe,QACb,MAC4D;AAC5D,QAAI,cAA0E,CAAC;AACzE,UAAA,SAAQ,6BAAM,UAAS;AACzB,QAAA,UAAS,6BAAM,WAAU;AAE7B,WAAO,MAAM;AACL,YAAA,OAAO,MAAM,MAAM;AAAA,QACvB,GAAG;AAAA,QACH;AAAA,MAAA,CACD;AACD,oBAAc,CAAC,GAAG,aAAa,GAAG,KAAK,IAAI;AAC3C,UAAI,YAAY,UAAU,KAAK,SAAS,YAAY;AAClD;AAAA,MAAA;AAEQ,gBAAA;AAAA,IAAA;AAEL,WAAA;AAAA,EAAA;AAMT,iBAAe,QAGb,MAAgE;AAChE,UAAM,EAAE,OAAO,SAAS,GAAG,OAAO,IAAI,QAAQ,CAAC;AAC/C,WAAO,MAAM,OAAO;AAAA,MAClB;AAAA,MACA,MAAM;AAAA,MACN;AAAA,MACA;AAAA,IAAA,CACD;AAAA,EAAA;AAMH,iBAAe,KACb,MAC6D;AACxD,SAAA,WAAW,SAAS,KAAK,QAAQ;AACtC,UAAM,EAAE,UAAU,OAAO,SAAS,GAAG,OAAW,IAAA;AAE1C,UAAA,SAAS,MAAM,IAAI;AAAA,MACvB;AAAA,MACA,MAAM,EAAE,GAAG,QAAQ,SAAS;AAAA,MAC5B;AAAA,MACA;AAAA,IAAA,CACD;AACM,WAAA,MAAM,gCAAgC,QAAQ,MAA4D;AAAA,EAAA;AAMnH,iBAAe,QACb,MACyB;AACpB,SAAA,WAAW,SAAS,KAAK,QAAQ;AACtC,UAAM,EAAE,UAAU,OAAO,SAAS,GAAG,OAAW,IAAA;AAChD,WAAO,MAAM,OAAO;AAAA,MAClB;AAAA,MACA,MAAM,EAAE,GAAG,QAAQ,SAAS;AAAA,MAC5B;AAAA,MACA;AAAA,IAAA,CACD;AAAA,EAAA;AAMH,WAAS,aAAa,MAA0D;AACzE,SAAA,WAAW,SAAS,KAAK,QAAQ;AACtC,UAAM,EAAE,UAAU,OAAO,SAAS,GAAG,OAAW,IAAA;AAEhD,WAAO,eAAe;AAAA,MACpB;AAAA,MACA,MAAM,EAAE,GAAG,QAAQ,SAAS;AAAA,MAC5B;AAAA,MACA;AAAA,IAAA,CACD;AAAA,EAAA;AAMH,iBAAe,MACb,MAC6D;AACvD,UAAA,EAAE,OAAO,YAAY,oBAAoB,OAAO,SAAS,OAAO,GAAG,OAAA,IAAW;AACpF,UAAM,QAAQ,MAAM,QAAQ,UAAU,IAAI,aAAa,CAAC,UAAU;AAGlE,QAAI,YAAY,UAAU,OAAO,WAAW,UAAa,OAAO,UAAU,GAAG;AAC3E,aAAO,SAAS;AAAA,IAAA;AAElB,QAAI,iBAAiB,UAAU,OAAO,gBAAgB,QAAW;AAE3D,UAAA;AACA,UAAA,OAAO,gBAAgB,MAAM;AACb,0BAAA;AAAA,MAAA,WACT,OAAO,gBAAgB,eAAe;AAC7B,0BAAA;AAAA,MAAA,WACT,OAAO,gBAAgB,WAAW;AACzB,0BAAA;AAAA,MAAA,OACb;AACa,0BAAA;AAAA,MAAA;AAGb,aAAA,cAAc,gBAAgB,SAAS;AAAA,IAAA;AAE1C,UAAA,SAAU,MAAM,KAAK;AAAA,MACzB,MAAM,EAAE,GAAG,QAAQ,MAAM;AAAA,MACzB;AAAA,MACA;AAAA,MACA;AAAA,IAAA,CACD,EAAE,MAAM,CAAC,MAAe;AACvB,UAAI,qBAAqB,aAAa,kBAAkB,EAAE,SAAS,OAAO;AACjE,eAAA,EAAE,MAAM,CAAA,GAAI,UAAU,EAAE,YAAY,GAAG,eAAe,IAAI;AAAA,MAAA;AAE7D,YAAA;AAAA,IAAA,CACP;AAGC,QAAA,OAAO,SAAS,aAAa,OAAO,SAAS,kBAC7C,6BAAM,WAAU,WAChB,6BAAM,YAAW,QACjB;AAEQ,cAAA;AAAA,QACN,oCAAoC,OAAO,SAAS,aAAa,WAAW,OAAO,SAAS,UAAU,uBAAuB,MAAM;AAAA,MACrI;AAAA,IAAA;AAGK,WAAA,MAAM,gCAAgC,QAAQ,MAAM;AAAA,EAAA;AAM7D,iBAAe,QACb,MACgE;AAC1D,UAAA,SAAS,MAAM,MAAM,IAAI;AAC3B,QAAA,OAAO,KAAK,WAAW,GAAG;AAC5B,YAAM,IAAI,MAAM,GAAG,OAAO,KAAK,MAAM,qCAAqC;AAAA,IAAA;AAE5E,UAAM,oBAAoB,MAAM,gCAAgC,QAAQ,MAAM;AAC9E,QAAI,CAAC,kBAAkB,KAAK,CAAC,GAAG;AACxB,YAAA,IAAI,MAAM,eAAe;AAAA,IAAA;AAEjC,WAAO,EAAE,GAAG,mBAAmB,MAAM,kBAAkB,KAAK,CAAC,EAAE;AAAA,EAAA;AAMjE,iBAAe,UACb,MACgE;AAC1D,UAAA,SAAS,MAAM,MAAM,IAAI;AAC/B,UAAM,oBAAoB,MAAM,gCAAgC,QAAQ,MAAM;AAE9E,QAAI,CAAC,kBAAkB,KAAK,CAAC,GAAG;AACxB,YAAA,IAAI,MAAM,eAAe;AAAA,IAAA;AAEjC,WAAO,EAAE,GAAG,mBAAmB,MAAM,kBAAkB,KAAK,CAAC,EAAE;AAAA,EAAA;AAMjE,iBAAe,eACb,MACuE;AACjE,UAAA,SAAS,MAAM,MAAM,EAAE,GAAG,MAAM,mBAAmB,MAAM;AAC/D,UAAM,oBAAoB,MAAM,gCAAgC,QAAQ,MAAM;AAC9E,QAAI,CAAC,kBAAkB,KAAK,CAAC,GAAG;AACvB,aAAA;AAAA,IAAA;AAET,WAAO,EAAE,GAAG,mBAAmB,MAAM,kBAAkB,KAAK,CAAC,EAAE;AAAA,EAAA;AAOjE,iBAAe,QACb,MAC4D;AAC5D,QAAI,cAA0E,CAAC;AACzE,UAAA,QAAQ,KAAK,SAAS;AACxB,QAAA,SAAS,KAAK,UAAU;AAE5B,WAAO,MAAM;AACL,YAAA,OAAO,MAAM,MAAM;AAAA,QACvB,GAAG;AAAA,QACH;AAAA,QACA,mBAAmB;AAAA,MAAA,CACpB;AACD,oBAAc,CAAC,GAAG,aAAa,GAAG,KAAK,IAAI;AAC3C,UAAI,YAAY,WAAW,KAAK,YAAY,UAAU,KAAK,SAAS,YAAY;AAC9E;AAAA,MAAA;AAEQ,gBAAA;AAAA,IAAA;AAEL,WAAA;AAAA,EAAA;AAGT,iBAAe,gBAAgB,MAA4C;AACzE,UAAM,EAAE,GAAG,aAAa,QAAQ,CAAC;AAEjC,UAAM,SAA8C;AAEpD,WAAO,MAAM,eAAe;AAAA,MAC1B;AAAA,MACA,OAAO,OAAO;AAAA;AAAA,MACd,SAAS,OAAO;AAAA;AAAA,IAAA,CACjB;AAAA,EAAA;AAGH,iBAAe,iBAAiB,MAA6D;AACrF,UAAA,EAAE,GAAG,OAAA,IAAW;AACtB,WAAO,MAAM,gBAAgB;AAAA,MAC3B;AAAA,MACA,MAAM;AAAA,QACJ,GAAG;AAAA,QACH,oBAAoB,OAAO;AAAA,QAC3B,YAAY,OAAO;AAAA,MACrB;AAAA,MACA,OAAO,OAAO;AAAA,MACd,SAAS,OAAO;AAAA,IAAA,CACjB;AAAA,EAAA;AAGY,iBAAA,gCACbA,SACA,QAC6D;;AAC7D,UAAM,kBAA4C,CAAC;AACnD,UAAM,mBAA6C,CAAC;AAEpD,QAAI,CAACA,SAAQ;AACJ,aAAA;AAAA,IAAA;AAET,UAAM,kBAAqE,CAAC;AACjE,eAAA,UAAU,OAAO,MAAM;AAChC,UAAI,cAAcA,QAAO,UAAU,WAAW,EAAE,SAAS,OAAO,SAAS;AACzE,UAAI,uBAAuB,SAAS;AAClC,sBAAc,MAAM;AAAA,MAAA;AAEtB,UAAI,WAAW,aAAa;AAC1B,eAAO,YAAY,YAAY;AAAA,MAAA,OAC1B;AACW,wBAAA,KAAK,GAAG,YAAY,MAAM;AAAA,MAAA;AAG5C,UAAIA,QAAO,YAAY;AACV,mBAAA,CAAC,YAAY,aAAa,KAAK,OAAO,QAAQ,OAAO,UAAU,GAAG;AAC3E,gBAAM,yBAA8D,CAAC;AACrE,qBAAW,gBAAgB,eAAe;AACpC,gBAAA,gBAAeA,aAAO,WAAW,UAAU,MAA5BA,mBAAgC,aAAa,SAAS;AACzE,gBAAI,wBAAwB,SAAS;AACnC,6BAAe,MAAM;AAAA,YAAA;AAEnB,gBAAA,gBAAgB,WAAW,cAAc;AAC3C,qCAAuB,KAAK;AAAA,gBAC1B,GAAG,aAAa;AAAA,gBAChB,UAAU,aAAa;AAAA,gBACvB,OAAO,aAAa;AAAA,cAAA,CACrB;AAAA,YAAA,OACI;AACL,+BAAiB,KAAK,IAAI,6CAAc,WAAU,CAAA,CAAG;AAAA,YAAA;AAAA,UACvD;AAGK,iBAAA,WAAW,UAAU,IAAI;AAAA,QAAA;AAAA,MAClC;AAGF,sBAAgB,KAAK,MAAM;AAAA,IAAA;AAE7B,WAAO,OAAO;AAEd,QAAI,gBAAgB,SAAS,KAAK,iBAAiB,SAAS,GAAG;AACrD,cAAA;AAAA,QACN,sDAAsD,MAAM;AAAA,QAC5D;AAAA,UACE;AAAA,UACA;AAAA,QAAA;AAAA,MAEJ;AACM,YAAA,IAAI,MAAM,0BAA0B;AAAA,IAAA;AAGrC,WAAA;AAAA,EAAA;AAGT,iBAAe,eAAe,MAAwC;AACpE,WAAO,MAAM,cAAc;AAAA,MACzB,GAAG;AAAA,MACH;AAAA,IAAA,CACD;AAAA,EAAA;AAGI,SAAA;AAAA,IACL,GAAG;AAAA,IACH,QAAQ,QAAQ;AAAA,IAChB,MAAM;AAAA,IACN;AAAA,IACA,QAAQ;AAAA,IACR,KAAK;AAAA,IACL,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,MAAM;AAAA,IACN;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,gBAAgB;AAAA,IAChB,iBAAiB;AAAA,IACjB,eAAe;AAAA,EACjB;AACF;"}
@@ -1,8 +1,6 @@
1
- import { FileMakerError } from './client-types.js';
2
- import { DataApi } from './client.js';
3
- export { DataApi, FileMakerError };
4
- export * from './utils.js';
5
- export * as clientTypes from './client-types.js';
6
1
  export { FetchAdapter } from './adapters/fetch.js';
7
2
  export { OttoAdapter, type OttoAPIKey } from './adapters/otto.js';
8
- export default DataApi;
3
+ export { DataApi, DataApi as default } from './client.js';
4
+ export * as clientTypes from './client-types.js';
5
+ export { FileMakerError } from './client-types.js';
6
+ export * from './utils.js';
package/dist/esm/index.js CHANGED
@@ -1,16 +1,16 @@
1
+ import { FetchAdapter } from "./adapters/fetch.js";
2
+ import { OttoAdapter } from "./adapters/otto.js";
3
+ import { default as default2, default as default3 } from "./client.js";
1
4
  import * as clientTypes from "./client-types.js";
2
5
  import { FileMakerError } from "./client-types.js";
3
- import DataApi from "./client.js";
4
6
  import { removeFMTableNames } from "./utils.js";
5
- import { FetchAdapter } from "./adapters/fetch.js";
6
- import { OttoAdapter } from "./adapters/otto.js";
7
7
  export {
8
- DataApi,
8
+ default2 as DataApi,
9
9
  FetchAdapter,
10
10
  FileMakerError,
11
11
  OttoAdapter,
12
12
  clientTypes,
13
- DataApi as default,
13
+ default3 as default,
14
14
  removeFMTableNames
15
15
  };
16
16
  //# sourceMappingURL=index.js.map
@@ -1,3 +1,3 @@
1
- export { default as upstashTokenStore } from './upstash.js';
2
1
  export { default as fileStore } from './file.js';
3
2
  export { default as memoryStore } from './memory.js';
3
+ export { default as upstashTokenStore } from './upstash.js';
@@ -1,8 +1,8 @@
1
1
  type MaybePromise<T> = Promise<T> | T;
2
- export type TokenStoreDefinitions = {
2
+ export interface TokenStoreDefinitions {
3
3
  getKey?: () => string;
4
4
  getToken: (key: string) => MaybePromise<string | null>;
5
5
  setToken: (key: string, value: string) => void;
6
6
  clearToken: (key: string) => void;
7
- };
7
+ }
8
8
  export {};
@@ -1,5 +1,5 @@
1
- import { TokenStoreDefinitions } from './types.js';
2
1
  import { RedisConfigNodejs } from '@upstash/redis';
2
+ import { TokenStoreDefinitions } from './types.js';
3
3
  export declare function upstashTokenStore(config: RedisConfigNodejs, options?: {
4
4
  prefix?: string;
5
5
  }): TokenStoreDefinitions;