Shared NestJS utilities — error handling, structured logging, and more.
yarn add @samofprog/corekityarn add @nestjs/common axios
axiosis optional — only required if you use the Axios error utilities.
import {
getErrorMessage,
getErrorDetails,
getErrorDetail,
isAxiosError,
isTimeoutError,
} from '@samofprog/corekit';
try {
await axios.get('/api/users');
} catch (error) {
// Human-readable message (appends response data for Axios errors)
const message = getErrorMessage(error);
// Message + stack trace
const { message, stack } = getErrorDetails(error);
// Full structured detail (status, code, data, stack)
const detail = getErrorDetail(error);
// Type guards
if (isAxiosError(error)) {
console.log(error.response?.status);
}
if (isTimeoutError(error)) {
// retry logic
}
}import { Logger } from '@nestjs/common';
import { log, warn, error as logError } from '@samofprog/corekit';
const logger = new Logger('OrderService');
// Appends cleaned JSON data to the log message
log(logger, 'Order created', { orderId: 'ORD-42', total: 99.99 });
// => [OrderService] Order created {"orderId":"ORD-42","total":99.99}
// Null and undefined values are automatically stripped
warn(logger, 'Missing field', { email: null, name: 'Alice' });
// => [OrderService] Missing field {"name":"Alice"}
// Error with stack trace
logError(logger, 'Payment failed', { orderId: 'ORD-42' }, err.stack);| Function | Description |
|---|---|
getErrorMessage(error) |
Human-readable message from any error type |
getErrorDetails(error) |
Message + optional stack trace |
getErrorDetail(error) |
Full structured ErrorDetail object |
isAxiosError(error) |
Type guard for Axios-like errors (duck-typed) |
isTimeoutError(error) |
Detects timeout errors |
| Function | Description |
|---|---|
log(logger, message, data?) |
Info level |
debug(logger, message, data?) |
Debug level |
warn(logger, message, data?) |
Warning level |
error(logger, message, data?, stack?) |
Error level with optional stack |
import type { ErrorDetail, AxiosLikeError, LogData } from '@samofprog/corekit';