@koine/api 2.0.0-beta.78 → 2.0.0-beta.79
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/ApiError.cjs.d.ts +2 -0
- package/ApiError.cjs.default.js +1 -0
- package/ApiError.cjs.js +14 -0
- package/ApiError.cjs.mjs +2 -0
- package/ApiError.esm.js +9 -0
- package/createApi.cjs.d.ts +2 -0
- package/createApi.cjs.default.js +1 -0
- package/createApi.cjs.js +122 -0
- package/createApi.cjs.mjs +2 -0
- package/createApi.esm.js +117 -0
- package/createApiResultFail.cjs.d.ts +2 -0
- package/createApiResultFail.cjs.default.js +1 -0
- package/createApiResultFail.cjs.js +21 -0
- package/createApiResultFail.cjs.mjs +2 -0
- package/createApiResultFail.esm.js +15 -0
- package/createApiResultOk.cjs.d.ts +2 -0
- package/createApiResultOk.cjs.default.js +1 -0
- package/createApiResultOk.cjs.js +14 -0
- package/createApiResultOk.cjs.mjs +2 -0
- package/createApiResultOk.esm.js +9 -0
- package/createSwrApi.cjs.js +30 -0
- package/createSwrApi.esm.js +23 -0
- package/index.cjs.js +9 -140
- package/index.esm.js +5 -140
- package/next.cjs.d.ts +1 -0
- package/next.cjs.default.js +1 -0
- package/next.cjs.js +28 -0
- package/next.cjs.mjs +2 -0
- package/next.esm.js +23 -0
- package/package.json +37 -2
- package/swr-mutation.cjs.d.ts +1 -0
- package/swr-mutation.cjs.default.js +1 -0
- package/swr-mutation.cjs.js +38 -0
- package/swr-mutation.cjs.mjs +2 -0
- package/swr-mutation.esm.js +30 -0
- package/swr.cjs.d.ts +1 -0
- package/swr.cjs.default.js +1 -0
- package/swr.cjs.js +12 -0
- package/swr.cjs.mjs +2 -0
- package/swr.esm.js +4 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
exports._default = require('./ApiError.cjs.js').default;
|
package/ApiError.cjs.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
class ApiError extends Error {
|
|
6
|
+
constructor(result) {
|
|
7
|
+
super(`Request failed with ${result.status} ${result.msg}`);
|
|
8
|
+
this.name = "ApiError";
|
|
9
|
+
Object.assign(this, result);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
exports.ApiError = ApiError;
|
|
14
|
+
exports["default"] = ApiError;
|
package/ApiError.cjs.mjs
ADDED
package/ApiError.esm.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
exports._default = require('./createApi.cjs.js').default;
|
package/createApi.cjs.js
ADDED
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var utils = require('@koine/utils');
|
|
6
|
+
|
|
7
|
+
let apiMethods = [
|
|
8
|
+
"get",
|
|
9
|
+
"post",
|
|
10
|
+
"put",
|
|
11
|
+
"patch",
|
|
12
|
+
"delete",
|
|
13
|
+
];
|
|
14
|
+
let createApi = (apiName, baseUrl, options) => {
|
|
15
|
+
const { headers: headersBase = {}, request: requestBase = {}, throwErr: throwErrBase, timeout: timeoutBase = 10000, processReq: processReqBase, processRes: processResBase, processErr: processErrBase, } = options || {};
|
|
16
|
+
return apiMethods.reduce((api, method) => {
|
|
17
|
+
api[method] = async (endpoint, options) => {
|
|
18
|
+
const { request = requestBase, headers = headersBase, timeout = timeoutBase, processReq, processRes = processResBase, processErr = processErrBase, throwErr = throwErrBase, } = options || {};
|
|
19
|
+
let { params, json, query } = options || {};
|
|
20
|
+
let url = `${baseUrl}/${endpoint + "".replace(/^\/*/, "")}`;
|
|
21
|
+
let requestInit = {
|
|
22
|
+
method: method.toUpperCase(),
|
|
23
|
+
...request,
|
|
24
|
+
headers: {
|
|
25
|
+
"content-type": "application/json",
|
|
26
|
+
...headers,
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
if (processReqBase) {
|
|
30
|
+
const transformed = processReqBase(method, url, query, json, params, requestInit);
|
|
31
|
+
url = transformed[0];
|
|
32
|
+
query = transformed[1];
|
|
33
|
+
json = transformed[2];
|
|
34
|
+
params = transformed[3];
|
|
35
|
+
requestInit = transformed[4];
|
|
36
|
+
}
|
|
37
|
+
if (processReq) {
|
|
38
|
+
const transformed = processReq(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 (utils.isFullObject(params)) {
|
|
46
|
+
for (const key in params) {
|
|
47
|
+
url = url.replace(`{${key}}`, params[key].toString());
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
const timeoutNumber = Number(timeout);
|
|
51
|
+
let controller;
|
|
52
|
+
let timeoutId;
|
|
53
|
+
if (json) {
|
|
54
|
+
requestInit.body = JSON.stringify(json);
|
|
55
|
+
}
|
|
56
|
+
if (timeoutNumber > 0) {
|
|
57
|
+
controller = new AbortController();
|
|
58
|
+
timeoutId = setTimeout(() => controller.abort(), timeoutNumber);
|
|
59
|
+
requestInit.signal = controller.signal;
|
|
60
|
+
}
|
|
61
|
+
if (query) {
|
|
62
|
+
url += utils.buildUrlQueryString(query);
|
|
63
|
+
}
|
|
64
|
+
let response = null;
|
|
65
|
+
let result = null;
|
|
66
|
+
let msg = "";
|
|
67
|
+
try {
|
|
68
|
+
response = await fetch(url, requestInit);
|
|
69
|
+
}
|
|
70
|
+
catch (e) {
|
|
71
|
+
msg = utils.errorToString(e);
|
|
72
|
+
}
|
|
73
|
+
if (timeoutId) {
|
|
74
|
+
clearTimeout(timeoutId);
|
|
75
|
+
}
|
|
76
|
+
if (response) {
|
|
77
|
+
try {
|
|
78
|
+
if (processRes) {
|
|
79
|
+
result = await processRes(response, options || {});
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
result = await response.json();
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
catch (e) {
|
|
86
|
+
msg = utils.errorToString(e);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
if (result === null) {
|
|
90
|
+
if (processErr) {
|
|
91
|
+
result = await processErr(msg, options || {});
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
result = {
|
|
95
|
+
data: null,
|
|
96
|
+
msg,
|
|
97
|
+
status: 100,
|
|
98
|
+
fail: true,
|
|
99
|
+
ok: false,
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
if (throwErr && result?.fail) {
|
|
104
|
+
throw result;
|
|
105
|
+
}
|
|
106
|
+
if (process.env["NODE_ENV"] === "development") {
|
|
107
|
+
const logMsg = `${result?.status}: api[${apiName}] ${method.toUpperCase()} ${url}`;
|
|
108
|
+
if (result?.ok) {
|
|
109
|
+
console.info(`🟢 ${logMsg}`);
|
|
110
|
+
}
|
|
111
|
+
else {
|
|
112
|
+
console.info(`🔴 ${logMsg}`);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
return result;
|
|
116
|
+
};
|
|
117
|
+
return api;
|
|
118
|
+
}, {});
|
|
119
|
+
};
|
|
120
|
+
|
|
121
|
+
exports.createApi = createApi;
|
|
122
|
+
exports["default"] = createApi;
|
package/createApi.esm.js
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import { isFullObject, buildUrlQueryString, errorToString } from '@koine/utils';
|
|
2
|
+
|
|
3
|
+
let apiMethods = [
|
|
4
|
+
"get",
|
|
5
|
+
"post",
|
|
6
|
+
"put",
|
|
7
|
+
"patch",
|
|
8
|
+
"delete",
|
|
9
|
+
];
|
|
10
|
+
let createApi = (apiName, baseUrl, options) => {
|
|
11
|
+
const { headers: headersBase = {}, request: requestBase = {}, throwErr: throwErrBase, timeout: timeoutBase = 10000, processReq: processReqBase, processRes: processResBase, processErr: processErrBase, } = options || {};
|
|
12
|
+
return apiMethods.reduce((api, method) => {
|
|
13
|
+
api[method] = async (endpoint, options) => {
|
|
14
|
+
const { request = requestBase, headers = headersBase, timeout = timeoutBase, processReq, processRes = processResBase, processErr = processErrBase, throwErr = throwErrBase, } = options || {};
|
|
15
|
+
let { params, json, query } = options || {};
|
|
16
|
+
let url = `${baseUrl}/${endpoint + "".replace(/^\/*/, "")}`;
|
|
17
|
+
let requestInit = {
|
|
18
|
+
method: method.toUpperCase(),
|
|
19
|
+
...request,
|
|
20
|
+
headers: {
|
|
21
|
+
"content-type": "application/json",
|
|
22
|
+
...headers,
|
|
23
|
+
},
|
|
24
|
+
};
|
|
25
|
+
if (processReqBase) {
|
|
26
|
+
const transformed = processReqBase(method, url, query, json, params, requestInit);
|
|
27
|
+
url = transformed[0];
|
|
28
|
+
query = transformed[1];
|
|
29
|
+
json = transformed[2];
|
|
30
|
+
params = transformed[3];
|
|
31
|
+
requestInit = transformed[4];
|
|
32
|
+
}
|
|
33
|
+
if (processReq) {
|
|
34
|
+
const transformed = processReq(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 (isFullObject(params)) {
|
|
42
|
+
for (const key in params) {
|
|
43
|
+
url = url.replace(`{${key}}`, params[key].toString());
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
const timeoutNumber = Number(timeout);
|
|
47
|
+
let controller;
|
|
48
|
+
let timeoutId;
|
|
49
|
+
if (json) {
|
|
50
|
+
requestInit.body = JSON.stringify(json);
|
|
51
|
+
}
|
|
52
|
+
if (timeoutNumber > 0) {
|
|
53
|
+
controller = new AbortController();
|
|
54
|
+
timeoutId = setTimeout(() => controller.abort(), timeoutNumber);
|
|
55
|
+
requestInit.signal = controller.signal;
|
|
56
|
+
}
|
|
57
|
+
if (query) {
|
|
58
|
+
url += buildUrlQueryString(query);
|
|
59
|
+
}
|
|
60
|
+
let response = null;
|
|
61
|
+
let result = null;
|
|
62
|
+
let msg = "";
|
|
63
|
+
try {
|
|
64
|
+
response = await fetch(url, requestInit);
|
|
65
|
+
}
|
|
66
|
+
catch (e) {
|
|
67
|
+
msg = errorToString(e);
|
|
68
|
+
}
|
|
69
|
+
if (timeoutId) {
|
|
70
|
+
clearTimeout(timeoutId);
|
|
71
|
+
}
|
|
72
|
+
if (response) {
|
|
73
|
+
try {
|
|
74
|
+
if (processRes) {
|
|
75
|
+
result = await processRes(response, options || {});
|
|
76
|
+
}
|
|
77
|
+
else {
|
|
78
|
+
result = await response.json();
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch (e) {
|
|
82
|
+
msg = errorToString(e);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
if (result === null) {
|
|
86
|
+
if (processErr) {
|
|
87
|
+
result = await processErr(msg, options || {});
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
result = {
|
|
91
|
+
data: null,
|
|
92
|
+
msg,
|
|
93
|
+
status: 100,
|
|
94
|
+
fail: true,
|
|
95
|
+
ok: false,
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
if (throwErr && result?.fail) {
|
|
100
|
+
throw result;
|
|
101
|
+
}
|
|
102
|
+
if (process.env["NODE_ENV"] === "development") {
|
|
103
|
+
const logMsg = `${result?.status}: api[${apiName}] ${method.toUpperCase()} ${url}`;
|
|
104
|
+
if (result?.ok) {
|
|
105
|
+
console.info(`🟢 ${logMsg}`);
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
console.info(`🔴 ${logMsg}`);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return result;
|
|
112
|
+
};
|
|
113
|
+
return api;
|
|
114
|
+
}, {});
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
export { createApi, createApi as default };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
exports._default = require('./createApiResultFail.cjs.js').default;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
let createApiResultOk = (data = {}, msg) => ({
|
|
6
|
+
ok: true,
|
|
7
|
+
fail: false,
|
|
8
|
+
data,
|
|
9
|
+
msg: msg || "",
|
|
10
|
+
status: 200,
|
|
11
|
+
});
|
|
12
|
+
let createApiResultFail = (data = {}, msg, status) => ({
|
|
13
|
+
fail: true,
|
|
14
|
+
data,
|
|
15
|
+
msg: msg || "",
|
|
16
|
+
status: status || 404,
|
|
17
|
+
});
|
|
18
|
+
|
|
19
|
+
exports.createApiResultFail = createApiResultFail;
|
|
20
|
+
exports.createApiResultOk = createApiResultOk;
|
|
21
|
+
exports["default"] = createApiResultFail;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
let createApiResultOk = (data = {}, msg) => ({
|
|
2
|
+
ok: true,
|
|
3
|
+
fail: false,
|
|
4
|
+
data,
|
|
5
|
+
msg: msg || "",
|
|
6
|
+
status: 200,
|
|
7
|
+
});
|
|
8
|
+
let createApiResultFail = (data = {}, msg, status) => ({
|
|
9
|
+
fail: true,
|
|
10
|
+
data,
|
|
11
|
+
msg: msg || "",
|
|
12
|
+
status: status || 404,
|
|
13
|
+
});
|
|
14
|
+
|
|
15
|
+
export { createApiResultFail, createApiResultOk, createApiResultFail as default };
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
exports._default = require('./createApiResultOk.cjs.js').default;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
let createApiResultOk = (data = {}, msg) => ({
|
|
6
|
+
ok: true,
|
|
7
|
+
fail: false,
|
|
8
|
+
data,
|
|
9
|
+
msg: msg || "",
|
|
10
|
+
status: 200,
|
|
11
|
+
});
|
|
12
|
+
|
|
13
|
+
exports.createApiResultOk = createApiResultOk;
|
|
14
|
+
exports["default"] = createApiResultOk;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
var useSWR = require('swr');
|
|
4
|
+
var utils = require('@koine/utils');
|
|
5
|
+
var createApi = require('./createApi.cjs.js');
|
|
6
|
+
|
|
7
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
8
|
+
|
|
9
|
+
var useSWR__default = /*#__PURE__*/_interopDefaultLegacy(useSWR);
|
|
10
|
+
|
|
11
|
+
let createUseApi = (api) => (endpoint, options, config) => {
|
|
12
|
+
const fetcher = async () => {
|
|
13
|
+
const { data } = await api.get(endpoint, {
|
|
14
|
+
...(options || {}),
|
|
15
|
+
throwErr: true,
|
|
16
|
+
});
|
|
17
|
+
return data;
|
|
18
|
+
};
|
|
19
|
+
const shouldNotFetch = config?.when === false ||
|
|
20
|
+
(utils.isFunction(config?.when) && config?.when() === false);
|
|
21
|
+
return useSWR__default["default"](shouldNotFetch ? null : options ? [endpoint, options] : [endpoint], fetcher, config);
|
|
22
|
+
};
|
|
23
|
+
let createSwrApi = (...args) => {
|
|
24
|
+
const api = createApi.createApi(...args);
|
|
25
|
+
api.use = createUseApi(api);
|
|
26
|
+
return api;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
exports.createSwrApi = createSwrApi;
|
|
30
|
+
exports.createUseApi = createUseApi;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import useSWR from 'swr';
|
|
2
|
+
import { isFunction } from '@koine/utils';
|
|
3
|
+
import { createApi } from './createApi.esm.js';
|
|
4
|
+
|
|
5
|
+
let createUseApi = (api) => (endpoint, options, config) => {
|
|
6
|
+
const fetcher = async () => {
|
|
7
|
+
const { data } = await api.get(endpoint, {
|
|
8
|
+
...(options || {}),
|
|
9
|
+
throwErr: true,
|
|
10
|
+
});
|
|
11
|
+
return data;
|
|
12
|
+
};
|
|
13
|
+
const shouldNotFetch = config?.when === false ||
|
|
14
|
+
(isFunction(config?.when) && config?.when() === false);
|
|
15
|
+
return useSWR(shouldNotFetch ? null : options ? [endpoint, options] : [endpoint], fetcher, config);
|
|
16
|
+
};
|
|
17
|
+
let createSwrApi = (...args) => {
|
|
18
|
+
const api = createApi(...args);
|
|
19
|
+
api.use = createUseApi(api);
|
|
20
|
+
return api;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export { createUseApi as a, createSwrApi as c };
|
package/index.cjs.js
CHANGED
|
@@ -2,146 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var
|
|
5
|
+
var ApiError = require('./ApiError.cjs.js');
|
|
6
|
+
var createApi = require('./createApi.cjs.js');
|
|
7
|
+
var createApiResultFail = require('./createApiResultFail.cjs.js');
|
|
8
|
+
var createApiResultOk = require('./createApiResultOk.cjs.js');
|
|
9
|
+
require('@koine/utils');
|
|
6
10
|
|
|
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
11
|
|
|
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
12
|
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
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;
|
|
13
|
+
exports.ApiError = ApiError.ApiError;
|
|
14
|
+
exports.createApi = createApi.createApi;
|
|
15
|
+
exports.createApiResultFail = createApiResultFail.createApiResultFail;
|
|
16
|
+
exports.createApiResultOk = createApiResultOk.createApiResultOk;
|
package/index.esm.js
CHANGED
|
@@ -1,140 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
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 };
|
|
1
|
+
export { ApiError } from './ApiError.esm.js';
|
|
2
|
+
export { createApi } from './createApi.esm.js';
|
|
3
|
+
export { createApiResultFail } from './createApiResultFail.esm.js';
|
|
4
|
+
export { createApiResultOk } from './createApiResultOk.esm.js';
|
|
5
|
+
import '@koine/utils';
|
package/next.cjs.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./next";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
exports._default = require('./next.cjs.js').default;
|
package/next.cjs.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var server = require('next/server');
|
|
6
|
+
var createApiResultFail = require('./createApiResultFail.cjs.js');
|
|
7
|
+
var createApiResultOk = require('./createApiResultOk.cjs.js');
|
|
8
|
+
|
|
9
|
+
let nextApiResponse = {
|
|
10
|
+
ok(data, msg) {
|
|
11
|
+
return server.NextResponse.json(createApiResultOk.createApiResultOk(data, msg));
|
|
12
|
+
},
|
|
13
|
+
fail(data, msg, status) {
|
|
14
|
+
return server.NextResponse.json(createApiResultFail.createApiResultFail(data, msg, status));
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
let nextApiResponse12 = (nextRes) => ({
|
|
19
|
+
ok(data, msg) {
|
|
20
|
+
nextRes.status(200).json(createApiResultOk.createApiResultOk(data, msg));
|
|
21
|
+
},
|
|
22
|
+
fail(data, msg, status) {
|
|
23
|
+
nextRes.status(status || 404).json(createApiResultFail.createApiResultFail(data, msg, status));
|
|
24
|
+
},
|
|
25
|
+
});
|
|
26
|
+
|
|
27
|
+
exports.nextApiResponse = nextApiResponse;
|
|
28
|
+
exports.nextApiResponse12 = nextApiResponse12;
|
package/next.cjs.mjs
ADDED
package/next.esm.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { NextResponse } from 'next/server';
|
|
2
|
+
import { createApiResultFail } from './createApiResultFail.esm.js';
|
|
3
|
+
import { createApiResultOk } from './createApiResultOk.esm.js';
|
|
4
|
+
|
|
5
|
+
let nextApiResponse = {
|
|
6
|
+
ok(data, msg) {
|
|
7
|
+
return NextResponse.json(createApiResultOk(data, msg));
|
|
8
|
+
},
|
|
9
|
+
fail(data, msg, status) {
|
|
10
|
+
return NextResponse.json(createApiResultFail(data, msg, status));
|
|
11
|
+
},
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
let nextApiResponse12 = (nextRes) => ({
|
|
15
|
+
ok(data, msg) {
|
|
16
|
+
nextRes.status(200).json(createApiResultOk(data, msg));
|
|
17
|
+
},
|
|
18
|
+
fail(data, msg, status) {
|
|
19
|
+
nextRes.status(status || 404).json(createApiResultFail(data, msg, status));
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
export { nextApiResponse, nextApiResponse12 };
|
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.
|
|
5
|
+
"@koine/utils": "2.0.0-beta.79"
|
|
6
6
|
},
|
|
7
7
|
"peerDependencies": {
|
|
8
8
|
"next": "^14.0.4",
|
|
@@ -22,9 +22,44 @@
|
|
|
22
22
|
"module": "./index.esm.js",
|
|
23
23
|
"import": "./index.cjs.mjs",
|
|
24
24
|
"default": "./index.cjs.js"
|
|
25
|
+
},
|
|
26
|
+
"./ApiError": {
|
|
27
|
+
"module": "./ApiError.esm.js",
|
|
28
|
+
"import": "./ApiError.cjs.mjs",
|
|
29
|
+
"default": "./ApiError.cjs.js"
|
|
30
|
+
},
|
|
31
|
+
"./createApi": {
|
|
32
|
+
"module": "./createApi.esm.js",
|
|
33
|
+
"import": "./createApi.cjs.mjs",
|
|
34
|
+
"default": "./createApi.cjs.js"
|
|
35
|
+
},
|
|
36
|
+
"./createApiResultFail": {
|
|
37
|
+
"module": "./createApiResultFail.esm.js",
|
|
38
|
+
"import": "./createApiResultFail.cjs.mjs",
|
|
39
|
+
"default": "./createApiResultFail.cjs.js"
|
|
40
|
+
},
|
|
41
|
+
"./createApiResultOk": {
|
|
42
|
+
"module": "./createApiResultOk.esm.js",
|
|
43
|
+
"import": "./createApiResultOk.cjs.mjs",
|
|
44
|
+
"default": "./createApiResultOk.cjs.js"
|
|
45
|
+
},
|
|
46
|
+
"./next": {
|
|
47
|
+
"module": "./next.esm.js",
|
|
48
|
+
"import": "./next.cjs.mjs",
|
|
49
|
+
"default": "./next.cjs.js"
|
|
50
|
+
},
|
|
51
|
+
"./swr": {
|
|
52
|
+
"module": "./swr.esm.js",
|
|
53
|
+
"import": "./swr.cjs.mjs",
|
|
54
|
+
"default": "./swr.cjs.js"
|
|
55
|
+
},
|
|
56
|
+
"./swr-mutation": {
|
|
57
|
+
"module": "./swr-mutation.esm.js",
|
|
58
|
+
"import": "./swr-mutation.cjs.mjs",
|
|
59
|
+
"default": "./swr-mutation.cjs.js"
|
|
25
60
|
}
|
|
26
61
|
},
|
|
27
62
|
"module": "./index.esm.js",
|
|
28
63
|
"main": "./index.cjs.js",
|
|
29
|
-
"version": "2.0.0-beta.
|
|
64
|
+
"version": "2.0.0-beta.79"
|
|
30
65
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./swr-mutation";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
exports._default = require('./swr-mutation.cjs.js').default;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var useSWRMutation = require('swr/mutation');
|
|
6
|
+
var createApi = require('./createApi.cjs.js');
|
|
7
|
+
var createSwrApi = require('./createSwrApi.cjs.js');
|
|
8
|
+
require('@koine/utils');
|
|
9
|
+
require('swr');
|
|
10
|
+
|
|
11
|
+
function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
|
|
12
|
+
|
|
13
|
+
var useSWRMutation__default = /*#__PURE__*/_interopDefaultLegacy(useSWRMutation);
|
|
14
|
+
|
|
15
|
+
let createUseMutationApi = (api, method) => (endpoint, options, config) => {
|
|
16
|
+
const sender = async (_endpoint, _options) => {
|
|
17
|
+
const endpoint = Array.isArray(_endpoint) ? _endpoint[0] : _endpoint;
|
|
18
|
+
const options = Array.isArray(_endpoint) ? _endpoint[1] : {};
|
|
19
|
+
const { ok, data } = await api[method](endpoint, {
|
|
20
|
+
...options,
|
|
21
|
+
...(_options.arg || {}),
|
|
22
|
+
throwErr: true,
|
|
23
|
+
});
|
|
24
|
+
return ok ? data : data;
|
|
25
|
+
};
|
|
26
|
+
return useSWRMutation__default["default"](options ? [endpoint, options] : endpoint, sender, config);
|
|
27
|
+
};
|
|
28
|
+
let createSwrMutationApi = (...args) => {
|
|
29
|
+
const api = createApi.createApi(...args);
|
|
30
|
+
api.use = createSwrApi.createUseApi(api);
|
|
31
|
+
["post", "put", "patch", "delete"].forEach((method) => {
|
|
32
|
+
const hookName = `use${method.charAt(0).toUpperCase() + method.slice(1)}`;
|
|
33
|
+
api[hookName] = createUseMutationApi(api, method);
|
|
34
|
+
});
|
|
35
|
+
return api;
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
exports.createSwrMutationApi = createSwrMutationApi;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import useSWRMutation from 'swr/mutation';
|
|
2
|
+
import { createApi } from './createApi.esm.js';
|
|
3
|
+
import { a as createUseApi } from './createSwrApi.esm.js';
|
|
4
|
+
import '@koine/utils';
|
|
5
|
+
import 'swr';
|
|
6
|
+
|
|
7
|
+
let createUseMutationApi = (api, method) => (endpoint, options, config) => {
|
|
8
|
+
const sender = async (_endpoint, _options) => {
|
|
9
|
+
const endpoint = Array.isArray(_endpoint) ? _endpoint[0] : _endpoint;
|
|
10
|
+
const options = Array.isArray(_endpoint) ? _endpoint[1] : {};
|
|
11
|
+
const { ok, data } = await api[method](endpoint, {
|
|
12
|
+
...options,
|
|
13
|
+
...(_options.arg || {}),
|
|
14
|
+
throwErr: true,
|
|
15
|
+
});
|
|
16
|
+
return ok ? data : data;
|
|
17
|
+
};
|
|
18
|
+
return useSWRMutation(options ? [endpoint, options] : endpoint, sender, config);
|
|
19
|
+
};
|
|
20
|
+
let createSwrMutationApi = (...args) => {
|
|
21
|
+
const api = createApi(...args);
|
|
22
|
+
api.use = createUseApi(api);
|
|
23
|
+
["post", "put", "patch", "delete"].forEach((method) => {
|
|
24
|
+
const hookName = `use${method.charAt(0).toUpperCase() + method.slice(1)}`;
|
|
25
|
+
api[hookName] = createUseMutationApi(api, method);
|
|
26
|
+
});
|
|
27
|
+
return api;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
export { createSwrMutationApi };
|
package/swr.cjs.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from "./swr";
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
exports._default = require('./swr.cjs.js').default;
|
package/swr.cjs.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
|
+
|
|
5
|
+
var createSwrApi = require('./createSwrApi.cjs.js');
|
|
6
|
+
require('swr');
|
|
7
|
+
require('@koine/utils');
|
|
8
|
+
require('./createApi.cjs.js');
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
exports.createSwrApi = createSwrApi.createSwrApi;
|
package/swr.cjs.mjs
ADDED
package/swr.esm.js
ADDED