-
Notifications
You must be signed in to change notification settings - Fork 738
Expand file tree
/
Copy pathrefBuilder.ts
More file actions
33 lines (27 loc) · 1.47 KB
/
refBuilder.ts
File metadata and controls
33 lines (27 loc) · 1.47 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/*---------------------------------------------------------------------------------------------
* Copyright (c) Microsoft Corporation. All rights reserved.
* Licensed under the MIT License. See License.txt in the project root for license information.
*--------------------------------------------------------------------------------------------*/
import { UserBuilder } from './userBuilder';
import { RepositoryBuilder } from './repoBuilder';
import { createBuilderClass } from '../base';
import { OctokitCommon } from '../../../github/common';
type RefUnion = OctokitCommon.PullsListResponseItemHead & OctokitCommon.PullsListResponseItemBase;
export const RefBuilder = createBuilderClass<NonNullable<RefUnion>>()({
label: { default: 'octocat:new-feature' },
ref: { default: 'new-feature' },
user: { linked: UserBuilder },
sha: { default: '0000000000000000000000000000000000000000' },
// Must cast to any here to prevent recursive type.
repo: { linked: <any>RepositoryBuilder },
});
// Variant where user is guaranteed non-null.
type NonNullUserRef = Omit<RefUnion, 'user'> & { user: NonNullable<RefUnion['user']> };
export const NonNullUserRefBuilder = createBuilderClass<NonNullUserRef>()({
label: { default: 'octocat:new-feature' },
ref: { default: 'new-feature' },
user: { linked: UserBuilder }, // non-null guarantee
sha: { default: '0000000000000000000000000000000000000000' },
repo: { linked: <any>RepositoryBuilder },
});
export type RefBuilder = InstanceType<typeof RefBuilder>;