Skip to content

Commit 3d7148a

Browse files
Updated public fragment types (#101)
1 parent 715287c commit 3d7148a

File tree

3 files changed

+69
-34
lines changed

3 files changed

+69
-34
lines changed

.changeset/perfect-singers-grow.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'@team-plain/typescript-sdk': minor
3+
---
4+
5+
Export Public fragment types, which flatten connection object edges into arrays

src/client.ts

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,9 @@ import {
5858
import { request } from './request';
5959
import type { Result } from './result';
6060

61-
type SDKResult<T> = Promise<Result<Transform<T>, PlainSDKError>>;
61+
type SDKResult<T> = Promise<Result<Public<T>, PlainSDKError>>;
6262

63-
// Transform takes a GraphQL Fragment and transforms it into a type in which
63+
// Public takes a GraphQL Fragment and transforms it into a type in which
6464
// all of its connection-like fields (e.g. fields which have an `edges`) property
6565
// are flattened into an array. For example:
6666
//
@@ -72,17 +72,17 @@ type SDKResult<T> = Promise<Result<Transform<T>, PlainSDKError>>;
7272
// }
7373
// }
7474
//
75-
// When we apply Transform to it, we get:
75+
// When we apply Public to it, we get:
7676
//
77-
// type Transform<Fragment> = {
77+
// type Public<Fragment> = {
7878
// {
7979
// customerGroupMemberships: Array<CustomerGroupMembershipPartsFragment>
8080
// }
8181
//
82-
type Transform<T> = T extends { edges: Array<{ node: infer E }> }
83-
? Array<Transform<E>>
82+
export type Public<T> = T extends { edges: Array<{ node: infer E }> }
83+
? Array<Public<E>>
8484
: T extends object
85-
? { [K in keyof T]: Transform<T[K]> }
85+
? { [K in keyof T]: Public<T[K]> }
8686
: T;
8787

8888
function nonNullable<T>(x: T | null | undefined): T {

src/index.ts

Lines changed: 57 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,34 @@
11
/* eslint-disable simple-import-sort/exports */
22

3+
import type { Public } from './client';
4+
import {
5+
type ActorPartsFragment as OriginalActorPartsFragment,
6+
type AttachmentPartsFragment as OriginalAttachmentPartsFragment,
7+
type CustomerActorPartsFragment as OriginalCustomerActorPartsFragment,
8+
type CustomerEventPartsFragment as OriginalCustomerEventPartsFragment,
9+
type CustomerGroupMembershipPartsFragment as OriginalCustomerGroupMembershipPartsFragment,
10+
type CustomerGroupPartsFragment as OriginalCustomerGroupPartsFragment,
11+
type CustomerPartsFragment as OriginalCustomerPartsFragment,
12+
type DateTimePartsFragment as OriginalDateTimePartsFragment,
13+
type DeletedCustomerActorPartsFragment as OriginalDeletedCustomerActorPartsFragment,
14+
type EmailActorPartsFragment as OriginalEmailActorPartsFragment,
15+
type EmailParticipantPartsFragment as OriginalEmailParticipantPartsFragment,
16+
type EmailPartsFragment as OriginalEmailPartsFragment,
17+
type FileSizePartsFragment as OriginalFileSizePartsFragment,
18+
type InternalActorPartsFragment as OriginalInternalActorPartsFragment,
19+
type LabelPartsFragment as OriginalLabelPartsFragment,
20+
type LabelTypePartsFragment as OriginalLabelTypePartsFragment,
21+
type MachineUserActorPartsFragment as OriginalMachineUserActorPartsFragment,
22+
type MutationErrorPartsFragment as OriginalMutationErrorPartsFragment,
23+
type PageInfoPartsFragment as OriginalPageInfoPartsFragment,
24+
type SystemActorPartsFragment as OriginalSystemActorPartsFragment,
25+
type ThreadEventPartsFragment as OriginalThreadEventPartsFragment,
26+
type ThreadPartsFragment as OriginalThreadPartsFragment,
27+
type TimelineEntryPartsFragment as OriginalTimelineEntryPartsFragment,
28+
type UserActorPartsFragment as OriginalUserActorPartsFragment,
29+
type WorkspacePartsFragment as OriginalWorkspacePartsFragment,
30+
} from './graphql/types';
31+
332
export { PlainClient } from './client';
433

534
export { uiComponent } from './ui-components';
@@ -24,6 +53,34 @@ export {
2453
UserStatus,
2554
} from './graphql/types';
2655

56+
// Export *Public* fragment types
57+
export type ActorPartsFragment = Public<OriginalActorPartsFragment>;
58+
export type AttachmentPartsFragment = Public<OriginalAttachmentPartsFragment>;
59+
export type CustomerActorPartsFragment = Public<OriginalCustomerActorPartsFragment>;
60+
export type CustomerGroupMembershipPartsFragment =
61+
Public<OriginalCustomerGroupMembershipPartsFragment>;
62+
export type CustomerGroupPartsFragment = Public<OriginalCustomerGroupPartsFragment>;
63+
export type CustomerPartsFragment = Public<OriginalCustomerPartsFragment>;
64+
export type DateTimePartsFragment = Public<OriginalDateTimePartsFragment>;
65+
export type DeletedCustomerActorPartsFragment = Public<OriginalDeletedCustomerActorPartsFragment>;
66+
export type EmailActorPartsFragment = Public<OriginalEmailActorPartsFragment>;
67+
export type EmailParticipantPartsFragment = Public<OriginalEmailParticipantPartsFragment>;
68+
export type EmailPartsFragment = Public<OriginalEmailPartsFragment>;
69+
export type FileSizePartsFragment = Public<OriginalFileSizePartsFragment>;
70+
export type InternalActorPartsFragment = Public<OriginalInternalActorPartsFragment>;
71+
export type MachineUserActorPartsFragment = Public<OriginalMachineUserActorPartsFragment>;
72+
export type MutationErrorPartsFragment = Public<OriginalMutationErrorPartsFragment>;
73+
export type PageInfoPartsFragment = Public<OriginalPageInfoPartsFragment>;
74+
export type SystemActorPartsFragment = Public<OriginalSystemActorPartsFragment>;
75+
export type TimelineEntryPartsFragment = Public<OriginalTimelineEntryPartsFragment>;
76+
export type UserActorPartsFragment = Public<OriginalUserActorPartsFragment>;
77+
export type WorkspacePartsFragment = Public<OriginalWorkspacePartsFragment>;
78+
export type ThreadPartsFragment = Public<OriginalThreadPartsFragment>;
79+
export type LabelTypePartsFragment = Public<OriginalLabelTypePartsFragment>;
80+
export type LabelPartsFragment = Public<OriginalLabelPartsFragment>;
81+
export type CustomerEventPartsFragment = Public<OriginalCustomerEventPartsFragment>;
82+
export type ThreadEventPartsFragment = Public<OriginalThreadEventPartsFragment>;
83+
2784
export type {
2885
// Query arguments
2986
CustomersFilter,
@@ -53,33 +110,6 @@ export type {
53110
UpdateCustomerCardConfigInput,
54111
UpsertCustomerInput,
55112
UpsertCustomTimelineEntryInput,
56-
57-
// Fragment types
58-
ActorPartsFragment,
59-
AttachmentPartsFragment,
60-
CustomerActorPartsFragment,
61-
CustomerGroupMembershipPartsFragment,
62-
CustomerGroupPartsFragment,
63-
CustomerPartsFragment,
64-
DateTimePartsFragment,
65-
DeletedCustomerActorPartsFragment,
66-
EmailActorPartsFragment,
67-
EmailParticipantPartsFragment,
68-
EmailPartsFragment,
69-
FileSizePartsFragment,
70-
InternalActorPartsFragment,
71-
MachineUserActorPartsFragment,
72-
MutationErrorPartsFragment,
73-
PageInfoPartsFragment,
74-
SystemActorPartsFragment,
75-
TimelineEntryPartsFragment,
76-
UserActorPartsFragment,
77-
WorkspacePartsFragment,
78-
ThreadPartsFragment,
79-
LabelTypePartsFragment,
80-
LabelPartsFragment,
81-
CustomerEventPartsFragment,
82-
ThreadEventPartsFragment,
83113
} from './graphql/types';
84114

85115
export type {

0 commit comments

Comments
 (0)