@sokutils/api-kit 0.0.0-beta.0 → 0.0.0-beta.2
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.
- package/dist/index.d.ts +20 -10
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/src/core.ts +23 -18
- package/src/define.ts +5 -0
- package/src/index.ts +1 -0
- package/src/types.ts +19 -5
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,14 @@ import { ZodMiniType } from "zod/v4-mini";
|
|
|
2
2
|
|
|
3
3
|
//#region src/types.d.ts
|
|
4
4
|
type MaybePromise<P> = P | Promise<P>;
|
|
5
|
-
interface
|
|
5
|
+
interface TApiKit<ResponseType> {
|
|
6
|
+
config: <NextResponseType>(resolver: ApiKitConfigResolver<ResponseType, NextResponseType>) => TApiKit<NextResponseType>;
|
|
7
|
+
configPerFetchResolver: (resolver: ApiKitConfigPerFetchResolver) => TApiKit<ResponseType>;
|
|
8
|
+
fetch: () => Promise<ResponseType>;
|
|
9
|
+
}
|
|
10
|
+
type ApiKitConfigResolver<ResponseType, NextResponseType> = (config: ApiKitConfig<ResponseType>) => ApiKitConfig<NextResponseType>;
|
|
11
|
+
type ApiKitConfigPerFetchResolver = (config: ApiKitConfigPerFetch) => ApiKitConfigPerFetch;
|
|
12
|
+
interface ApiKitConfig<ResponseType = any> {
|
|
6
13
|
BaseURL?: string;
|
|
7
14
|
Path?: string;
|
|
8
15
|
Method?: string;
|
|
@@ -10,16 +17,19 @@ interface ApiKitConfig {
|
|
|
10
17
|
Query?: Record<string, any>;
|
|
11
18
|
GetHeaders?: () => MaybePromise<Record<string, any>>;
|
|
12
19
|
ResponseResolver?: (response: Response) => any;
|
|
13
|
-
ResponseZod?: ZodMiniType
|
|
14
|
-
ResponseHandlers?: ApiKitResponseHandler[];
|
|
15
|
-
ErrorHandlers?:
|
|
20
|
+
ResponseZod?: ZodMiniType<ResponseType>;
|
|
21
|
+
ResponseHandlers?: ApiKitResponseHandler<ResponseType>[];
|
|
22
|
+
ErrorHandlers?: ApiKitErrorHandler[];
|
|
23
|
+
Debug?: (...messages: any[]) => void;
|
|
16
24
|
}
|
|
17
|
-
type
|
|
25
|
+
type ApiKitConfigPerFetch = Omit<ApiKitConfig<any>, 'ResponseZod'>;
|
|
26
|
+
type ApiKitResponseHandler<ResponseType> = (response: ResponseType) => void;
|
|
27
|
+
type ApiKitErrorHandler = (error: Error) => void;
|
|
18
28
|
//#endregion
|
|
19
29
|
//#region src/core.d.ts
|
|
20
|
-
declare const ApiKit: (originConfig?: ApiKitConfig) =>
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
30
|
+
declare const ApiKit: <ResponseType = any>(originConfig?: ApiKitConfig<ResponseType>, configPerFetchResolver?: ApiKitConfigPerFetchResolver) => TApiKit<ResponseType>;
|
|
31
|
+
//#endregion
|
|
32
|
+
//#region src/define.d.ts
|
|
33
|
+
declare const ApiKitDefineConfigResolver: <ResponseType, NextResponseType>(resolver: ApiKitConfigResolver<ResponseType, NextResponseType>) => ApiKitConfigResolver<ResponseType, NextResponseType>;
|
|
24
34
|
//#endregion
|
|
25
|
-
export { ApiKit, ApiKitConfig, ApiKitResponseHandler, MaybePromise };
|
|
35
|
+
export { ApiKit, ApiKitConfig, ApiKitConfigPerFetch, ApiKitConfigPerFetchResolver, ApiKitConfigResolver, ApiKitDefineConfigResolver, ApiKitErrorHandler, ApiKitResponseHandler, MaybePromise, TApiKit };
|
package/dist/index.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{compact as e,toPairs as t}from"es-toolkit/compat";const
|
|
1
|
+
import{compact as e,toPairs as t}from"es-toolkit/compat";import{z as n}from"zod/v4-mini";const r=(i={},a=e=>e)=>({config:e=>r(e(i),a),configPerFetchResolver:e=>r(i,e),fetch:async()=>{let r=a(i),o=e([e([r?.BaseURL,r?.Path]).join(`/`),new URLSearchParams(t(r?.Query)).toString()]).join(`?`),s=await r?.GetHeaders?.();return r?.Debug?.(r,s,o),fetch(o,{method:r?.Method,body:r?.Body,headers:s}).then(async e=>{let t=await(r.ResponseResolver||(e=>e.json()))(e);return(i.ResponseZod||n.any()).parse(t)}).then(e=>(r.ResponseHandlers?.map(t=>t(e)),e)).catch(e=>{throw r.ErrorHandlers?.map(t=>t(e)),e})}}),i=e=>e;export{r as ApiKit,i as ApiKitDefineConfigResolver};
|
package/package.json
CHANGED
package/src/core.ts
CHANGED
|
@@ -1,31 +1,36 @@
|
|
|
1
|
-
import { compact,
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
export const ApiKit = (originConfig?: ApiKitConfig) => {
|
|
1
|
+
import { compact, toPairs } from 'es-toolkit/compat';
|
|
2
|
+
import { z } from 'zod/v4-mini';
|
|
3
|
+
import { ApiKitConfig, ApiKitConfigPerFetch, ApiKitConfigPerFetchResolver, ApiKitConfigResolver, TApiKit } from './types';
|
|
5
4
|
|
|
5
|
+
export const ApiKit = <ResponseType = any>(
|
|
6
|
+
originConfig: ApiKitConfig<ResponseType> = {},
|
|
7
|
+
configPerFetchResolver: ApiKitConfigPerFetchResolver = c => c,
|
|
8
|
+
): TApiKit<ResponseType> => {
|
|
6
9
|
return {
|
|
7
|
-
config: (configResolver
|
|
8
|
-
|
|
9
|
-
},
|
|
10
|
+
config: (configResolver) => ApiKit(configResolver(originConfig), configPerFetchResolver),
|
|
11
|
+
configPerFetchResolver: (configResolver) => ApiKit(originConfig, configResolver),
|
|
10
12
|
fetch: async () => {
|
|
11
|
-
const
|
|
12
|
-
const
|
|
13
|
-
const
|
|
13
|
+
const config = configPerFetchResolver(originConfig);
|
|
14
|
+
const finalUrl = compact([config?.BaseURL, config?.Path]).join('/');
|
|
15
|
+
const withQueryUrl = compact([finalUrl, new URLSearchParams(toPairs(config?.Query)).toString()]).join('?');
|
|
16
|
+
const headers = await config?.GetHeaders?.();
|
|
14
17
|
|
|
15
|
-
|
|
18
|
+
config?.Debug?.(config, headers, withQueryUrl);
|
|
16
19
|
|
|
17
20
|
return fetch(withQueryUrl, {
|
|
18
|
-
method:
|
|
19
|
-
body:
|
|
21
|
+
method: config?.Method,
|
|
22
|
+
body: config?.Body,
|
|
20
23
|
headers,
|
|
24
|
+
}).then(async r => {
|
|
25
|
+
const handler = config.ResponseResolver || ((r) => r.json());
|
|
26
|
+
const result = await handler(r);
|
|
27
|
+
const zod = originConfig.ResponseZod || z.any();
|
|
28
|
+
return zod.parse(result);
|
|
21
29
|
}).then(r => {
|
|
22
|
-
|
|
23
|
-
return handler(r);
|
|
24
|
-
}).then(r => {
|
|
25
|
-
originConfig?.ResponseHandlers?.map(handler => handler(r));
|
|
30
|
+
config.ResponseHandlers?.map(handler => handler(r));
|
|
26
31
|
return r;
|
|
27
32
|
}).catch(e => {
|
|
28
|
-
|
|
33
|
+
config.ErrorHandlers?.map(handler => handler(e));
|
|
29
34
|
throw e;
|
|
30
35
|
});
|
|
31
36
|
},
|
package/src/define.ts
ADDED
package/src/index.ts
CHANGED
package/src/types.ts
CHANGED
|
@@ -2,7 +2,16 @@ import { ZodMiniType } from 'zod/v4-mini';
|
|
|
2
2
|
|
|
3
3
|
export type MaybePromise<P> = P | Promise<P>
|
|
4
4
|
|
|
5
|
-
export interface
|
|
5
|
+
export interface TApiKit<ResponseType> {
|
|
6
|
+
config: <NextResponseType>(resolver: ApiKitConfigResolver<ResponseType, NextResponseType>) => TApiKit<NextResponseType>;
|
|
7
|
+
configPerFetchResolver: (resolver: ApiKitConfigPerFetchResolver) => TApiKit<ResponseType>;
|
|
8
|
+
fetch: () => Promise<ResponseType>
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export type ApiKitConfigResolver<ResponseType, NextResponseType> = (config: ApiKitConfig<ResponseType>) => ApiKitConfig<NextResponseType>
|
|
12
|
+
export type ApiKitConfigPerFetchResolver = (config: ApiKitConfigPerFetch) => ApiKitConfigPerFetch;
|
|
13
|
+
|
|
14
|
+
export interface ApiKitConfig<ResponseType = any> {
|
|
6
15
|
BaseURL?: string;
|
|
7
16
|
Path?: string;
|
|
8
17
|
Method?: string;
|
|
@@ -10,9 +19,14 @@ export interface ApiKitConfig {
|
|
|
10
19
|
Query?: Record<string, any>;
|
|
11
20
|
GetHeaders?: () => MaybePromise<Record<string, any>>;
|
|
12
21
|
ResponseResolver?: (response: Response) => any;
|
|
13
|
-
ResponseZod?: ZodMiniType
|
|
14
|
-
ResponseHandlers?: ApiKitResponseHandler[];
|
|
15
|
-
ErrorHandlers?:
|
|
22
|
+
ResponseZod?: ZodMiniType<ResponseType>;
|
|
23
|
+
ResponseHandlers?: ApiKitResponseHandler<ResponseType>[];
|
|
24
|
+
ErrorHandlers?: ApiKitErrorHandler[];
|
|
25
|
+
|
|
26
|
+
Debug?: (...messages: any[]) => void;
|
|
16
27
|
}
|
|
17
28
|
|
|
18
|
-
export type
|
|
29
|
+
export type ApiKitConfigPerFetch = Omit<ApiKitConfig<any>, 'ResponseZod'>
|
|
30
|
+
|
|
31
|
+
export type ApiKitResponseHandler<ResponseType> = (response: ResponseType) => void
|
|
32
|
+
export type ApiKitErrorHandler = (error: Error) => void
|