@koine/api 2.0.0-beta.16 → 2.0.0-beta.160

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 (106) hide show
  1. package/ApiError.cjs.d.ts +2 -0
  2. package/ApiError.cjs.default.js +1 -0
  3. package/ApiError.cjs.js +8 -0
  4. package/ApiError.cjs.mjs +2 -0
  5. package/ApiError.d.ts +10 -3
  6. package/ApiError.esm.d.ts +2 -0
  7. package/ApiError.esm.js +3 -0
  8. package/README.md +1 -0
  9. package/createApi.cjs.d.ts +2 -0
  10. package/createApi.cjs.default.js +1 -0
  11. package/createApi.cjs.js +10 -0
  12. package/createApi.cjs.mjs +2 -0
  13. package/createApi.d.ts +8 -1
  14. package/createApi.esm.d.ts +2 -0
  15. package/createApi.esm.js +5 -0
  16. package/createApiResultFail.cjs.d.ts +2 -0
  17. package/createApiResultFail.cjs.default.js +1 -0
  18. package/createApiResultFail.cjs.js +8 -0
  19. package/createApiResultFail.cjs.mjs +2 -0
  20. package/createApiResultFail.d.ts +2 -1
  21. package/createApiResultFail.esm.d.ts +2 -0
  22. package/createApiResultFail.esm.js +3 -0
  23. package/createApiResultOk.cjs.d.ts +2 -0
  24. package/createApiResultOk.cjs.default.js +1 -0
  25. package/createApiResultOk.cjs.js +8 -0
  26. package/createApiResultOk.cjs.mjs +2 -0
  27. package/createApiResultOk.d.ts +2 -1
  28. package/createApiResultOk.esm.d.ts +2 -0
  29. package/createApiResultOk.esm.js +3 -0
  30. package/index.cjs.d.ts +1 -0
  31. package/index.cjs.default.js +1 -0
  32. package/index.cjs.js +13 -0
  33. package/index.cjs.mjs +2 -0
  34. package/index.d.ts +5 -6
  35. package/index.esm.d.ts +1 -0
  36. package/index.esm.js +4 -0
  37. package/next/nextApiResponse.cjs.js +12 -0
  38. package/next/nextApiResponse.d.ts +6 -0
  39. package/next/nextApiResponse.esm.js +7 -0
  40. package/next/nextApiResponse12.cjs.js +11 -0
  41. package/next/nextApiResponse12.d.ts +6 -0
  42. package/next/nextApiResponse12.esm.js +6 -0
  43. package/next.cjs.d.ts +1 -0
  44. package/next.cjs.default.js +1 -0
  45. package/next.cjs.js +9 -0
  46. package/next.cjs.mjs +2 -0
  47. package/next.d.ts +2 -0
  48. package/next.esm.d.ts +1 -0
  49. package/next.esm.js +2 -0
  50. package/package.json +76 -36
  51. package/swr/createSwrApi.cjs.js +13 -0
  52. package/swr/createSwrApi.d.ts +32 -0
  53. package/swr/createSwrApi.esm.js +7 -0
  54. package/swr-mutation/createSwrMutationApi.cjs.js +12 -0
  55. package/swr-mutation/createSwrMutationApi.d.ts +18 -0
  56. package/swr-mutation/createSwrMutationApi.esm.js +7 -0
  57. package/swr-mutation.cjs.d.ts +1 -0
  58. package/swr-mutation.cjs.default.js +1 -0
  59. package/swr-mutation.cjs.js +7 -0
  60. package/swr-mutation.cjs.mjs +2 -0
  61. package/swr-mutation.d.ts +1 -0
  62. package/swr-mutation.esm.d.ts +1 -0
  63. package/swr-mutation.esm.js +1 -0
  64. package/swr.cjs.d.ts +1 -0
  65. package/swr.cjs.default.js +1 -0
  66. package/swr.cjs.js +7 -0
  67. package/swr.cjs.mjs +2 -0
  68. package/swr.d.ts +1 -0
  69. package/swr.esm.d.ts +1 -0
  70. package/swr.esm.js +1 -0
  71. package/types.cjs.d.ts +1 -0
  72. package/types.cjs.default.js +1 -0
  73. package/types.cjs.js +2 -0
  74. package/types.cjs.mjs +2 -0
  75. package/types.d.ts +304 -0
  76. package/types.esm.d.ts +1 -0
  77. package/types.esm.js +1 -0
  78. package/typings.d.ts +12 -533
  79. package/ApiError.js +0 -13
  80. package/cjs/ApiError.d.ts +0 -5
  81. package/cjs/ApiError.js +0 -16
  82. package/cjs/createApi.d.ts +0 -2
  83. package/cjs/createApi.js +0 -124
  84. package/cjs/createApiResultFail.d.ts +0 -2
  85. package/cjs/createApiResultFail.js +0 -14
  86. package/cjs/createApiResultOk.d.ts +0 -2
  87. package/cjs/createApiResultOk.js +0 -15
  88. package/cjs/createSwrApi.d.ts +0 -15
  89. package/cjs/createSwrApi.js +0 -61
  90. package/cjs/index.d.ts +0 -6
  91. package/cjs/index.js +0 -15
  92. package/cjs/nextApiResponse.d.ts +0 -6
  93. package/cjs/nextApiResponse.js +0 -15
  94. package/cjs/nextApiResponse12.d.ts +0 -6
  95. package/cjs/nextApiResponse12.js +0 -19
  96. package/cjs/package.json +0 -17
  97. package/createApi.js +0 -120
  98. package/createApiResultFail.js +0 -10
  99. package/createApiResultOk.js +0 -11
  100. package/createSwrApi.d.ts +0 -15
  101. package/createSwrApi.js +0 -57
  102. package/index.js +0 -6
  103. package/nextApiResponse.d.ts +0 -6
  104. package/nextApiResponse.js +0 -12
  105. package/nextApiResponse12.d.ts +0 -6
  106. package/nextApiResponse12.js +0 -15
@@ -0,0 +1 @@
1
+ exports._default = require('./types.cjs.js').default;
package/types.cjs.js ADDED
@@ -0,0 +1,2 @@
1
+ 'use strict';
2
+
package/types.cjs.mjs ADDED
@@ -0,0 +1,2 @@
1
+ export * from './types.cjs.js';
2
+ export { _default as default } from './types.cjs.default.js';
package/types.d.ts ADDED
@@ -0,0 +1,304 @@
1
+ type _Response = Response;
2
+ /**
3
+ * @borrows [awesome-template-literal-types](https://github.com/ghoullier/awesome-template-literal-types#router-params-parsing)
4
+ */
5
+ type ExtractEndpointParams<T extends string> = string | number extends T ? Record<string, string> : T extends `${infer _Start}{${infer Param}}${infer Rest}` ? {
6
+ [k in Param | keyof ExtractEndpointParams<Rest>]: string | number;
7
+ } : T extends `${infer _Start}{${infer Param}}` ? {
8
+ [k in Param]: string | number;
9
+ } : {};
10
+ export declare namespace Api {
11
+ export type ClientOptions = {
12
+ /**
13
+ * Optionally override the `fetch` function
14
+ *
15
+ * @default fetch - The standard {@link fetch}
16
+ */
17
+ fetchFn?: typeof fetch;
18
+ /**
19
+ * Headers will be merged with
20
+ * ```
21
+ * { "content-type": "application/json" }
22
+ * ```
23
+ *
24
+ * @default {}
25
+ */
26
+ headers?: RequestInit["headers"];
27
+ /**
28
+ * Basic request options to supply to `fetch`
29
+ *
30
+ * @see RequestInit
31
+ *
32
+ * @default {}
33
+ */
34
+ request?: Omit<RequestInit, "body" | "headers" | "method">;
35
+ /**
36
+ * Flag to throw error within the catch block, by default we return a
37
+ * normalised error result {@link ResultFail}
38
+ *
39
+ * @default false
40
+ */
41
+ throwErr?: boolean;
42
+ /**
43
+ * Timeout in `ms`, if `falsy` there is no timeout
44
+ *
45
+ * @default 10000
46
+ */
47
+ timeout?: number | false | null;
48
+ /**
49
+ * Process request before actual http call
50
+ *
51
+ * @default undefined
52
+ */
53
+ processReq?: RequestProcessor;
54
+ /**
55
+ * Process ok/failed response just after http response
56
+ *
57
+ * @default undefined
58
+ */
59
+ processRes?: ResponseProcessorRes;
60
+ /**
61
+ * Process maybe-thrown error originated either from `fetch` function
62
+ * invokation or from its `response.json()` parsing
63
+ *
64
+ * @default undefined
65
+ */
66
+ processErr?: ResponseProcessorErr;
67
+ };
68
+ type ClientMethod<TMethod extends RequestMethod, TEndpoints extends Endpoints> = <TEndpoint extends EndpointUrl<TEndpoints>, TOptions extends EndpointOptions<TEndpoints, TEndpoint, TMethod>, TOk extends ResponseOk = EndpointResponseOk<TEndpoints, TEndpoint, TMethod>, TFail extends ResponseFail = EndpointResponseFail<TEndpoints, TEndpoint, TMethod>>(endpoint: TEndpoint, options?: TOptions) => Promise<EndpointResult<TEndpoints, TEndpoint, TMethod>>;
69
+ /**
70
+ * The `api` interface generated by `createApi`
71
+ */
72
+ export type Client<TEndpoints extends Endpoints> = {
73
+ [TMethod in RequestMethod]: ClientMethod<TMethod, TEndpoints>;
74
+ };
75
+ export type GetDataType<TEndpoints extends Endpoints, TEndpoint extends EndpointUrl<TEndpoints>, TMethod extends RequestMethod, TDataType extends keyof DataTypes<Uppercase<TMethod>>> = TEndpoints[TEndpoint][Uppercase<TMethod>] extends DataTypes<Uppercase<TMethod>> ? TEndpoints[TEndpoint][Uppercase<TMethod>][TDataType] : never;
76
+ export type EndpointOptions<TEndpoints extends Endpoints, TEndpoint extends EndpointUrl<TEndpoints>, TMethod extends RequestMethod> = RequestOptions<TEndpoints, TEndpoint, TMethod, GetDataType<TEndpoints, TEndpoint, TMethod, "json">, GetDataType<TEndpoints, TEndpoint, TMethod, "query">>;
77
+ export type EndpointResponseOk<TEndpoints extends Endpoints, TEndpoint extends EndpointUrl<TEndpoints>, TMethod extends RequestMethod> = GetDataType<TEndpoints, TEndpoint, TMethod, "ok">;
78
+ export type EndpointResponseFail<TEndpoints extends Endpoints, TEndpoint extends EndpointUrl<TEndpoints>, TMethod extends RequestMethod> = GetDataType<TEndpoints, TEndpoint, TMethod, "fail">;
79
+ type EndpointResult<TEndpoints extends Endpoints, TEndpoint extends EndpointUrl<TEndpoints>, TMethod extends RequestMethod> = Result<EndpointResponseOk<TEndpoints, TEndpoint, TMethod>, EndpointResponseFail<TEndpoints, TEndpoint, TMethod>>;
80
+ export type Endpoints = Record<string, Endpoint>;
81
+ type Endpoint = {
82
+ [TMethod in Uppercase<RequestMethod>]?: DataTypes<TMethod>;
83
+ };
84
+ export type EndpointUrl<TEndpoints extends Endpoints> = Extract<keyof TEndpoints, string>;
85
+ type DataTypes<TMethod extends Uppercase<RequestMethod>> = {
86
+ /**
87
+ * The request body of a non-GET request
88
+ */
89
+ json?: RequestJson;
90
+ /**
91
+ * The parameters to encode in the URL of the request
92
+ */
93
+ query?: RequestQuery;
94
+ /**
95
+ * The JSON response data returned by the request in case of success
96
+ */
97
+ ok?: null | unknown;
98
+ /**
99
+ * The shape of the error data returned by the request in case of
100
+ * failure
101
+ */
102
+ fail?: null | unknown;
103
+ };
104
+ export type RequestMethod = "get" | "post" | "put" | "patch" | "delete";
105
+ type RequestJson = unknown;
106
+ type RequestQuery = unknown;
107
+ type RequestParams = unknown;
108
+ /**
109
+ * Request options
110
+ *
111
+ * `ClientOptions` can be overriden here at the single request level.
112
+ */
113
+ type RequestOptions<TEndpoints extends Endpoints, TEndpoint extends EndpointUrl<TEndpoints>, TMethod extends RequestMethod, TJson extends RequestJson, TQuery extends RequestQuery> = Omit<ClientOptions, "processReq"> & {
114
+ processReq?: EndpointRequestProcessor<TEndpoints, TEndpoint, TMethod>;
115
+ /**
116
+ * A dictionary to dynamically interpolate endpoint url params, e.g.:
117
+ *
118
+ * ```js
119
+ * myapi.get("user/{id}", { params: { id: "12" }})
120
+ * ```
121
+ * results in a call to the endpoint `"user/12"`
122
+ */
123
+ params?: ExtractEndpointParams<TEndpoint>;
124
+ /**
125
+ * Query parameters will be serialized into a string and appended to the URL
126
+ */
127
+ query?: TQuery;
128
+ /**
129
+ * JSON request body
130
+ */
131
+ json?: TJson;
132
+ };
133
+ export type ResponseOk = unknown;
134
+ export type ResponseFail = unknown;
135
+ export type ResultOk<TResponse extends ResponseOk = ResponseOk> = {
136
+ status: _Response["status"];
137
+ msg: _Response["statusText"];
138
+ ok: true;
139
+ fail?: false;
140
+ data: TResponse;
141
+ };
142
+ export type ResultFail<TResponse extends ResponseFail = ResponseFail> = {
143
+ status: _Response["status"];
144
+ msg: Error["message"] | _Response["statusText"];
145
+ ok?: false;
146
+ fail: true;
147
+ data: TResponse;
148
+ };
149
+ export type Result<TResponseOk extends ResponseOk, TResponseFail extends ResponseFail> = {
150
+ status: _Response["status"];
151
+ msg: _Response["statusText"];
152
+ ok: true;
153
+ fail?: false;
154
+ data: TResponseOk;
155
+ } | {
156
+ status: _Response["status"];
157
+ msg: Error["message"] | _Response["statusText"];
158
+ ok?: false;
159
+ fail: true;
160
+ data: TResponseFail;
161
+ };
162
+ /**
163
+ * The request processor at the client level, this is meant to apply global
164
+ * transformations to all endpoints requests
165
+ */
166
+ export type RequestProcessor = (method: RequestMethod, url: string, query: any, json: any, params: any, requestInit: RequestInit) => [
167
+ string,
168
+ RequestQuery,
169
+ RequestJson,
170
+ RequestParams,
171
+ RequestInit
172
+ ];
173
+ /**
174
+ * The request processor at the request level, this is meant to apply
175
+ * transformations to a single endpoint request. Request processor applied at
176
+ * the whole client level is still applied just before this one, hence one
177
+ * might set some global processing and override it or undo it at the single
178
+ * request level.
179
+ */
180
+ export type EndpointRequestProcessor<TEndpoints extends Endpoints, TEndpoint extends EndpointUrl<TEndpoints>, TMethod extends RequestMethod> = (method: TMethod, url: string, query: EndpointOptions<TEndpoints, TEndpoint, TMethod>["query"], json: EndpointOptions<TEndpoints, TEndpoint, TMethod>["json"], params: EndpointOptions<TEndpoints, TEndpoint, TMethod>["params"], requestInit: RequestInit) => [
181
+ string,
182
+ EndpointOptions<TEndpoints, TEndpoint, TMethod>["query"],
183
+ EndpointOptions<TEndpoints, TEndpoint, TMethod>["json"],
184
+ EndpointOptions<TEndpoints, TEndpoint, TMethod>["params"],
185
+ RequestInit
186
+ ];
187
+ /**
188
+ * The ok/fail response processor at the request level, this is meant to apply
189
+ * transformations to a single or all endpoint responses
190
+ */
191
+ type ResponseProcessorRes = <TResponseOk extends ResponseOk = ResponseOk, TResponseFail extends ResponseFail = ResponseFail>(response: _Response, options: any) => Promise<Result<TResponseOk, TResponseFail>>;
192
+ /**
193
+ * The error response processor at the request level, this is meant to apply
194
+ * transformations to a single or all endpoint responses
195
+ */
196
+ type ResponseProcessorErr = <TResponseOk extends ResponseOk = ResponseOk, TResponseFail extends ResponseFail = ResponseFail>(msg: string, options: any) => Promise<Result<TResponseOk, TResponseFail>>;
197
+ /**
198
+ * Api hooks map for `react`, each request method has its own `use{Method}`
199
+ * hook.
200
+ *
201
+ * These hooks are implemented with different libraries or, in the future as
202
+ * standalone hooks, see SWR ones to start with.
203
+ */
204
+ type HooksMaps = {
205
+ [TMethod in RequestMethod]: `use${TMethod extends "get" ? "" : Capitalize<TMethod>}`;
206
+ };
207
+ export type HooksMapsByName = {
208
+ [K in keyof HooksMaps as HooksMaps[K]]: K;
209
+ };
210
+ export {};
211
+ }
212
+ /**
213
+ * To generate all available helpers use in your `API` types:
214
+ *
215
+ * @example
216
+ * ```ts
217
+ * type Response = Api.Generate.ResponseHelpers<Endpoints>;
218
+ * type Request = Api.Generate.RequestHelpers<Endpoints>;
219
+ * type Get = Api.Generate.GetHelpers<Endpoints>;
220
+ * type Post = Api.Generate.PostHelpers<Endpoints>;
221
+ * ```
222
+ */
223
+ export declare namespace Api.Generate {
224
+ /**
225
+ * @example
226
+ * ```ts
227
+ * // define the type on your `API` types:
228
+ * type Result = Api.Generate.ResultShortcuts<Endpoints>;
229
+ *
230
+ * // consume the type wherever in your app:
231
+ * type MyResult = API.Result["get"]["my/endpoint"];
232
+ *
233
+ * MyResult["ok"];
234
+ * ^
235
+ * MyResult["fail"];
236
+ * ^
237
+ * ```
238
+ */
239
+ type ResultShortcuts<TEndpoints extends Endpoints> = {
240
+ [TMethod in RequestMethod]: {
241
+ [TEndpoint in Extract<keyof TEndpoints, string>]: {
242
+ ok: GetDataType<TEndpoints, TEndpoint, TMethod, "ok">;
243
+ fail: GetDataType<TEndpoints, TEndpoint, TMethod, "fail">;
244
+ };
245
+ };
246
+ };
247
+ /**
248
+ * @example
249
+ * ```ts
250
+ * // define the type on your `API` types:
251
+ * type Response = Api.Generate.ResponseShortcuts<Endpoints>;
252
+ *
253
+ * // consume the type wherever in your app:
254
+ * type MyData = API.Response["get"]["my/endpoint"];
255
+ * ```
256
+ */
257
+ type ResponseShortcuts<TEndpoints extends Endpoints> = {
258
+ [TMethod in RequestMethod]: {
259
+ [TEndpoint in Extract<keyof TEndpoints, string>]: GetDataType<TEndpoints, TEndpoint, TMethod, "ok">;
260
+ };
261
+ };
262
+ /**
263
+ * @example
264
+ * ```ts
265
+ * // define the type on your `API` types:
266
+ * type Request = Api.Generate.RequestShortcuts<Endpoints>;
267
+ *
268
+ * // consume the type wherever in your app:
269
+ * type MyData = API.Request["get"]["my/endpoint"];
270
+ * ```
271
+ */
272
+ type RequestShortcuts<TEndpoints extends Endpoints> = {
273
+ [TMethod in RequestMethod]: {
274
+ [TEndpoint in Extract<keyof TEndpoints, string>]: TMethod extends "get" ? GetDataType<TEndpoints, TEndpoint, TMethod, "query"> : GetDataType<TEndpoints, TEndpoint, TMethod, "json">;
275
+ };
276
+ };
277
+ /**
278
+ * @example
279
+ * ```ts
280
+ * // define the type on your `API` types:
281
+ * type Get = Api.Generate.ResponseShortcuts<Endpoints>;
282
+ *
283
+ * // consume the type wherever in your app:
284
+ * type MyData = API.Get["my/endpoint"];
285
+ * ```
286
+ */
287
+ type GetShortcuts<TEndpoints extends Endpoints> = {
288
+ [TEndpoint in Extract<keyof TEndpoints, string>]: GetDataType<TEndpoints, TEndpoint, "get", "ok">;
289
+ };
290
+ /**
291
+ * @example
292
+ * ```ts
293
+ * // define the type on your `API` types:
294
+ * type Post = Api.Generate.ResponseShortcuts<Endpoints>;
295
+ *
296
+ * // consume the type wherever in your app:
297
+ * type MyData = API.Post["my/endpoint"];
298
+ * ```
299
+ */
300
+ type PostShortcuts<TEndpoints extends Endpoints> = {
301
+ [TEndpoint in Extract<keyof TEndpoints, string>]: GetDataType<TEndpoints, TEndpoint, "post", "ok">;
302
+ };
303
+ }
304
+ export {};
package/types.esm.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from "./types";
package/types.esm.js ADDED
@@ -0,0 +1 @@
1
+