@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 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, globalOptions == null ? void 0 : globalOptions.retry, opts == null ? void 0 : opts.retry),
45
- post: (url, args, opts) => callServer(baseURL, url, "post", args, globalOptions == null ? void 0 : globalOptions.retry, opts == null ? void 0 : opts.retry),
46
- put: (url, args, opts) => callServer(baseURL, url, "put", args, globalOptions == null ? void 0 : globalOptions.retry, opts == null ? void 0 : opts.retry),
47
- patch: (url, args, opts) => callServer(
48
- baseURL,
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 (baseURL, _url, method, args, ...retrySettings) => {
91
+ var callServer = async (args) => {
67
92
  try {
68
- const url = setParams(_url, args == null ? void 0 : args.params);
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 == null ? void 0 : args.headers,
75
- params: args == null ? void 0 : args.query,
76
- data: args == null ? void 0 : args.body
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
- ...retrySettings
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, globalOptions == null ? void 0 : globalOptions.retry, opts == null ? void 0 : opts.retry),
10
- post: (url, args, opts) => callServer(baseURL, url, "post", args, globalOptions == null ? void 0 : globalOptions.retry, opts == null ? void 0 : opts.retry),
11
- put: (url, args, opts) => callServer(baseURL, url, "put", args, globalOptions == null ? void 0 : globalOptions.retry, opts == null ? void 0 : opts.retry),
12
- patch: (url, args, opts) => callServer(
13
- baseURL,
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 (baseURL, _url, method, args, ...retrySettings) => {
56
+ var callServer = async (args) => {
32
57
  try {
33
- const url = setParams(_url, args == null ? void 0 : args.params);
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 == null ? void 0 : args.headers,
40
- params: args == null ? void 0 : args.query,
41
- data: args == null ? void 0 : args.body
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
- ...retrySettings
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.1.0",
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
+ }