@shivaedev/github 0.8.6 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/CHANGELOG.md +47 -0
  2. package/README.md +142 -8
  3. package/dist/GitHub.d.ts +360 -18
  4. package/dist/GitHub.d.ts.map +1 -1
  5. package/dist/GitHub.js +19 -6
  6. package/dist/GitHub.js.map +1 -1
  7. package/dist/GitHubToken.d.ts +2 -2
  8. package/dist/GitHubToken.d.ts.map +1 -1
  9. package/dist/GitHubToken.js +1 -1
  10. package/dist/GitHubToken.js.map +1 -1
  11. package/dist/adapters/resolveApiUrl.d.ts +2 -0
  12. package/dist/adapters/resolveApiUrl.d.ts.map +1 -0
  13. package/dist/adapters/resolveApiUrl.js +6 -0
  14. package/dist/adapters/resolveApiUrl.js.map +1 -0
  15. package/dist/adapters/zipEntries.d.ts +17 -0
  16. package/dist/adapters/zipEntries.d.ts.map +1 -0
  17. package/dist/adapters/zipEntries.js +57 -0
  18. package/dist/adapters/zipEntries.js.map +1 -0
  19. package/dist/appTokens.d.ts +6 -0
  20. package/dist/appTokens.d.ts.map +1 -0
  21. package/dist/appTokens.js +65 -0
  22. package/dist/appTokens.js.map +1 -0
  23. package/dist/artifactErrors.d.ts +34 -0
  24. package/dist/artifactErrors.d.ts.map +1 -0
  25. package/dist/artifactErrors.js +27 -0
  26. package/dist/artifactErrors.js.map +1 -0
  27. package/dist/artifactExtraction.d.ts +12 -0
  28. package/dist/artifactExtraction.d.ts.map +1 -0
  29. package/dist/artifactExtraction.js +40 -0
  30. package/dist/artifactExtraction.js.map +1 -0
  31. package/dist/artifactPaths.d.ts +4 -0
  32. package/dist/artifactPaths.d.ts.map +1 -0
  33. package/dist/artifactPaths.js +35 -0
  34. package/dist/artifactPaths.js.map +1 -0
  35. package/dist/artifacts.d.ts +13 -8
  36. package/dist/artifacts.d.ts.map +1 -1
  37. package/dist/artifacts.js +15 -8
  38. package/dist/artifacts.js.map +1 -1
  39. package/dist/authenticatedRequest.d.ts +1 -1
  40. package/dist/authenticatedRequest.d.ts.map +1 -1
  41. package/dist/authenticatedRequest.js +3 -2
  42. package/dist/authenticatedRequest.js.map +1 -1
  43. package/dist/cache.d.ts +2 -0
  44. package/dist/cache.d.ts.map +1 -1
  45. package/dist/cache.js +3 -0
  46. package/dist/cache.js.map +1 -1
  47. package/dist/checkRuns.d.ts +116 -11
  48. package/dist/checkRuns.d.ts.map +1 -1
  49. package/dist/checkRuns.js +41 -18
  50. package/dist/checkRuns.js.map +1 -1
  51. package/dist/gitSchemas.d.ts +195 -0
  52. package/dist/gitSchemas.d.ts.map +1 -0
  53. package/dist/gitSchemas.js +45 -0
  54. package/dist/gitSchemas.js.map +1 -0
  55. package/dist/githubApp.d.ts +2 -4
  56. package/dist/githubApp.d.ts.map +1 -1
  57. package/dist/githubApp.js +5 -55
  58. package/dist/githubApp.js.map +1 -1
  59. package/dist/installationClients.d.ts +461 -0
  60. package/dist/installationClients.d.ts.map +1 -0
  61. package/dist/installationClients.js +37 -0
  62. package/dist/installationClients.js.map +1 -0
  63. package/dist/json.d.ts.map +1 -1
  64. package/dist/json.js +4 -0
  65. package/dist/json.js.map +1 -1
  66. package/dist/pagedLists.d.ts +15 -0
  67. package/dist/pagedLists.d.ts.map +1 -0
  68. package/dist/pagedLists.js +16 -0
  69. package/dist/pagedLists.js.map +1 -0
  70. package/dist/repositoryReads.d.ts +261 -0
  71. package/dist/repositoryReads.d.ts.map +1 -0
  72. package/dist/repositoryReads.js +30 -0
  73. package/dist/repositoryReads.js.map +1 -0
  74. package/dist/repositorySchemas.d.ts +73 -0
  75. package/dist/repositorySchemas.d.ts.map +1 -0
  76. package/dist/repositorySchemas.js +38 -0
  77. package/dist/repositorySchemas.js.map +1 -0
  78. package/dist/representations.d.ts +4 -4
  79. package/dist/representations.d.ts.map +1 -1
  80. package/dist/representations.js +3 -2
  81. package/dist/representations.js.map +1 -1
  82. package/dist/requests.d.ts +2 -2
  83. package/dist/requests.d.ts.map +1 -1
  84. package/dist/requests.js +11 -9
  85. package/dist/requests.js.map +1 -1
  86. package/dist/status.d.ts +1 -1
  87. package/dist/status.d.ts.map +1 -1
  88. package/dist/stickyComments.d.ts +1 -1
  89. package/dist/viewerRepositoryAccess.d.ts +46 -0
  90. package/dist/viewerRepositoryAccess.d.ts.map +1 -0
  91. package/dist/viewerRepositoryAccess.js +54 -0
  92. package/dist/viewerRepositoryAccess.js.map +1 -0
  93. package/package.json +14 -7
  94. package/src/GitHub.ts +32 -11
  95. package/src/GitHubToken.ts +4 -2
  96. package/src/adapters/resolveApiUrl.ts +5 -0
  97. package/src/adapters/zipEntries.ts +69 -0
  98. package/src/appTokens.ts +93 -0
  99. package/src/artifactErrors.ts +26 -0
  100. package/src/artifactExtraction.ts +62 -0
  101. package/src/artifactPaths.ts +36 -0
  102. package/src/artifacts.ts +36 -39
  103. package/src/authenticatedRequest.ts +3 -1
  104. package/src/cache.ts +5 -0
  105. package/src/checkRuns.ts +58 -18
  106. package/src/gitSchemas.ts +52 -0
  107. package/src/githubApp.ts +6 -80
  108. package/src/installationClients.ts +50 -0
  109. package/src/json.ts +4 -0
  110. package/src/pagedLists.ts +40 -0
  111. package/src/repositoryReads.ts +61 -0
  112. package/src/repositorySchemas.ts +43 -0
  113. package/src/representations.ts +5 -4
  114. package/src/requests.ts +11 -9
  115. package/src/viewerRepositoryAccess.ts +66 -0
@@ -0,0 +1,15 @@
1
+ import { Effect, Schema, Stream } from "effect";
2
+ import type { ServiceUnavailable } from "@shivaedev/errors/taxonomy.ts";
3
+ import type { Representations } from "#representations.ts";
4
+ export interface ListOptions {
5
+ readonly arrayKey?: string | undefined;
6
+ readonly beforeRequest?: (resource: string) => Effect.Effect<void, ServiceUnavailable>;
7
+ readonly onDecodeError?: "fail" | "skip" | undefined;
8
+ readonly responseByteLimit?: number | undefined;
9
+ }
10
+ export declare function decodedPages<TSchema extends Schema.Constraint>(client: Representations, path: string, schema: TSchema, options?: ListOptions | number): Stream.Stream<{
11
+ hasNext: boolean;
12
+ items: TSchema["Type"][];
13
+ skipped: number;
14
+ }, import("./errors.ts").GitHubAppError | import("./errors.ts").GitHubConversationLocked | import("./errors.ts").GitHubPermissionDenied | import("./errors.ts").GitHubRateLimited | import("./errors.ts").GitHubTransportError | import("@shivaedev/http/errors.ts").InvalidBodyLimit | import("effect/Cause").NoSuchElementError | import("@shivaedev/http/errors.ts").PaginationLinkError | import("@shivaedev/http/errors.ts").ResponseBodyTooLarge | Schema.SchemaError | ServiceUnavailable | import("@shivaedev/http/errors.ts").RemoteStatusError, TSchema["DecodingServices"]>;
15
+ //# sourceMappingURL=pagedLists.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagedLists.d.ts","sourceRoot":"","sources":["../src/pagedLists.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAU,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACxE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,MAAM,WAAW,WAAW;IAC3B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAC;IACvF,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACrD,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAChD;AAED,wBAAgB,YAAY,CAAC,OAAO,SAAS,MAAM,CAAC,UAAU,EAC7D,MAAM,EAAE,eAAe,EACvB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,OAAO,EACf,OAAO,GAAE,WAAW,GAAG,MAAW;;;;ujBAwBlC"}
@@ -0,0 +1,16 @@
1
+ import { Effect, Option, Schema, Stream } from "effect";
2
+ export function decodedPages(client, path, schema, options = {}) {
3
+ const settings = typeof options === "number" ? { responseByteLimit: options } : options;
4
+ const decode = Schema.decodeUnknownEffect(schema);
5
+ return Stream.unwrap(client.list(path, settings.beforeRequest, settings.responseByteLimit)).pipe(Stream.mapEffect((page) => Effect.gen(function* () {
6
+ const body = yield* page.decode(Schema.Unknown);
7
+ const source = settings.arrayKey === undefined
8
+ ? body
9
+ : (yield* Schema.decodeUnknownEffect(Schema.Record(Schema.String, Schema.Unknown))(body))[settings.arrayKey];
10
+ const values = yield* Schema.decodeUnknownEffect(Schema.Array(Schema.Unknown))(source);
11
+ const decoded = yield* Effect.forEach(values, (value) => decode(value).pipe(Effect.map(Option.some), Effect.catchTag("SchemaError", (error) => (settings.onDecodeError === "skip" ? Effect.succeed(Option.none()) : Effect.fail(error)))));
12
+ const items = decoded.flatMap(Option.toArray);
13
+ return { hasNext: page.hasNext, items, skipped: values.length - items.length };
14
+ })));
15
+ }
16
+ //# sourceMappingURL=pagedLists.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagedLists.js","sourceRoot":"","sources":["../src/pagedLists.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAWxD,MAAM,UAAU,YAAY,CAC3B,MAAuB,EACvB,IAAY,EACZ,MAAe,EACf,OAAO,GAAyB,EAAE;IAElC,MAAM,QAAQ,GAAG,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IACxF,MAAM,MAAM,GAAG,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAClD,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,iBAAiB,CAAC,CAAC,CAAC,IAAI,CAC/F,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,EAAE,CACzB,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACnB,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAChD,MAAM,MAAM,GACX,QAAQ,CAAC,QAAQ,KAAK,SAAS;YAC9B,CAAC,CAAC,IAAI;YACN,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC/G,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;QACvF,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE,CACvD,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CACjB,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,EACvB,MAAM,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,QAAQ,CAAC,aAAa,KAAK,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CACnI,CACD,CAAC;QACF,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9C,OAAO,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC;IAChF,CAAC,CAAC,CACF,CACD,CAAC;AACH,CAAC"}
@@ -0,0 +1,261 @@
1
+ import { Effect } from "effect";
2
+ import { type ListOptions } from "#pagedLists.ts";
3
+ import type { Representations } from "#representations.ts";
4
+ export interface RepositoryListOptions extends ListOptions {
5
+ readonly query?: Readonly<Record<string, string | number | boolean | undefined>>;
6
+ }
7
+ export declare function repositoryReads(client: Representations): {
8
+ compareCommits: (owner: string, repo: string, base: string, head: string, byteLimit?: number) => Effect.Effect<{
9
+ readonly aheadBy: number;
10
+ readonly behindBy: number;
11
+ readonly commits: readonly {
12
+ readonly author: {
13
+ readonly avatarUrl: string;
14
+ readonly htmlUrl: string;
15
+ readonly id: number;
16
+ readonly login: string;
17
+ readonly type: string;
18
+ } | null;
19
+ readonly commit: {
20
+ readonly author: {
21
+ readonly date: string;
22
+ readonly email: string;
23
+ readonly name: string;
24
+ } | null;
25
+ readonly committer: {
26
+ readonly date: string;
27
+ readonly email: string;
28
+ readonly name: string;
29
+ } | null;
30
+ readonly message: string;
31
+ readonly tree: {
32
+ readonly sha: string;
33
+ readonly url: string;
34
+ };
35
+ };
36
+ readonly committer: {
37
+ readonly avatarUrl: string;
38
+ readonly htmlUrl: string;
39
+ readonly id: number;
40
+ readonly login: string;
41
+ readonly type: string;
42
+ } | null;
43
+ readonly htmlUrl: string;
44
+ readonly parents: readonly {
45
+ readonly sha: string;
46
+ readonly url: string;
47
+ }[];
48
+ readonly sha: string;
49
+ }[];
50
+ readonly files?: readonly {
51
+ readonly additions: number;
52
+ readonly changes: number;
53
+ readonly deletions: number;
54
+ readonly filename: string;
55
+ readonly patch?: string | undefined;
56
+ readonly previousFilename?: string | undefined;
57
+ readonly sha: string;
58
+ readonly status: string;
59
+ }[] | undefined;
60
+ readonly status: "ahead" | "behind" | "diverged" | "identical";
61
+ readonly totalCommits: number;
62
+ }, import("./errors.ts").GitHubAppError | import("./errors.ts").GitHubConversationLocked | import("./errors.ts").GitHubPermissionDenied | import("./errors.ts").GitHubRateLimited | import("./errors.ts").GitHubTransportError | import("@shivaedev/http/errors.ts").InvalidBodyLimit | import("@shivaedev/http/errors.ts").ResponseBodyTooLarge | import("effect/Schema").SchemaError | import("@shivaedev/http/errors.ts").RemoteStatusError, never>;
63
+ getCollaboratorPermission: (owner: string, repo: string, username: string, byteLimit?: number) => Effect.Effect<{
64
+ readonly permission: string;
65
+ readonly roleName: string;
66
+ readonly user: {
67
+ readonly avatarUrl: string;
68
+ readonly htmlUrl: string;
69
+ readonly id: number;
70
+ readonly login: string;
71
+ readonly type: string;
72
+ };
73
+ }, import("./errors.ts").GitHubAppError | import("./errors.ts").GitHubConversationLocked | import("./errors.ts").GitHubPermissionDenied | import("./errors.ts").GitHubRateLimited | import("./errors.ts").GitHubTransportError | import("@shivaedev/http/errors.ts").InvalidBodyLimit | import("@shivaedev/http/errors.ts").ResponseBodyTooLarge | import("effect/Schema").SchemaError | import("@shivaedev/http/errors.ts").RemoteStatusError, never>;
74
+ getCommit: (owner: string, repo: string, ref: string, byteLimit?: number) => Effect.Effect<{
75
+ readonly author: {
76
+ readonly avatarUrl: string;
77
+ readonly htmlUrl: string;
78
+ readonly id: number;
79
+ readonly login: string;
80
+ readonly type: string;
81
+ } | null;
82
+ readonly commit: {
83
+ readonly author: {
84
+ readonly date: string;
85
+ readonly email: string;
86
+ readonly name: string;
87
+ } | null;
88
+ readonly committer: {
89
+ readonly date: string;
90
+ readonly email: string;
91
+ readonly name: string;
92
+ } | null;
93
+ readonly message: string;
94
+ readonly tree: {
95
+ readonly sha: string;
96
+ readonly url: string;
97
+ };
98
+ };
99
+ readonly committer: {
100
+ readonly avatarUrl: string;
101
+ readonly htmlUrl: string;
102
+ readonly id: number;
103
+ readonly login: string;
104
+ readonly type: string;
105
+ } | null;
106
+ readonly htmlUrl: string;
107
+ readonly parents: readonly {
108
+ readonly sha: string;
109
+ readonly url: string;
110
+ }[];
111
+ readonly sha: string;
112
+ readonly files?: readonly {
113
+ readonly additions: number;
114
+ readonly changes: number;
115
+ readonly deletions: number;
116
+ readonly filename: string;
117
+ readonly patch?: string | undefined;
118
+ readonly previousFilename?: string | undefined;
119
+ readonly sha: string;
120
+ readonly status: string;
121
+ }[] | undefined;
122
+ readonly stats: {
123
+ readonly additions: number;
124
+ readonly deletions: number;
125
+ readonly total: number;
126
+ };
127
+ }, import("./errors.ts").GitHubAppError | import("./errors.ts").GitHubConversationLocked | import("./errors.ts").GitHubPermissionDenied | import("./errors.ts").GitHubRateLimited | import("./errors.ts").GitHubTransportError | import("@shivaedev/http/errors.ts").InvalidBodyLimit | import("@shivaedev/http/errors.ts").ResponseBodyTooLarge | import("effect/Schema").SchemaError | import("@shivaedev/http/errors.ts").RemoteStatusError, never>;
128
+ getIssue: (owner: string, repo: string, number: number, byteLimit?: number) => Effect.Effect<{
129
+ readonly body: string | null;
130
+ readonly closedAt: string | null;
131
+ readonly createdAt: string;
132
+ readonly htmlUrl: string;
133
+ readonly id: number;
134
+ readonly labels: readonly (string | {
135
+ readonly name?: string | undefined;
136
+ })[];
137
+ readonly number: number;
138
+ readonly pullRequest?: {
139
+ readonly url: string;
140
+ } | undefined;
141
+ readonly state: "closed" | "open";
142
+ readonly title: string;
143
+ readonly updatedAt: string;
144
+ readonly user: {
145
+ readonly avatarUrl: string;
146
+ readonly htmlUrl: string;
147
+ readonly id: number;
148
+ readonly login: string;
149
+ readonly type: string;
150
+ } | null;
151
+ }, import("./errors.ts").GitHubAppError | import("./errors.ts").GitHubConversationLocked | import("./errors.ts").GitHubPermissionDenied | import("./errors.ts").GitHubRateLimited | import("./errors.ts").GitHubTransportError | import("@shivaedev/http/errors.ts").InvalidBodyLimit | import("@shivaedev/http/errors.ts").ResponseBodyTooLarge | import("effect/Schema").SchemaError | import("@shivaedev/http/errors.ts").RemoteStatusError, never>;
152
+ getTree: (owner: string, repo: string, sha: string, options?: {
153
+ readonly recursive?: boolean;
154
+ readonly responseByteLimit?: number | undefined;
155
+ }) => Effect.Effect<{
156
+ readonly sha: string;
157
+ readonly tree: readonly {
158
+ readonly mode: string;
159
+ readonly path: string;
160
+ readonly sha: string;
161
+ readonly size?: number | undefined;
162
+ readonly type: "blob" | "commit" | "tree";
163
+ readonly url?: string | undefined;
164
+ }[];
165
+ readonly truncated: boolean;
166
+ readonly url: string;
167
+ }, import("./errors.ts").GitHubAppError | import("./errors.ts").GitHubConversationLocked | import("./errors.ts").GitHubPermissionDenied | import("./errors.ts").GitHubRateLimited | import("./errors.ts").GitHubTransportError | import("@shivaedev/http/errors.ts").InvalidBodyLimit | import("@shivaedev/http/errors.ts").ResponseBodyTooLarge | import("effect/Schema").SchemaError | import("@shivaedev/http/errors.ts").RemoteStatusError, never>;
168
+ getUser: (username?: string, byteLimit?: number) => Effect.Effect<{
169
+ readonly avatarUrl: string;
170
+ readonly htmlUrl: string;
171
+ readonly id: number;
172
+ readonly login: string;
173
+ readonly type: string;
174
+ }, import("./errors.ts").GitHubAppError | import("./errors.ts").GitHubConversationLocked | import("./errors.ts").GitHubPermissionDenied | import("./errors.ts").GitHubRateLimited | import("./errors.ts").GitHubTransportError | import("@shivaedev/http/errors.ts").InvalidBodyLimit | import("@shivaedev/http/errors.ts").ResponseBodyTooLarge | import("effect/Schema").SchemaError | import("@shivaedev/http/errors.ts").RemoteStatusError, never>;
175
+ listCommits: (owner: string, repo: string, options?: RepositoryListOptions) => Effect.Effect<import("effect/Stream").Stream<{
176
+ hasNext: boolean;
177
+ items: {
178
+ readonly author: {
179
+ readonly avatarUrl: string;
180
+ readonly htmlUrl: string;
181
+ readonly id: number;
182
+ readonly login: string;
183
+ readonly type: string;
184
+ } | null;
185
+ readonly commit: {
186
+ readonly author: {
187
+ readonly date: string;
188
+ readonly email: string;
189
+ readonly name: string;
190
+ } | null;
191
+ readonly committer: {
192
+ readonly date: string;
193
+ readonly email: string;
194
+ readonly name: string;
195
+ } | null;
196
+ readonly message: string;
197
+ readonly tree: {
198
+ readonly sha: string;
199
+ readonly url: string;
200
+ };
201
+ };
202
+ readonly committer: {
203
+ readonly avatarUrl: string;
204
+ readonly htmlUrl: string;
205
+ readonly id: number;
206
+ readonly login: string;
207
+ readonly type: string;
208
+ } | null;
209
+ readonly htmlUrl: string;
210
+ readonly parents: readonly {
211
+ readonly sha: string;
212
+ readonly url: string;
213
+ }[];
214
+ readonly sha: string;
215
+ }[];
216
+ skipped: number;
217
+ }, import("./errors.ts").GitHubAppError | import("./errors.ts").GitHubConversationLocked | import("./errors.ts").GitHubPermissionDenied | import("./errors.ts").GitHubRateLimited | import("./errors.ts").GitHubTransportError | import("@shivaedev/http/errors.ts").InvalidBodyLimit | import("effect/Cause").NoSuchElementError | import("@shivaedev/http/errors.ts").PaginationLinkError | import("@shivaedev/http/errors.ts").ResponseBodyTooLarge | import("effect/Schema").SchemaError | import("@shivaedev/errors/taxonomy.ts").ServiceUnavailable | import("@shivaedev/http/errors.ts").RemoteStatusError, never>, never, never>;
218
+ listIssues: (owner: string, repo: string, options?: RepositoryListOptions) => Effect.Effect<import("effect/Stream").Stream<{
219
+ hasNext: boolean;
220
+ items: {
221
+ readonly body: string | null;
222
+ readonly closedAt: string | null;
223
+ readonly createdAt: string;
224
+ readonly htmlUrl: string;
225
+ readonly id: number;
226
+ readonly labels: readonly (string | {
227
+ readonly name?: string | undefined;
228
+ })[];
229
+ readonly number: number;
230
+ readonly pullRequest?: {
231
+ readonly url: string;
232
+ } | undefined;
233
+ readonly state: "closed" | "open";
234
+ readonly title: string;
235
+ readonly updatedAt: string;
236
+ readonly user: {
237
+ readonly avatarUrl: string;
238
+ readonly htmlUrl: string;
239
+ readonly id: number;
240
+ readonly login: string;
241
+ readonly type: string;
242
+ } | null;
243
+ }[];
244
+ skipped: number;
245
+ }, import("./errors.ts").GitHubAppError | import("./errors.ts").GitHubConversationLocked | import("./errors.ts").GitHubPermissionDenied | import("./errors.ts").GitHubRateLimited | import("./errors.ts").GitHubTransportError | import("@shivaedev/http/errors.ts").InvalidBodyLimit | import("effect/Cause").NoSuchElementError | import("@shivaedev/http/errors.ts").PaginationLinkError | import("@shivaedev/http/errors.ts").ResponseBodyTooLarge | import("effect/Schema").SchemaError | import("@shivaedev/errors/taxonomy.ts").ServiceUnavailable | import("@shivaedev/http/errors.ts").RemoteStatusError, never>, never, never>;
246
+ listPullRequestFiles: (owner: string, repo: string, number: number, options?: RepositoryListOptions) => Effect.Effect<import("effect/Stream").Stream<{
247
+ hasNext: boolean;
248
+ items: {
249
+ readonly additions: number;
250
+ readonly changes: number;
251
+ readonly deletions: number;
252
+ readonly filename: string;
253
+ readonly patch?: string | undefined;
254
+ readonly previousFilename?: string | undefined;
255
+ readonly sha: string;
256
+ readonly status: string;
257
+ }[];
258
+ skipped: number;
259
+ }, import("./errors.ts").GitHubAppError | import("./errors.ts").GitHubConversationLocked | import("./errors.ts").GitHubPermissionDenied | import("./errors.ts").GitHubRateLimited | import("./errors.ts").GitHubTransportError | import("@shivaedev/http/errors.ts").InvalidBodyLimit | import("effect/Cause").NoSuchElementError | import("@shivaedev/http/errors.ts").PaginationLinkError | import("@shivaedev/http/errors.ts").ResponseBodyTooLarge | import("effect/Schema").SchemaError | import("@shivaedev/errors/taxonomy.ts").ServiceUnavailable | import("@shivaedev/http/errors.ts").RemoteStatusError, never>, never, never>;
260
+ };
261
+ //# sourceMappingURL=repositoryReads.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repositoryReads.d.ts","sourceRoot":"","sources":["../src/repositoryReads.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,OAAO,EAAgB,KAAK,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAEhE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAE3D,MAAM,WAAW,qBAAsB,SAAQ,WAAW;IACzD,QAAQ,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC;CACjF;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe;IAcrD,cAAc,UAAU,MAAM,QAAQ,MAAM,QAAQ,MAAM,QAAQ,MAAM,cAAc,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAI5F,yBAAyB,UAAU,MAAM,QAAQ,MAAM,YAAY,MAAM,cAAc,MAAM;;;;;;;;;;;IAI7F,SAAS,UAAU,MAAM,QAAQ,MAAM,OAAO,MAAM,cAAc,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAExE,QAAQ,UAAU,MAAM,QAAQ,MAAM,UAAU,MAAM,cAAc,MAAM;;;;;;;;;;;;;;;;;;;;;;;;IAE1E,OAAO,UACC,MAAM,QACP,MAAM,OACP,MAAM,YACD;QAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,iBAAiB,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE;;;;;;;;;;;;;IAS5F,OAAO,cAAc,MAAM,cAAc,MAAM;;;;;;;IAI/C,WAAW,UAAU,MAAM,QAAQ,MAAM,YAAY,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAE1E,UAAU,UAAU,MAAM,QAAQ,MAAM,YAAY,qBAAqB;;;;;;;;;;;;;;;;;;;;;;;;;;;;IAEzE,oBAAoB,UAAU,MAAM,QAAQ,MAAM,UAAU,MAAM,YAAY,qBAAqB;;;;;;;;;;;;;;EAGpG"}
@@ -0,0 +1,30 @@
1
+ import { Effect } from "effect";
2
+ import { Commit, CommitDetail, Comparison, GitTree } from "#gitSchemas.ts";
3
+ import { decodedPages } from "#pagedLists.ts";
4
+ import { CollaboratorPermission, Issue, PullRequestFile, User } from "#repositorySchemas.ts";
5
+ export function repositoryReads(client) {
6
+ function repository(owner, repo) {
7
+ return `/repos/${encodeURIComponent(owner)}/${encodeURIComponent(repo)}`;
8
+ }
9
+ function pathWithQuery(path, options) {
10
+ const query = new URLSearchParams({ "per_page": "100" });
11
+ for (const [key, value] of Object.entries(options?.query ?? {})) {
12
+ if (value !== undefined) {
13
+ query.set(key, String(value));
14
+ }
15
+ }
16
+ return `${path}?${query}`;
17
+ }
18
+ return {
19
+ compareCommits: (owner, repo, base, head, byteLimit) => Effect.flatMap(client.read(`${repository(owner, repo)}/compare/${encodeURIComponent(base)}...${encodeURIComponent(head)}`, byteLimit), (page) => page.decode(Comparison)),
20
+ getCollaboratorPermission: (owner, repo, username, byteLimit) => Effect.flatMap(client.read(`${repository(owner, repo)}/collaborators/${encodeURIComponent(username)}/permission`, byteLimit), (page) => page.decode(CollaboratorPermission)),
21
+ getCommit: (owner, repo, ref, byteLimit) => Effect.flatMap(client.read(`${repository(owner, repo)}/commits/${encodeURIComponent(ref)}`, byteLimit), (page) => page.decode(CommitDetail)),
22
+ getIssue: (owner, repo, number, byteLimit) => Effect.flatMap(client.read(`${repository(owner, repo)}/issues/${number}`, byteLimit), (page) => page.decode(Issue)),
23
+ getTree: (owner, repo, sha, options) => Effect.flatMap(client.read(`${repository(owner, repo)}/git/trees/${encodeURIComponent(sha)}${options?.recursive ? "?recursive=1" : ""}`, options?.responseByteLimit), (page) => page.decode(GitTree)),
24
+ getUser: (username, byteLimit) => Effect.flatMap(client.read(username === undefined ? "/user" : `/users/${encodeURIComponent(username)}`, byteLimit), (page) => page.decode(User)),
25
+ listCommits: (owner, repo, options) => Effect.succeed(decodedPages(client, pathWithQuery(`${repository(owner, repo)}/commits`, options), Commit, options)),
26
+ listIssues: (owner, repo, options) => Effect.succeed(decodedPages(client, pathWithQuery(`${repository(owner, repo)}/issues`, options), Issue, options)),
27
+ listPullRequestFiles: (owner, repo, number, options) => Effect.succeed(decodedPages(client, pathWithQuery(`${repository(owner, repo)}/pulls/${number}/files`, options), PullRequestFile, options)),
28
+ };
29
+ }
30
+ //# sourceMappingURL=repositoryReads.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repositoryReads.js","sourceRoot":"","sources":["../src/repositoryReads.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ import { Schema } from "effect";
2
+ export declare const User: Schema.encodeKeys<Schema.Struct<{
3
+ readonly avatarUrl: Schema.String;
4
+ readonly htmlUrl: Schema.String;
5
+ readonly id: Schema.Number;
6
+ readonly login: Schema.String;
7
+ readonly type: Schema.String;
8
+ }>, {
9
+ readonly avatarUrl: "avatar_url";
10
+ readonly htmlUrl: "html_url";
11
+ }>;
12
+ export declare const Issue: Schema.encodeKeys<Schema.Struct<{
13
+ readonly body: Schema.NullOr<Schema.String>;
14
+ readonly closedAt: Schema.NullOr<Schema.String>;
15
+ readonly createdAt: Schema.String;
16
+ readonly htmlUrl: Schema.String;
17
+ readonly id: Schema.Number;
18
+ readonly labels: Schema.$Array<Schema.Union<readonly [Schema.String, Schema.Struct<{
19
+ readonly name: Schema.optional<Schema.String>;
20
+ }>]>>;
21
+ readonly number: Schema.Number;
22
+ readonly pullRequest: Schema.optional<Schema.Struct<{
23
+ readonly url: Schema.String;
24
+ }>>;
25
+ readonly state: Schema.Literals<readonly ["open", "closed"]>;
26
+ readonly title: Schema.String;
27
+ readonly updatedAt: Schema.String;
28
+ readonly user: Schema.NullOr<Schema.encodeKeys<Schema.Struct<{
29
+ readonly avatarUrl: Schema.String;
30
+ readonly htmlUrl: Schema.String;
31
+ readonly id: Schema.Number;
32
+ readonly login: Schema.String;
33
+ readonly type: Schema.String;
34
+ }>, {
35
+ readonly avatarUrl: "avatar_url";
36
+ readonly htmlUrl: "html_url";
37
+ }>>;
38
+ }>, {
39
+ readonly closedAt: "closed_at";
40
+ readonly createdAt: "created_at";
41
+ readonly htmlUrl: "html_url";
42
+ readonly pullRequest: "pull_request";
43
+ readonly updatedAt: "updated_at";
44
+ }>;
45
+ export declare const PullRequestFile: Schema.encodeKeys<Schema.Struct<{
46
+ readonly additions: Schema.Number;
47
+ readonly changes: Schema.Number;
48
+ readonly deletions: Schema.Number;
49
+ readonly filename: Schema.String;
50
+ readonly patch: Schema.optional<Schema.String>;
51
+ readonly previousFilename: Schema.optional<Schema.String>;
52
+ readonly sha: Schema.String;
53
+ readonly status: Schema.String;
54
+ }>, {
55
+ readonly previousFilename: "previous_filename";
56
+ }>;
57
+ export declare const CollaboratorPermission: Schema.encodeKeys<Schema.Struct<{
58
+ readonly permission: Schema.String;
59
+ readonly roleName: Schema.String;
60
+ readonly user: Schema.encodeKeys<Schema.Struct<{
61
+ readonly avatarUrl: Schema.String;
62
+ readonly htmlUrl: Schema.String;
63
+ readonly id: Schema.Number;
64
+ readonly login: Schema.String;
65
+ readonly type: Schema.String;
66
+ }>, {
67
+ readonly avatarUrl: "avatar_url";
68
+ readonly htmlUrl: "html_url";
69
+ }>;
70
+ }>, {
71
+ readonly roleName: "role_name";
72
+ }>;
73
+ //# sourceMappingURL=repositorySchemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repositorySchemas.d.ts","sourceRoot":"","sources":["../src/repositorySchemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,eAAO,MAAM,IAAI;;;;;;;;;EAM2D,CAAC;AAE7E,eAAO,MAAM,KAAK;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAejB,CAAC;AAEF,eAAO,MAAM,eAAe;;;;;;;;;;;EASyC,CAAC;AAEtE,eAAO,MAAM,sBAAsB;;;;;;;;;;;;;;;EAIkB,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { Schema } from "effect";
2
+ export const User = Schema.Struct({
3
+ avatarUrl: Schema.String,
4
+ htmlUrl: Schema.String,
5
+ id: Schema.Number,
6
+ login: Schema.String,
7
+ type: Schema.String,
8
+ }).pipe(Schema.encodeKeys({ avatarUrl: "avatar_url", htmlUrl: "html_url" }));
9
+ export const Issue = Schema.Struct({
10
+ body: Schema.NullOr(Schema.String),
11
+ closedAt: Schema.NullOr(Schema.String),
12
+ createdAt: Schema.String,
13
+ htmlUrl: Schema.String,
14
+ id: Schema.Number,
15
+ labels: Schema.Array(Schema.Union([Schema.String, Schema.Struct({ name: Schema.optional(Schema.String) })])),
16
+ number: Schema.Number,
17
+ pullRequest: Schema.optional(Schema.Struct({ url: Schema.String })),
18
+ state: Schema.Literals(["open", "closed"]),
19
+ title: Schema.String,
20
+ updatedAt: Schema.String,
21
+ user: Schema.NullOr(User),
22
+ }).pipe(Schema.encodeKeys({ closedAt: "closed_at", createdAt: "created_at", htmlUrl: "html_url", pullRequest: "pull_request", updatedAt: "updated_at" }));
23
+ export const PullRequestFile = Schema.Struct({
24
+ additions: Schema.Number,
25
+ changes: Schema.Number,
26
+ deletions: Schema.Number,
27
+ filename: Schema.String,
28
+ patch: Schema.optional(Schema.String),
29
+ previousFilename: Schema.optional(Schema.String),
30
+ sha: Schema.String,
31
+ status: Schema.String,
32
+ }).pipe(Schema.encodeKeys({ previousFilename: "previous_filename" }));
33
+ export const CollaboratorPermission = Schema.Struct({
34
+ permission: Schema.String,
35
+ roleName: Schema.String,
36
+ user: User,
37
+ }).pipe(Schema.encodeKeys({ roleName: "role_name" }));
38
+ //# sourceMappingURL=repositorySchemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"repositorySchemas.js","sourceRoot":"","sources":["../src/repositorySchemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;IACjC,SAAS,EAAE,MAAM,CAAC,MAAM;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,EAAE,EAAE,MAAM,CAAC,MAAM;IACjB,KAAK,EAAE,MAAM,CAAC,MAAM;IACpB,IAAI,EAAE,MAAM,CAAC,MAAM;CACnB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC;AAE7E,MAAM,CAAC,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC;IAClC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;IAClC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC;IACtC,SAAS,EAAE,MAAM,CAAC,MAAM;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,EAAE,EAAE,MAAM,CAAC,MAAM;IACjB,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5G,MAAM,EAAE,MAAM,CAAC,MAAM;IACrB,WAAW,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;IACnE,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAC1C,KAAK,EAAE,MAAM,CAAC,MAAM;IACpB,SAAS,EAAE,MAAM,CAAC,MAAM;IACxB,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC;CACzB,CAAC,CAAC,IAAI,CACN,MAAM,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,cAAc,EAAE,SAAS,EAAE,YAAY,EAAE,CAAC,CAChJ,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC;IAC5C,SAAS,EAAE,MAAM,CAAC,MAAM;IACxB,OAAO,EAAE,MAAM,CAAC,MAAM;IACtB,SAAS,EAAE,MAAM,CAAC,MAAM;IACxB,QAAQ,EAAE,MAAM,CAAC,MAAM;IACvB,KAAK,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;IACrC,gBAAgB,EAAE,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC;IAChD,GAAG,EAAE,MAAM,CAAC,MAAM;IAClB,MAAM,EAAE,MAAM,CAAC,MAAM;CACrB,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,CAAC,CAAC,CAAC;AAEtE,MAAM,CAAC,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,CAAC;IACnD,UAAU,EAAE,MAAM,CAAC,MAAM;IACzB,QAAQ,EAAE,MAAM,CAAC,MAAM;IACvB,IAAI,EAAE,IAAI;CACV,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC"}
@@ -7,13 +7,13 @@ export declare function representations(apiUrl: string, request: ReturnType<type
7
7
  list: (path: string, beforeRequest?: (resource: string) => Effect.Effect<void, ServiceUnavailable>, byteLimit?: number) => Effect.Effect<Stream.Stream<{
8
8
  decode: <TSchema extends import("effect/Schema").Constraint>(schema: TSchema) => Effect.Effect<TSchema["Type"], import("effect/Schema").SchemaError, TSchema["DecodingServices"]>;
9
9
  hasNext: boolean;
10
- }, import("./errors.ts").GitHubAppError | import("./errors.ts").GitHubConversationLocked | import("./errors.ts").GitHubPermissionDenied | import("./errors.ts").GitHubRateLimited | import("./errors.ts").GitHubTransportError | import("effect/Cause").NoSuchElementError | import("@shivaedev/http/errors.ts").PaginationLinkError | import("@shivaedev/http/errors.ts").ResponseBodyTooLarge | ServiceUnavailable | import("@shivaedev/http/errors.ts").RemoteStatusError, never>, never, never>;
10
+ }, import("./errors.ts").GitHubAppError | import("./errors.ts").GitHubConversationLocked | import("./errors.ts").GitHubPermissionDenied | import("./errors.ts").GitHubRateLimited | import("./errors.ts").GitHubTransportError | import("@shivaedev/http/errors.ts").InvalidBodyLimit | import("effect/Cause").NoSuchElementError | import("@shivaedev/http/errors.ts").PaginationLinkError | import("@shivaedev/http/errors.ts").ResponseBodyTooLarge | ServiceUnavailable | import("@shivaedev/http/errors.ts").RemoteStatusError, never>, never, never>;
11
11
  read: (path: string, byteLimit?: number) => Effect.Effect<{
12
12
  decode: <TSchema extends import("effect/Schema").Constraint>(schema: TSchema) => Effect.Effect<TSchema["Type"], import("effect/Schema").SchemaError, TSchema["DecodingServices"]>;
13
- }, import("./errors.ts").GitHubAppError | import("./errors.ts").GitHubConversationLocked | import("./errors.ts").GitHubPermissionDenied | import("./errors.ts").GitHubRateLimited | import("./errors.ts").GitHubTransportError | import("@shivaedev/http/errors.ts").ResponseBodyTooLarge | import("@shivaedev/http/errors.ts").RemoteStatusError, never>;
14
- write: (method: "POST" | "PATCH", path: string, body: unknown, byteLimit?: number) => Effect.Effect<{
13
+ }, import("./errors.ts").GitHubAppError | import("./errors.ts").GitHubConversationLocked | import("./errors.ts").GitHubPermissionDenied | import("./errors.ts").GitHubRateLimited | import("./errors.ts").GitHubTransportError | import("@shivaedev/http/errors.ts").InvalidBodyLimit | import("@shivaedev/http/errors.ts").ResponseBodyTooLarge | import("@shivaedev/http/errors.ts").RemoteStatusError, never>;
14
+ write: (method: "POST" | "PATCH" | "PUT" | "DELETE", path: string, body?: unknown, byteLimit?: number) => Effect.Effect<{
15
15
  decode: <TSchema extends import("effect/Schema").Constraint>(schema: TSchema) => Effect.Effect<TSchema["Type"], import("effect/Schema").SchemaError, TSchema["DecodingServices"]>;
16
- }, import("./errors.ts").GitHubAppError | import("./errors.ts").GitHubConversationLocked | import("./errors.ts").GitHubPermissionDenied | import("./errors.ts").GitHubRateLimited | import("./errors.ts").GitHubTransportError | import("effect/http/HttpBody").HttpBodyError | import("@shivaedev/http/errors.ts").ResponseBodyTooLarge | import("@shivaedev/http/errors.ts").RemoteStatusError, never>;
16
+ }, import("./errors.ts").GitHubAppError | import("./errors.ts").GitHubConversationLocked | import("./errors.ts").GitHubPermissionDenied | import("./errors.ts").GitHubRateLimited | import("./errors.ts").GitHubTransportError | import("effect/http/HttpBody").HttpBodyError | import("@shivaedev/http/errors.ts").InvalidBodyLimit | import("@shivaedev/http/errors.ts").ResponseBodyTooLarge | import("@shivaedev/http/errors.ts").RemoteStatusError, never>;
17
17
  };
18
18
  export type Representations = Omit<ReturnType<typeof representations>, "get">;
19
19
  //# sourceMappingURL=representations.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"representations.d.ts","sourceRoot":"","sources":["../src/representations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAc,iBAAiB,EAA2B,MAAM,aAAa,CAAC;AACrF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAKxE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7C,wBAAgB,eAAe,CAC9B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,UAAU,CAAC,OAAO,QAAQ,CAAC,EACpC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,EAClC,iBAAiB,SAAc;gBAEZ,MAAM;iBAOlB,MAAM,kBACI,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,CAAC;;;;iBAL5C,MAAM;;;oBA6BH,MAAM,GAAG,OAAO,QAAQ,MAAM,QAAQ,OAAO;;;EAQlF;AAED,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,eAAe,CAAC,EAAE,KAAK,CAAC,CAAC"}
1
+ {"version":3,"file":"representations.d.ts","sourceRoot":"","sources":["../src/representations.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AACxC,OAAO,EAAc,iBAAiB,EAA2B,MAAM,aAAa,CAAC;AACrF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AAMxE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAE7C,wBAAgB,eAAe,CAC9B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,UAAU,CAAC,OAAO,QAAQ,CAAC,EACpC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,EAClC,iBAAiB,SAAc;gBAEZ,MAAM;iBAOlB,MAAM,kBACI,CAAC,QAAQ,EAAE,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,kBAAkB,CAAC;;;;iBAL5C,MAAM;;;oBA6BH,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,QAAQ,QAAQ,MAAM,SAAS,OAAO;;;EAQtG;AAED,MAAM,MAAM,eAAe,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,eAAe,CAAC,EAAE,KAAK,CAAC,CAAC"}
@@ -2,10 +2,11 @@ import { Effect, Stream } from "effect";
2
2
  import { HttpClient, HttpClientRequest } from "effect/http";
3
3
  import { nextLink } from "@shivaedev/http/nextLink.ts";
4
4
  import { paginate } from "@shivaedev/http/paginate.ts";
5
+ import { resolveApiUrl } from "#adapters/resolveApiUrl.ts";
5
6
  import { jsonResponse } from "#json.ts";
6
7
  export function representations(apiUrl, request, resource, responseByteLimit = 1024 * 1024) {
7
8
  function get(path, accept = "application/vnd.github+json") {
8
- return HttpClientRequest.get(new URL(path, apiUrl).href, { headers: { Accept: accept } });
9
+ return HttpClientRequest.get(resolveApiUrl(apiUrl, path), { headers: { Accept: accept } });
9
10
  }
10
11
  function readRepresentation(path, byteLimit = responseByteLimit) {
11
12
  return Effect.map(request(get(path), byteLimit), jsonResponse);
@@ -22,7 +23,7 @@ export function representations(apiUrl, request, resource, responseByteLimit = 1
22
23
  return Effect.succeed(paginate(client, get(path)).pipe(Stream.mapEffect((response) => Effect.fromNullishOr(entries.get(response))), Stream.map((entry) => ({ ...jsonResponse(entry), hasNext: nextLink(entry.response.headers.link) !== undefined }))));
23
24
  }
24
25
  function writeRepresentation(method, path, body, byteLimit = responseByteLimit) {
25
- return HttpClientRequest.make(method)(new URL(path, apiUrl).href, { headers: { Accept: "application/vnd.github+json" } }).pipe(HttpClientRequest.bodyJson(body), Effect.flatMap((input) => request(input, byteLimit)), Effect.map(jsonResponse));
26
+ return HttpClientRequest.make(method)(resolveApiUrl(apiUrl, path), { headers: { Accept: "application/vnd.github+json" } }).pipe((input) => (body === undefined ? Effect.succeed(input) : HttpClientRequest.bodyJson(input, body)), Effect.flatMap((input) => request(input, byteLimit)), Effect.map(jsonResponse));
26
27
  }
27
28
  return { get, list: listRepresentations, read: readRepresentation, write: writeRepresentation };
28
29
  }
@@ -1 +1 @@
1
- {"version":3,"file":"representations.js","sourceRoot":"","sources":["../src/representations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"representations.js","sourceRoot":"","sources":["../src/representations.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,10 @@
1
1
  import { Effect } from "effect";
2
- import { type HttpClient, HttpClientRequest } from "effect/http";
2
+ import { HttpClient, HttpClientRequest } from "effect/http";
3
3
  import { ResponseBodyTooLarge } from "@shivaedev/http/errors.ts";
4
4
  import { type CachedResponse } from "./cache.ts";
5
5
  import { GitHubTransportError } from "./errors.ts";
6
6
  import type { GitHubToken } from "./GitHubToken.ts";
7
7
  import type { RateLimits } from "./rateLimits.ts";
8
8
  import type { TokenRefresh } from "./TokenRefresh.ts";
9
- export declare function requests(client: HttpClient.HttpClient, token: GitHubToken["Service"], rates: RateLimits, refresh?: typeof TokenRefresh.Service): (input: HttpClientRequest.HttpClientRequest, limit: number) => Effect.Effect<CachedResponse, import("./errors.ts").GitHubAppError | import("./errors.ts").GitHubConversationLocked | import("./errors.ts").GitHubPermissionDenied | import("./errors.ts").GitHubRateLimited | GitHubTransportError | ResponseBodyTooLarge | import("@shivaedev/http/errors.ts").RemoteStatusError, never>;
9
+ export declare function requests(client: HttpClient.HttpClient, token: GitHubToken["Service"], rates: RateLimits, refresh?: typeof TokenRefresh.Service): (input: HttpClientRequest.HttpClientRequest, limit: number) => Effect.Effect<CachedResponse, import("./errors.ts").GitHubAppError | import("./errors.ts").GitHubConversationLocked | import("./errors.ts").GitHubPermissionDenied | import("./errors.ts").GitHubRateLimited | GitHubTransportError | import("@shivaedev/http/errors.ts").InvalidBodyLimit | ResponseBodyTooLarge | import("@shivaedev/http/errors.ts").RemoteStatusError, never>;
10
10
  //# sourceMappingURL=requests.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"requests.d.ts","sourceRoot":"","sources":["../src/requests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,KAAK,UAAU,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAEjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,OAAO,EAAE,KAAK,cAAc,EAAiB,MAAM,YAAY,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,wBAAgB,QAAQ,CACvB,MAAM,EAAE,UAAU,CAAC,UAAU,EAC7B,KAAK,EAAE,WAAW,CAAC,SAAS,CAAC,EAC7B,KAAK,EAAE,UAAU,EACjB,OAAO,GAAE,OAAO,YAAY,CAAC,OAAmB,6XA2BhD"}
1
+ {"version":3,"file":"requests.d.ts","sourceRoot":"","sources":["../src/requests.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAE5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,2BAA2B,CAAC;AAEjE,OAAO,EAAE,KAAK,cAAc,EAAsC,MAAM,YAAY,CAAC;AACrF,OAAO,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAC;AACnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAElD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEtD,wBAAgB,QAAQ,CACvB,MAAM,EAAE,UAAU,CAAC,UAAU,EAC7B,KAAK,EAAE,WAAW,CAAC,SAAS,CAAC,EAC7B,KAAK,EAAE,UAAU,EACjB,OAAO,GAAE,OAAO,YAAY,CAAC,OAAmB,obA6BhD"}
package/dist/requests.js CHANGED
@@ -1,34 +1,36 @@
1
1
  import { Effect } from "effect";
2
- import { HttpClientRequest } from "effect/http";
2
+ import { HttpClient, HttpClientRequest } from "effect/http";
3
3
  import { readBoundedBody } from "@shivaedev/http/body.ts";
4
4
  import { ResponseBodyTooLarge } from "@shivaedev/http/errors.ts";
5
5
  import { authenticatedRequest } from "./authenticatedRequest.js";
6
- import { responseCache } from "./cache.js";
6
+ import { responseCache, revalidatedResponse } from "./cache.js";
7
7
  import { GitHubTransportError } from "./errors.js";
8
8
  import { isUnchanged } from "./status.js";
9
9
  export function requests(client, token, rates, refresh = undefined) {
10
10
  const cache = responseCache();
11
- const send = authenticatedRequest(client, token, rates, refresh);
11
+ const send = authenticatedRequest(HttpClient.withScope(client), token, rates, refresh);
12
12
  return Effect.fn("GitHub.request")(function* (input, limit) {
13
- const key = `${input.url} ${input.headers.accept}`;
13
+ const key = JSON.stringify([input.url, input.urlParams, input.headers.accept]);
14
14
  const cached = input.method === "GET" ? cache.get(key) : undefined;
15
15
  let request = HttpClientRequest.removeHeader(input, "if-none-match");
16
- if (cached?.response.headers.etag !== undefined) {
17
- request = HttpClientRequest.setHeader(request, "If-None-Match", cached.response.headers.etag);
16
+ if (cached?.etag !== undefined) {
17
+ request = HttpClientRequest.setHeader(request, "If-None-Match", cached.etag);
18
18
  }
19
19
  const response = yield* send(request, cached === undefined ? undefined : "revalidate");
20
20
  if (isUnchanged(response) && cached !== undefined) {
21
21
  if (cached.bytes.byteLength > limit) {
22
22
  return yield* new ResponseBodyTooLarge({ limit });
23
23
  }
24
- return cached;
24
+ const entry = revalidatedResponse(cached, response);
25
+ cache.set(key, entry);
26
+ return entry;
25
27
  }
26
28
  const bytes = yield* readBoundedBody(response, limit).pipe(Effect.catchTag("HttpClientError", (cause) => Effect.fail(new GitHubTransportError({ path: new URL(input.url).pathname }, { cause }))));
27
- const entry = { bytes, decoded: new Map(), response };
29
+ const entry = { bytes, decoded: new Map(), etag: response.headers.etag, response };
28
30
  if (input.method === "GET" && response.headers.etag !== undefined) {
29
31
  cache.set(key, entry);
30
32
  }
31
33
  return entry;
32
- });
34
+ }, Effect.scoped);
33
35
  }
34
36
  //# sourceMappingURL=requests.js.map