diff --git a/package-lock.json b/package-lock.json index 5a78988b..f2111372 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,7 +6,7 @@ "packages": { "": { "name": "airtable", - "version": "0.11.5", + "version": "0.11.6", "license": "MIT", "dependencies": { "@types/node": ">=8.0.0 <15", diff --git a/src/attachment.ts b/src/attachment.ts index bf025be6..a9c4c61d 100644 --- a/src/attachment.ts +++ b/src/attachment.ts @@ -12,3 +12,12 @@ export interface Attachment { full: Thumbnail; }; } + +export interface AttachmentReference extends Partial { + id: Attachment['id']; +} + +export interface CreateAttachment { + url: Attachment['url']; + filename?: Attachment['filename']; +} diff --git a/src/field_set.ts b/src/field_set.ts index 8a5e79c6..ecc2ac75 100644 --- a/src/field_set.ts +++ b/src/field_set.ts @@ -1,5 +1,5 @@ import {Collaborator} from './collaborator'; -import {Attachment} from './attachment'; +import {Attachment, AttachmentReference, CreateAttachment} from './attachment'; export interface FieldSet { [key: string]: @@ -10,5 +10,5 @@ export interface FieldSet { | Collaborator | ReadonlyArray | ReadonlyArray - | ReadonlyArray; + | ReadonlyArray; } diff --git a/src/table.ts b/src/table.ts index 8660505c..5a34330a 100644 --- a/src/table.ts +++ b/src/table.ts @@ -13,13 +13,20 @@ import Base from './base'; import {Records} from './records'; import {FieldSet} from './field_set'; import {RecordData} from './record_data'; +import {Attachment, AttachmentReference, CreateAttachment} from './attachment'; /* eslint-disable @typescript-eslint/no-explicit-any */ type TableError = any; /* eslint-enable @typescript-eslint/no-explicit-any */ -type CreateRecord = Pick>, 'fields'>; -type CreateRecords = string[] | Partial[] | CreateRecord[]; +type PartialFields = { + [Prop in keyof TFields]?: TFields[Prop] extends Attachment[] + ? (CreateAttachment | AttachmentReference)[] + : TFields[Prop]; +} + +type CreateRecord = Pick>, 'fields'>; +type CreateRecords = string[] | PartialFields[] | CreateRecord[]; type OptionalParameters = { typecast?: boolean; @@ -51,7 +58,7 @@ interface TableSelectRecord { (params?: QueryParams): Query; } -interface TableCreateRecords { +interface TableCreateRecords> { (recordsData: CreateRecords, optionalParameters?: OptionalParameters): Promise< Records >; @@ -61,29 +68,29 @@ interface TableCreateRecords { done: RecordCollectionCallback ): void; (recordsData: CreateRecords, done: RecordCollectionCallback): void; - (recordData: string | Partial, optionalParameters?: OptionalParameters): Promise< + (recordData: string | PartialFields, optionalParameters?: OptionalParameters): Promise< Record >; ( - recordData: string | Partial, + recordData: string | PartialFields, optionalParameters: OptionalParameters, done: RecordCallback ): void; - (recordData: string | Partial, done: RecordCallback): void; + (recordData: string | PartialFields, done: RecordCallback): void; } interface TableChangeRecords { - (recordId: string, recordData: Partial, opts?: OptionalParameters): Promise< + (recordId: string, recordData: PartialFields, opts?: OptionalParameters): Promise< Record >; ( recordId: string, - recordData: Partial, + recordData: PartialFields, opts: OptionalParameters, done: RecordCallback ): void; - (recordId: string, recordData: Partial, done: RecordCallback): void; - (recordsData: RecordData>[], opts?: OptionalParameters): Promise< + (recordId: string, recordData: PartialFields, done: RecordCallback): void; + (recordsData: RecordData>[], opts?: OptionalParameters): Promise< Records >; ( @@ -91,7 +98,7 @@ interface TableChangeRecords { opts: OptionalParameters, done: RecordCollectionCallback ): void; - (recordsData: RecordData>[], done: RecordCollectionCallback): void; + (recordsData: RecordData>[], done: RecordCollectionCallback): void; } interface TableDestroyRecords {