@mittwald/api-client-commons 4.58.1 → 4.60.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.
|
@@ -2,12 +2,26 @@ import axios, { Axios } from "axios";
|
|
|
2
2
|
import Request from "./Request.js";
|
|
3
3
|
export class ApiClientBase {
|
|
4
4
|
axios;
|
|
5
|
+
defaultRequestOptions = {};
|
|
5
6
|
constructor(axiosConfig = axios) {
|
|
6
7
|
this.axios =
|
|
7
8
|
axiosConfig instanceof Axios ? axiosConfig : axios.create(axiosConfig);
|
|
8
9
|
}
|
|
10
|
+
buildRequestOptions(fromRequest) {
|
|
11
|
+
return {
|
|
12
|
+
...this.defaultRequestOptions,
|
|
13
|
+
...fromRequest,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
9
16
|
requestFunctionFactory(operation) {
|
|
10
|
-
return (conf) =>
|
|
17
|
+
return (conf, opts = {}) => {
|
|
18
|
+
const { onBeforeRequest } = this.buildRequestOptions(opts);
|
|
19
|
+
const request = new Request(operation, conf);
|
|
20
|
+
if (onBeforeRequest) {
|
|
21
|
+
onBeforeRequest(request);
|
|
22
|
+
}
|
|
23
|
+
return request.execute(this.axios);
|
|
24
|
+
};
|
|
11
25
|
}
|
|
12
26
|
}
|
|
13
27
|
export default ApiClientBase;
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { Axios } from "axios";
|
|
2
|
+
import { beforeEach, jest } from "@jest/globals";
|
|
3
|
+
import ApiClientBase from "./ApiClientBase.js";
|
|
4
|
+
const requestFn = jest.fn();
|
|
5
|
+
const mockedAxios = Object.assign(Object.create(Axios.prototype), {
|
|
6
|
+
request: requestFn,
|
|
7
|
+
});
|
|
8
|
+
class TestClient extends ApiClientBase {
|
|
9
|
+
testRequest = this.requestFunctionFactory({
|
|
10
|
+
path: "/test",
|
|
11
|
+
method: "GET",
|
|
12
|
+
operationId: "test",
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
const testClient = new TestClient(mockedAxios);
|
|
16
|
+
beforeEach(() => {
|
|
17
|
+
jest.resetAllMocks();
|
|
18
|
+
});
|
|
19
|
+
test("onBeforeRequest is called before actual request", async () => {
|
|
20
|
+
const onBeforeRequest = jest.fn(() => {
|
|
21
|
+
expect(requestFn).not.toHaveBeenCalled();
|
|
22
|
+
});
|
|
23
|
+
await testClient.testRequest(undefined, {
|
|
24
|
+
onBeforeRequest,
|
|
25
|
+
});
|
|
26
|
+
expect(onBeforeRequest).toHaveBeenCalledTimes(1);
|
|
27
|
+
expect(requestFn).toHaveBeenCalledTimes(1);
|
|
28
|
+
});
|
|
29
|
+
test("onBeforeRequest configured in default options is called before actual request", async () => {
|
|
30
|
+
const onBeforeRequest = jest.fn(() => {
|
|
31
|
+
expect(requestFn).not.toHaveBeenCalled();
|
|
32
|
+
});
|
|
33
|
+
testClient.defaultRequestOptions.onBeforeRequest = onBeforeRequest;
|
|
34
|
+
await testClient.testRequest(undefined);
|
|
35
|
+
expect(onBeforeRequest).toHaveBeenCalledTimes(1);
|
|
36
|
+
expect(requestFn).toHaveBeenCalledTimes(1);
|
|
37
|
+
});
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import { AxiosInstance, CreateAxiosDefaults } from "axios";
|
|
2
|
-
import { RequestFunction } from "../types/index.js";
|
|
2
|
+
import { RequestFunction, RequestOptions } from "../types/index.js";
|
|
3
3
|
import { OpenAPIOperation } from "../types/index.js";
|
|
4
4
|
export declare abstract class ApiClientBase {
|
|
5
|
-
axios: AxiosInstance;
|
|
5
|
+
readonly axios: AxiosInstance;
|
|
6
|
+
readonly defaultRequestOptions: RequestOptions;
|
|
6
7
|
constructor(axiosConfig?: AxiosInstance | CreateAxiosDefaults);
|
|
8
|
+
private buildRequestOptions;
|
|
7
9
|
protected requestFunctionFactory<TOp extends OpenAPIOperation>(operation: TOp): RequestFunction<TOp>;
|
|
8
10
|
}
|
|
9
11
|
export default ApiClientBase;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -1,11 +1,15 @@
|
|
|
1
1
|
import { InferredRequestType, InferredResponseType, OpenAPIOperation } from "./OpenAPIOperation.js";
|
|
2
2
|
import { NullableOnNoRequiredKeysDeep } from "./NullableOnNoRequiredKeysDeep.js";
|
|
3
|
+
import Request from "../core/Request.js";
|
|
4
|
+
export interface RequestOptions<TOp extends OpenAPIOperation = OpenAPIOperation> {
|
|
5
|
+
onBeforeRequest?: (req: Request<TOp>) => void;
|
|
6
|
+
}
|
|
3
7
|
type UnboxPathParameters<T> = T extends {
|
|
4
8
|
pathParameters: infer TPath;
|
|
5
9
|
} ? Omit<T, "pathParameters"> & TPath : T;
|
|
6
10
|
export type RequestObject<TOp extends OpenAPIOperation> = NullableOnNoRequiredKeysDeep<UnboxPathParameters<InferredRequestType<TOp>>>;
|
|
7
11
|
export type ResponsePromise<TOp extends OpenAPIOperation> = Promise<InferredResponseType<TOp>>;
|
|
8
|
-
type RequestFunctionWithOptionalRequest<TOp extends OpenAPIOperation> = (request?: RequestObject<TOp>) => ResponsePromise<TOp>;
|
|
9
|
-
type RequestFunctionWithRequiredRequest<TOp extends OpenAPIOperation> = (request: RequestObject<TOp>) => ResponsePromise<TOp>;
|
|
12
|
+
type RequestFunctionWithOptionalRequest<TOp extends OpenAPIOperation> = (request?: RequestObject<TOp>, opts?: RequestOptions<TOp>) => ResponsePromise<TOp>;
|
|
13
|
+
type RequestFunctionWithRequiredRequest<TOp extends OpenAPIOperation> = (request: RequestObject<TOp>, opts?: RequestOptions<TOp>) => ResponsePromise<TOp>;
|
|
10
14
|
export type RequestFunction<TOp extends OpenAPIOperation> = null extends RequestObject<TOp> ? RequestFunctionWithOptionalRequest<TOp> : RequestFunctionWithRequiredRequest<TOp>;
|
|
11
15
|
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@mittwald/api-client-commons",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.60.0",
|
|
4
4
|
"author": "Mittwald CM Service GmbH & Co. KG <opensource@mittwald.de>",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"description": "Common types and utilities for mittwald API clients",
|
|
@@ -41,14 +41,14 @@
|
|
|
41
41
|
},
|
|
42
42
|
"dependencies": {
|
|
43
43
|
"@types/parse-path": "^7.0.3",
|
|
44
|
-
"axios": "^1.7.
|
|
44
|
+
"axios": "^1.7.7",
|
|
45
45
|
"parse-path": "^7.0.0",
|
|
46
46
|
"path-to-regexp": "^8.1.0",
|
|
47
47
|
"type-fest": "^4.23.0"
|
|
48
48
|
},
|
|
49
49
|
"devDependencies": {
|
|
50
50
|
"@jest/globals": "^29.7.0",
|
|
51
|
-
"@mittwald/react-use-promise": "^2.
|
|
51
|
+
"@mittwald/react-use-promise": "^2.5.0",
|
|
52
52
|
"@types/jest": "^29.5.12",
|
|
53
53
|
"@typescript-eslint/eslint-plugin": "^7.18.0",
|
|
54
54
|
"@typescript-eslint/parser": "^7.18.0",
|
|
@@ -78,5 +78,5 @@
|
|
|
78
78
|
"optional": true
|
|
79
79
|
}
|
|
80
80
|
},
|
|
81
|
-
"gitHead": "
|
|
81
|
+
"gitHead": "8058044c2d8ab32e0507561baa1172cbfbce4fe0"
|
|
82
82
|
}
|