diff --git a/.changeset/perfect-singers-grow.md b/.changeset/perfect-singers-grow.md new file mode 100644 index 0000000..41839e7 --- /dev/null +++ b/.changeset/perfect-singers-grow.md @@ -0,0 +1,5 @@ +--- +'@team-plain/typescript-sdk': minor +--- + +Export Public fragment types, which flatten connection object edges into arrays diff --git a/src/client.ts b/src/client.ts index 816ed49..c73a2fc 100644 --- a/src/client.ts +++ b/src/client.ts @@ -58,9 +58,9 @@ import { import { request } from './request'; import type { Result } from './result'; -type SDKResult = Promise, PlainSDKError>>; +type SDKResult = Promise, PlainSDKError>>; -// Transform takes a GraphQL Fragment and transforms it into a type in which +// Public takes a GraphQL Fragment and transforms it into a type in which // all of its connection-like fields (e.g. fields which have an `edges`) property // are flattened into an array. For example: // @@ -72,17 +72,17 @@ type SDKResult = Promise, PlainSDKError>>; // } // } // -// When we apply Transform to it, we get: +// When we apply Public to it, we get: // -// type Transform = { +// type Public = { // { // customerGroupMemberships: Array // } // -type Transform = T extends { edges: Array<{ node: infer E }> } - ? Array> +export type Public = T extends { edges: Array<{ node: infer E }> } + ? Array> : T extends object - ? { [K in keyof T]: Transform } + ? { [K in keyof T]: Public } : T; function nonNullable(x: T | null | undefined): T { diff --git a/src/index.ts b/src/index.ts index e77e157..e6f2f73 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,5 +1,34 @@ /* eslint-disable simple-import-sort/exports */ +import type { Public } from './client'; +import { + type ActorPartsFragment as OriginalActorPartsFragment, + type AttachmentPartsFragment as OriginalAttachmentPartsFragment, + type CustomerActorPartsFragment as OriginalCustomerActorPartsFragment, + type CustomerEventPartsFragment as OriginalCustomerEventPartsFragment, + type CustomerGroupMembershipPartsFragment as OriginalCustomerGroupMembershipPartsFragment, + type CustomerGroupPartsFragment as OriginalCustomerGroupPartsFragment, + type CustomerPartsFragment as OriginalCustomerPartsFragment, + type DateTimePartsFragment as OriginalDateTimePartsFragment, + type DeletedCustomerActorPartsFragment as OriginalDeletedCustomerActorPartsFragment, + type EmailActorPartsFragment as OriginalEmailActorPartsFragment, + type EmailParticipantPartsFragment as OriginalEmailParticipantPartsFragment, + type EmailPartsFragment as OriginalEmailPartsFragment, + type FileSizePartsFragment as OriginalFileSizePartsFragment, + type InternalActorPartsFragment as OriginalInternalActorPartsFragment, + type LabelPartsFragment as OriginalLabelPartsFragment, + type LabelTypePartsFragment as OriginalLabelTypePartsFragment, + type MachineUserActorPartsFragment as OriginalMachineUserActorPartsFragment, + type MutationErrorPartsFragment as OriginalMutationErrorPartsFragment, + type PageInfoPartsFragment as OriginalPageInfoPartsFragment, + type SystemActorPartsFragment as OriginalSystemActorPartsFragment, + type ThreadEventPartsFragment as OriginalThreadEventPartsFragment, + type ThreadPartsFragment as OriginalThreadPartsFragment, + type TimelineEntryPartsFragment as OriginalTimelineEntryPartsFragment, + type UserActorPartsFragment as OriginalUserActorPartsFragment, + type WorkspacePartsFragment as OriginalWorkspacePartsFragment, +} from './graphql/types'; + export { PlainClient } from './client'; export { uiComponent } from './ui-components'; @@ -24,6 +53,34 @@ export { UserStatus, } from './graphql/types'; +// Export *Public* fragment types +export type ActorPartsFragment = Public; +export type AttachmentPartsFragment = Public; +export type CustomerActorPartsFragment = Public; +export type CustomerGroupMembershipPartsFragment = + Public; +export type CustomerGroupPartsFragment = Public; +export type CustomerPartsFragment = Public; +export type DateTimePartsFragment = Public; +export type DeletedCustomerActorPartsFragment = Public; +export type EmailActorPartsFragment = Public; +export type EmailParticipantPartsFragment = Public; +export type EmailPartsFragment = Public; +export type FileSizePartsFragment = Public; +export type InternalActorPartsFragment = Public; +export type MachineUserActorPartsFragment = Public; +export type MutationErrorPartsFragment = Public; +export type PageInfoPartsFragment = Public; +export type SystemActorPartsFragment = Public; +export type TimelineEntryPartsFragment = Public; +export type UserActorPartsFragment = Public; +export type WorkspacePartsFragment = Public; +export type ThreadPartsFragment = Public; +export type LabelTypePartsFragment = Public; +export type LabelPartsFragment = Public; +export type CustomerEventPartsFragment = Public; +export type ThreadEventPartsFragment = Public; + export type { // Query arguments CustomersFilter, @@ -53,33 +110,6 @@ export type { UpdateCustomerCardConfigInput, UpsertCustomerInput, UpsertCustomTimelineEntryInput, - - // Fragment types - ActorPartsFragment, - AttachmentPartsFragment, - CustomerActorPartsFragment, - CustomerGroupMembershipPartsFragment, - CustomerGroupPartsFragment, - CustomerPartsFragment, - DateTimePartsFragment, - DeletedCustomerActorPartsFragment, - EmailActorPartsFragment, - EmailParticipantPartsFragment, - EmailPartsFragment, - FileSizePartsFragment, - InternalActorPartsFragment, - MachineUserActorPartsFragment, - MutationErrorPartsFragment, - PageInfoPartsFragment, - SystemActorPartsFragment, - TimelineEntryPartsFragment, - UserActorPartsFragment, - WorkspacePartsFragment, - ThreadPartsFragment, - LabelTypePartsFragment, - LabelPartsFragment, - CustomerEventPartsFragment, - ThreadEventPartsFragment, } from './graphql/types'; export type {