Skip to content

Commit

Permalink
refactor: remove tslog
Browse files Browse the repository at this point in the history
  • Loading branch information
tutkli committed Mar 16, 2023
1 parent e4d890d commit 81f862e
Show file tree
Hide file tree
Showing 5 changed files with 603 additions and 616 deletions.
13 changes: 4 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@

- 💅 Fully typed
- ♻ Http Request Cache
- 📄 Configurable Logging
- 📄 Logging
- 📦 ESM with tree shaking support

#### 📖 Check out the [documentation page](https://tutkli.github.io/jikan-ts-docs/)!
Expand All @@ -25,7 +25,7 @@
```bash
npm install --save @tutkli/jikan-ts
# or
yarn add @tutkli/jikan-ts # recommended
yarn add @tutkli/jikan-ts
```

## Basic Example
Expand Down Expand Up @@ -81,22 +81,17 @@ See also: [axios-cache-interceptor Configuration](https://axios-cache-intercepto

### Logging Configuration

To enable logging, pass the `loggerOptions` argument with `enabled: true`. You can also customize the styling of the logger with your custom tslog settings.
To enable logging, pass the `enableLogging` argument as `true`.

```ts
import { AnimeClient } from '@tutkli/jikan-ts';

const animeClient = new AnimeClient({
loggerOptions: {
enabled: true, // enables logging
settings: { ... } // [Optional] your custom tslog settings
}
enableLogging: true,
}
);
```

See also: [tslog Settings](https://tslog.js.org/#/?id=settings).

## Available Clients

- AnimeClient
Expand Down
3 changes: 1 addition & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,7 @@
"homepage": "https://github.com/tutkli/jikan-ts#readme",
"dependencies": {
"axios": "^0.27.2",
"axios-cache-interceptor": "^0.10.7",
"tslog": "4.7.1"
"axios-cache-interceptor": "^0.10.7"
},
"devDependencies": {
"@swc/core": "1.3.27",
Expand Down
34 changes: 11 additions & 23 deletions src/clients/base.client.ts
Original file line number Diff line number Diff line change
Expand Up @@ -7,29 +7,18 @@ import {
} from 'axios-cache-interceptor';
import axios, { AxiosError } from 'axios';
import { BaseURL } from '../constants';
import {
createLogger,
getCacheOptions,
handleRequest,
handleRequestError,
handleResponse,
handleResponseError,
LoggerOptions,
} from '../config';
import { Logger } from 'tslog';
import { ILogObj } from 'tslog/dist/types/interfaces';
import { getCacheOptions, handleRequest, handleRequestError, handleResponse, handleResponseError } from '../config';

/**
* **Client Args**
* Used to pass optional configuration for logging and cache to the clients.
*/
export interface ClientArgs {
/**
* **Logger Options**
* Options for the client logger.
* @see https://tslog.js.org/#/?id=settings
* **EnableLogging**
* Enables logging request responses.
*/
loggerOptions: Partial<LoggerOptions>;
enableLogging: boolean;
/**
* **Axios Cache Options**
* Options for cache.
Expand Down Expand Up @@ -60,21 +49,20 @@ export abstract class BaseClient {
getCacheOptions(clientOptions.cacheOptions)
);

if (clientOptions.loggerOptions?.enabled) {
const logger: Logger<ILogObj> = createLogger(clientOptions.loggerOptions.settings);
this.addHttpInterceptors(logger);
if (clientOptions.enableLogging) {
this.addLoggingInterceptors();
}
}

private addHttpInterceptors(logger: Logger<ILogObj>): void {
private addLoggingInterceptors(): void {
this.api.interceptors.request.use(
(config: CacheRequestConfig) => handleRequest(config, logger),
(error: AxiosError<string>) => handleRequestError(error, logger)
(config: CacheRequestConfig) => handleRequest(config),
(error: AxiosError<string>) => handleRequestError(error)
);

this.api.interceptors.response.use(
(response: CacheAxiosResponse) => handleResponse(response, logger),
(error: AxiosError<string>) => handleResponseError(error, logger)
(response: CacheAxiosResponse) => handleResponse(response),
(error: AxiosError<string>) => handleResponseError(error)
);
}
}
35 changes: 11 additions & 24 deletions src/config/logger.config.ts
Original file line number Diff line number Diff line change
@@ -1,38 +1,25 @@
import { AxiosError } from 'axios';
import { CacheAxiosResponse, CacheRequestConfig } from 'axios-cache-interceptor';
import { ISettingsParam, Logger } from 'tslog';
import { ILogObj } from 'tslog/dist/types/interfaces';

export interface LoggerOptions {
enabled: boolean;
settings: ISettingsParam<ILogObj>;
}

export const DEFAULT_LOGGER_SETTINGS: ISettingsParam<ILogObj> = {
prettyLogTemplate: '{{yyyy}}.{{mm}}.{{dd}} {{hh}}:{{MM}}:{{ss}}:{{ms}} {{logLevelName}} [{{name}}] ',
name: 'Jikan-ts Logger',
};

export const createLogger = (options: ISettingsParam<ILogObj> = DEFAULT_LOGGER_SETTINGS): Logger<ILogObj> =>
new Logger(options);

export const handleRequest = (requestConfig: CacheRequestConfig, logger: Logger<ILogObj>): CacheRequestConfig => {
logger.info(`[Request Config] ${requestConfig.method?.toUpperCase() || ''} | ${requestConfig.url || ''}`);
export const handleRequest = (requestConfig: CacheRequestConfig): CacheRequestConfig => {
console.info(`[Request] ${requestConfig.method?.toUpperCase() || ''} | ${requestConfig.url || ''}`);
return requestConfig;
};

export const handleRequestError = (error: AxiosError, logger: Logger<ILogObj>): Promise<AxiosError> => {
logger.error(`[Request Error] CODE ${error.code || 'UNKNOWN'} | ${error.message}`);
export const handleRequestError = (error: AxiosError): Promise<AxiosError> => {
console.error(`[Request Error] CODE ${error.code || 'UNKNOWN'} | ${error.message}`);
throw error;
};

export const handleResponse = (response: CacheAxiosResponse, logger: Logger<ILogObj>): CacheAxiosResponse => {
logger.info();
console.log(response.data);
export const handleResponse = (response: CacheAxiosResponse): CacheAxiosResponse => {
console.info(
`[Request Response] ${response.config.method?.toUpperCase() || ''} | ${response.config.url || ''}`,
response.data
);
return response;
};

export const handleResponseError = (error: AxiosError, logger: Logger<ILogObj>): Promise<AxiosError> => {
logger.error(`[ Response Error ] CODE ${error.code || 'UNKNOWN'} | ${error.message}`);
export const handleResponseError = (error: AxiosError): Promise<AxiosError> => {
console.error(`[ Response Error ] CODE ${error.code || 'UNKNOWN'} | ${error.message}`);
throw error;
};
Loading

0 comments on commit 81f862e

Please sign in to comment.