-
Notifications
You must be signed in to change notification settings - Fork 174
Expand file tree
/
Copy pathmodel.ts
More file actions
47 lines (32 loc) · 1.71 KB
/
model.ts
File metadata and controls
47 lines (32 loc) · 1.71 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
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import {components} from "@octokit/openapi-types";
import {RestEndpointMethods} from "@octokit/plugin-rest-endpoint-methods/dist-types/generated/method-types";
// Type helpers
type Await<T> = T extends {
then(onfulfilled?: (value: infer U) => unknown): unknown;
}
? U
: T;
type GetElementType<T> = T extends (infer U)[] ? U : never;
type OctokitData<
Operation extends keyof RestEndpointMethods["actions"],
ResultProperty extends keyof Await<ReturnType<RestEndpointMethods["actions"][Operation]>>["data"]
> = GetElementType<Await<ReturnType<RestEndpointMethods["actions"][Operation]>>["data"][ResultProperty]>;
type OctokitRepoData<
Operation extends keyof RestEndpointMethods["repos"],
ResultProperty extends keyof Await<ReturnType<RestEndpointMethods["repos"][Operation]>>["data"]
> = GetElementType<Await<ReturnType<RestEndpointMethods["repos"][Operation]>>["data"][ResultProperty]>;
//
// Domain contracts
//
export type Workflow = OctokitData<"listRepoWorkflows", "workflows">;
export type WorkflowRun = components["schemas"]["workflow-run"];
export type WorkflowRunAttempt = WorkflowRun;
export type WorkflowJob = OctokitData<"listJobsForWorkflowRun", "jobs">;
export type WorkflowStep = GetElementType<WorkflowJob["steps"]>;
export type RepoSecret = OctokitData<"listRepoSecrets", "secrets">;
export type RepoVariable = OctokitData<"listRepoVariables", "variables">;
export type Environment = OctokitRepoData<"getAllEnvironments", "environments">;
export type EnvironmentSecret = OctokitData<"listEnvironmentSecrets", "secrets">;
export type EnvironmentVariable = OctokitData<"listEnvironmentVariables", "variables">;
export type OrgSecret = {name: string};
export type OrgVariable = {name: string; value: string};