@koine/api 2.0.0-beta.76 → 2.0.0-beta.78

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 (48) hide show
  1. package/README.md +1 -0
  2. package/index.cjs.d.ts +1 -0
  3. package/index.cjs.default.js +1 -0
  4. package/index.cjs.js +147 -0
  5. package/index.cjs.mjs +2 -0
  6. package/index.esm.js +140 -0
  7. package/package.json +8 -55
  8. package/typings.d.ts +13 -0
  9. package/ApiError.js +0 -1
  10. package/cjs/ApiError.d.ts +0 -5
  11. package/cjs/ApiError.js +0 -1
  12. package/cjs/createApi.d.ts +0 -3
  13. package/cjs/createApi.js +0 -1
  14. package/cjs/createApiResultFail.d.ts +0 -4
  15. package/cjs/createApiResultFail.js +0 -1
  16. package/cjs/createApiResultOk.d.ts +0 -3
  17. package/cjs/createApiResultOk.js +0 -1
  18. package/cjs/index.d.ts +0 -5
  19. package/cjs/index.js +0 -1
  20. package/cjs/next/nextApiResponse.d.ts +0 -6
  21. package/cjs/next/nextApiResponse.js +0 -1
  22. package/cjs/next/nextApiResponse12.d.ts +0 -6
  23. package/cjs/next/nextApiResponse12.js +0 -1
  24. package/cjs/next.d.ts +0 -2
  25. package/cjs/next.js +0 -1
  26. package/cjs/package.json +0 -22
  27. package/cjs/swr/createSwrApi.d.ts +0 -9
  28. package/cjs/swr/createSwrApi.js +0 -1
  29. package/cjs/swr-mutation/createSwrMutationApi.d.ts +0 -19
  30. package/cjs/swr-mutation/createSwrMutationApi.js +0 -1
  31. package/cjs/swr-mutation.d.ts +0 -1
  32. package/cjs/swr-mutation.js +0 -1
  33. package/cjs/swr.d.ts +0 -1
  34. package/cjs/swr.js +0 -1
  35. package/cjs/types.d.ts +0 -126
  36. package/cjs/types.js +0 -1
  37. package/createApi.js +0 -1
  38. package/createApiResultFail.js +0 -1
  39. package/createApiResultOk.js +0 -1
  40. package/index.js +0 -1
  41. package/next/nextApiResponse.js +0 -1
  42. package/next/nextApiResponse12.js +0 -1
  43. package/next.js +0 -1
  44. package/swr/createSwrApi.js +0 -1
  45. package/swr-mutation/createSwrMutationApi.js +0 -1
  46. package/swr-mutation.js +0 -1
  47. package/swr.js +0 -1
  48. package/types.js +0 -1
package/README.md ADDED
@@ -0,0 +1 @@
1
+ # @koine/api
package/index.cjs.d.ts ADDED
@@ -0,0 +1 @@
1
+ export * from "./index";
@@ -0,0 +1 @@
1
+ exports._default = require('./index.cjs.js').default;
package/index.cjs.js ADDED
@@ -0,0 +1,147 @@
1
+ 'use strict';
2
+
3
+ Object.defineProperty(exports, '__esModule', { value: true });
4
+
5
+ var utils = require('@koine/utils');
6
+
7
+ class ApiError extends Error {
8
+ constructor(result) {
9
+ super(`Request failed with ${result.status} ${result.msg}`);
10
+ this.name = "ApiError";
11
+ Object.assign(this, result);
12
+ }
13
+ }
14
+
15
+ let apiMethods = [
16
+ "get",
17
+ "post",
18
+ "put",
19
+ "patch",
20
+ "delete",
21
+ ];
22
+ let createApi = (apiName, baseUrl, options) => {
23
+ const { headers: headersBase = {}, request: requestBase = {}, throwErr: throwErrBase, timeout: timeoutBase = 10000, processReq: processReqBase, processRes: processResBase, processErr: processErrBase, } = options || {};
24
+ return apiMethods.reduce((api, method) => {
25
+ api[method] = async (endpoint, options) => {
26
+ const { request = requestBase, headers = headersBase, timeout = timeoutBase, processReq, processRes = processResBase, processErr = processErrBase, throwErr = throwErrBase, } = options || {};
27
+ let { params, json, query } = options || {};
28
+ let url = `${baseUrl}/${endpoint + "".replace(/^\/*/, "")}`;
29
+ let requestInit = {
30
+ method: method.toUpperCase(),
31
+ ...request,
32
+ headers: {
33
+ "content-type": "application/json",
34
+ ...headers,
35
+ },
36
+ };
37
+ if (processReqBase) {
38
+ const transformed = processReqBase(method, url, query, json, params, requestInit);
39
+ url = transformed[0];
40
+ query = transformed[1];
41
+ json = transformed[2];
42
+ params = transformed[3];
43
+ requestInit = transformed[4];
44
+ }
45
+ if (processReq) {
46
+ const transformed = processReq(method, url, query, json, params, requestInit);
47
+ url = transformed[0];
48
+ query = transformed[1];
49
+ json = transformed[2];
50
+ params = transformed[3];
51
+ requestInit = transformed[4];
52
+ }
53
+ if (utils.isFullObject(params)) {
54
+ for (const key in params) {
55
+ url = url.replace(`{${key}}`, params[key].toString());
56
+ }
57
+ }
58
+ const timeoutNumber = Number(timeout);
59
+ let controller;
60
+ let timeoutId;
61
+ if (json) {
62
+ requestInit.body = JSON.stringify(json);
63
+ }
64
+ if (timeoutNumber > 0) {
65
+ controller = new AbortController();
66
+ timeoutId = setTimeout(() => controller.abort(), timeoutNumber);
67
+ requestInit.signal = controller.signal;
68
+ }
69
+ if (query) {
70
+ url += utils.buildUrlQueryString(query);
71
+ }
72
+ let response = null;
73
+ let result = null;
74
+ let msg = "";
75
+ try {
76
+ response = await fetch(url, requestInit);
77
+ }
78
+ catch (e) {
79
+ msg = utils.errorToString(e);
80
+ }
81
+ if (timeoutId) {
82
+ clearTimeout(timeoutId);
83
+ }
84
+ if (response) {
85
+ try {
86
+ if (processRes) {
87
+ result = await processRes(response, options || {});
88
+ }
89
+ else {
90
+ result = await response.json();
91
+ }
92
+ }
93
+ catch (e) {
94
+ msg = utils.errorToString(e);
95
+ }
96
+ }
97
+ if (result === null) {
98
+ if (processErr) {
99
+ result = await processErr(msg, options || {});
100
+ }
101
+ else {
102
+ result = {
103
+ data: null,
104
+ msg,
105
+ status: 100,
106
+ fail: true,
107
+ ok: false,
108
+ };
109
+ }
110
+ }
111
+ if (throwErr && result?.fail) {
112
+ throw result;
113
+ }
114
+ if (process.env["NODE_ENV"] === "development") {
115
+ const logMsg = `${result?.status}: api[${apiName}] ${method.toUpperCase()} ${url}`;
116
+ if (result?.ok) {
117
+ console.info(`🟢 ${logMsg}`);
118
+ }
119
+ else {
120
+ console.info(`🔴 ${logMsg}`);
121
+ }
122
+ }
123
+ return result;
124
+ };
125
+ return api;
126
+ }, {});
127
+ };
128
+
129
+ let createApiResultFail = (data = {}, msg, status) => ({
130
+ fail: true,
131
+ data,
132
+ msg: msg || "",
133
+ status: status || 404,
134
+ });
135
+
136
+ let createApiResultOk = (data = {}, msg) => ({
137
+ ok: true,
138
+ fail: false,
139
+ data,
140
+ msg: msg || "",
141
+ status: 200,
142
+ });
143
+
144
+ exports.ApiError = ApiError;
145
+ exports.createApi = createApi;
146
+ exports.createApiResultFail = createApiResultFail;
147
+ exports.createApiResultOk = createApiResultOk;
package/index.cjs.mjs ADDED
@@ -0,0 +1,2 @@
1
+ export * from './index.cjs.js';
2
+ export { _default as default } from './index.cjs.default.js';
package/index.esm.js ADDED
@@ -0,0 +1,140 @@
1
+ import { isFullObject, buildUrlQueryString, errorToString } from '@koine/utils';
2
+
3
+ class ApiError extends Error {
4
+ constructor(result) {
5
+ super(`Request failed with ${result.status} ${result.msg}`);
6
+ this.name = "ApiError";
7
+ Object.assign(this, result);
8
+ }
9
+ }
10
+
11
+ let apiMethods = [
12
+ "get",
13
+ "post",
14
+ "put",
15
+ "patch",
16
+ "delete",
17
+ ];
18
+ let createApi = (apiName, baseUrl, options) => {
19
+ const { headers: headersBase = {}, request: requestBase = {}, throwErr: throwErrBase, timeout: timeoutBase = 10000, processReq: processReqBase, processRes: processResBase, processErr: processErrBase, } = options || {};
20
+ return apiMethods.reduce((api, method) => {
21
+ api[method] = async (endpoint, options) => {
22
+ const { request = requestBase, headers = headersBase, timeout = timeoutBase, processReq, processRes = processResBase, processErr = processErrBase, throwErr = throwErrBase, } = options || {};
23
+ let { params, json, query } = options || {};
24
+ let url = `${baseUrl}/${endpoint + "".replace(/^\/*/, "")}`;
25
+ let requestInit = {
26
+ method: method.toUpperCase(),
27
+ ...request,
28
+ headers: {
29
+ "content-type": "application/json",
30
+ ...headers,
31
+ },
32
+ };
33
+ if (processReqBase) {
34
+ const transformed = processReqBase(method, url, query, json, params, requestInit);
35
+ url = transformed[0];
36
+ query = transformed[1];
37
+ json = transformed[2];
38
+ params = transformed[3];
39
+ requestInit = transformed[4];
40
+ }
41
+ if (processReq) {
42
+ const transformed = processReq(method, url, query, json, params, requestInit);
43
+ url = transformed[0];
44
+ query = transformed[1];
45
+ json = transformed[2];
46
+ params = transformed[3];
47
+ requestInit = transformed[4];
48
+ }
49
+ if (isFullObject(params)) {
50
+ for (const key in params) {
51
+ url = url.replace(`{${key}}`, params[key].toString());
52
+ }
53
+ }
54
+ const timeoutNumber = Number(timeout);
55
+ let controller;
56
+ let timeoutId;
57
+ if (json) {
58
+ requestInit.body = JSON.stringify(json);
59
+ }
60
+ if (timeoutNumber > 0) {
61
+ controller = new AbortController();
62
+ timeoutId = setTimeout(() => controller.abort(), timeoutNumber);
63
+ requestInit.signal = controller.signal;
64
+ }
65
+ if (query) {
66
+ url += buildUrlQueryString(query);
67
+ }
68
+ let response = null;
69
+ let result = null;
70
+ let msg = "";
71
+ try {
72
+ response = await fetch(url, requestInit);
73
+ }
74
+ catch (e) {
75
+ msg = errorToString(e);
76
+ }
77
+ if (timeoutId) {
78
+ clearTimeout(timeoutId);
79
+ }
80
+ if (response) {
81
+ try {
82
+ if (processRes) {
83
+ result = await processRes(response, options || {});
84
+ }
85
+ else {
86
+ result = await response.json();
87
+ }
88
+ }
89
+ catch (e) {
90
+ msg = errorToString(e);
91
+ }
92
+ }
93
+ if (result === null) {
94
+ if (processErr) {
95
+ result = await processErr(msg, options || {});
96
+ }
97
+ else {
98
+ result = {
99
+ data: null,
100
+ msg,
101
+ status: 100,
102
+ fail: true,
103
+ ok: false,
104
+ };
105
+ }
106
+ }
107
+ if (throwErr && result?.fail) {
108
+ throw result;
109
+ }
110
+ if (process.env["NODE_ENV"] === "development") {
111
+ const logMsg = `${result?.status}: api[${apiName}] ${method.toUpperCase()} ${url}`;
112
+ if (result?.ok) {
113
+ console.info(`🟢 ${logMsg}`);
114
+ }
115
+ else {
116
+ console.info(`🔴 ${logMsg}`);
117
+ }
118
+ }
119
+ return result;
120
+ };
121
+ return api;
122
+ }, {});
123
+ };
124
+
125
+ let createApiResultFail = (data = {}, msg, status) => ({
126
+ fail: true,
127
+ data,
128
+ msg: msg || "",
129
+ status: status || 404,
130
+ });
131
+
132
+ let createApiResultOk = (data = {}, msg) => ({
133
+ ok: true,
134
+ fail: false,
135
+ data,
136
+ msg: msg || "",
137
+ status: 200,
138
+ });
139
+
140
+ export { ApiError, createApi, createApiResultFail, createApiResultOk };
package/package.json CHANGED
@@ -2,7 +2,7 @@
2
2
  "name": "@koine/api",
3
3
  "sideEffects": false,
4
4
  "dependencies": {
5
- "@koine/utils": "2.0.0-beta.76"
5
+ "@koine/utils": "2.0.0-beta.78"
6
6
  },
7
7
  "peerDependencies": {
8
8
  "next": "^14.0.4",
@@ -16,62 +16,15 @@
16
16
  "optional": true
17
17
  }
18
18
  },
19
- "module": "./index.js",
20
- "type": "module",
21
- "main": "./cjs/index.js",
22
19
  "exports": {
20
+ "./package.json": "./package.json",
23
21
  ".": {
24
- "require": "./cjs/index.js",
25
- "import": "./index.js"
26
- },
27
- "./ApiError": {
28
- "require": "./cjs/ApiError.js",
29
- "import": "./ApiError.js"
30
- },
31
- "./createApi": {
32
- "require": "./cjs/createApi.js",
33
- "import": "./createApi.js"
34
- },
35
- "./createApiResultFail": {
36
- "require": "./cjs/createApiResultFail.js",
37
- "import": "./createApiResultFail.js"
38
- },
39
- "./createApiResultOk": {
40
- "require": "./cjs/createApiResultOk.js",
41
- "import": "./createApiResultOk.js"
42
- },
43
- "./next": {
44
- "require": "./cjs/next.js",
45
- "import": "./next.js"
46
- },
47
- "./next/nextApiResponse": {
48
- "require": "./cjs/next/nextApiResponse.js",
49
- "import": "./next/nextApiResponse.js"
50
- },
51
- "./next/nextApiResponse12": {
52
- "require": "./cjs/next/nextApiResponse12.js",
53
- "import": "./next/nextApiResponse12.js"
54
- },
55
- "./swr-mutation": {
56
- "require": "./cjs/swr-mutation.js",
57
- "import": "./swr-mutation.js"
58
- },
59
- "./swr-mutation/createSwrMutationApi": {
60
- "require": "./cjs/swr-mutation/createSwrMutationApi.js",
61
- "import": "./swr-mutation/createSwrMutationApi.js"
62
- },
63
- "./swr": {
64
- "require": "./cjs/swr.js",
65
- "import": "./swr.js"
66
- },
67
- "./swr/createSwrApi": {
68
- "require": "./cjs/swr/createSwrApi.js",
69
- "import": "./swr/createSwrApi.js"
70
- },
71
- "./types": {
72
- "require": "./cjs/types.js",
73
- "import": "./types.js"
22
+ "module": "./index.esm.js",
23
+ "import": "./index.cjs.mjs",
24
+ "default": "./index.cjs.js"
74
25
  }
75
26
  },
76
- "version": "2.0.0-beta.76"
27
+ "module": "./index.esm.js",
28
+ "main": "./index.cjs.js",
29
+ "version": "2.0.0-beta.78"
77
30
  }
package/typings.d.ts ADDED
@@ -0,0 +1,13 @@
1
+ declare namespace Koine.Api {
2
+ type Endpoints = import("./types").Api.Endpoints;
3
+ type GenerateGetShortcuts<E extends Endpoints> =
4
+ import("./types").Api.Generate.GetShortcuts<E>;
5
+ type GeneratePostShortcuts<E extends Endpoints> =
6
+ import("./types").Api.Generate.PostShortcuts<E>;
7
+ type GenerateRequestShortcuts<E extends Endpoints> =
8
+ import("./types").Api.Generate.RequestShortcuts<E>;
9
+ type GenerateResponseShortcuts<E extends Endpoints> =
10
+ import("./types").Api.Generate.ResponseShortcuts<E>;
11
+ type GenerateResultShortcuts<E extends Endpoints> =
12
+ import("./types").Api.Generate.ResultShortcuts<E>;
13
+ }
package/ApiError.js DELETED
@@ -1 +0,0 @@
1
- export class ApiError extends Error{constructor(r){super(`Request failed with ${r.status} ${r.msg}`),this.name="ApiError",Object.assign(this,r)}}export default ApiError;
package/cjs/ApiError.d.ts DELETED
@@ -1,5 +0,0 @@
1
- import type { Api } from "./types";
2
- export declare class ApiError<TResponseFail extends Api.ResponseFail = unknown> extends Error {
3
- constructor(result: Api.ResultFail<TResponseFail>);
4
- }
5
- export default ApiError;
package/cjs/ApiError.js DELETED
@@ -1 +0,0 @@
1
- export class ApiError extends Error{constructor(r){super(`Request failed with ${r.status} ${r.msg}`),this.name="ApiError",Object.assign(this,r)}}export default ApiError;
@@ -1,3 +0,0 @@
1
- import type { Api } from "./types";
2
- export declare let createApi: <TEndpoints extends Api.Endpoints>(apiName: string, baseUrl: string, options?: Api.ClientOptions) => Api.Client<TEndpoints>;
3
- export default createApi;
package/cjs/createApi.js DELETED
@@ -1 +0,0 @@
1
- import{buildUrlQueryString as e,errorToString as t,isFullObject as r}from"@koine/utils";let o=["get","post","put","patch","delete"];export let createApi=(l,a,i)=>{let{headers:s={},request:n={},throwErr:p,timeout:c=1e4,processReq:u,processRes:f,processErr:d}=i||{};return o.reduce((o,i)=>(o[i]=async(o,h)=>{let $,m;let{request:w=n,headers:y=s,timeout:g=c,processReq:b,processRes:E=f,processErr:N=d,throwErr:k=p}=h||{},{params:A,json:C,query:j}=h||{},q=`${a}/${o+"".replace(/^\/*/,"")}`,v={method:i.toUpperCase(),...w,headers:{"content-type":"application/json",...y}};if(u){let e=u(i,q,j,C,A,v);q=e[0],j=e[1],C=e[2],A=e[3],v=e[4]}if(b){let e=b(i,q,j,C,A,v);q=e[0],j=e[1],C=e[2],A=e[3],v=e[4]}if(r(A))for(let e in A)q=q.replace(`{${e}}`,A[e].toString());let x=Number(g);C&&(v.body=JSON.stringify(C)),x>0&&($=new AbortController,m=setTimeout(()=>$.abort(),x),v.signal=$.signal),j&&(q+=e(j));let O=null,R=null,S="";try{O=await fetch(q,v)}catch(e){S=t(e)}if(m&&clearTimeout(m),O)try{R=E?await E(O,h||{}):await O.json()}catch(e){S=t(e)}if(null===R&&(R=N?await N(S,h||{}):{data:null,msg:S,status:100,fail:!0,ok:!1}),k&&R?.fail)throw R;if("development"===process.env.NODE_ENV){let e=`${R?.status}: api[${l}] ${i.toUpperCase()} ${q}`;R?.ok?console.info(`🟢 ${e}`):console.info(`🔴 ${e}`)}return R},o),{})};export default createApi;
@@ -1,4 +0,0 @@
1
- import type { Api } from "./types";
2
- export declare let createApiResultOk: <T>(data?: T, msg?: string) => Api.ResultOk<T>;
3
- export declare let createApiResultFail: <T>(data?: T, msg?: string, status?: number) => Api.ResultFail<T>;
4
- export default createApiResultFail;
@@ -1 +0,0 @@
1
- export let createApiResultOk=(t={},e)=>({ok:!0,fail:!1,data:t,msg:e||"",status:200});export let createApiResultFail=(t={},e,a)=>({fail:!0,data:t,msg:e||"",status:a||404});export default createApiResultFail;
@@ -1,3 +0,0 @@
1
- import type { Api } from "./types";
2
- export declare let createApiResultOk: <T>(data?: T, msg?: string) => Api.ResultOk<T>;
3
- export default createApiResultOk;
@@ -1 +0,0 @@
1
- export let createApiResultOk=(e={},t)=>({ok:!0,fail:!1,data:e,msg:t||"",status:200});export default createApiResultOk;
package/cjs/index.d.ts DELETED
@@ -1,5 +0,0 @@
1
- export { ApiError } from "./ApiError";
2
- export { createApi } from "./createApi";
3
- export { createApiResultFail } from "./createApiResultFail";
4
- export { createApiResultOk } from "./createApiResultOk";
5
- export type { Api } from "./types";
package/cjs/index.js DELETED
@@ -1 +0,0 @@
1
- export{ApiError}from"./ApiError";export{createApi}from"./createApi";export{createApiResultFail}from"./createApiResultFail";export{createApiResultOk}from"./createApiResultOk";
@@ -1,6 +0,0 @@
1
- import { NextResponse } from "next/server";
2
- export declare let nextApiResponse: {
3
- ok<T>(data: T, msg?: string): NextResponse<import("..").Api.ResultOk<T>>;
4
- fail<T_1>(data: T_1, msg?: string, status?: number): NextResponse<import("..").Api.ResultFail<T_1>>;
5
- };
6
- export default nextApiResponse;
@@ -1 +0,0 @@
1
- import{NextResponse as e}from"next/server";import{createApiResultFail as t}from"../createApiResultFail";import{createApiResultOk as o}from"../createApiResultOk";export let nextApiResponse={ok:(t,r)=>e.json(o(t,r)),fail:(o,r,p)=>e.json(t(o,r,p))};export default nextApiResponse;
@@ -1,6 +0,0 @@
1
- import type { NextApiResponse } from "next";
2
- export declare let nextApiResponse12: (nextRes: NextApiResponse) => {
3
- ok<T>(data: T, msg?: string): void;
4
- fail<T_1>(data: T_1, msg?: string, status?: number): void;
5
- };
6
- export default nextApiResponse12;
@@ -1 +0,0 @@
1
- import{createApiResultFail as e}from"../createApiResultFail";import{createApiResultOk as t}from"../createApiResultOk";export let nextApiResponse12=s=>({ok(e,o){s.status(200).json(t(e,o))},fail(t,o,p){s.status(p||404).json(e(t,o,p))}});export default nextApiResponse12;
package/cjs/next.d.ts DELETED
@@ -1,2 +0,0 @@
1
- export { nextApiResponse } from "./next/nextApiResponse";
2
- export { nextApiResponse12 } from "./next/nextApiResponse12";
package/cjs/next.js DELETED
@@ -1 +0,0 @@
1
- export{nextApiResponse}from"./next/nextApiResponse";export{nextApiResponse12}from"./next/nextApiResponse12";
package/cjs/package.json DELETED
@@ -1,22 +0,0 @@
1
- {
2
- "name": "@koine/api",
3
- "sideEffects": false,
4
- "dependencies": {
5
- "@koine/utils": "*"
6
- },
7
- "peerDependencies": {
8
- "next": "^14.0.4",
9
- "swr": "^2.2.4"
10
- },
11
- "peerDependenciesMeta": {
12
- "next": {
13
- "optional": true
14
- },
15
- "swr": {
16
- "optional": true
17
- }
18
- },
19
- "module": "./index.js",
20
- "type": "module",
21
- "main": "./index.js"
22
- }
@@ -1,9 +0,0 @@
1
- import { type BareFetcher, type SWRConfiguration, type SWRResponse } from "swr";
2
- import type { Api } from "../types";
3
- type SWRConfigurationExtended<Data = any, Error = any, Fn extends BareFetcher<any> = BareFetcher<any>> = SWRConfiguration<Data, Error, Fn> & {
4
- when?: boolean | (() => boolean);
5
- };
6
- export declare let createSwrApi: <TEndpoints extends Api.Endpoints>(apiName: string, baseUrl: string, options?: Api.ClientOptions | undefined) => Api.Client<TEndpoints> & {
7
- use: <TEndpoint extends Extract<keyof TEndpoints, string>>(endpoint: TEndpoint, options?: Api.EndpointOptions<TEndpoints, TEndpoint, "get"> | undefined, config?: SWRConfigurationExtended<Api.GetDataType<TEndpoints, TEndpoint, "get", "ok">, Api.GetDataType<TEndpoints, TEndpoint, "get", "fail">, BareFetcher<any>> | undefined) => SWRResponse<Api.GetDataType<TEndpoints, TEndpoint, "get", "ok">, Api.GetDataType<TEndpoints, TEndpoint, "get", "fail">, any>;
8
- };
9
- export default createSwrApi;
@@ -1 +0,0 @@
1
- import e from"swr";import{isFunction as r}from"@koine/utils";import{createApi as t}from"../createApi";export let createUseApi=t=>(i,o,p)=>{let a=async()=>{let{data:e}=await t.get(i,{...o||{},throwErr:!0});return e};return e(p?.when===!1||r(p?.when)&&p?.when()===!1?null:o?[i,o]:[i],a,p)};export let createSwrApi=(...e)=>{let r=t(...e);return r.use=createUseApi(r),r};export default createSwrApi;
@@ -1,19 +0,0 @@
1
- import { type SWRMutationConfiguration, type SWRMutationResponse } from "swr/mutation";
2
- import { createUseApi } from "../swr/createSwrApi";
3
- import type { Api } from "../types";
4
- type MutationRequestMethod = Exclude<Api.RequestMethod, "get">;
5
- type MutationHookName = Exclude<keyof Api.HooksMapsByName, "use">;
6
- type KoineApiMethodHookSWR<THookName extends MutationHookName, TEndpoints extends Api.Endpoints> = <TEndpoint extends Api.EndpointUrl<TEndpoints>, TMethod extends MutationRequestMethod = Api.HooksMapsByName[THookName]>(endpoint: TEndpoint, options?: Api.EndpointOptions<TEndpoints, TEndpoint, TMethod>, config?: SWRMutationConfiguration<Api.EndpointResponseOk<TEndpoints, TEndpoint, TMethod>, Api.EndpointResponseFail<TEndpoints, TEndpoint, TMethod>, TEndpoint, Api.EndpointOptions<TEndpoints, TEndpoint, TMethod>>) => SWRMutationResponse<Api.EndpointResponseOk<TEndpoints, TEndpoint, TMethod>, Api.EndpointResponseFail<TEndpoints, TEndpoint, TMethod>, TEndpoint, Api.EndpointOptions<TEndpoints, TEndpoint, TMethod>>;
7
- export declare let createSwrMutationApi: <TEndpoints extends Api.Endpoints>(apiName: string, baseUrl: string, options?: Api.ClientOptions | undefined) => Api.Client<TEndpoints> & {
8
- usePost: KoineApiMethodHookSWR<"usePost", TEndpoints>;
9
- usePut: KoineApiMethodHookSWR<"usePut", TEndpoints>;
10
- usePatch: KoineApiMethodHookSWR<"usePatch", TEndpoints>;
11
- useDelete: KoineApiMethodHookSWR<"useDelete", TEndpoints>;
12
- } & {
13
- use: <TEndpoint extends Extract<keyof TEndpoints, string>>(endpoint: TEndpoint, options?: Api.EndpointOptions<TEndpoints, TEndpoint, "get"> | undefined, config?: (Partial<import("swr/dist/_internal").PublicConfiguration<Api.GetDataType<TEndpoints, TEndpoint, "get", "ok">, Api.GetDataType<TEndpoints, TEndpoint, "get", "fail">, import("swr/dist/_internal").BareFetcher<any>>> & Partial<import("swr/dist/_internal").ProviderConfiguration> & {
14
- provider?: ((cache: Readonly<import("swr/dist/_internal").Cache<any>>) => import("swr/dist/_internal").Cache<any>) | undefined;
15
- } & {
16
- when?: boolean | (() => boolean) | undefined;
17
- }) | undefined) => import("swr/dist/_internal").SWRResponse<Api.GetDataType<TEndpoints, TEndpoint, "get", "ok">, Api.GetDataType<TEndpoints, TEndpoint, "get", "fail">, any>;
18
- };
19
- export default createSwrMutationApi;
@@ -1 +0,0 @@
1
- import r from"swr/mutation";import{createApi as t}from"../createApi";import{createUseApi as e}from"../swr/createSwrApi";let a=(t,e)=>(a,o,i)=>r(o?[a,o]:a,async(r,a)=>{let o=Array.isArray(r)?r[0]:r,i=Array.isArray(r)?r[1]:{},{ok:p,data:s}=await t[e](o,{...i,...a.arg||{},throwErr:!0});return s},i);export let createSwrMutationApi=(...r)=>{let o=t(...r);return o.use=e(o),["post","put","patch","delete"].forEach(r=>{o[`use${r.charAt(0).toUpperCase()+r.slice(1)}`]=a(o,r)}),o};export default createSwrMutationApi;
@@ -1 +0,0 @@
1
- export { createSwrMutationApi } from "./swr-mutation/createSwrMutationApi";
@@ -1 +0,0 @@
1
- export{createSwrMutationApi}from"./swr-mutation/createSwrMutationApi";
package/cjs/swr.d.ts DELETED
@@ -1 +0,0 @@
1
- export { createSwrApi } from "./swr/createSwrApi";
package/cjs/swr.js DELETED
@@ -1 +0,0 @@
1
- export{createSwrApi}from"./swr/createSwrApi";
package/cjs/types.d.ts DELETED
@@ -1,126 +0,0 @@
1
- type _Response = Response;
2
- type ExtractEndpointParams<T extends string> = string extends T ? Record<string, string> : T extends `${infer _Start}{${infer Param}}${infer Rest}` ? {
3
- [k in Param | keyof ExtractEndpointParams<Rest>]: string | number;
4
- } : T extends `${infer _Start}{${infer Param}}` ? {
5
- [k in Param]: string | number;
6
- } : never;
7
- export declare namespace Api {
8
- export type ClientOptions = {
9
- headers?: RequestInit["headers"];
10
- request?: Omit<RequestInit, "body" | "headers" | "method">;
11
- throwErr?: boolean;
12
- timeout?: number | false | null;
13
- processReq?: RequestProcessor;
14
- processRes?: ResponseProcessorRes;
15
- processErr?: ResponseProcessorErr;
16
- };
17
- 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>>;
18
- export type Client<TEndpoints extends Endpoints> = {
19
- [TMethod in RequestMethod]: ClientMethod<TMethod, TEndpoints>;
20
- };
21
- 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;
22
- 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">>;
23
- export type EndpointResponseOk<TEndpoints extends Endpoints, TEndpoint extends EndpointUrl<TEndpoints>, TMethod extends RequestMethod> = GetDataType<TEndpoints, TEndpoint, TMethod, "ok">;
24
- export type EndpointResponseFail<TEndpoints extends Endpoints, TEndpoint extends EndpointUrl<TEndpoints>, TMethod extends RequestMethod> = GetDataType<TEndpoints, TEndpoint, TMethod, "fail">;
25
- type EndpointResult<TEndpoints extends Endpoints, TEndpoint extends EndpointUrl<TEndpoints>, TMethod extends RequestMethod> = Result<EndpointResponseOk<TEndpoints, TEndpoint, TMethod>, EndpointResponseFail<TEndpoints, TEndpoint, TMethod>>;
26
- export type Endpoints = Record<string, Endpoint>;
27
- type Endpoint = {
28
- [TMethod in Uppercase<RequestMethod>]?: DataTypes<TMethod>;
29
- };
30
- export type EndpointUrl<TEndpoints extends Endpoints> = Extract<keyof TEndpoints, string>;
31
- type DataTypes<TMethod extends Uppercase<RequestMethod>> = {
32
- json?: RequestJson;
33
- query?: RequestQuery;
34
- ok?: null | unknown;
35
- fail?: null | unknown;
36
- };
37
- export type RequestMethod = "get" | "post" | "put" | "patch" | "delete";
38
- type RequestJson = unknown;
39
- type RequestQuery = unknown;
40
- type RequestParams = unknown;
41
- type RequestOptions<TEndpoints extends Endpoints, TEndpoint extends EndpointUrl<TEndpoints>, TMethod extends RequestMethod, TJson extends RequestJson, TQuery extends RequestQuery> = Omit<ClientOptions, "processReq"> & {
42
- processReq?: EndpointRequestProcessor<TEndpoints, TEndpoint, TMethod>;
43
- params?: ExtractEndpointParams<TEndpoint>;
44
- query?: TQuery;
45
- json?: TJson;
46
- };
47
- export type ResponseOk = unknown;
48
- export type ResponseFail = unknown;
49
- export type ResultOk<TResponse extends ResponseOk = ResponseOk> = {
50
- status: _Response["status"];
51
- msg: _Response["statusText"];
52
- ok: true;
53
- fail?: false;
54
- data: TResponse;
55
- };
56
- export type ResultFail<TResponse extends ResponseFail = ResponseFail> = {
57
- status: _Response["status"];
58
- msg: Error["message"] | _Response["statusText"];
59
- ok?: false;
60
- fail: true;
61
- data: TResponse;
62
- };
63
- export type Result<TResponseOk extends ResponseOk, TResponseFail extends ResponseFail> = {
64
- status: _Response["status"];
65
- msg: _Response["statusText"];
66
- ok: true;
67
- fail?: false;
68
- data: TResponseOk;
69
- } | {
70
- status: _Response["status"];
71
- msg: Error["message"] | _Response["statusText"];
72
- ok?: false;
73
- fail: true;
74
- data: TResponseFail;
75
- };
76
- export type RequestProcessor = (method: RequestMethod, url: string, query: any, json: any, params: any, requestInit: RequestInit) => [
77
- string,
78
- RequestQuery,
79
- RequestJson,
80
- RequestParams,
81
- RequestInit
82
- ];
83
- 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) => [
84
- string,
85
- EndpointOptions<TEndpoints, TEndpoint, TMethod>["query"],
86
- EndpointOptions<TEndpoints, TEndpoint, TMethod>["json"],
87
- EndpointOptions<TEndpoints, TEndpoint, TMethod>["params"],
88
- RequestInit
89
- ];
90
- type ResponseProcessorRes = <TResponseOk extends ResponseOk = ResponseOk, TResponseFail extends ResponseFail = ResponseFail>(response: _Response, options: any) => Promise<Result<TResponseOk, TResponseFail>>;
91
- type ResponseProcessorErr = <TResponseOk extends ResponseOk = ResponseOk, TResponseFail extends ResponseFail = ResponseFail>(msg: string, options: any) => Promise<Result<TResponseOk, TResponseFail>>;
92
- type HooksMaps = {
93
- [TMethod in RequestMethod]: `use${TMethod extends "get" ? "" : Capitalize<TMethod>}`;
94
- };
95
- export type HooksMapsByName = {
96
- [K in keyof HooksMaps as HooksMaps[K]]: K;
97
- };
98
- export {};
99
- }
100
- export declare namespace Api.Generate {
101
- type ResultShortcuts<TEndpoints extends Endpoints> = {
102
- [TMethod in RequestMethod]: {
103
- [TEndpoint in Extract<keyof TEndpoints, string>]: {
104
- ok: GetDataType<TEndpoints, TEndpoint, TMethod, "ok">;
105
- fail: GetDataType<TEndpoints, TEndpoint, TMethod, "fail">;
106
- };
107
- };
108
- };
109
- type ResponseShortcuts<TEndpoints extends Endpoints> = {
110
- [TMethod in RequestMethod]: {
111
- [TEndpoint in Extract<keyof TEndpoints, string>]: GetDataType<TEndpoints, TEndpoint, TMethod, "ok">;
112
- };
113
- };
114
- type RequestShortcuts<TEndpoints extends Endpoints> = {
115
- [TMethod in RequestMethod]: {
116
- [TEndpoint in Extract<keyof TEndpoints, string>]: TMethod extends "get" ? GetDataType<TEndpoints, TEndpoint, TMethod, "query"> : GetDataType<TEndpoints, TEndpoint, TMethod, "json">;
117
- };
118
- };
119
- type GetShortcuts<TEndpoints extends Endpoints> = {
120
- [TEndpoint in Extract<keyof TEndpoints, string>]: GetDataType<TEndpoints, TEndpoint, "get", "ok">;
121
- };
122
- type PostShortcuts<TEndpoints extends Endpoints> = {
123
- [TEndpoint in Extract<keyof TEndpoints, string>]: GetDataType<TEndpoints, TEndpoint, "post", "ok">;
124
- };
125
- }
126
- export {};
package/cjs/types.js DELETED
@@ -1 +0,0 @@
1
- export{};
package/createApi.js DELETED
@@ -1 +0,0 @@
1
- import{buildUrlQueryString as e,errorToString as t,isFullObject as r}from"@koine/utils";let o=["get","post","put","patch","delete"];export let createApi=(l,a,i)=>{let{headers:s={},request:n={},throwErr:p,timeout:c=1e4,processReq:u,processRes:f,processErr:d}=i||{};return o.reduce((o,i)=>(o[i]=async(o,h)=>{let $,m;let{request:w=n,headers:y=s,timeout:g=c,processReq:b,processRes:E=f,processErr:N=d,throwErr:k=p}=h||{},{params:A,json:C,query:j}=h||{},q=`${a}/${o+"".replace(/^\/*/,"")}`,v={method:i.toUpperCase(),...w,headers:{"content-type":"application/json",...y}};if(u){let e=u(i,q,j,C,A,v);q=e[0],j=e[1],C=e[2],A=e[3],v=e[4]}if(b){let e=b(i,q,j,C,A,v);q=e[0],j=e[1],C=e[2],A=e[3],v=e[4]}if(r(A))for(let e in A)q=q.replace(`{${e}}`,A[e].toString());let x=Number(g);C&&(v.body=JSON.stringify(C)),x>0&&($=new AbortController,m=setTimeout(()=>$.abort(),x),v.signal=$.signal),j&&(q+=e(j));let O=null,R=null,S="";try{O=await fetch(q,v)}catch(e){S=t(e)}if(m&&clearTimeout(m),O)try{R=E?await E(O,h||{}):await O.json()}catch(e){S=t(e)}if(null===R&&(R=N?await N(S,h||{}):{data:null,msg:S,status:100,fail:!0,ok:!1}),k&&R?.fail)throw R;if("development"===process.env.NODE_ENV){let e=`${R?.status}: api[${l}] ${i.toUpperCase()} ${q}`;R?.ok?console.info(`🟢 ${e}`):console.info(`🔴 ${e}`)}return R},o),{})};export default createApi;
@@ -1 +0,0 @@
1
- export let createApiResultOk=(t={},e)=>({ok:!0,fail:!1,data:t,msg:e||"",status:200});export let createApiResultFail=(t={},e,a)=>({fail:!0,data:t,msg:e||"",status:a||404});export default createApiResultFail;
@@ -1 +0,0 @@
1
- export let createApiResultOk=(e={},t)=>({ok:!0,fail:!1,data:e,msg:t||"",status:200});export default createApiResultOk;
package/index.js DELETED
@@ -1 +0,0 @@
1
- export{ApiError}from"./ApiError";export{createApi}from"./createApi";export{createApiResultFail}from"./createApiResultFail";export{createApiResultOk}from"./createApiResultOk";
@@ -1 +0,0 @@
1
- import{NextResponse as e}from"next/server";import{createApiResultFail as t}from"../createApiResultFail";import{createApiResultOk as o}from"../createApiResultOk";export let nextApiResponse={ok:(t,r)=>e.json(o(t,r)),fail:(o,r,p)=>e.json(t(o,r,p))};export default nextApiResponse;
@@ -1 +0,0 @@
1
- import{createApiResultFail as e}from"../createApiResultFail";import{createApiResultOk as t}from"../createApiResultOk";export let nextApiResponse12=s=>({ok(e,o){s.status(200).json(t(e,o))},fail(t,o,p){s.status(p||404).json(e(t,o,p))}});export default nextApiResponse12;
package/next.js DELETED
@@ -1 +0,0 @@
1
- export{nextApiResponse}from"./next/nextApiResponse";export{nextApiResponse12}from"./next/nextApiResponse12";
@@ -1 +0,0 @@
1
- import e from"swr";import{isFunction as r}from"@koine/utils";import{createApi as t}from"../createApi";export let createUseApi=t=>(i,o,p)=>{let a=async()=>{let{data:e}=await t.get(i,{...o||{},throwErr:!0});return e};return e(p?.when===!1||r(p?.when)&&p?.when()===!1?null:o?[i,o]:[i],a,p)};export let createSwrApi=(...e)=>{let r=t(...e);return r.use=createUseApi(r),r};export default createSwrApi;
@@ -1 +0,0 @@
1
- import r from"swr/mutation";import{createApi as t}from"../createApi";import{createUseApi as e}from"../swr/createSwrApi";let a=(t,e)=>(a,o,i)=>r(o?[a,o]:a,async(r,a)=>{let o=Array.isArray(r)?r[0]:r,i=Array.isArray(r)?r[1]:{},{ok:p,data:s}=await t[e](o,{...i,...a.arg||{},throwErr:!0});return s},i);export let createSwrMutationApi=(...r)=>{let o=t(...r);return o.use=e(o),["post","put","patch","delete"].forEach(r=>{o[`use${r.charAt(0).toUpperCase()+r.slice(1)}`]=a(o,r)}),o};export default createSwrMutationApi;
package/swr-mutation.js DELETED
@@ -1 +0,0 @@
1
- export{createSwrMutationApi}from"./swr-mutation/createSwrMutationApi";
package/swr.js DELETED
@@ -1 +0,0 @@
1
- export{createSwrApi}from"./swr/createSwrApi";
package/types.js DELETED
@@ -1 +0,0 @@
1
- export{};