diff --git a/README.md b/README.md
index 279ca75..71fa69b 100644
--- a/README.md
+++ b/README.md
@@ -36,69 +36,39 @@ yarn add @byndyusoft/nest-http-client @nestjs/common axios
1. Create module
```typescript
-import {
- DynamicModuleHelper,
- TRegisterAsyncOptions,
-} from "@byndyusoft/nest-dynamic-module";
+import { TRegisterAsyncOptions } from "@byndyusoft/nest-dynamic-module";
import {
HttpClientModule,
IHttpClientOptions,
} from "@byndyusoft/nest-http-client";
-import { DynamicModule, Module } from "@nestjs/common";
+import { DynamicModule, Global, Module } from "@nestjs/common";
import urlJoin from "proper-url-join";
import qs from "qs";
-import { ClientBaseOptionsToken, ClientOptionsToken } from "./tokens";
-import { UsersClient } from "./usersClient";
+import * as providers from "./providers";
+@Global()
@Module({
- imports: [
- HttpClientModule.registerAsync({
- inject: [ClientOptionsToken],
- useFactory: (options: IHttpClientOptions) => options,
- }),
- ],
- providers: [UsersClient],
- exports: [UsersClient],
+ providers: Object.values(providers),
+ exports: Object.values(providers),
})
export class ClientModule {
public static registerAsync(
options?: TRegisterAsyncOptions,
): DynamicModule {
- return DynamicModuleHelper.registerAsync(
- {
- module: ClientModule,
- global: true,
- providers: [
- {
- provide: ClientOptionsToken,
- inject: [ClientBaseOptionsToken],
- useFactory: (baseOptions: IHttpClientOptions) =>
- ClientModule.clientOptionsFactory(baseOptions),
- },
- ],
- exports: [ClientOptionsToken],
- },
- ClientBaseOptionsToken,
+ return HttpClientModule.registerClientModule(
+ { module: ClientModule },
options,
- );
- }
-
- private static clientOptionsFactory(
- baseOptions: IHttpClientOptions,
- ): IHttpClientOptions {
- return {
- ...baseOptions,
- config: {
- ...baseOptions.config,
- baseURL: urlJoin(baseOptions.config?.baseURL as string, "/api/v1"),
+ (config) => ({
+ ...config,
+ baseURL: urlJoin(config?.baseURL as string, "/api/v1"),
paramsSerializer: (params) =>
qs.stringify(params, {
skipNulls: true,
arrayFormat: "repeat",
}),
- },
- };
+ }),
+ );
}
}
```
diff --git a/src/httpClientBaseOptionsToken.ts b/src/httpClientBaseOptionsToken.ts
new file mode 100644
index 0000000..3b75f14
--- /dev/null
+++ b/src/httpClientBaseOptionsToken.ts
@@ -0,0 +1,17 @@
+/*
+ * Copyright 2022 Byndyusoft
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+export const HttpClientBaseOptionsToken = Symbol("HttpClientBaseOptionsToken");
diff --git a/src/httpClientModule.ts b/src/httpClientModule.ts
index 1985f6e..ec9a15b 100644
--- a/src/httpClientModule.ts
+++ b/src/httpClientModule.ts
@@ -19,15 +19,19 @@ import {
TRegisterAsyncOptions,
} from "@byndyusoft/nest-dynamic-module";
import { DynamicModule, Module } from "@nestjs/common";
+import { AxiosRequestConfig } from "axios";
import { HttpClient } from "./httpClient";
+import { HttpClientBaseOptionsToken } from "./httpClientBaseOptionsToken";
import { IHttpClientOptions } from "./httpClientOptionsInterface";
import { HttpClientOptionsToken } from "./httpClientOptionsToken";
import { HttpCoreClient } from "./httpCoreClient";
+const providers = [HttpCoreClient, HttpClient];
+
@Module({
- providers: [HttpCoreClient, HttpClient],
- exports: [HttpCoreClient, HttpClient],
+ providers,
+ exports: providers,
})
export class HttpClientModule {
public static registerAsync(
@@ -41,4 +45,32 @@ export class HttpClientModule {
options,
);
}
+
+ public static registerClientModule(
+ dynamicModule: DynamicModule,
+ options?: TRegisterAsyncOptions,
+ configFactory?: (config?: AxiosRequestConfig) => AxiosRequestConfig,
+ ): DynamicModule {
+ return DynamicModuleHelper.registerAsync(
+ {
+ ...dynamicModule,
+ providers: [
+ ...providers,
+ ...(dynamicModule.providers ?? []),
+ {
+ provide: HttpClientOptionsToken,
+ inject: [HttpClientBaseOptionsToken],
+ useFactory: (
+ baseOptions: IHttpClientOptions,
+ ): IHttpClientOptions => ({
+ ...baseOptions,
+ config: configFactory?.(baseOptions.config) ?? baseOptions.config,
+ }),
+ },
+ ],
+ },
+ HttpClientBaseOptionsToken,
+ options,
+ );
+ }
}
diff --git a/src/index.ts b/src/index.ts
index c26c65c..719ea4c 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -15,6 +15,7 @@
*/
export * from "./httpClient";
+export * from "./httpClientBaseOptionsToken";
export * from "./httpClientModule";
export * from "./httpClientOptionsInterface";
export * from "./httpClientOptionsToken";