@cloudsugar/axios-logger
Version:
An axios request logger.
65 lines (64 loc) • 2.86 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.axiosLogger = void 0;
;
/**
* The default Axios request formatter function
*/
function formatDefault(request) {
var _a, _b;
const { config, response, error, startTime, endTime } = request;
const method = (config === null || config === void 0 ? void 0 : config.method) || '';
const { url } = config;
const status = (_a = (response || (error === null || error === void 0 ? void 0 : error.response))) === null || _a === void 0 ? void 0 : _a.status;
const statusText = (_b = (response || (error === null || error === void 0 ? void 0 : error.response))) === null || _b === void 0 ? void 0 : _b.statusText;
const ms = endTime.getTime() - startTime.getTime();
return [method.toUpperCase(), `${status}/(${statusText})`, `${ms}ms`, url, { config, response, error }];
}
/**
* Decorates an Axios instance with logging
*
* @example
* import axiosDefault from 'axios';
* import { axiosLogger } from '@cloudsugar/axios-logger';
*
* const axios = axiosLogger(axios, {logger: console});
*/
function axiosLogger(axios, options = {}) {
const defaultAdapter = axios.defaults.adapter;
if (!defaultAdapter) {
throw new Error('axios.defaults.adapter is missing');
}
const formatData = (options === null || options === void 0 ? void 0 : options.format) || formatDefault;
const logger = (options === null || options === void 0 ? void 0 : options.logger) || console;
axios.defaults.adapter = (config) => __awaiter(this, void 0, void 0, function* () {
let response = null;
let error = null;
const startTime = new Date();
try {
response = yield defaultAdapter(config);
return response;
}
catch (e) {
error = e;
throw e;
}
finally {
const endTime = new Date();
const logLevel = response ? 'info' : 'error';
const content = formatData({ config, response, error, startTime, endTime });
logger[logLevel](...content);
}
});
return axios;
}
exports.axiosLogger = axiosLogger;