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