@sebspark/openapi-client 1.1.0 → 1.3.0
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/README.md +1 -1
- package/dist/index.js +72 -28
- package/dist/index.mjs +72 -28
- package/package.json +5 -2
package/README.md
CHANGED
|
@@ -27,7 +27,7 @@ import { TypedClient } from '@sebspark/openapi-client'
|
|
|
27
27
|
import { MarketdataClient } from './schemas/marketdata'
|
|
28
28
|
|
|
29
29
|
const client = TypedClient<MarketdataClient>(`https://example.com/api`)
|
|
30
|
-
const {data} = await client.get('/markets)
|
|
30
|
+
const {data} = await client.get('/markets')
|
|
31
31
|
```
|
|
32
32
|
|
|
33
33
|
## Example
|
package/dist/index.js
CHANGED
|
@@ -39,49 +39,93 @@ module.exports = __toCommonJS(src_exports);
|
|
|
39
39
|
var import_openapi_core = require("@sebspark/openapi-core");
|
|
40
40
|
var import_retry = require("@sebspark/retry");
|
|
41
41
|
var import_axios = __toESM(require("axios"));
|
|
42
|
+
|
|
43
|
+
// src/paramsSerializer.ts
|
|
44
|
+
var paramsSerializer = (format) => (
|
|
45
|
+
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
|
46
|
+
(params) => {
|
|
47
|
+
if (!params) {
|
|
48
|
+
return "";
|
|
49
|
+
}
|
|
50
|
+
return Object.entries(params).filter(([, value]) => value !== void 0).flatMap(([key, value]) => {
|
|
51
|
+
if (Array.isArray(value)) {
|
|
52
|
+
if (format === "comma") {
|
|
53
|
+
return `${encodeURIComponent(key)}=${value.map((v) => encodeURIComponent(v)).join(",")}`;
|
|
54
|
+
}
|
|
55
|
+
return value.map((arrayValue, ix) => {
|
|
56
|
+
switch (format) {
|
|
57
|
+
case "indices": {
|
|
58
|
+
return `${encodeURIComponent(key)}[${ix}]=${encodeURIComponent(
|
|
59
|
+
arrayValue
|
|
60
|
+
)}`;
|
|
61
|
+
}
|
|
62
|
+
case "repeat": {
|
|
63
|
+
return `${encodeURIComponent(key)}=${encodeURIComponent(
|
|
64
|
+
arrayValue
|
|
65
|
+
)}`;
|
|
66
|
+
}
|
|
67
|
+
default: {
|
|
68
|
+
return `${encodeURIComponent(key)}[]=${encodeURIComponent(
|
|
69
|
+
arrayValue
|
|
70
|
+
)}`;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;
|
|
76
|
+
}).join("&");
|
|
77
|
+
}
|
|
78
|
+
);
|
|
79
|
+
|
|
80
|
+
// src/client.ts
|
|
42
81
|
var TypedClient = (baseURL, globalOptions) => {
|
|
43
82
|
const client = {
|
|
44
|
-
get: (url, args, opts) => callServer(baseURL, url, "get", args,
|
|
45
|
-
post: (url, args, opts) => callServer(baseURL, url, "post", args,
|
|
46
|
-
put: (url, args, opts) => callServer(baseURL, url, "put", args,
|
|
47
|
-
patch: (url, args, opts) => callServer(
|
|
48
|
-
|
|
49
|
-
url,
|
|
50
|
-
"patch",
|
|
51
|
-
args,
|
|
52
|
-
globalOptions == null ? void 0 : globalOptions.retry,
|
|
53
|
-
opts == null ? void 0 : opts.retry
|
|
54
|
-
),
|
|
55
|
-
delete: (url, args, opts) => callServer(
|
|
56
|
-
baseURL,
|
|
57
|
-
url,
|
|
58
|
-
"delete",
|
|
59
|
-
args,
|
|
60
|
-
globalOptions == null ? void 0 : globalOptions.retry,
|
|
61
|
-
opts == null ? void 0 : opts.retry
|
|
62
|
-
)
|
|
83
|
+
get: (url, args, opts) => callServer(mergeArgs(baseURL, url, "get", args, opts, globalOptions)),
|
|
84
|
+
post: (url, args, opts) => callServer(mergeArgs(baseURL, url, "post", args, opts, globalOptions)),
|
|
85
|
+
put: (url, args, opts) => callServer(mergeArgs(baseURL, url, "put", args, opts, globalOptions)),
|
|
86
|
+
patch: (url, args, opts) => callServer(mergeArgs(baseURL, url, "patch", args, opts, globalOptions)),
|
|
87
|
+
delete: (url, args, opts) => callServer(mergeArgs(baseURL, url, "delete", args, opts, globalOptions))
|
|
63
88
|
};
|
|
64
89
|
return client;
|
|
65
90
|
};
|
|
66
|
-
var callServer = async (
|
|
91
|
+
var callServer = async (args) => {
|
|
67
92
|
try {
|
|
68
|
-
const
|
|
93
|
+
const serializer = paramsSerializer(args.arrayFormat);
|
|
69
94
|
const { headers, data } = await (0, import_retry.retry)(
|
|
70
95
|
() => import_axios.default.request({
|
|
71
|
-
baseURL,
|
|
72
|
-
url,
|
|
73
|
-
method,
|
|
74
|
-
headers: args
|
|
75
|
-
params: args
|
|
76
|
-
|
|
96
|
+
baseURL: args.baseUrl,
|
|
97
|
+
url: args.url,
|
|
98
|
+
method: args.method,
|
|
99
|
+
headers: args.headers,
|
|
100
|
+
params: args.params,
|
|
101
|
+
paramsSerializer: serializer,
|
|
102
|
+
data: args.body
|
|
77
103
|
}),
|
|
78
|
-
|
|
104
|
+
args.retry
|
|
79
105
|
);
|
|
80
106
|
return { headers, data };
|
|
81
107
|
} catch (error) {
|
|
82
108
|
throw (0, import_openapi_core.fromAxiosError)(error);
|
|
83
109
|
}
|
|
84
110
|
};
|
|
111
|
+
var mergeArgs = (baseUrl, url, method, requestArgs, extras, global) => {
|
|
112
|
+
const params = merge("params", global, requestArgs, extras);
|
|
113
|
+
const query = merge("query", global, requestArgs, extras);
|
|
114
|
+
const headers = merge("headers", global, requestArgs, extras);
|
|
115
|
+
const body = merge("body", global, requestArgs, extras);
|
|
116
|
+
const retry2 = merge("retry", global, requestArgs, extras);
|
|
117
|
+
const merged = {
|
|
118
|
+
url: setParams(url, params),
|
|
119
|
+
baseUrl,
|
|
120
|
+
method,
|
|
121
|
+
params: query,
|
|
122
|
+
headers,
|
|
123
|
+
body,
|
|
124
|
+
retry: retry2
|
|
125
|
+
};
|
|
126
|
+
return merged;
|
|
127
|
+
};
|
|
128
|
+
var merge = (prop, ...args) => Object.assign({}, ...args.map((a) => (a == null ? void 0 : a[prop]) || {}));
|
|
85
129
|
var setParams = (url, params = {}) => Object.entries(params).reduce(
|
|
86
130
|
(url2, [key, val]) => url2.replace(new RegExp(`/:${key}(?!\\w|\\d)`, "g"), `/${val}`),
|
|
87
131
|
url
|
package/dist/index.mjs
CHANGED
|
@@ -4,49 +4,93 @@ import {
|
|
|
4
4
|
} from "@sebspark/openapi-core";
|
|
5
5
|
import { retry } from "@sebspark/retry";
|
|
6
6
|
import axios from "axios";
|
|
7
|
+
|
|
8
|
+
// src/paramsSerializer.ts
|
|
9
|
+
var paramsSerializer = (format) => (
|
|
10
|
+
// biome-ignore lint/suspicious/noExplicitAny: <explanation>
|
|
11
|
+
(params) => {
|
|
12
|
+
if (!params) {
|
|
13
|
+
return "";
|
|
14
|
+
}
|
|
15
|
+
return Object.entries(params).filter(([, value]) => value !== void 0).flatMap(([key, value]) => {
|
|
16
|
+
if (Array.isArray(value)) {
|
|
17
|
+
if (format === "comma") {
|
|
18
|
+
return `${encodeURIComponent(key)}=${value.map((v) => encodeURIComponent(v)).join(",")}`;
|
|
19
|
+
}
|
|
20
|
+
return value.map((arrayValue, ix) => {
|
|
21
|
+
switch (format) {
|
|
22
|
+
case "indices": {
|
|
23
|
+
return `${encodeURIComponent(key)}[${ix}]=${encodeURIComponent(
|
|
24
|
+
arrayValue
|
|
25
|
+
)}`;
|
|
26
|
+
}
|
|
27
|
+
case "repeat": {
|
|
28
|
+
return `${encodeURIComponent(key)}=${encodeURIComponent(
|
|
29
|
+
arrayValue
|
|
30
|
+
)}`;
|
|
31
|
+
}
|
|
32
|
+
default: {
|
|
33
|
+
return `${encodeURIComponent(key)}[]=${encodeURIComponent(
|
|
34
|
+
arrayValue
|
|
35
|
+
)}`;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
return `${encodeURIComponent(key)}=${encodeURIComponent(value)}`;
|
|
41
|
+
}).join("&");
|
|
42
|
+
}
|
|
43
|
+
);
|
|
44
|
+
|
|
45
|
+
// src/client.ts
|
|
7
46
|
var TypedClient = (baseURL, globalOptions) => {
|
|
8
47
|
const client = {
|
|
9
|
-
get: (url, args, opts) => callServer(baseURL, url, "get", args,
|
|
10
|
-
post: (url, args, opts) => callServer(baseURL, url, "post", args,
|
|
11
|
-
put: (url, args, opts) => callServer(baseURL, url, "put", args,
|
|
12
|
-
patch: (url, args, opts) => callServer(
|
|
13
|
-
|
|
14
|
-
url,
|
|
15
|
-
"patch",
|
|
16
|
-
args,
|
|
17
|
-
globalOptions == null ? void 0 : globalOptions.retry,
|
|
18
|
-
opts == null ? void 0 : opts.retry
|
|
19
|
-
),
|
|
20
|
-
delete: (url, args, opts) => callServer(
|
|
21
|
-
baseURL,
|
|
22
|
-
url,
|
|
23
|
-
"delete",
|
|
24
|
-
args,
|
|
25
|
-
globalOptions == null ? void 0 : globalOptions.retry,
|
|
26
|
-
opts == null ? void 0 : opts.retry
|
|
27
|
-
)
|
|
48
|
+
get: (url, args, opts) => callServer(mergeArgs(baseURL, url, "get", args, opts, globalOptions)),
|
|
49
|
+
post: (url, args, opts) => callServer(mergeArgs(baseURL, url, "post", args, opts, globalOptions)),
|
|
50
|
+
put: (url, args, opts) => callServer(mergeArgs(baseURL, url, "put", args, opts, globalOptions)),
|
|
51
|
+
patch: (url, args, opts) => callServer(mergeArgs(baseURL, url, "patch", args, opts, globalOptions)),
|
|
52
|
+
delete: (url, args, opts) => callServer(mergeArgs(baseURL, url, "delete", args, opts, globalOptions))
|
|
28
53
|
};
|
|
29
54
|
return client;
|
|
30
55
|
};
|
|
31
|
-
var callServer = async (
|
|
56
|
+
var callServer = async (args) => {
|
|
32
57
|
try {
|
|
33
|
-
const
|
|
58
|
+
const serializer = paramsSerializer(args.arrayFormat);
|
|
34
59
|
const { headers, data } = await retry(
|
|
35
60
|
() => axios.request({
|
|
36
|
-
baseURL,
|
|
37
|
-
url,
|
|
38
|
-
method,
|
|
39
|
-
headers: args
|
|
40
|
-
params: args
|
|
41
|
-
|
|
61
|
+
baseURL: args.baseUrl,
|
|
62
|
+
url: args.url,
|
|
63
|
+
method: args.method,
|
|
64
|
+
headers: args.headers,
|
|
65
|
+
params: args.params,
|
|
66
|
+
paramsSerializer: serializer,
|
|
67
|
+
data: args.body
|
|
42
68
|
}),
|
|
43
|
-
|
|
69
|
+
args.retry
|
|
44
70
|
);
|
|
45
71
|
return { headers, data };
|
|
46
72
|
} catch (error) {
|
|
47
73
|
throw fromAxiosError(error);
|
|
48
74
|
}
|
|
49
75
|
};
|
|
76
|
+
var mergeArgs = (baseUrl, url, method, requestArgs, extras, global) => {
|
|
77
|
+
const params = merge("params", global, requestArgs, extras);
|
|
78
|
+
const query = merge("query", global, requestArgs, extras);
|
|
79
|
+
const headers = merge("headers", global, requestArgs, extras);
|
|
80
|
+
const body = merge("body", global, requestArgs, extras);
|
|
81
|
+
const retry2 = merge("retry", global, requestArgs, extras);
|
|
82
|
+
const merged = {
|
|
83
|
+
url: setParams(url, params),
|
|
84
|
+
baseUrl,
|
|
85
|
+
method,
|
|
86
|
+
params: query,
|
|
87
|
+
headers,
|
|
88
|
+
body,
|
|
89
|
+
retry: retry2
|
|
90
|
+
};
|
|
91
|
+
return merged;
|
|
92
|
+
};
|
|
93
|
+
var merge = (prop, ...args) => Object.assign({}, ...args.map((a) => (a == null ? void 0 : a[prop]) || {}));
|
|
50
94
|
var setParams = (url, params = {}) => Object.entries(params).reduce(
|
|
51
95
|
(url2, [key, val]) => url2.replace(new RegExp(`/:${key}(?!\\w|\\d)`, "g"), `/${val}`),
|
|
52
96
|
url
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sebspark/openapi-client",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.3.0",
|
|
4
4
|
"license": "Apache-2.0",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"module": "dist/index.mjs",
|
|
@@ -9,13 +9,16 @@
|
|
|
9
9
|
"dist"
|
|
10
10
|
],
|
|
11
11
|
"scripts": {
|
|
12
|
+
"generate": "yarn openapi-typegen -i ./src/test/ -o ./src/test/",
|
|
12
13
|
"build": "tsup-node src/index.ts --format esm,cjs --dts",
|
|
13
14
|
"dev": "tsc --watch --noEmit",
|
|
14
15
|
"lint": "biome check .",
|
|
15
16
|
"test": "vitest --passWithNoTests --coverage",
|
|
17
|
+
"pretest": "yarn generate",
|
|
16
18
|
"typecheck": "vitest --typecheck.only --passWithNoTests"
|
|
17
19
|
},
|
|
18
20
|
"devDependencies": {
|
|
21
|
+
"@sebspark/openapi-typegen": "*",
|
|
19
22
|
"tsconfig": "*"
|
|
20
23
|
},
|
|
21
24
|
"dependencies": {
|
|
@@ -23,4 +26,4 @@
|
|
|
23
26
|
"@sebspark/retry": "*",
|
|
24
27
|
"axios": "1.6.7"
|
|
25
28
|
}
|
|
26
|
-
}
|
|
29
|
+
}
|