Skip to content

Commit d000dfc

Browse files
feat: add init function to apiClientFactory params
1 parent b551f77 commit d000dfc

File tree

5 files changed

+79
-2
lines changed

5 files changed

+79
-2
lines changed

Diff for: .changeset/wet-cups-bathe.md

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
---
2+
"@vue-storefront/middleware": minor
3+
---
4+
5+
[ADDED] an `init` function to the `apiClientFactory` parameters. It reduces boilerplate code and helps with type suggestions of the input and output of the function.
6+
7+
```diff
8+
- const init = (config) => {
9+
- return {
10+
- ...config,
11+
- client: buildClient(config),
12+
- }
13+
- }
14+
15+
- const { createApiClient } = apiClientFactory({
16+
+ const { createApiClient, init } = apiClientFactory({
17+
onCreate: (config) => config,
18+
api: { ... }
19+
+ init: (config) => {
20+
+ return {
21+
+ ...config,
22+
+ client: buildClient(config),
23+
+ }
24+
+ },
25+
})
26+
27+
export const { createApiClient, init };
28+
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
import { apiClientFactory } from "../../../src/apiClientFactory";
2+
import * as api from "./api";
3+
4+
const { createApiClient, init } = apiClientFactory({
5+
onCreate: (config) => {
6+
return {
7+
config,
8+
client: null,
9+
};
10+
},
11+
api,
12+
init: (config) => {
13+
return {
14+
...config,
15+
isInit: true,
16+
};
17+
},
18+
});
19+
20+
export { createApiClient, init };
+27
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import request from "supertest";
2+
import { createServer } from "../../src/index";
3+
4+
describe("[Integration] Init", () => {
5+
it("should extend the configuration", async () => {
6+
const app = await createServer({
7+
integrations: {
8+
test_integration: {
9+
location: "./__tests__/integration/bootstrap/serverWithInit",
10+
configuration: {
11+
foo: "bar",
12+
},
13+
},
14+
},
15+
});
16+
17+
const { body } = await request(app)
18+
.post("/test_integration/getConfig")
19+
.send([]);
20+
21+
expect(body).toEqual({
22+
foo: "bar",
23+
integrationName: "test_integration",
24+
isInit: true,
25+
});
26+
});
27+
});

Diff for: packages/middleware/src/apiClientFactory/index.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,8 @@ const apiClientFactory = <
178178

179179
createApiClient._predefinedExtensions = factoryParams.extensions || [];
180180

181-
return { createApiClient };
181+
// TODO: Init function is being added to the return type but it's not being added nowhere here.
182+
return { createApiClient, init: factoryParams.init };
182183
};
183184

184185
export { apiClientFactory };

Diff for: packages/middleware/src/types/server.ts

+2-1
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@ export interface ApiClientFactoryParams<
113113
| Promise<{ client: CLIENT; config: ApiClientConfig }>
114114
| { client: CLIENT; config: ApiClientConfig };
115115
extensions?: ApiClientExtension<API>[];
116+
init?: (configuration: CONFIG) => TObject;
116117
}
117118

118119
export interface ApiClientFactory<
@@ -123,7 +124,7 @@ export interface ApiClientFactory<
123124
/**
124125
* Sets up integration config, runs once.
125126
*/
126-
init?: (configuration: TObject) => TObject;
127+
init?: (configuration: CONFIG) => TObject;
127128
}
128129

129130
export type CreateApiProxyFn = <CONFIG, API, CLIENT>(

0 commit comments

Comments
 (0)