@koine/api 2.0.0-beta.2 → 2.0.0-beta.20
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.d.ts +1 -7
- package/ApiError.js +5 -15
- package/cjs/ApiError.d.ts +5 -0
- package/cjs/ApiError.js +16 -0
- package/cjs/createApi.d.ts +2 -0
- package/{createApi.mjs → cjs/createApi.js} +31 -51
- package/cjs/createApiResultFail.d.ts +2 -0
- package/cjs/createApiResultFail.js +14 -0
- package/cjs/createApiResultOk.d.ts +2 -0
- package/cjs/createApiResultOk.js +15 -0
- package/cjs/createSwrApi.d.ts +15 -0
- package/cjs/createSwrApi.js +61 -0
- package/cjs/index.d.ts +6 -0
- package/cjs/index.js +15 -0
- package/cjs/nextApiResponse.d.ts +6 -0
- package/cjs/nextApiResponse.js +15 -0
- package/cjs/nextApiResponse12.d.ts +6 -0
- package/cjs/nextApiResponse12.js +19 -0
- package/cjs/package.json +17 -0
- package/createApi.d.ts +0 -6
- package/createApi.js +27 -55
- package/createApiResultFail.d.ts +2 -0
- package/createApiResultFail.js +10 -0
- package/createApiResultOk.d.ts +2 -0
- package/createApiResultOk.js +11 -0
- package/createSwrApi.d.ts +2 -20
- package/createSwrApi.js +19 -53
- package/index.d.ts +6 -4
- package/index.js +6 -11
- package/nextApiResponse.d.ts +5 -2
- package/nextApiResponse.js +11 -8
- package/nextApiResponse12.d.ts +6 -0
- package/nextApiResponse12.js +15 -0
- package/package.json +45 -14
- package/typings.d.ts +47 -23
- package/ApiError.mjs +0 -20
- package/README.md +0 -1
- package/createSwrApi.mjs +0 -87
- package/index.mjs +0 -4
- package/nextApiResponse.mjs +0 -5
package/ApiError.d.ts
CHANGED
|
@@ -1,10 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* Custom `ApiError` class extending `Error` to throw in failed response.
|
|
3
|
-
*
|
|
4
|
-
* @see https://eslint.org/docs/rules/no-throw-literal
|
|
5
|
-
* @see https://github.com/sindresorhus/ky/blob/main/source/errors/HTTPError.ts
|
|
6
|
-
*
|
|
7
|
-
*/
|
|
1
|
+
/// <reference types="./typings.d.ts" />
|
|
8
2
|
export declare class ApiError<TResponseFail extends Koine.Api.ResponseFail = unknown> extends Error {
|
|
9
3
|
constructor(result: Koine.Api.ResultFail<TResponseFail>);
|
|
10
4
|
}
|
package/ApiError.js
CHANGED
|
@@ -1,16 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
var tslib_1 = require("tslib");
|
|
5
|
-
/**
|
|
6
|
-
* Custom `ApiError` class extending `Error` to throw in failed response.
|
|
7
|
-
*
|
|
8
|
-
* @see https://eslint.org/docs/rules/no-throw-literal
|
|
9
|
-
* @see https://github.com/sindresorhus/ky/blob/main/source/errors/HTTPError.ts
|
|
10
|
-
*
|
|
11
|
-
*/
|
|
12
|
-
var ApiError = /** @class */ (function (_super) {
|
|
13
|
-
tslib_1.__extends(ApiError, _super);
|
|
1
|
+
import { __extends } from "tslib";
|
|
2
|
+
var ApiError = (function (_super) {
|
|
3
|
+
__extends(ApiError, _super);
|
|
14
4
|
function ApiError(result) {
|
|
15
5
|
var _this = _super.call(this, "Request failed with ".concat(result.status, " ").concat(result.msg)) || this;
|
|
16
6
|
_this.name = "ApiError";
|
|
@@ -19,5 +9,5 @@ var ApiError = /** @class */ (function (_super) {
|
|
|
19
9
|
}
|
|
20
10
|
return ApiError;
|
|
21
11
|
}(Error));
|
|
22
|
-
|
|
23
|
-
|
|
12
|
+
export { ApiError };
|
|
13
|
+
export default ApiError;
|
package/cjs/ApiError.js
ADDED
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ApiError = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
var ApiError = (function (_super) {
|
|
6
|
+
tslib_1.__extends(ApiError, _super);
|
|
7
|
+
function ApiError(result) {
|
|
8
|
+
var _this = _super.call(this, "Request failed with ".concat(result.status, " ").concat(result.msg)) || this;
|
|
9
|
+
_this.name = "ApiError";
|
|
10
|
+
Object.assign(_this, result);
|
|
11
|
+
return _this;
|
|
12
|
+
}
|
|
13
|
+
return ApiError;
|
|
14
|
+
}(Error));
|
|
15
|
+
exports.ApiError = ApiError;
|
|
16
|
+
exports.default = ApiError;
|
|
@@ -1,32 +1,20 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
* @param apiName Short name to use in debug logs
|
|
9
|
-
* @param baseUrl Either relativ eor absolute, it must end without trailing slash
|
|
10
|
-
*/
|
|
11
|
-
export var createApi = function (apiName, baseUrl, options) {
|
|
12
|
-
var _a = options || {}, _b = _a.headers, headersBase = _b === void 0 ? {} : _b, _c = _a.request, requestBase = _c === void 0 ? {
|
|
13
|
-
referrerPolicy: "no-referrer",
|
|
14
|
-
// credentials: "include",
|
|
15
|
-
// mode: "cors",
|
|
16
|
-
// redirect: "follow",
|
|
17
|
-
// cache: "no-cache",
|
|
18
|
-
} : _c, throwErrBase = _a.throwErr, _d = _a.timeout, timeoutBase = _d === void 0 ? 10000 : _d, processReqBase = _a.processReq, processResBase = _a.processRes, processErrBase = _a.processErr;
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createApi = void 0;
|
|
4
|
+
var tslib_1 = require("tslib");
|
|
5
|
+
var utils_1 = require("@koine/utils");
|
|
6
|
+
var createApi = function (apiName, baseUrl, options) {
|
|
7
|
+
var _a = options || {}, _b = _a.headers, headersBase = _b === void 0 ? {} : _b, _c = _a.request, requestBase = _c === void 0 ? {} : _c, throwErrBase = _a.throwErr, _d = _a.timeout, timeoutBase = _d === void 0 ? 10000 : _d, processReqBase = _a.processReq, processResBase = _a.processRes, processErrBase = _a.processErr;
|
|
19
8
|
return ["get", "post", "put", "patch", "delete"].reduce(function (api, method) {
|
|
20
|
-
|
|
21
|
-
api[method] = function (endpoint, options) { return __awaiter(void 0, void 0, void 0, function () {
|
|
9
|
+
api[method] = function (endpoint, options) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
22
10
|
var _a, _b, request, _c, headers, _d, timeout, processReq, _e, processRes, _f, processErr, _g, throwErr, _h, params, json, query, url, requestInit, transformed, transformed, key, timeoutNumber, controller, timeoutId, response, result, msg, e_1, e_2, logMsg;
|
|
23
|
-
return __generator(this, function (_j) {
|
|
11
|
+
return tslib_1.__generator(this, function (_j) {
|
|
24
12
|
switch (_j.label) {
|
|
25
13
|
case 0:
|
|
26
14
|
_a = options || {}, _b = _a.request, request = _b === void 0 ? requestBase : _b, _c = _a.headers, headers = _c === void 0 ? headersBase : _c, _d = _a.timeout, timeout = _d === void 0 ? timeoutBase : _d, processReq = _a.processReq, _e = _a.processRes, processRes = _e === void 0 ? processResBase : _e, _f = _a.processErr, processErr = _f === void 0 ? processErrBase : _f, _g = _a.throwErr, throwErr = _g === void 0 ? throwErrBase : _g;
|
|
27
15
|
_h = options || {}, params = _h.params, json = _h.json, query = _h.query;
|
|
28
16
|
url = "".concat(baseUrl, "/").concat(endpoint + "".replace(/^\/*/, ""));
|
|
29
|
-
requestInit = __assign(__assign({ method: method.toUpperCase() }, request), { headers: __assign({ "content-type": "application/json" }, headers) });
|
|
17
|
+
requestInit = tslib_1.__assign(tslib_1.__assign({ method: method.toUpperCase() }, request), { headers: tslib_1.__assign({ "content-type": "application/json" }, headers) });
|
|
30
18
|
if (processReqBase) {
|
|
31
19
|
transformed = processReqBase(method, url, query, json, params, requestInit);
|
|
32
20
|
url = transformed[0];
|
|
@@ -43,7 +31,7 @@ export var createApi = function (apiName, baseUrl, options) {
|
|
|
43
31
|
params = transformed[3];
|
|
44
32
|
requestInit = transformed[4];
|
|
45
33
|
}
|
|
46
|
-
if (isFullObject(params)) {
|
|
34
|
+
if ((0, utils_1.isFullObject)(params)) {
|
|
47
35
|
for (key in params) {
|
|
48
36
|
url = url.replace("{".concat(key, "}"), params[key].toString());
|
|
49
37
|
}
|
|
@@ -58,8 +46,7 @@ export var createApi = function (apiName, baseUrl, options) {
|
|
|
58
46
|
requestInit.signal = controller.signal;
|
|
59
47
|
}
|
|
60
48
|
if (query) {
|
|
61
|
-
|
|
62
|
-
url += buildUrlQueryString(query);
|
|
49
|
+
url += (0, utils_1.buildUrlQueryString)(query);
|
|
63
50
|
}
|
|
64
51
|
response = null;
|
|
65
52
|
result = null;
|
|
@@ -67,49 +54,44 @@ export var createApi = function (apiName, baseUrl, options) {
|
|
|
67
54
|
_j.label = 1;
|
|
68
55
|
case 1:
|
|
69
56
|
_j.trys.push([1, 3, , 4]);
|
|
70
|
-
return [4
|
|
57
|
+
return [4, fetch(url, requestInit)];
|
|
71
58
|
case 2:
|
|
72
59
|
response = _j.sent();
|
|
73
|
-
return [3
|
|
60
|
+
return [3, 4];
|
|
74
61
|
case 3:
|
|
75
62
|
e_1 = _j.sent();
|
|
76
|
-
msg = errorToString(e_1);
|
|
77
|
-
return [3
|
|
63
|
+
msg = (0, utils_1.errorToString)(e_1);
|
|
64
|
+
return [3, 4];
|
|
78
65
|
case 4:
|
|
79
66
|
if (timeoutId) {
|
|
80
67
|
clearTimeout(timeoutId);
|
|
81
68
|
}
|
|
82
|
-
if (!response) return [3
|
|
69
|
+
if (!response) return [3, 11];
|
|
83
70
|
_j.label = 5;
|
|
84
71
|
case 5:
|
|
85
72
|
_j.trys.push([5, 10, , 11]);
|
|
86
|
-
if (!processRes) return [3
|
|
87
|
-
return [4
|
|
73
|
+
if (!processRes) return [3, 7];
|
|
74
|
+
return [4, processRes(response, options || {})];
|
|
88
75
|
case 6:
|
|
89
76
|
result = _j.sent();
|
|
90
|
-
return [3
|
|
91
|
-
case 7: return [4
|
|
77
|
+
return [3, 9];
|
|
78
|
+
case 7: return [4, response.json()];
|
|
92
79
|
case 8:
|
|
93
80
|
result = _j.sent();
|
|
94
81
|
_j.label = 9;
|
|
95
|
-
case 9: return [3
|
|
82
|
+
case 9: return [3, 11];
|
|
96
83
|
case 10:
|
|
97
84
|
e_2 = _j.sent();
|
|
98
|
-
msg = errorToString(e_2);
|
|
99
|
-
return [3
|
|
85
|
+
msg = (0, utils_1.errorToString)(e_2);
|
|
86
|
+
return [3, 11];
|
|
100
87
|
case 11:
|
|
101
|
-
if (!(result === null)) return [3
|
|
102
|
-
if (!processErr) return [3
|
|
103
|
-
return [4
|
|
88
|
+
if (!(result === null)) return [3, 14];
|
|
89
|
+
if (!processErr) return [3, 13];
|
|
90
|
+
return [4, processErr(msg, options || {})];
|
|
104
91
|
case 12:
|
|
105
92
|
result = _j.sent();
|
|
106
|
-
return [3
|
|
93
|
+
return [3, 14];
|
|
107
94
|
case 13:
|
|
108
|
-
// this error should only happen on network errors or wrong API urls
|
|
109
|
-
// there is no specific HTTP error for this, we can consider these
|
|
110
|
-
// two statuses though:
|
|
111
|
-
// - [100 Continue](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/100)
|
|
112
|
-
// - [501 Not Implemented](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/501)
|
|
113
95
|
result = {
|
|
114
96
|
data: null,
|
|
115
97
|
msg: msg,
|
|
@@ -120,9 +102,6 @@ export var createApi = function (apiName, baseUrl, options) {
|
|
|
120
102
|
_j.label = 14;
|
|
121
103
|
case 14:
|
|
122
104
|
if (throwErr && (result === null || result === void 0 ? void 0 : result.fail)) {
|
|
123
|
-
// throw new ApiError<Failed>(result);
|
|
124
|
-
// I prefer to throw an object literal despite what eslint says
|
|
125
|
-
// eslint-disable-next-line no-throw-literal
|
|
126
105
|
throw result;
|
|
127
106
|
}
|
|
128
107
|
if (process.env["NODE_ENV"] !== "production") {
|
|
@@ -134,11 +113,12 @@ export var createApi = function (apiName, baseUrl, options) {
|
|
|
134
113
|
console.info("\uD83D\uDD34 ".concat(logMsg));
|
|
135
114
|
}
|
|
136
115
|
}
|
|
137
|
-
return [2
|
|
116
|
+
return [2, result];
|
|
138
117
|
}
|
|
139
118
|
});
|
|
140
119
|
}); };
|
|
141
120
|
return api;
|
|
142
121
|
}, {});
|
|
143
122
|
};
|
|
144
|
-
|
|
123
|
+
exports.createApi = createApi;
|
|
124
|
+
exports.default = exports.createApi;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createApiResultFail = void 0;
|
|
4
|
+
var createApiResultFail = function (data, msg, status) {
|
|
5
|
+
if (data === void 0) { data = {}; }
|
|
6
|
+
return ({
|
|
7
|
+
fail: true,
|
|
8
|
+
data: data,
|
|
9
|
+
msg: msg || "",
|
|
10
|
+
status: status || 404,
|
|
11
|
+
});
|
|
12
|
+
};
|
|
13
|
+
exports.createApiResultFail = createApiResultFail;
|
|
14
|
+
exports.default = exports.createApiResultFail;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createApiResultOk = void 0;
|
|
4
|
+
var createApiResultOk = function (data, msg) {
|
|
5
|
+
if (data === void 0) { data = {}; }
|
|
6
|
+
return ({
|
|
7
|
+
ok: true,
|
|
8
|
+
fail: false,
|
|
9
|
+
data: data,
|
|
10
|
+
msg: msg || "",
|
|
11
|
+
status: 200,
|
|
12
|
+
});
|
|
13
|
+
};
|
|
14
|
+
exports.createApiResultOk = createApiResultOk;
|
|
15
|
+
exports.default = exports.createApiResultOk;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/// <reference types="./typings.d.ts" />
|
|
2
|
+
import { type BareFetcher, type SWRConfiguration, type SWRResponse } from "swr";
|
|
3
|
+
import { type SWRMutationConfiguration, type SWRMutationResponse } from "swr/mutation";
|
|
4
|
+
type SWRConfigurationExtended<Data = any, Error = any, Fn extends BareFetcher<any> = BareFetcher<any>> = SWRConfiguration<Data, Error, Fn> & {
|
|
5
|
+
when?: boolean | (() => boolean);
|
|
6
|
+
};
|
|
7
|
+
type KoineApiMethodHookSWR<THookName extends keyof Koine.Api.HooksMapsByName, TEndpoints extends Koine.Api.Endpoints> = <TEndpoint extends Koine.Api.EndpointUrl<TEndpoints>, TMethod extends Koine.Api.RequestMethod = Koine.Api.HooksMapsByName[THookName]>(endpoint: TEndpoint, options?: Koine.Api.EndpointOptions<TEndpoints, TEndpoint, TMethod>, config?: THookName extends "useGet" ? SWRConfigurationExtended<Koine.Api.EndpointResponseOk<TEndpoints, TEndpoint, TMethod>, Koine.Api.EndpointResponseFail<TEndpoints, TEndpoint, TMethod>> : SWRMutationConfiguration<Koine.Api.EndpointResponseOk<TEndpoints, TEndpoint, TMethod>, Koine.Api.EndpointResponseFail<TEndpoints, TEndpoint, TMethod>, Koine.Api.EndpointOptions<TEndpoints, TEndpoint, TMethod>, TEndpoint>) => THookName extends "useGet" ? SWRResponse<Koine.Api.EndpointResponseOk<TEndpoints, TEndpoint, TMethod>, Koine.Api.EndpointResponseFail<TEndpoints, TEndpoint, TMethod>> : SWRMutationResponse<Koine.Api.EndpointResponseOk<TEndpoints, TEndpoint, TMethod>, Koine.Api.EndpointResponseFail<TEndpoints, TEndpoint, TMethod>, Koine.Api.EndpointOptions<TEndpoints, TEndpoint, TMethod>, TEndpoint>;
|
|
8
|
+
export declare const createSwrApi: <TEndpoints extends Koine.Api.Endpoints>(apiName: string, baseUrl: string, options?: Koine.Api.ClientOptions | undefined) => Koine.Api.Client<TEndpoints> & {
|
|
9
|
+
useGet: KoineApiMethodHookSWR<"useGet", TEndpoints>;
|
|
10
|
+
usePost: KoineApiMethodHookSWR<"usePost", TEndpoints>;
|
|
11
|
+
usePut: KoineApiMethodHookSWR<"usePut", TEndpoints>;
|
|
12
|
+
usePatch: KoineApiMethodHookSWR<"usePatch", TEndpoints>;
|
|
13
|
+
useDelete: KoineApiMethodHookSWR<"useDelete", TEndpoints>;
|
|
14
|
+
};
|
|
15
|
+
export default createSwrApi;
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
"use client";
|
|
3
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
|
+
exports.createSwrApi = void 0;
|
|
5
|
+
var tslib_1 = require("tslib");
|
|
6
|
+
var swr_1 = require("swr");
|
|
7
|
+
var mutation_1 = require("swr/mutation");
|
|
8
|
+
var utils_1 = require("@koine/utils");
|
|
9
|
+
var createApi_1 = require("./createApi");
|
|
10
|
+
function createUseApi(api, method) {
|
|
11
|
+
return function useApi(endpoint, options, _config) {
|
|
12
|
+
var _this = this;
|
|
13
|
+
if (method === "get") {
|
|
14
|
+
var fetcher = function () { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
15
|
+
var data;
|
|
16
|
+
return tslib_1.__generator(this, function (_a) {
|
|
17
|
+
switch (_a.label) {
|
|
18
|
+
case 0: return [4, api[method](endpoint, tslib_1.__assign(tslib_1.__assign({}, (options || {})), { throwErr: true }))];
|
|
19
|
+
case 1:
|
|
20
|
+
data = (_a.sent()).data;
|
|
21
|
+
return [2, data];
|
|
22
|
+
}
|
|
23
|
+
});
|
|
24
|
+
}); };
|
|
25
|
+
var config_1 = _config;
|
|
26
|
+
var shouldNotFetch = (config_1 === null || config_1 === void 0 ? void 0 : config_1.when) === false ||
|
|
27
|
+
((0, utils_1.isFunction)(config_1 === null || config_1 === void 0 ? void 0 : config_1.when) && (config_1 === null || config_1 === void 0 ? void 0 : config_1.when()) === false);
|
|
28
|
+
return (0, swr_1.default)(shouldNotFetch ? null : options ? [endpoint, options] : [endpoint], fetcher, config_1);
|
|
29
|
+
}
|
|
30
|
+
var config = _config;
|
|
31
|
+
var sender = function (_endpoint, _options) { return tslib_1.__awaiter(_this, void 0, void 0, function () {
|
|
32
|
+
var endpoint, options, _a, ok, data;
|
|
33
|
+
return tslib_1.__generator(this, function (_b) {
|
|
34
|
+
switch (_b.label) {
|
|
35
|
+
case 0:
|
|
36
|
+
endpoint = Array.isArray(_endpoint) ? _endpoint[0] : _endpoint;
|
|
37
|
+
options = Array.isArray(_endpoint) ? _endpoint[1] : {};
|
|
38
|
+
return [4, api[method](endpoint, tslib_1.__assign(tslib_1.__assign(tslib_1.__assign({}, options), (_options.arg || {})), { throwErr: true }))];
|
|
39
|
+
case 1:
|
|
40
|
+
_a = _b.sent(), ok = _a.ok, data = _a.data;
|
|
41
|
+
return [2, ok ? data : data];
|
|
42
|
+
}
|
|
43
|
+
});
|
|
44
|
+
}); };
|
|
45
|
+
return (0, mutation_1.default)(options ? [endpoint, options] : endpoint, sender, config);
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
var createSwrApi = function () {
|
|
49
|
+
var args = [];
|
|
50
|
+
for (var _i = 0; _i < arguments.length; _i++) {
|
|
51
|
+
args[_i] = arguments[_i];
|
|
52
|
+
}
|
|
53
|
+
var api = createApi_1.default.apply(void 0, tslib_1.__spreadArray([], tslib_1.__read(args), false));
|
|
54
|
+
["get", "post", "put", "patch", "delete"].forEach(function (method) {
|
|
55
|
+
var hookName = "use".concat(method.charAt(0).toUpperCase() + method.slice(1));
|
|
56
|
+
api[hookName] = createUseApi(api, method);
|
|
57
|
+
});
|
|
58
|
+
return api;
|
|
59
|
+
};
|
|
60
|
+
exports.createSwrApi = createSwrApi;
|
|
61
|
+
exports.default = exports.createSwrApi;
|
package/cjs/index.d.ts
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { ApiError } from "./ApiError";
|
|
2
|
+
export { createApi } from "./createApi";
|
|
3
|
+
export { createApiResultFail } from "./createApiResultFail";
|
|
4
|
+
export { createApiResultOk } from "./createApiResultOk";
|
|
5
|
+
export { createSwrApi } from "./createSwrApi";
|
|
6
|
+
export { nextApiResponse12 } from "./nextApiResponse12";
|
package/cjs/index.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.nextApiResponse12 = exports.createSwrApi = exports.createApiResultOk = exports.createApiResultFail = exports.createApi = exports.ApiError = void 0;
|
|
4
|
+
var ApiError_1 = require("./ApiError");
|
|
5
|
+
Object.defineProperty(exports, "ApiError", { enumerable: true, get: function () { return ApiError_1.ApiError; } });
|
|
6
|
+
var createApi_1 = require("./createApi");
|
|
7
|
+
Object.defineProperty(exports, "createApi", { enumerable: true, get: function () { return createApi_1.createApi; } });
|
|
8
|
+
var createApiResultFail_1 = require("./createApiResultFail");
|
|
9
|
+
Object.defineProperty(exports, "createApiResultFail", { enumerable: true, get: function () { return createApiResultFail_1.createApiResultFail; } });
|
|
10
|
+
var createApiResultOk_1 = require("./createApiResultOk");
|
|
11
|
+
Object.defineProperty(exports, "createApiResultOk", { enumerable: true, get: function () { return createApiResultOk_1.createApiResultOk; } });
|
|
12
|
+
var createSwrApi_1 = require("./createSwrApi");
|
|
13
|
+
Object.defineProperty(exports, "createSwrApi", { enumerable: true, get: function () { return createSwrApi_1.createSwrApi; } });
|
|
14
|
+
var nextApiResponse12_1 = require("./nextApiResponse12");
|
|
15
|
+
Object.defineProperty(exports, "nextApiResponse12", { enumerable: true, get: function () { return nextApiResponse12_1.nextApiResponse12; } });
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { NextResponse } from "next/server";
|
|
2
|
+
export declare const nextApiResponse: {
|
|
3
|
+
ok<T>(data: T, msg?: string): NextResponse<Koine.Api.ResultOk<T>>;
|
|
4
|
+
fail<T_1>(data: T_1, msg?: string, status?: number): NextResponse<Koine.Api.ResultFail<T_1>>;
|
|
5
|
+
};
|
|
6
|
+
export default nextApiResponse;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.nextApiResponse = void 0;
|
|
4
|
+
var server_1 = require("next/server");
|
|
5
|
+
var createApiResultFail_1 = require("./createApiResultFail");
|
|
6
|
+
var createApiResultOk_1 = require("./createApiResultOk");
|
|
7
|
+
exports.nextApiResponse = {
|
|
8
|
+
ok: function (data, msg) {
|
|
9
|
+
return server_1.NextResponse.json((0, createApiResultOk_1.default)(data, msg));
|
|
10
|
+
},
|
|
11
|
+
fail: function (data, msg, status) {
|
|
12
|
+
return server_1.NextResponse.json((0, createApiResultFail_1.default)(data, msg, status));
|
|
13
|
+
},
|
|
14
|
+
};
|
|
15
|
+
exports.default = exports.nextApiResponse;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.nextApiResponse12 = void 0;
|
|
4
|
+
var createApiResultFail_1 = require("./createApiResultFail");
|
|
5
|
+
var createApiResultOk_1 = require("./createApiResultOk");
|
|
6
|
+
var nextApiResponse12 = function (nextRes) {
|
|
7
|
+
return {
|
|
8
|
+
ok: function (data, msg) {
|
|
9
|
+
nextRes.status(200).json((0, createApiResultOk_1.default)(data, msg));
|
|
10
|
+
},
|
|
11
|
+
fail: function (data, msg, status) {
|
|
12
|
+
nextRes
|
|
13
|
+
.status(status || 404)
|
|
14
|
+
.json((0, createApiResultFail_1.default)(data, msg, status));
|
|
15
|
+
},
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
exports.nextApiResponse12 = nextApiResponse12;
|
|
19
|
+
exports.default = exports.nextApiResponse12;
|
package/cjs/package.json
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@koine/api",
|
|
3
|
+
"sideEffects": false,
|
|
4
|
+
"dependencies": {
|
|
5
|
+
"@koine/utils": "*"
|
|
6
|
+
},
|
|
7
|
+
"peerDependenciesMeta": {
|
|
8
|
+
"next": {
|
|
9
|
+
"optional": true
|
|
10
|
+
},
|
|
11
|
+
"swr": {
|
|
12
|
+
"optional": true
|
|
13
|
+
}
|
|
14
|
+
},
|
|
15
|
+
"main": "./index.js",
|
|
16
|
+
"types": "./index.d.ts"
|
|
17
|
+
}
|
package/createApi.d.ts
CHANGED
|
@@ -1,8 +1,2 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Create api client
|
|
3
|
-
*
|
|
4
|
-
* @param apiName Short name to use in debug logs
|
|
5
|
-
* @param baseUrl Either relativ eor absolute, it must end without trailing slash
|
|
6
|
-
*/
|
|
7
1
|
export declare const createApi: <TEndpoints extends Koine.Api.Endpoints>(apiName: string, baseUrl: string, options?: Koine.Api.ClientOptions) => Koine.Api.Client<TEndpoints>;
|
|
8
2
|
export default createApi;
|
package/createApi.js
CHANGED
|
@@ -1,35 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
var
|
|
5
|
-
var buildUrlQueryString_1 = require("@koine/utils/buildUrlQueryString");
|
|
6
|
-
var isFullObject_1 = require("@koine/utils/isFullObject");
|
|
7
|
-
var errorToString_1 = require("@koine/utils/errorToString");
|
|
8
|
-
/**
|
|
9
|
-
* Create api client
|
|
10
|
-
*
|
|
11
|
-
* @param apiName Short name to use in debug logs
|
|
12
|
-
* @param baseUrl Either relativ eor absolute, it must end without trailing slash
|
|
13
|
-
*/
|
|
14
|
-
var createApi = function (apiName, baseUrl, options) {
|
|
15
|
-
var _a = options || {}, _b = _a.headers, headersBase = _b === void 0 ? {} : _b, _c = _a.request, requestBase = _c === void 0 ? {
|
|
16
|
-
referrerPolicy: "no-referrer",
|
|
17
|
-
// credentials: "include",
|
|
18
|
-
// mode: "cors",
|
|
19
|
-
// redirect: "follow",
|
|
20
|
-
// cache: "no-cache",
|
|
21
|
-
} : _c, throwErrBase = _a.throwErr, _d = _a.timeout, timeoutBase = _d === void 0 ? 10000 : _d, processReqBase = _a.processReq, processResBase = _a.processRes, processErrBase = _a.processErr;
|
|
1
|
+
import { __assign, __awaiter, __generator } from "tslib";
|
|
2
|
+
import { buildUrlQueryString, errorToString, isFullObject, } from "@koine/utils";
|
|
3
|
+
export var createApi = function (apiName, baseUrl, options) {
|
|
4
|
+
var _a = options || {}, _b = _a.headers, headersBase = _b === void 0 ? {} : _b, _c = _a.request, requestBase = _c === void 0 ? {} : _c, throwErrBase = _a.throwErr, _d = _a.timeout, timeoutBase = _d === void 0 ? 10000 : _d, processReqBase = _a.processReq, processResBase = _a.processRes, processErrBase = _a.processErr;
|
|
22
5
|
return ["get", "post", "put", "patch", "delete"].reduce(function (api, method) {
|
|
23
|
-
|
|
24
|
-
api[method] = function (endpoint, options) { return tslib_1.__awaiter(void 0, void 0, void 0, function () {
|
|
6
|
+
api[method] = function (endpoint, options) { return __awaiter(void 0, void 0, void 0, function () {
|
|
25
7
|
var _a, _b, request, _c, headers, _d, timeout, processReq, _e, processRes, _f, processErr, _g, throwErr, _h, params, json, query, url, requestInit, transformed, transformed, key, timeoutNumber, controller, timeoutId, response, result, msg, e_1, e_2, logMsg;
|
|
26
|
-
return
|
|
8
|
+
return __generator(this, function (_j) {
|
|
27
9
|
switch (_j.label) {
|
|
28
10
|
case 0:
|
|
29
11
|
_a = options || {}, _b = _a.request, request = _b === void 0 ? requestBase : _b, _c = _a.headers, headers = _c === void 0 ? headersBase : _c, _d = _a.timeout, timeout = _d === void 0 ? timeoutBase : _d, processReq = _a.processReq, _e = _a.processRes, processRes = _e === void 0 ? processResBase : _e, _f = _a.processErr, processErr = _f === void 0 ? processErrBase : _f, _g = _a.throwErr, throwErr = _g === void 0 ? throwErrBase : _g;
|
|
30
12
|
_h = options || {}, params = _h.params, json = _h.json, query = _h.query;
|
|
31
13
|
url = "".concat(baseUrl, "/").concat(endpoint + "".replace(/^\/*/, ""));
|
|
32
|
-
requestInit =
|
|
14
|
+
requestInit = __assign(__assign({ method: method.toUpperCase() }, request), { headers: __assign({ "content-type": "application/json" }, headers) });
|
|
33
15
|
if (processReqBase) {
|
|
34
16
|
transformed = processReqBase(method, url, query, json, params, requestInit);
|
|
35
17
|
url = transformed[0];
|
|
@@ -46,7 +28,7 @@ var createApi = function (apiName, baseUrl, options) {
|
|
|
46
28
|
params = transformed[3];
|
|
47
29
|
requestInit = transformed[4];
|
|
48
30
|
}
|
|
49
|
-
if ((
|
|
31
|
+
if (isFullObject(params)) {
|
|
50
32
|
for (key in params) {
|
|
51
33
|
url = url.replace("{".concat(key, "}"), params[key].toString());
|
|
52
34
|
}
|
|
@@ -61,8 +43,7 @@ var createApi = function (apiName, baseUrl, options) {
|
|
|
61
43
|
requestInit.signal = controller.signal;
|
|
62
44
|
}
|
|
63
45
|
if (query) {
|
|
64
|
-
|
|
65
|
-
url += (0, buildUrlQueryString_1.default)(query);
|
|
46
|
+
url += buildUrlQueryString(query);
|
|
66
47
|
}
|
|
67
48
|
response = null;
|
|
68
49
|
result = null;
|
|
@@ -70,49 +51,44 @@ var createApi = function (apiName, baseUrl, options) {
|
|
|
70
51
|
_j.label = 1;
|
|
71
52
|
case 1:
|
|
72
53
|
_j.trys.push([1, 3, , 4]);
|
|
73
|
-
return [4
|
|
54
|
+
return [4, fetch(url, requestInit)];
|
|
74
55
|
case 2:
|
|
75
56
|
response = _j.sent();
|
|
76
|
-
return [3
|
|
57
|
+
return [3, 4];
|
|
77
58
|
case 3:
|
|
78
59
|
e_1 = _j.sent();
|
|
79
|
-
msg = (
|
|
80
|
-
return [3
|
|
60
|
+
msg = errorToString(e_1);
|
|
61
|
+
return [3, 4];
|
|
81
62
|
case 4:
|
|
82
63
|
if (timeoutId) {
|
|
83
64
|
clearTimeout(timeoutId);
|
|
84
65
|
}
|
|
85
|
-
if (!response) return [3
|
|
66
|
+
if (!response) return [3, 11];
|
|
86
67
|
_j.label = 5;
|
|
87
68
|
case 5:
|
|
88
69
|
_j.trys.push([5, 10, , 11]);
|
|
89
|
-
if (!processRes) return [3
|
|
90
|
-
return [4
|
|
70
|
+
if (!processRes) return [3, 7];
|
|
71
|
+
return [4, processRes(response, options || {})];
|
|
91
72
|
case 6:
|
|
92
73
|
result = _j.sent();
|
|
93
|
-
return [3
|
|
94
|
-
case 7: return [4
|
|
74
|
+
return [3, 9];
|
|
75
|
+
case 7: return [4, response.json()];
|
|
95
76
|
case 8:
|
|
96
77
|
result = _j.sent();
|
|
97
78
|
_j.label = 9;
|
|
98
|
-
case 9: return [3
|
|
79
|
+
case 9: return [3, 11];
|
|
99
80
|
case 10:
|
|
100
81
|
e_2 = _j.sent();
|
|
101
|
-
msg = (
|
|
102
|
-
return [3
|
|
82
|
+
msg = errorToString(e_2);
|
|
83
|
+
return [3, 11];
|
|
103
84
|
case 11:
|
|
104
|
-
if (!(result === null)) return [3
|
|
105
|
-
if (!processErr) return [3
|
|
106
|
-
return [4
|
|
85
|
+
if (!(result === null)) return [3, 14];
|
|
86
|
+
if (!processErr) return [3, 13];
|
|
87
|
+
return [4, processErr(msg, options || {})];
|
|
107
88
|
case 12:
|
|
108
89
|
result = _j.sent();
|
|
109
|
-
return [3
|
|
90
|
+
return [3, 14];
|
|
110
91
|
case 13:
|
|
111
|
-
// this error should only happen on network errors or wrong API urls
|
|
112
|
-
// there is no specific HTTP error for this, we can consider these
|
|
113
|
-
// two statuses though:
|
|
114
|
-
// - [100 Continue](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/100)
|
|
115
|
-
// - [501 Not Implemented](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status/501)
|
|
116
92
|
result = {
|
|
117
93
|
data: null,
|
|
118
94
|
msg: msg,
|
|
@@ -123,9 +99,6 @@ var createApi = function (apiName, baseUrl, options) {
|
|
|
123
99
|
_j.label = 14;
|
|
124
100
|
case 14:
|
|
125
101
|
if (throwErr && (result === null || result === void 0 ? void 0 : result.fail)) {
|
|
126
|
-
// throw new ApiError<Failed>(result);
|
|
127
|
-
// I prefer to throw an object literal despite what eslint says
|
|
128
|
-
// eslint-disable-next-line no-throw-literal
|
|
129
102
|
throw result;
|
|
130
103
|
}
|
|
131
104
|
if (process.env["NODE_ENV"] !== "production") {
|
|
@@ -137,12 +110,11 @@ var createApi = function (apiName, baseUrl, options) {
|
|
|
137
110
|
console.info("\uD83D\uDD34 ".concat(logMsg));
|
|
138
111
|
}
|
|
139
112
|
}
|
|
140
|
-
return [2
|
|
113
|
+
return [2, result];
|
|
141
114
|
}
|
|
142
115
|
});
|
|
143
116
|
}); };
|
|
144
117
|
return api;
|
|
145
118
|
}, {});
|
|
146
119
|
};
|
|
147
|
-
|
|
148
|
-
exports.default = exports.createApi;
|
|
120
|
+
export default createApi;
|