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