From 6b8041514475387cb50614f15901d71a784b7108 Mon Sep 17 00:00:00 2001 From: Adrianmjim Date: Sat, 8 Mar 2025 09:42:03 +0100 Subject: [PATCH 01/11] feat(logger): add logger package --- packages/logger/libraries/core/.gitignore | 19 +++++ .../logger/libraries/core/.lintstagedrc.json | 9 +++ packages/logger/libraries/core/.npmignore | 25 +++++++ packages/logger/libraries/core/README.md | 6 ++ .../logger/libraries/core/eslint.config.mjs | 3 + packages/logger/libraries/core/package.json | 74 +++++++++++++++++++ .../logger/libraries/core/prettier.config.mjs | 3 + .../logger/libraries/core/rollup.config.mjs | 4 + packages/logger/libraries/core/src/index.ts | 7 ++ .../core/src/logger/ConsoleLogger.ts | 14 ++++ .../libraries/core/src/logger/FileLogger.ts | 20 +++++ .../core/src/logger/adapter/LoggerAdapter.ts | 74 +++++++++++++++++++ .../core/src/logger/model/ContextMetadata.ts | 4 + .../libraries/core/src/logger/model/Logger.ts | 13 ++++ .../libraries/core/src/model/LogType.ts | 9 +++ .../libraries/core/src/model/LoggerOptions.ts | 7 ++ .../winston/adapter/WinstonLoggerAdapter.ts | 48 ++++++++++++ .../logger/libraries/core/stryker.config.mjs | 3 + .../logger/libraries/core/tsconfig.cjs.json | 10 +++ .../logger/libraries/core/tsconfig.esm.json | 10 +++ packages/logger/libraries/core/tsconfig.json | 4 + .../logger/libraries/core/vitest.config.mjs | 3 + .../libraries/core/vitest.config.stryker.mjs | 3 + .../libraries/core/vitest.workspace.mjs | 3 + pnpm-workspace.yaml | 1 + 25 files changed, 376 insertions(+) create mode 100644 packages/logger/libraries/core/.gitignore create mode 100644 packages/logger/libraries/core/.lintstagedrc.json create mode 100644 packages/logger/libraries/core/.npmignore create mode 100644 packages/logger/libraries/core/README.md create mode 100644 packages/logger/libraries/core/eslint.config.mjs create mode 100644 packages/logger/libraries/core/package.json create mode 100644 packages/logger/libraries/core/prettier.config.mjs create mode 100644 packages/logger/libraries/core/rollup.config.mjs create mode 100644 packages/logger/libraries/core/src/index.ts create mode 100644 packages/logger/libraries/core/src/logger/ConsoleLogger.ts create mode 100644 packages/logger/libraries/core/src/logger/FileLogger.ts create mode 100644 packages/logger/libraries/core/src/logger/adapter/LoggerAdapter.ts create mode 100644 packages/logger/libraries/core/src/logger/model/ContextMetadata.ts create mode 100644 packages/logger/libraries/core/src/logger/model/Logger.ts create mode 100644 packages/logger/libraries/core/src/model/LogType.ts create mode 100644 packages/logger/libraries/core/src/model/LoggerOptions.ts create mode 100644 packages/logger/libraries/core/src/winston/adapter/WinstonLoggerAdapter.ts create mode 100644 packages/logger/libraries/core/stryker.config.mjs create mode 100644 packages/logger/libraries/core/tsconfig.cjs.json create mode 100644 packages/logger/libraries/core/tsconfig.esm.json create mode 100644 packages/logger/libraries/core/tsconfig.json create mode 100644 packages/logger/libraries/core/vitest.config.mjs create mode 100644 packages/logger/libraries/core/vitest.config.stryker.mjs create mode 100644 packages/logger/libraries/core/vitest.workspace.mjs diff --git a/packages/logger/libraries/core/.gitignore b/packages/logger/libraries/core/.gitignore new file mode 100644 index 00000000..288feba2 --- /dev/null +++ b/packages/logger/libraries/core/.gitignore @@ -0,0 +1,19 @@ +# Typescript compiled files +/lib/** + +/tsconfig.tsbuildinfo +/tsconfig.cjs.tsbuildinfo +/tsconfig.esm.tsbuildinfo + +# Test coverage report +/coverage + +# Test mutation report +/reports + +# node modules +/node_modules/ + +# Turborepo files +.turbo/ + diff --git a/packages/logger/libraries/core/.lintstagedrc.json b/packages/logger/libraries/core/.lintstagedrc.json new file mode 100644 index 00000000..0061dfc2 --- /dev/null +++ b/packages/logger/libraries/core/.lintstagedrc.json @@ -0,0 +1,9 @@ +{ + "*.js": [ + "prettier --write" + ], + "*.ts": [ + "prettier --write", + "eslint" + ] +} diff --git a/packages/logger/libraries/core/.npmignore b/packages/logger/libraries/core/.npmignore new file mode 100644 index 00000000..6b2fa298 --- /dev/null +++ b/packages/logger/libraries/core/.npmignore @@ -0,0 +1,25 @@ +/.turbo +/coverage +/reports + +**/*.spec.js +**/*.spec.js.map +**/*.ts +!lib/cjs/**/*.d.ts +lib/esm/**/*.d.ts.map +!lib/esm/index.d.ts +!lib/esm/index.d.ts.map + +.lintstagedrc.json +eslint.config.mjs +vitest.config.mjs +vitest.config.stryker.mjs +vitest.workspace.mjs +prettier.config.mjs +rollup.config.mjs +stryker.config.mjs +tsconfig.cjs.json +tsconfig.cjs.tsbuildinfo +tsconfig.esm.json +tsconfig.esm.tsbuildinfo +tsconfig.json diff --git a/packages/logger/libraries/core/README.md b/packages/logger/libraries/core/README.md new file mode 100644 index 00000000..99ad6407 --- /dev/null +++ b/packages/logger/libraries/core/README.md @@ -0,0 +1,6 @@ +[![Test coverage](https://codecov.io/gh/inversify/monorepo/branch/main/graph/badge.svg?flag=%40inversifyjs%2Fhttp-core)](https://codecov.io/gh/inversify/monorepo/branch/main/graph/badge.svg?flag=%40inversifyjs%2Fhttp-core) +[![npm version](https://img.shields.io/github/package-json/v/inversify/monorepo?filename=packages%2Fcontainer%2Flibraries%2Fhttp-core%2Fpackage.json&style=plastic)](https://www.npmjs.com/package/@inversifyjs/http-core) + +# @inversifyjs/http-core + +Inversify monorepo http core modules. diff --git a/packages/logger/libraries/core/eslint.config.mjs b/packages/logger/libraries/core/eslint.config.mjs new file mode 100644 index 00000000..42002283 --- /dev/null +++ b/packages/logger/libraries/core/eslint.config.mjs @@ -0,0 +1,3 @@ +import myconfig from '@inversifyjs/foundation-eslint-config'; + +export default [...myconfig]; diff --git a/packages/logger/libraries/core/package.json b/packages/logger/libraries/core/package.json new file mode 100644 index 00000000..9334abbf --- /dev/null +++ b/packages/logger/libraries/core/package.json @@ -0,0 +1,74 @@ +{ + "author": "Adrián Martínez Jiménez", + "bugs": { + "url": "https://github.com/inversify/monorepo/issues" + }, + "description": "InversifyJs logger core package", + "devDependencies": { + "@stryker-mutator/core": "8.7.1", + "@stryker-mutator/typescript-checker": "8.7.1", + "@stryker-mutator/vitest-runner": "8.7.1", + "@types/node": "22.13.9", + "@vitest/coverage-v8": "3.0.7", + "eslint": "9.21.0", + "logform": "^2.7.0", + "prettier": "3.5.3", + "rimraf": "6.0.1", + "rollup": "4.34.9", + "ts-loader": "9.5.2", + "tslib": "2.8.1", + "typescript": "5.8.2", + "vitest": "3.0.7" + }, + "devEngines": { + "node": "^22.10.2", + "pnpm": "^9.12.1" + }, + "homepage": "https://inversify.io", + "keywords": [ + "dependency injection", + "dependency inversion", + "di", + "inversion of control container", + "ioc", + "javascript", + "node", + "typescript" + ], + "license": "MIT", + "main": "lib/cjs/index.js", + "module": "lib/esm/index.js", + "exports": { + ".": { + "import": "./lib/esm/index.js", + "require": "./lib/cjs/index.js" + } + }, + "name": "@inversifyjs/logger", + "publishConfig": { + "access": "public" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/inversify/monorepo.git" + }, + "scripts": { + "build": "pnpm run build:cjs && pnpm run build:esm", + "build:cjs": "tsc --build tsconfig.cjs.json && pnpm exec foundation-ts-package-cjs ./lib/cjs", + "build:esm": "rollup -c ./rollup.config.mjs && pnpm exec foundation-ts-package-esm ./lib/esm", + "build:clean": "rimraf lib", + "format": "prettier --write ./src", + "lint": "eslint ./src", + "prebuild": "pnpm run build:clean", + "test": "vitest run", + "test:integration": "pnpm run test --project Integration", + "test:coverage": "pnpm run test:unit --coverage", + "test:mutation": "stryker run", + "test:uncommitted": "pnpm run test --changed=HEAD", + "test:unit": "pnpm run test --project Unit" + }, + "version": "1.0.0", + "dependencies": { + "winston": "^3.17.0" + } +} diff --git a/packages/logger/libraries/core/prettier.config.mjs b/packages/logger/libraries/core/prettier.config.mjs new file mode 100644 index 00000000..70361db5 --- /dev/null +++ b/packages/logger/libraries/core/prettier.config.mjs @@ -0,0 +1,3 @@ +import config from '@inversifyjs/foundation-prettier-config'; + +export default config; diff --git a/packages/logger/libraries/core/rollup.config.mjs b/packages/logger/libraries/core/rollup.config.mjs new file mode 100644 index 00000000..c48ba50b --- /dev/null +++ b/packages/logger/libraries/core/rollup.config.mjs @@ -0,0 +1,4 @@ +import config from '@inversifyjs/foundation-rollup-config'; + +/** @type {!import("rollup").MergedRollupOptions[]} */ +export default config; diff --git a/packages/logger/libraries/core/src/index.ts b/packages/logger/libraries/core/src/index.ts new file mode 100644 index 00000000..f250aeab --- /dev/null +++ b/packages/logger/libraries/core/src/index.ts @@ -0,0 +1,7 @@ +import { ConsoleLogger } from './logger/ConsoleLogger'; +import { FileLogger } from './logger/FileLogger'; +import { Logger } from './logger/model/Logger'; +import { LoggerOptions } from './model/LoggerOptions'; +import { LogType } from './model/LogType'; + +export { ConsoleLogger, FileLogger, Logger, LoggerOptions, LogType }; diff --git a/packages/logger/libraries/core/src/logger/ConsoleLogger.ts b/packages/logger/libraries/core/src/logger/ConsoleLogger.ts new file mode 100644 index 00000000..764ecf4c --- /dev/null +++ b/packages/logger/libraries/core/src/logger/ConsoleLogger.ts @@ -0,0 +1,14 @@ +import { createLogger, transports } from 'winston'; + +import { LoggerOptions } from '../model/LoggerOptions'; +import { WinstonLoggerAdapter } from '../winston/adapter/WinstonLoggerAdapter'; + +export class ConsoleLogger extends WinstonLoggerAdapter { + constructor(context?: string, loggerOptions?: LoggerOptions) { + super( + createLogger({ transports: [new transports.Console()] }), + context, + loggerOptions, + ); + } +} diff --git a/packages/logger/libraries/core/src/logger/FileLogger.ts b/packages/logger/libraries/core/src/logger/FileLogger.ts new file mode 100644 index 00000000..d8bc63dc --- /dev/null +++ b/packages/logger/libraries/core/src/logger/FileLogger.ts @@ -0,0 +1,20 @@ +import { createLogger, transports } from 'winston'; + +import { LoggerOptions } from '../model/LoggerOptions'; +import { WinstonLoggerAdapter } from '../winston/adapter/WinstonLoggerAdapter'; + +export class FileLogger extends WinstonLoggerAdapter { + constructor( + fileName: string, + context?: string, + loggerOptions?: LoggerOptions, + ) { + super( + createLogger({ + transports: [new transports.File({ filename: fileName })], + }), + context, + loggerOptions, + ); + } +} diff --git a/packages/logger/libraries/core/src/logger/adapter/LoggerAdapter.ts b/packages/logger/libraries/core/src/logger/adapter/LoggerAdapter.ts new file mode 100644 index 00000000..89212c5b --- /dev/null +++ b/packages/logger/libraries/core/src/logger/adapter/LoggerAdapter.ts @@ -0,0 +1,74 @@ +import { LoggerOptions } from '../../model/LoggerOptions'; +import { LogType } from '../../model/LogType'; +import { ContextMetadata } from '../model/ContextMetadata'; +import { Logger } from '../model/Logger'; + +export abstract class LoggerAdapter implements Logger { + readonly #context: string | undefined; + + constructor( + context?: string, + protected readonly _loggerOptions: LoggerOptions = { + json: true, + logTypes: [ + LogType.DEBUG, + LogType.ERROR, + LogType.HTTP, + LogType.INFO, + LogType.SILLY, + LogType.VERBOSE, + LogType.WARN, + ], + timestamp: true, + }, + ) { + this.#context = context; + } + + public info(message: string, contextMetadata?: ContextMetadata): void { + this.log(LogType.INFO, message, contextMetadata); + } + + public http(message: string, contextMetadata?: ContextMetadata): void { + this.log(LogType.HTTP, message, contextMetadata); + } + + public silly(message: string, contextMetadata?: ContextMetadata): void { + this.log(LogType.SILLY, message, contextMetadata); + } + + public log( + logType: LogType, + message: string, + contextMetadata?: ContextMetadata, + ): void { + if (this._loggerOptions.logTypes.includes(logType)) { + this.printLog(logType, message, { + ...contextMetadata, + context: contextMetadata?.context ?? this.#context, + }); + } + } + + public error(message: string, contextMetadata?: ContextMetadata): void { + this.log(LogType.ERROR, message, contextMetadata); + } + + public warn(message: string, contextMetadata?: ContextMetadata): void { + this.log(LogType.WARN, message, contextMetadata); + } + + public debug(message: string, contextMetadata?: ContextMetadata): void { + this.log(LogType.DEBUG, message, contextMetadata); + } + + public verbose(message: string, contextMetadata?: ContextMetadata): void { + this.log(LogType.VERBOSE, message, contextMetadata); + } + + protected abstract printLog( + logType: LogType, + message: string, + context?: ContextMetadata, + ): void; +} diff --git a/packages/logger/libraries/core/src/logger/model/ContextMetadata.ts b/packages/logger/libraries/core/src/logger/model/ContextMetadata.ts new file mode 100644 index 00000000..9d1fd50e --- /dev/null +++ b/packages/logger/libraries/core/src/logger/model/ContextMetadata.ts @@ -0,0 +1,4 @@ +export interface ContextMetadata { + [key: string]: unknown; + context?: string | undefined; +} diff --git a/packages/logger/libraries/core/src/logger/model/Logger.ts b/packages/logger/libraries/core/src/logger/model/Logger.ts new file mode 100644 index 00000000..b5d5f46a --- /dev/null +++ b/packages/logger/libraries/core/src/logger/model/Logger.ts @@ -0,0 +1,13 @@ +import { LogType } from '../../model/LogType'; +import { ContextMetadata } from './ContextMetadata'; + +export interface Logger { + log(logType: LogType, message: string, context?: ContextMetadata): void; + error(message: string, context?: ContextMetadata): void; + warn(message: string, context?: ContextMetadata): void; + info(message: string, context?: ContextMetadata): void; + http(message: string, context?: ContextMetadata): void; + verbose(message: string, context?: ContextMetadata): void; + debug(message: string, context?: ContextMetadata): void; + silly(message: string, context?: ContextMetadata): void; +} diff --git a/packages/logger/libraries/core/src/model/LogType.ts b/packages/logger/libraries/core/src/model/LogType.ts new file mode 100644 index 00000000..999b1878 --- /dev/null +++ b/packages/logger/libraries/core/src/model/LogType.ts @@ -0,0 +1,9 @@ +export enum LogType { + ERROR = 'error', + WARN = 'warn', + INFO = 'info', + HTTP = 'http', + VERBOSE = 'verbose', + DEBUG = 'debug', + SILLY = 'silly', +} diff --git a/packages/logger/libraries/core/src/model/LoggerOptions.ts b/packages/logger/libraries/core/src/model/LoggerOptions.ts new file mode 100644 index 00000000..fad555de --- /dev/null +++ b/packages/logger/libraries/core/src/model/LoggerOptions.ts @@ -0,0 +1,7 @@ +import { LogType } from './LogType'; + +export interface LoggerOptions { + json: boolean; + logTypes: LogType[]; + timestamp: boolean; +} diff --git a/packages/logger/libraries/core/src/winston/adapter/WinstonLoggerAdapter.ts b/packages/logger/libraries/core/src/winston/adapter/WinstonLoggerAdapter.ts new file mode 100644 index 00000000..13a2f989 --- /dev/null +++ b/packages/logger/libraries/core/src/winston/adapter/WinstonLoggerAdapter.ts @@ -0,0 +1,48 @@ +import { Format, TransformableInfo } from 'logform'; +import { format, Logger } from 'winston'; + +import { LoggerAdapter } from '../../logger/adapter/LoggerAdapter'; +import { ContextMetadata } from '../../logger/model/ContextMetadata'; +import { LoggerOptions } from '../../model/LoggerOptions'; +import { LogType } from '../../model/LogType'; + +export class WinstonLoggerAdapter extends LoggerAdapter { + readonly #logger: Logger; + + constructor(logger: Logger, context?: string, loggerOptions?: LoggerOptions) { + super(context, loggerOptions); + this.#logger = logger; + + const formatList: Format[] = []; + + if (this._loggerOptions.timestamp) { + formatList.push( + format.timestamp({ + format: 'YYYY-MM-DD hh:mm:ss.SSS A', + }), + ); + } + + if (this._loggerOptions.json) { + formatList.push(format.json(), format.prettyPrint()); + } else { + formatList.push( + format.colorize({ all: true }), + format.printf( + (info: TransformableInfo): string => + `[InversifyJS] - ${String(process.pid)}${this._loggerOptions.timestamp ? ` ${info['timestamp'] as string}` : ''} ${info.level}${info['context'] !== undefined ? ` [${info['context'] as string}]` : ''}: ${info.message as string}`, + ), + ); + } + + this.#logger.format = format.combine(this.#logger.format, ...formatList); + } + + protected printLog( + logType: LogType, + message: string, + context?: ContextMetadata, + ): void { + this.#logger.log(logType, message, context); + } +} diff --git a/packages/logger/libraries/core/stryker.config.mjs b/packages/logger/libraries/core/stryker.config.mjs new file mode 100644 index 00000000..c2513393 --- /dev/null +++ b/packages/logger/libraries/core/stryker.config.mjs @@ -0,0 +1,3 @@ +import config from '@inversifyjs/foundation-stryker-config'; + +export default config; diff --git a/packages/logger/libraries/core/tsconfig.cjs.json b/packages/logger/libraries/core/tsconfig.cjs.json new file mode 100644 index 00000000..72630fb8 --- /dev/null +++ b/packages/logger/libraries/core/tsconfig.cjs.json @@ -0,0 +1,10 @@ +{ + "$schema": "http://json.schemastore.org/tsconfig", + "extends": "@inversifyjs/foundation-typescript-config/tsconfig.base.cjs.json", + "compilerOptions": { + "outDir": "./lib/cjs", + "rootDir": "./src", + "tsBuildInfoFile": "tsconfig.cjs.tsbuildinfo" + }, + "include": ["src"] +} diff --git a/packages/logger/libraries/core/tsconfig.esm.json b/packages/logger/libraries/core/tsconfig.esm.json new file mode 100644 index 00000000..e597177d --- /dev/null +++ b/packages/logger/libraries/core/tsconfig.esm.json @@ -0,0 +1,10 @@ +{ + "$schema": "http://json.schemastore.org/tsconfig", + "extends": "@inversifyjs/foundation-typescript-config/tsconfig.base.esm.json", + "compilerOptions": { + "outDir": "./lib/esm", + "rootDir": "./src", + "tsBuildInfoFile": "tsconfig.esm.tsbuildinfo" + }, + "include": ["src"] +} diff --git a/packages/logger/libraries/core/tsconfig.json b/packages/logger/libraries/core/tsconfig.json new file mode 100644 index 00000000..d3d8c589 --- /dev/null +++ b/packages/logger/libraries/core/tsconfig.json @@ -0,0 +1,4 @@ +{ + "$schema": "http://json.schemastore.org/tsconfig", + "extends": "./tsconfig.cjs.json" +} diff --git a/packages/logger/libraries/core/vitest.config.mjs b/packages/logger/libraries/core/vitest.config.mjs new file mode 100644 index 00000000..94381efc --- /dev/null +++ b/packages/logger/libraries/core/vitest.config.mjs @@ -0,0 +1,3 @@ +import { defaultConfig } from '@inversifyjs/foundation-vitest-config'; + +export default defaultConfig; diff --git a/packages/logger/libraries/core/vitest.config.stryker.mjs b/packages/logger/libraries/core/vitest.config.stryker.mjs new file mode 100644 index 00000000..08dbb3c9 --- /dev/null +++ b/packages/logger/libraries/core/vitest.config.stryker.mjs @@ -0,0 +1,3 @@ +import { strykerConfig } from '@inversifyjs/foundation-vitest-config'; + +export default strykerConfig; diff --git a/packages/logger/libraries/core/vitest.workspace.mjs b/packages/logger/libraries/core/vitest.workspace.mjs new file mode 100644 index 00000000..b9b380c1 --- /dev/null +++ b/packages/logger/libraries/core/vitest.workspace.mjs @@ -0,0 +1,3 @@ +import { workspaceConfig } from '@inversifyjs/foundation-vitest-config'; + +export default workspaceConfig; diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 0cd8c7e1..50f10bb1 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -7,6 +7,7 @@ packages: - packages/foundation/tools/* - packages/http/libraries/* - packages/http/tools/* + - packages/logger/libraries/* onlyBuiltDependencies: - '@swc/core' From cc5ab69cc3bd8b8004faca196af31ae4ce6bbec6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roberto=20Pintos=20L=C3=B3pez?= Date: Sun, 9 Mar 2025 14:16:00 +0100 Subject: [PATCH 02/11] docs: update readme --- packages/logger/libraries/core/README.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/logger/libraries/core/README.md b/packages/logger/libraries/core/README.md index 99ad6407..58eb929c 100644 --- a/packages/logger/libraries/core/README.md +++ b/packages/logger/libraries/core/README.md @@ -1,6 +1,6 @@ -[![Test coverage](https://codecov.io/gh/inversify/monorepo/branch/main/graph/badge.svg?flag=%40inversifyjs%2Fhttp-core)](https://codecov.io/gh/inversify/monorepo/branch/main/graph/badge.svg?flag=%40inversifyjs%2Fhttp-core) -[![npm version](https://img.shields.io/github/package-json/v/inversify/monorepo?filename=packages%2Fcontainer%2Flibraries%2Fhttp-core%2Fpackage.json&style=plastic)](https://www.npmjs.com/package/@inversifyjs/http-core) +[![Test coverage](https://codecov.io/gh/inversify/monorepo/branch/main/graph/badge.svg?flag=%40inversifyjs%2Flogger)](https://codecov.io/gh/inversify/monorepo/branch/main/graph/badge.svg?flag=%40inversifyjs%2Flogger) +[![npm version](https://img.shields.io/github/package-json/v/inversify/monorepo?filename=packages%2Flogger%2Flibraries%2Fcore%2Fpackage.json&style=plastic)](https://www.npmjs.com/package/@inversifyjs/logger) -# @inversifyjs/http-core +# @inversifyjs/logger -Inversify monorepo http core modules. +Inversify monorepo logger modules. From db3db9affe3cdbcdecb483bd641969d4e7dc3fba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roberto=20Pintos=20L=C3=B3pez?= Date: Sun, 9 Mar 2025 14:16:42 +0100 Subject: [PATCH 03/11] chore: update winston to be a peer dependency --- packages/logger/libraries/core/package.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/logger/libraries/core/package.json b/packages/logger/libraries/core/package.json index 9334abbf..88fe0cc1 100644 --- a/packages/logger/libraries/core/package.json +++ b/packages/logger/libraries/core/package.json @@ -45,6 +45,9 @@ } }, "name": "@inversifyjs/logger", + "peerDependencies": { + "winston": "^3.17.0" + }, "publishConfig": { "access": "public" }, @@ -67,8 +70,5 @@ "test:uncommitted": "pnpm run test --changed=HEAD", "test:unit": "pnpm run test --project Unit" }, - "version": "1.0.0", - "dependencies": { - "winston": "^3.17.0" - } + "version": "1.0.0" } From 2c7587a2cc7fbfee7448532fda2eb871498ab807 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roberto=20Pintos=20L=C3=B3pez?= Date: Sun, 9 Mar 2025 14:16:59 +0100 Subject: [PATCH 04/11] test: add LoggerAdapter tests --- .../src/logger/adapter/LoggerAdapter.spec.ts | 461 ++++++++++++++++++ 1 file changed, 461 insertions(+) create mode 100644 packages/logger/libraries/core/src/logger/adapter/LoggerAdapter.spec.ts diff --git a/packages/logger/libraries/core/src/logger/adapter/LoggerAdapter.spec.ts b/packages/logger/libraries/core/src/logger/adapter/LoggerAdapter.spec.ts new file mode 100644 index 00000000..f2db7bd0 --- /dev/null +++ b/packages/logger/libraries/core/src/logger/adapter/LoggerAdapter.spec.ts @@ -0,0 +1,461 @@ +import { + afterAll, + beforeAll, + describe, + expect, + it, + Mock, + vitest, +} from 'vitest'; + +import { LogType } from '../../model/LogType'; +import { ContextMetadata } from '../model/ContextMetadata'; +import { LoggerAdapter } from './LoggerAdapter'; + +class LoggerAdapterMock extends LoggerAdapter { + readonly #printLogMock: Mock< + (logType: LogType, message: string, context?: ContextMetadata) => void + >; + + constructor( + printLogMock: Mock< + (logType: LogType, message: string, context?: ContextMetadata) => void + >, + context?: string, + loggerOptions?: { json: boolean; logTypes: LogType[]; timestamp: boolean }, + ) { + super(context, loggerOptions); + + this.#printLogMock = printLogMock; + } + + protected override printLog( + logType: LogType, + message: string, + context?: ContextMetadata, + ): void { + this.#printLogMock(logType, message, context); + } +} + +describe(LoggerAdapter.name, () => { + let printLogMock: Mock< + (logType: LogType, message: string, context?: ContextMetadata) => void + >; + let loggerAdapter: LoggerAdapterMock; + + beforeAll(() => { + printLogMock = vitest.fn(); + loggerAdapter = new LoggerAdapterMock(printLogMock); + }); + + describe('.info', () => { + let messageFixture: string; + let contextMetadataFixture: ContextMetadata; + + beforeAll(() => { + messageFixture = 'test message'; + contextMetadataFixture = { context: 'test context' }; + }); + + describe('when called', () => { + let result: unknown; + + beforeAll(() => { + result = loggerAdapter.info(messageFixture, contextMetadataFixture); + }); + + afterAll(() => { + vitest.clearAllMocks(); + }); + + it('should call printLog with LogType.INFO', () => { + expect(printLogMock).toHaveBeenCalledTimes(1); + expect(printLogMock).toHaveBeenCalledWith( + LogType.INFO, + messageFixture, + contextMetadataFixture, + ); + }); + + it('should return undefined', () => { + expect(result).toBeUndefined(); + }); + }); + }); + + describe('.http', () => { + let messageFixture: string; + let contextMetadataFixture: ContextMetadata; + + beforeAll(() => { + messageFixture = 'http test message'; + contextMetadataFixture = { context: 'http test context' }; + }); + + describe('when called', () => { + let result: unknown; + + beforeAll(() => { + result = loggerAdapter.http(messageFixture, contextMetadataFixture); + }); + + afterAll(() => { + vitest.clearAllMocks(); + }); + + it('should call printLog with LogType.HTTP', () => { + expect(printLogMock).toHaveBeenCalledTimes(1); + expect(printLogMock).toHaveBeenCalledWith( + LogType.HTTP, + messageFixture, + contextMetadataFixture, + ); + }); + + it('should return undefined', () => { + expect(result).toBeUndefined(); + }); + }); + }); + + describe('.silly', () => { + let messageFixture: string; + let contextMetadataFixture: ContextMetadata; + + beforeAll(() => { + messageFixture = 'silly test message'; + contextMetadataFixture = { context: 'silly test context' }; + }); + + describe('when called', () => { + let result: unknown; + + beforeAll(() => { + result = loggerAdapter.silly(messageFixture, contextMetadataFixture); + }); + + afterAll(() => { + vitest.clearAllMocks(); + }); + + it('should call printLog with LogType.SILLY', () => { + expect(printLogMock).toHaveBeenCalledTimes(1); + expect(printLogMock).toHaveBeenCalledWith( + LogType.SILLY, + messageFixture, + contextMetadataFixture, + ); + }); + + it('should return undefined', () => { + expect(result).toBeUndefined(); + }); + }); + }); + + describe('.error', () => { + let messageFixture: string; + let contextMetadataFixture: ContextMetadata; + + beforeAll(() => { + messageFixture = 'error test message'; + contextMetadataFixture = { context: 'error test context' }; + }); + + describe('when called', () => { + let result: unknown; + + beforeAll(() => { + result = loggerAdapter.error(messageFixture, contextMetadataFixture); + }); + + afterAll(() => { + vitest.clearAllMocks(); + }); + + it('should call printLog with LogType.ERROR', () => { + expect(printLogMock).toHaveBeenCalledTimes(1); + expect(printLogMock).toHaveBeenCalledWith( + LogType.ERROR, + messageFixture, + contextMetadataFixture, + ); + }); + + it('should return undefined', () => { + expect(result).toBeUndefined(); + }); + }); + }); + + describe('.warn', () => { + let messageFixture: string; + let contextMetadataFixture: ContextMetadata; + + beforeAll(() => { + messageFixture = 'warn test message'; + contextMetadataFixture = { context: 'warn test context' }; + }); + + describe('when called', () => { + let result: unknown; + + beforeAll(() => { + result = loggerAdapter.warn(messageFixture, contextMetadataFixture); + }); + + afterAll(() => { + vitest.clearAllMocks(); + }); + + it('should call printLog with LogType.WARN', () => { + expect(printLogMock).toHaveBeenCalledTimes(1); + expect(printLogMock).toHaveBeenCalledWith( + LogType.WARN, + messageFixture, + contextMetadataFixture, + ); + }); + + it('should return undefined', () => { + expect(result).toBeUndefined(); + }); + }); + }); + + describe('.debug', () => { + let messageFixture: string; + let contextMetadataFixture: ContextMetadata; + + beforeAll(() => { + messageFixture = 'debug test message'; + contextMetadataFixture = { context: 'debug test context' }; + }); + + describe('when called', () => { + let result: unknown; + + beforeAll(() => { + result = loggerAdapter.debug(messageFixture, contextMetadataFixture); + }); + + afterAll(() => { + vitest.clearAllMocks(); + }); + + it('should call printLog with LogType.DEBUG', () => { + expect(printLogMock).toHaveBeenCalledTimes(1); + expect(printLogMock).toHaveBeenCalledWith( + LogType.DEBUG, + messageFixture, + contextMetadataFixture, + ); + }); + + it('should return undefined', () => { + expect(result).toBeUndefined(); + }); + }); + }); + + describe('.verbose', () => { + let messageFixture: string; + let contextMetadataFixture: ContextMetadata; + + beforeAll(() => { + messageFixture = 'verbose test message'; + contextMetadataFixture = { context: 'verbose test context' }; + }); + + describe('when called', () => { + let result: unknown; + + beforeAll(() => { + result = loggerAdapter.verbose(messageFixture, contextMetadataFixture); + }); + + afterAll(() => { + vitest.clearAllMocks(); + }); + + it('should call printLog with LogType.VERBOSE', () => { + expect(printLogMock).toHaveBeenCalledTimes(1); + expect(printLogMock).toHaveBeenCalledWith( + LogType.VERBOSE, + messageFixture, + contextMetadataFixture, + ); + }); + + it('should return undefined', () => { + expect(result).toBeUndefined(); + }); + }); + }); + + describe('.log', () => { + let messageFixture: string; + let contextMetadataFixture: ContextMetadata | undefined; + let logTypeFixture: LogType; + + beforeAll(() => { + messageFixture = 'log test message'; + contextMetadataFixture = { context: 'log test context' }; + logTypeFixture = LogType.INFO; + }); + + describe('when called', () => { + let result: unknown; + + beforeAll(() => { + result = loggerAdapter.log( + logTypeFixture, + messageFixture, + contextMetadataFixture, + ); + }); + + afterAll(() => { + vitest.clearAllMocks(); + }); + + it('should call printLog with the provided parameters', () => { + expect(printLogMock).toHaveBeenCalledTimes(1); + expect(printLogMock).toHaveBeenCalledWith( + logTypeFixture, + messageFixture, + contextMetadataFixture, + ); + }); + + it('should return undefined', () => { + expect(result).toBeUndefined(); + }); + }); + + describe('having a log type not included in logTypes', () => { + let restrictedLoggerAdapter: LoggerAdapterMock; + + beforeAll(() => { + restrictedLoggerAdapter = new LoggerAdapterMock( + printLogMock, + undefined, + { + json: true, + logTypes: [LogType.ERROR], // Only ERROR logs allowed + timestamp: true, + }, + ); + }); + + describe('when called', () => { + let result: unknown; + + beforeAll(() => { + result = restrictedLoggerAdapter.log( + LogType.INFO, + messageFixture, + contextMetadataFixture, + ); + }); + + afterAll(() => { + vitest.clearAllMocks(); + }); + + it('should not call printLog', () => { + expect(printLogMock).not.toHaveBeenCalled(); + }); + + it('should return undefined', () => { + expect(result).toBeUndefined(); + }); + }); + }); + + describe('having a LoggerAdapter with context', () => { + let contextFixture: string; + let loggerAdapterWithContext: LoggerAdapterMock; + + beforeAll(() => { + contextFixture = 'constructor context'; + loggerAdapterWithContext = new LoggerAdapterMock( + printLogMock, + contextFixture, + ); + }); + + describe('when called', () => { + let result: unknown; + + beforeAll(() => { + result = loggerAdapterWithContext.log(logTypeFixture, messageFixture); + }); + + afterAll(() => { + vitest.clearAllMocks(); + }); + + it('should call printLog with context from constructor', () => { + expect(printLogMock).toHaveBeenCalledTimes(1); + expect(printLogMock).toHaveBeenCalledWith( + logTypeFixture, + messageFixture, + { context: contextFixture }, + ); + }); + + it('should return undefined', () => { + expect(result).toBeUndefined(); + }); + }); + }); + + describe('having a LoggerAdapter with context and explicit context', () => { + let constructorContextFixture: string; + let explicitContextFixture: string; + let loggerAdapterWithContext: LoggerAdapterMock; + + beforeAll(() => { + constructorContextFixture = 'constructor context'; + explicitContextFixture = 'explicit context'; + loggerAdapterWithContext = new LoggerAdapterMock( + printLogMock, + constructorContextFixture, + ); + }); + + describe('when called', () => { + let result: unknown; + + beforeAll(() => { + result = loggerAdapterWithContext.log( + logTypeFixture, + messageFixture, + { + context: explicitContextFixture, + }, + ); + }); + + afterAll(() => { + vitest.clearAllMocks(); + }); + + it('should call printLog with the explicit context', () => { + expect(printLogMock).toHaveBeenCalledTimes(1); + expect(printLogMock).toHaveBeenCalledWith( + logTypeFixture, + messageFixture, + { context: explicitContextFixture }, + ); + }); + + it('should return undefined', () => { + expect(result).toBeUndefined(); + }); + }); + }); + }); +}); From 436dcd8f9ebac37fae5156eeaa96543ee8883adc Mon Sep 17 00:00:00 2001 From: notaphplover Date: Sun, 9 Mar 2025 18:30:03 +0100 Subject: [PATCH 05/11] feat(logger): rename LogType to LogLevel --- packages/logger/libraries/core/src/index.ts | 4 +-- .../src/logger/adapter/LoggerAdapter.spec.ts | 34 +++++++++---------- .../core/src/logger/adapter/LoggerAdapter.ts | 34 +++++++++---------- .../libraries/core/src/logger/model/Logger.ts | 4 +-- .../src/model/{LogType.ts => LogLevel.ts} | 2 +- .../libraries/core/src/model/LoggerOptions.ts | 4 +-- .../winston/adapter/WinstonLoggerAdapter.ts | 6 ++-- 7 files changed, 44 insertions(+), 44 deletions(-) rename packages/logger/libraries/core/src/model/{LogType.ts => LogLevel.ts} (85%) diff --git a/packages/logger/libraries/core/src/index.ts b/packages/logger/libraries/core/src/index.ts index f250aeab..559090f5 100644 --- a/packages/logger/libraries/core/src/index.ts +++ b/packages/logger/libraries/core/src/index.ts @@ -2,6 +2,6 @@ import { ConsoleLogger } from './logger/ConsoleLogger'; import { FileLogger } from './logger/FileLogger'; import { Logger } from './logger/model/Logger'; import { LoggerOptions } from './model/LoggerOptions'; -import { LogType } from './model/LogType'; +import { LogLevel } from './model/LogLevel'; -export { ConsoleLogger, FileLogger, Logger, LoggerOptions, LogType }; +export { ConsoleLogger, FileLogger, Logger, LoggerOptions, LogLevel }; diff --git a/packages/logger/libraries/core/src/logger/adapter/LoggerAdapter.spec.ts b/packages/logger/libraries/core/src/logger/adapter/LoggerAdapter.spec.ts index f2db7bd0..bbd0011d 100644 --- a/packages/logger/libraries/core/src/logger/adapter/LoggerAdapter.spec.ts +++ b/packages/logger/libraries/core/src/logger/adapter/LoggerAdapter.spec.ts @@ -8,21 +8,21 @@ import { vitest, } from 'vitest'; -import { LogType } from '../../model/LogType'; +import { LogLevel } from '../../model/LogLevel'; import { ContextMetadata } from '../model/ContextMetadata'; import { LoggerAdapter } from './LoggerAdapter'; class LoggerAdapterMock extends LoggerAdapter { readonly #printLogMock: Mock< - (logType: LogType, message: string, context?: ContextMetadata) => void + (logType: LogLevel, message: string, context?: ContextMetadata) => void >; constructor( printLogMock: Mock< - (logType: LogType, message: string, context?: ContextMetadata) => void + (logType: LogLevel, message: string, context?: ContextMetadata) => void >, context?: string, - loggerOptions?: { json: boolean; logTypes: LogType[]; timestamp: boolean }, + loggerOptions?: { json: boolean; logTypes: LogLevel[]; timestamp: boolean }, ) { super(context, loggerOptions); @@ -30,7 +30,7 @@ class LoggerAdapterMock extends LoggerAdapter { } protected override printLog( - logType: LogType, + logType: LogLevel, message: string, context?: ContextMetadata, ): void { @@ -40,7 +40,7 @@ class LoggerAdapterMock extends LoggerAdapter { describe(LoggerAdapter.name, () => { let printLogMock: Mock< - (logType: LogType, message: string, context?: ContextMetadata) => void + (logType: LogLevel, message: string, context?: ContextMetadata) => void >; let loggerAdapter: LoggerAdapterMock; @@ -72,7 +72,7 @@ describe(LoggerAdapter.name, () => { it('should call printLog with LogType.INFO', () => { expect(printLogMock).toHaveBeenCalledTimes(1); expect(printLogMock).toHaveBeenCalledWith( - LogType.INFO, + LogLevel.INFO, messageFixture, contextMetadataFixture, ); @@ -107,7 +107,7 @@ describe(LoggerAdapter.name, () => { it('should call printLog with LogType.HTTP', () => { expect(printLogMock).toHaveBeenCalledTimes(1); expect(printLogMock).toHaveBeenCalledWith( - LogType.HTTP, + LogLevel.HTTP, messageFixture, contextMetadataFixture, ); @@ -142,7 +142,7 @@ describe(LoggerAdapter.name, () => { it('should call printLog with LogType.SILLY', () => { expect(printLogMock).toHaveBeenCalledTimes(1); expect(printLogMock).toHaveBeenCalledWith( - LogType.SILLY, + LogLevel.SILLY, messageFixture, contextMetadataFixture, ); @@ -177,7 +177,7 @@ describe(LoggerAdapter.name, () => { it('should call printLog with LogType.ERROR', () => { expect(printLogMock).toHaveBeenCalledTimes(1); expect(printLogMock).toHaveBeenCalledWith( - LogType.ERROR, + LogLevel.ERROR, messageFixture, contextMetadataFixture, ); @@ -212,7 +212,7 @@ describe(LoggerAdapter.name, () => { it('should call printLog with LogType.WARN', () => { expect(printLogMock).toHaveBeenCalledTimes(1); expect(printLogMock).toHaveBeenCalledWith( - LogType.WARN, + LogLevel.WARN, messageFixture, contextMetadataFixture, ); @@ -247,7 +247,7 @@ describe(LoggerAdapter.name, () => { it('should call printLog with LogType.DEBUG', () => { expect(printLogMock).toHaveBeenCalledTimes(1); expect(printLogMock).toHaveBeenCalledWith( - LogType.DEBUG, + LogLevel.DEBUG, messageFixture, contextMetadataFixture, ); @@ -282,7 +282,7 @@ describe(LoggerAdapter.name, () => { it('should call printLog with LogType.VERBOSE', () => { expect(printLogMock).toHaveBeenCalledTimes(1); expect(printLogMock).toHaveBeenCalledWith( - LogType.VERBOSE, + LogLevel.VERBOSE, messageFixture, contextMetadataFixture, ); @@ -297,12 +297,12 @@ describe(LoggerAdapter.name, () => { describe('.log', () => { let messageFixture: string; let contextMetadataFixture: ContextMetadata | undefined; - let logTypeFixture: LogType; + let logTypeFixture: LogLevel; beforeAll(() => { messageFixture = 'log test message'; contextMetadataFixture = { context: 'log test context' }; - logTypeFixture = LogType.INFO; + logTypeFixture = LogLevel.INFO; }); describe('when called', () => { @@ -343,7 +343,7 @@ describe(LoggerAdapter.name, () => { undefined, { json: true, - logTypes: [LogType.ERROR], // Only ERROR logs allowed + logTypes: [LogLevel.ERROR], // Only ERROR logs allowed timestamp: true, }, ); @@ -354,7 +354,7 @@ describe(LoggerAdapter.name, () => { beforeAll(() => { result = restrictedLoggerAdapter.log( - LogType.INFO, + LogLevel.INFO, messageFixture, contextMetadataFixture, ); diff --git a/packages/logger/libraries/core/src/logger/adapter/LoggerAdapter.ts b/packages/logger/libraries/core/src/logger/adapter/LoggerAdapter.ts index 89212c5b..b206dc1a 100644 --- a/packages/logger/libraries/core/src/logger/adapter/LoggerAdapter.ts +++ b/packages/logger/libraries/core/src/logger/adapter/LoggerAdapter.ts @@ -1,5 +1,5 @@ import { LoggerOptions } from '../../model/LoggerOptions'; -import { LogType } from '../../model/LogType'; +import { LogLevel } from '../../model/LogLevel'; import { ContextMetadata } from '../model/ContextMetadata'; import { Logger } from '../model/Logger'; @@ -11,13 +11,13 @@ export abstract class LoggerAdapter implements Logger { protected readonly _loggerOptions: LoggerOptions = { json: true, logTypes: [ - LogType.DEBUG, - LogType.ERROR, - LogType.HTTP, - LogType.INFO, - LogType.SILLY, - LogType.VERBOSE, - LogType.WARN, + LogLevel.DEBUG, + LogLevel.ERROR, + LogLevel.HTTP, + LogLevel.INFO, + LogLevel.SILLY, + LogLevel.VERBOSE, + LogLevel.WARN, ], timestamp: true, }, @@ -26,19 +26,19 @@ export abstract class LoggerAdapter implements Logger { } public info(message: string, contextMetadata?: ContextMetadata): void { - this.log(LogType.INFO, message, contextMetadata); + this.log(LogLevel.INFO, message, contextMetadata); } public http(message: string, contextMetadata?: ContextMetadata): void { - this.log(LogType.HTTP, message, contextMetadata); + this.log(LogLevel.HTTP, message, contextMetadata); } public silly(message: string, contextMetadata?: ContextMetadata): void { - this.log(LogType.SILLY, message, contextMetadata); + this.log(LogLevel.SILLY, message, contextMetadata); } public log( - logType: LogType, + logType: LogLevel, message: string, contextMetadata?: ContextMetadata, ): void { @@ -51,23 +51,23 @@ export abstract class LoggerAdapter implements Logger { } public error(message: string, contextMetadata?: ContextMetadata): void { - this.log(LogType.ERROR, message, contextMetadata); + this.log(LogLevel.ERROR, message, contextMetadata); } public warn(message: string, contextMetadata?: ContextMetadata): void { - this.log(LogType.WARN, message, contextMetadata); + this.log(LogLevel.WARN, message, contextMetadata); } public debug(message: string, contextMetadata?: ContextMetadata): void { - this.log(LogType.DEBUG, message, contextMetadata); + this.log(LogLevel.DEBUG, message, contextMetadata); } public verbose(message: string, contextMetadata?: ContextMetadata): void { - this.log(LogType.VERBOSE, message, contextMetadata); + this.log(LogLevel.VERBOSE, message, contextMetadata); } protected abstract printLog( - logType: LogType, + logType: LogLevel, message: string, context?: ContextMetadata, ): void; diff --git a/packages/logger/libraries/core/src/logger/model/Logger.ts b/packages/logger/libraries/core/src/logger/model/Logger.ts index b5d5f46a..b4534e59 100644 --- a/packages/logger/libraries/core/src/logger/model/Logger.ts +++ b/packages/logger/libraries/core/src/logger/model/Logger.ts @@ -1,8 +1,8 @@ -import { LogType } from '../../model/LogType'; +import { LogLevel } from '../../model/LogLevel'; import { ContextMetadata } from './ContextMetadata'; export interface Logger { - log(logType: LogType, message: string, context?: ContextMetadata): void; + log(logType: LogLevel, message: string, context?: ContextMetadata): void; error(message: string, context?: ContextMetadata): void; warn(message: string, context?: ContextMetadata): void; info(message: string, context?: ContextMetadata): void; diff --git a/packages/logger/libraries/core/src/model/LogType.ts b/packages/logger/libraries/core/src/model/LogLevel.ts similarity index 85% rename from packages/logger/libraries/core/src/model/LogType.ts rename to packages/logger/libraries/core/src/model/LogLevel.ts index 999b1878..91b3c298 100644 --- a/packages/logger/libraries/core/src/model/LogType.ts +++ b/packages/logger/libraries/core/src/model/LogLevel.ts @@ -1,4 +1,4 @@ -export enum LogType { +export enum LogLevel { ERROR = 'error', WARN = 'warn', INFO = 'info', diff --git a/packages/logger/libraries/core/src/model/LoggerOptions.ts b/packages/logger/libraries/core/src/model/LoggerOptions.ts index fad555de..9502102f 100644 --- a/packages/logger/libraries/core/src/model/LoggerOptions.ts +++ b/packages/logger/libraries/core/src/model/LoggerOptions.ts @@ -1,7 +1,7 @@ -import { LogType } from './LogType'; +import { LogLevel } from './LogLevel'; export interface LoggerOptions { json: boolean; - logTypes: LogType[]; + logTypes: LogLevel[]; timestamp: boolean; } diff --git a/packages/logger/libraries/core/src/winston/adapter/WinstonLoggerAdapter.ts b/packages/logger/libraries/core/src/winston/adapter/WinstonLoggerAdapter.ts index 13a2f989..28202dce 100644 --- a/packages/logger/libraries/core/src/winston/adapter/WinstonLoggerAdapter.ts +++ b/packages/logger/libraries/core/src/winston/adapter/WinstonLoggerAdapter.ts @@ -4,7 +4,7 @@ import { format, Logger } from 'winston'; import { LoggerAdapter } from '../../logger/adapter/LoggerAdapter'; import { ContextMetadata } from '../../logger/model/ContextMetadata'; import { LoggerOptions } from '../../model/LoggerOptions'; -import { LogType } from '../../model/LogType'; +import { LogLevel } from '../../model/LogLevel'; export class WinstonLoggerAdapter extends LoggerAdapter { readonly #logger: Logger; @@ -38,8 +38,8 @@ export class WinstonLoggerAdapter extends LoggerAdapter { this.#logger.format = format.combine(this.#logger.format, ...formatList); } - protected printLog( - logType: LogType, + protected override printLog( + logType: LogLevel, message: string, context?: ContextMetadata, ): void { From e76026c92732c9aef9b996726b3772a8e9561458 Mon Sep 17 00:00:00 2001 From: notaphplover Date: Sun, 9 Mar 2025 18:31:06 +0100 Subject: [PATCH 06/11] test: add integration test --- .../adapter/WinstonLoggerAdapter.int.spec.ts | 69 +++++++++++++++++++ 1 file changed, 69 insertions(+) create mode 100644 packages/logger/libraries/core/src/winston/adapter/WinstonLoggerAdapter.int.spec.ts diff --git a/packages/logger/libraries/core/src/winston/adapter/WinstonLoggerAdapter.int.spec.ts b/packages/logger/libraries/core/src/winston/adapter/WinstonLoggerAdapter.int.spec.ts new file mode 100644 index 00000000..08308a3b --- /dev/null +++ b/packages/logger/libraries/core/src/winston/adapter/WinstonLoggerAdapter.int.spec.ts @@ -0,0 +1,69 @@ +import { afterAll, beforeAll, describe, expect, it } from 'vitest'; + +import stream from 'node:stream'; + +import { createLogger, transports } from 'winston'; + +import { LogLevel } from '../../model/LogLevel'; +import { WinstonLoggerAdapter } from './WinstonLoggerAdapter'; + +class TestStream extends stream.Writable { + public chunks: unknown[]; + + constructor() { + super({ objectMode: true }); + + this.chunks = []; + } + + public override _write( + chunk: unknown, + _encoding: BufferEncoding, + callback: (error?: Error | null) => void, + ) { + this.chunks.push(chunk); + + callback(); + } +} + +describe(WinstonLoggerAdapter.name, () => { + let stream: TestStream; + let winstonLoggerAdapter: WinstonLoggerAdapter; + + beforeAll(() => { + stream = new TestStream(); + + winstonLoggerAdapter = new WinstonLoggerAdapter( + createLogger({ + transports: [new transports.Stream({ stream })], + }), + ); + }); + + describe('.log', () => { + describe('when called', () => { + beforeAll(() => { + winstonLoggerAdapter.log(LogLevel.INFO, 'test', { + context: 'context-test', + }); + }); + + afterAll(() => { + stream.chunks = []; + }); + + it('should write log to stream', () => { + const expectedChunks: unknown[] = [ + expect.objectContaining({ + context: 'context-test', + level: 'info', + message: 'test', + }), + ]; + + expect(stream.chunks).toStrictEqual(expectedChunks); + }); + }); + }); +}); From 07dee4b93531156441f8321d9738700e01a327ad Mon Sep 17 00:00:00 2001 From: notaphplover Date: Sun, 9 Mar 2025 18:33:29 +0100 Subject: [PATCH 07/11] docs: add changesets --- .changeset/itchy-rules-hunt.md | 5 +++++ .changeset/long-insects-jam.md | 5 +++++ .changeset/shiny-rooms-turn.md | 5 +++++ .changeset/silly-wombats-fetch.md | 5 +++++ .changeset/thin-feet-bathe.md | 5 +++++ 5 files changed, 25 insertions(+) create mode 100644 .changeset/itchy-rules-hunt.md create mode 100644 .changeset/long-insects-jam.md create mode 100644 .changeset/shiny-rooms-turn.md create mode 100644 .changeset/silly-wombats-fetch.md create mode 100644 .changeset/thin-feet-bathe.md diff --git a/.changeset/itchy-rules-hunt.md b/.changeset/itchy-rules-hunt.md new file mode 100644 index 00000000..8f4a788f --- /dev/null +++ b/.changeset/itchy-rules-hunt.md @@ -0,0 +1,5 @@ +--- +"@inversifyjs/logger": minor +--- + +Added `LogLevel` diff --git a/.changeset/long-insects-jam.md b/.changeset/long-insects-jam.md new file mode 100644 index 00000000..e75c4956 --- /dev/null +++ b/.changeset/long-insects-jam.md @@ -0,0 +1,5 @@ +--- +"@inversifyjs/logger": minor +--- + +Added `Logger`. diff --git a/.changeset/shiny-rooms-turn.md b/.changeset/shiny-rooms-turn.md new file mode 100644 index 00000000..fcdeded7 --- /dev/null +++ b/.changeset/shiny-rooms-turn.md @@ -0,0 +1,5 @@ +--- +"@inversifyjs/logger": minor +--- + +Added `ConsoleLogger` diff --git a/.changeset/silly-wombats-fetch.md b/.changeset/silly-wombats-fetch.md new file mode 100644 index 00000000..3989f755 --- /dev/null +++ b/.changeset/silly-wombats-fetch.md @@ -0,0 +1,5 @@ +--- +"@inversifyjs/logger": minor +--- + +Added `LoggerOptions` diff --git a/.changeset/thin-feet-bathe.md b/.changeset/thin-feet-bathe.md new file mode 100644 index 00000000..c7ecf0c6 --- /dev/null +++ b/.changeset/thin-feet-bathe.md @@ -0,0 +1,5 @@ +--- +"@inversifyjs/logger": minor +--- + +Added `FileLogger`. From f4962408e7eab2bc396473850c3843f9a25fb533 Mon Sep 17 00:00:00 2001 From: notaphplover Date: Sun, 9 Mar 2025 19:56:23 +0100 Subject: [PATCH 08/11] feat(@inversifyjs/logger): update LoggerOptions Update options with optional properties. Update WinstonLoggerAdapter to use the new options. Add test cases --- .../core/src/logger/adapter/LoggerAdapter.ts | 39 ++++---- .../libraries/core/src/model/LoggerOptions.ts | 6 +- .../adapter/WinstonLoggerAdapter.int.spec.ts | 94 ++++++++++++++----- .../winston/adapter/WinstonLoggerAdapter.ts | 12 ++- 4 files changed, 103 insertions(+), 48 deletions(-) diff --git a/packages/logger/libraries/core/src/logger/adapter/LoggerAdapter.ts b/packages/logger/libraries/core/src/logger/adapter/LoggerAdapter.ts index b206dc1a..59cc19f5 100644 --- a/packages/logger/libraries/core/src/logger/adapter/LoggerAdapter.ts +++ b/packages/logger/libraries/core/src/logger/adapter/LoggerAdapter.ts @@ -3,25 +3,14 @@ import { LogLevel } from '../../model/LogLevel'; import { ContextMetadata } from '../model/ContextMetadata'; import { Logger } from '../model/Logger'; +type InternalLoggerOptions = Required; + export abstract class LoggerAdapter implements Logger { + protected readonly _loggerOptions: InternalLoggerOptions; readonly #context: string | undefined; - constructor( - context?: string, - protected readonly _loggerOptions: LoggerOptions = { - json: true, - logTypes: [ - LogLevel.DEBUG, - LogLevel.ERROR, - LogLevel.HTTP, - LogLevel.INFO, - LogLevel.SILLY, - LogLevel.VERBOSE, - LogLevel.WARN, - ], - timestamp: true, - }, - ) { + constructor(context?: string, loggerOptions?: LoggerOptions) { + this._loggerOptions = this.#parseLoggingOptions(loggerOptions); this.#context = context; } @@ -66,6 +55,24 @@ export abstract class LoggerAdapter implements Logger { this.log(LogLevel.VERBOSE, message, contextMetadata); } + #parseLoggingOptions( + loggerOptions: LoggerOptions | undefined, + ): InternalLoggerOptions { + return { + json: loggerOptions?.json ?? false, + logTypes: loggerOptions?.logTypes ?? [ + LogLevel.DEBUG, + LogLevel.ERROR, + LogLevel.HTTP, + LogLevel.INFO, + LogLevel.SILLY, + LogLevel.VERBOSE, + LogLevel.WARN, + ], + timestamp: loggerOptions?.timestamp ?? true, + }; + } + protected abstract printLog( logType: LogLevel, message: string, diff --git a/packages/logger/libraries/core/src/model/LoggerOptions.ts b/packages/logger/libraries/core/src/model/LoggerOptions.ts index 9502102f..fe5d6fbd 100644 --- a/packages/logger/libraries/core/src/model/LoggerOptions.ts +++ b/packages/logger/libraries/core/src/model/LoggerOptions.ts @@ -1,7 +1,7 @@ import { LogLevel } from './LogLevel'; export interface LoggerOptions { - json: boolean; - logTypes: LogLevel[]; - timestamp: boolean; + json?: boolean; + logTypes?: LogLevel[]; + timestamp?: boolean; } diff --git a/packages/logger/libraries/core/src/winston/adapter/WinstonLoggerAdapter.int.spec.ts b/packages/logger/libraries/core/src/winston/adapter/WinstonLoggerAdapter.int.spec.ts index 08308a3b..5fc690ff 100644 --- a/packages/logger/libraries/core/src/winston/adapter/WinstonLoggerAdapter.int.spec.ts +++ b/packages/logger/libraries/core/src/winston/adapter/WinstonLoggerAdapter.int.spec.ts @@ -1,4 +1,4 @@ -import { afterAll, beforeAll, describe, expect, it } from 'vitest'; +import { beforeAll, describe, expect, it } from 'vitest'; import stream from 'node:stream'; @@ -28,41 +28,83 @@ class TestStream extends stream.Writable { } describe(WinstonLoggerAdapter.name, () => { - let stream: TestStream; - let winstonLoggerAdapter: WinstonLoggerAdapter; + describe('.log', () => { + describe('having a WinstonLoggerAdapter instance with timestamp flag', () => { + let stream: TestStream; + let winstonLoggerAdapter: WinstonLoggerAdapter; - beforeAll(() => { - stream = new TestStream(); + beforeAll(() => { + stream = new TestStream(); - winstonLoggerAdapter = new WinstonLoggerAdapter( - createLogger({ - transports: [new transports.Stream({ stream })], - }), - ); - }); + winstonLoggerAdapter = new WinstonLoggerAdapter( + createLogger({ + transports: [new transports.Stream({ stream })], + }), + 'test', + { + timestamp: true, + }, + ); + }); - describe('.log', () => { - describe('when called', () => { - beforeAll(() => { - winstonLoggerAdapter.log(LogLevel.INFO, 'test', { - context: 'context-test', + describe('when called', () => { + beforeAll(() => { + winstonLoggerAdapter.log(LogLevel.INFO, 'test-message', { + context: 'context-test', + }); + }); + + it('should write log to stream', () => { + const expectedChunks: unknown[] = [ + expect.objectContaining({ + context: 'context-test', + level: `\x1b[32m${LogLevel.INFO}\x1b[39m`, + message: '\x1b[32mtest-message\x1b[39m', + }), + ]; + + expect(stream.chunks).toStrictEqual(expectedChunks); }); }); + }); + + describe('having a WinstonLoggerAdapter instance with both json and timestamp flags', () => { + let stream: TestStream; + let winstonLoggerAdapter: WinstonLoggerAdapter; + + beforeAll(() => { + stream = new TestStream(); - afterAll(() => { - stream.chunks = []; + winstonLoggerAdapter = new WinstonLoggerAdapter( + createLogger({ + transports: [new transports.Stream({ stream })], + }), + 'test', + { + json: true, + timestamp: true, + }, + ); }); - it('should write log to stream', () => { - const expectedChunks: unknown[] = [ - expect.objectContaining({ + describe('when called', () => { + beforeAll(() => { + winstonLoggerAdapter.log(LogLevel.INFO, 'test-message', { context: 'context-test', - level: 'info', - message: 'test', - }), - ]; + }); + }); - expect(stream.chunks).toStrictEqual(expectedChunks); + it('should write log to stream', () => { + const expectedChunks: unknown[] = [ + expect.objectContaining({ + context: 'context-test', + level: LogLevel.INFO, + message: 'test-message', + }), + ]; + + expect(stream.chunks).toStrictEqual(expectedChunks); + }); }); }); }); diff --git a/packages/logger/libraries/core/src/winston/adapter/WinstonLoggerAdapter.ts b/packages/logger/libraries/core/src/winston/adapter/WinstonLoggerAdapter.ts index 28202dce..bb4897d0 100644 --- a/packages/logger/libraries/core/src/winston/adapter/WinstonLoggerAdapter.ts +++ b/packages/logger/libraries/core/src/winston/adapter/WinstonLoggerAdapter.ts @@ -28,9 +28,8 @@ export class WinstonLoggerAdapter extends LoggerAdapter { } else { formatList.push( format.colorize({ all: true }), - format.printf( - (info: TransformableInfo): string => - `[InversifyJS] - ${String(process.pid)}${this._loggerOptions.timestamp ? ` ${info['timestamp'] as string}` : ''} ${info.level}${info['context'] !== undefined ? ` [${info['context'] as string}]` : ''}: ${info.message as string}`, + format.printf((info: TransformableInfo): string => + this.#stringifyInfo(info), ), ); } @@ -45,4 +44,11 @@ export class WinstonLoggerAdapter extends LoggerAdapter { ): void { this.#logger.log(logType, message, context); } + + #stringifyInfo(info: TransformableInfo): string { + const prefix: string = + (info['context'] as string | undefined) ?? 'InversifyJS'; + + return `[${prefix}] - ${String(process.pid)}${this._loggerOptions.timestamp ? ` ${info['timestamp'] as string}` : ''} ${info.level}: ${info.message as string}`; + } } From 6e2464d3a4b33b2d24e5bd70ee561fa59eb93441 Mon Sep 17 00:00:00 2001 From: notaphplover Date: Sun, 9 Mar 2025 20:00:00 +0100 Subject: [PATCH 09/11] chore: update knip config with logger libraries --- knip.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/knip.ts b/knip.ts index 962da2d8..0eb15cc9 100644 --- a/knip.ts +++ b/knip.ts @@ -75,5 +75,6 @@ export default { project: defaultWorkspaceProjectConfig.project, }, "packages/http/libraries/*": defaultWorkspaceProjectConfig, + "packages/logger/libraries/*": defaultWorkspaceProjectConfig, }, } satisfies KnipConfig; From acdfbf7f0303bf87ce4deab02d4710f49134ec8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roberto=20Pintos=20L=C3=B3pez?= Date: Mon, 10 Mar 2025 00:31:26 +0100 Subject: [PATCH 10/11] refactor(logger): update WinstonLoggerAdapter extract private methods --- .../winston/adapter/WinstonLoggerAdapter.ts | 25 +++++++++++++------ 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/packages/logger/libraries/core/src/winston/adapter/WinstonLoggerAdapter.ts b/packages/logger/libraries/core/src/winston/adapter/WinstonLoggerAdapter.ts index bb4897d0..65802416 100644 --- a/packages/logger/libraries/core/src/winston/adapter/WinstonLoggerAdapter.ts +++ b/packages/logger/libraries/core/src/winston/adapter/WinstonLoggerAdapter.ts @@ -13,6 +13,18 @@ export class WinstonLoggerAdapter extends LoggerAdapter { super(context, loggerOptions); this.#logger = logger; + this.#formatLogger(); + } + + protected override printLog( + logType: LogLevel, + message: string, + context?: ContextMetadata, + ): void { + this.#logger.log(logType, message, context); + } + + #buildOptionsFormatList(): Format[] { const formatList: Format[] = []; if (this._loggerOptions.timestamp) { @@ -34,15 +46,14 @@ export class WinstonLoggerAdapter extends LoggerAdapter { ); } - this.#logger.format = format.combine(this.#logger.format, ...formatList); + return formatList; } - protected override printLog( - logType: LogLevel, - message: string, - context?: ContextMetadata, - ): void { - this.#logger.log(logType, message, context); + #formatLogger(): void { + this.#logger.format = format.combine( + this.#logger.format, + ...this.#buildOptionsFormatList(), + ); } #stringifyInfo(info: TransformableInfo): string { From 70b933510ba46a1e157697ed758476dbec78584d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roberto=20Pintos=20L=C3=B3pez?= Date: Mon, 10 Mar 2025 00:37:47 +0100 Subject: [PATCH 11/11] refactor(logger): move logger package --- codecov.yml | 6 ++++++ knip.ts | 2 +- packages/logger/{libraries/core => }/.gitignore | 0 packages/logger/{libraries/core => }/.lintstagedrc.json | 0 packages/logger/{libraries/core => }/.npmignore | 0 packages/logger/{libraries/core => }/README.md | 2 +- packages/logger/{libraries/core => }/eslint.config.mjs | 0 packages/logger/{libraries/core => }/package.json | 0 packages/logger/{libraries/core => }/prettier.config.mjs | 0 packages/logger/{libraries/core => }/rollup.config.mjs | 0 packages/logger/{libraries/core => }/src/index.ts | 0 .../logger/{libraries/core => }/src/logger/ConsoleLogger.ts | 0 .../logger/{libraries/core => }/src/logger/FileLogger.ts | 0 .../core => }/src/logger/adapter/LoggerAdapter.spec.ts | 0 .../core => }/src/logger/adapter/LoggerAdapter.ts | 0 .../core => }/src/logger/model/ContextMetadata.ts | 0 .../logger/{libraries/core => }/src/logger/model/Logger.ts | 0 packages/logger/{libraries/core => }/src/model/LogLevel.ts | 0 .../logger/{libraries/core => }/src/model/LoggerOptions.ts | 0 .../src/winston/adapter/WinstonLoggerAdapter.int.spec.ts | 0 .../core => }/src/winston/adapter/WinstonLoggerAdapter.ts | 0 packages/logger/{libraries/core => }/stryker.config.mjs | 0 packages/logger/{libraries/core => }/tsconfig.cjs.json | 0 packages/logger/{libraries/core => }/tsconfig.esm.json | 0 packages/logger/{libraries/core => }/tsconfig.json | 0 packages/logger/{libraries/core => }/vitest.config.mjs | 0 .../logger/{libraries/core => }/vitest.config.stryker.mjs | 0 packages/logger/{libraries/core => }/vitest.workspace.mjs | 0 pnpm-workspace.yaml | 2 +- 29 files changed, 9 insertions(+), 3 deletions(-) rename packages/logger/{libraries/core => }/.gitignore (100%) rename packages/logger/{libraries/core => }/.lintstagedrc.json (100%) rename packages/logger/{libraries/core => }/.npmignore (100%) rename packages/logger/{libraries/core => }/README.md (70%) rename packages/logger/{libraries/core => }/eslint.config.mjs (100%) rename packages/logger/{libraries/core => }/package.json (100%) rename packages/logger/{libraries/core => }/prettier.config.mjs (100%) rename packages/logger/{libraries/core => }/rollup.config.mjs (100%) rename packages/logger/{libraries/core => }/src/index.ts (100%) rename packages/logger/{libraries/core => }/src/logger/ConsoleLogger.ts (100%) rename packages/logger/{libraries/core => }/src/logger/FileLogger.ts (100%) rename packages/logger/{libraries/core => }/src/logger/adapter/LoggerAdapter.spec.ts (100%) rename packages/logger/{libraries/core => }/src/logger/adapter/LoggerAdapter.ts (100%) rename packages/logger/{libraries/core => }/src/logger/model/ContextMetadata.ts (100%) rename packages/logger/{libraries/core => }/src/logger/model/Logger.ts (100%) rename packages/logger/{libraries/core => }/src/model/LogLevel.ts (100%) rename packages/logger/{libraries/core => }/src/model/LoggerOptions.ts (100%) rename packages/logger/{libraries/core => }/src/winston/adapter/WinstonLoggerAdapter.int.spec.ts (100%) rename packages/logger/{libraries/core => }/src/winston/adapter/WinstonLoggerAdapter.ts (100%) rename packages/logger/{libraries/core => }/stryker.config.mjs (100%) rename packages/logger/{libraries/core => }/tsconfig.cjs.json (100%) rename packages/logger/{libraries/core => }/tsconfig.esm.json (100%) rename packages/logger/{libraries/core => }/tsconfig.json (100%) rename packages/logger/{libraries/core => }/vitest.config.mjs (100%) rename packages/logger/{libraries/core => }/vitest.config.stryker.mjs (100%) rename packages/logger/{libraries/core => }/vitest.workspace.mjs (100%) diff --git a/codecov.yml b/codecov.yml index 15d44f6b..5d73aae3 100644 --- a/codecov.yml +++ b/codecov.yml @@ -17,6 +17,9 @@ coverage: '@inversifyjs/http-core': flags: - '@inversifyjs/http-core' + '@inversifyjs/logger': + flags: + - '@inversifyjs/logger' '@inversifyjs/prototype-utils': flags: - '@inversifyjs/prototype-utils' @@ -39,6 +42,9 @@ flags: '@inversifyjs/http-core': paths: - packages/http/libraries/core + @inversifyjs/logger: + paths: + - packages/logger '@inversifyjs/prototype-utils': paths: - packages/foundation/libraries/prototype-utils diff --git a/knip.ts b/knip.ts index 0eb15cc9..13fa26fd 100644 --- a/knip.ts +++ b/knip.ts @@ -75,6 +75,6 @@ export default { project: defaultWorkspaceProjectConfig.project, }, "packages/http/libraries/*": defaultWorkspaceProjectConfig, - "packages/logger/libraries/*": defaultWorkspaceProjectConfig, + "packages/logger": defaultWorkspaceProjectConfig, }, } satisfies KnipConfig; diff --git a/packages/logger/libraries/core/.gitignore b/packages/logger/.gitignore similarity index 100% rename from packages/logger/libraries/core/.gitignore rename to packages/logger/.gitignore diff --git a/packages/logger/libraries/core/.lintstagedrc.json b/packages/logger/.lintstagedrc.json similarity index 100% rename from packages/logger/libraries/core/.lintstagedrc.json rename to packages/logger/.lintstagedrc.json diff --git a/packages/logger/libraries/core/.npmignore b/packages/logger/.npmignore similarity index 100% rename from packages/logger/libraries/core/.npmignore rename to packages/logger/.npmignore diff --git a/packages/logger/libraries/core/README.md b/packages/logger/README.md similarity index 70% rename from packages/logger/libraries/core/README.md rename to packages/logger/README.md index 58eb929c..b428f75e 100644 --- a/packages/logger/libraries/core/README.md +++ b/packages/logger/README.md @@ -1,5 +1,5 @@ [![Test coverage](https://codecov.io/gh/inversify/monorepo/branch/main/graph/badge.svg?flag=%40inversifyjs%2Flogger)](https://codecov.io/gh/inversify/monorepo/branch/main/graph/badge.svg?flag=%40inversifyjs%2Flogger) -[![npm version](https://img.shields.io/github/package-json/v/inversify/monorepo?filename=packages%2Flogger%2Flibraries%2Fcore%2Fpackage.json&style=plastic)](https://www.npmjs.com/package/@inversifyjs/logger) +[![npm version](https://img.shields.io/github/package-json/v/inversify/monorepo?filename=packages%2Flogger%2Fpackage.json&style=plastic)](https://www.npmjs.com/package/@inversifyjs/logger) # @inversifyjs/logger diff --git a/packages/logger/libraries/core/eslint.config.mjs b/packages/logger/eslint.config.mjs similarity index 100% rename from packages/logger/libraries/core/eslint.config.mjs rename to packages/logger/eslint.config.mjs diff --git a/packages/logger/libraries/core/package.json b/packages/logger/package.json similarity index 100% rename from packages/logger/libraries/core/package.json rename to packages/logger/package.json diff --git a/packages/logger/libraries/core/prettier.config.mjs b/packages/logger/prettier.config.mjs similarity index 100% rename from packages/logger/libraries/core/prettier.config.mjs rename to packages/logger/prettier.config.mjs diff --git a/packages/logger/libraries/core/rollup.config.mjs b/packages/logger/rollup.config.mjs similarity index 100% rename from packages/logger/libraries/core/rollup.config.mjs rename to packages/logger/rollup.config.mjs diff --git a/packages/logger/libraries/core/src/index.ts b/packages/logger/src/index.ts similarity index 100% rename from packages/logger/libraries/core/src/index.ts rename to packages/logger/src/index.ts diff --git a/packages/logger/libraries/core/src/logger/ConsoleLogger.ts b/packages/logger/src/logger/ConsoleLogger.ts similarity index 100% rename from packages/logger/libraries/core/src/logger/ConsoleLogger.ts rename to packages/logger/src/logger/ConsoleLogger.ts diff --git a/packages/logger/libraries/core/src/logger/FileLogger.ts b/packages/logger/src/logger/FileLogger.ts similarity index 100% rename from packages/logger/libraries/core/src/logger/FileLogger.ts rename to packages/logger/src/logger/FileLogger.ts diff --git a/packages/logger/libraries/core/src/logger/adapter/LoggerAdapter.spec.ts b/packages/logger/src/logger/adapter/LoggerAdapter.spec.ts similarity index 100% rename from packages/logger/libraries/core/src/logger/adapter/LoggerAdapter.spec.ts rename to packages/logger/src/logger/adapter/LoggerAdapter.spec.ts diff --git a/packages/logger/libraries/core/src/logger/adapter/LoggerAdapter.ts b/packages/logger/src/logger/adapter/LoggerAdapter.ts similarity index 100% rename from packages/logger/libraries/core/src/logger/adapter/LoggerAdapter.ts rename to packages/logger/src/logger/adapter/LoggerAdapter.ts diff --git a/packages/logger/libraries/core/src/logger/model/ContextMetadata.ts b/packages/logger/src/logger/model/ContextMetadata.ts similarity index 100% rename from packages/logger/libraries/core/src/logger/model/ContextMetadata.ts rename to packages/logger/src/logger/model/ContextMetadata.ts diff --git a/packages/logger/libraries/core/src/logger/model/Logger.ts b/packages/logger/src/logger/model/Logger.ts similarity index 100% rename from packages/logger/libraries/core/src/logger/model/Logger.ts rename to packages/logger/src/logger/model/Logger.ts diff --git a/packages/logger/libraries/core/src/model/LogLevel.ts b/packages/logger/src/model/LogLevel.ts similarity index 100% rename from packages/logger/libraries/core/src/model/LogLevel.ts rename to packages/logger/src/model/LogLevel.ts diff --git a/packages/logger/libraries/core/src/model/LoggerOptions.ts b/packages/logger/src/model/LoggerOptions.ts similarity index 100% rename from packages/logger/libraries/core/src/model/LoggerOptions.ts rename to packages/logger/src/model/LoggerOptions.ts diff --git a/packages/logger/libraries/core/src/winston/adapter/WinstonLoggerAdapter.int.spec.ts b/packages/logger/src/winston/adapter/WinstonLoggerAdapter.int.spec.ts similarity index 100% rename from packages/logger/libraries/core/src/winston/adapter/WinstonLoggerAdapter.int.spec.ts rename to packages/logger/src/winston/adapter/WinstonLoggerAdapter.int.spec.ts diff --git a/packages/logger/libraries/core/src/winston/adapter/WinstonLoggerAdapter.ts b/packages/logger/src/winston/adapter/WinstonLoggerAdapter.ts similarity index 100% rename from packages/logger/libraries/core/src/winston/adapter/WinstonLoggerAdapter.ts rename to packages/logger/src/winston/adapter/WinstonLoggerAdapter.ts diff --git a/packages/logger/libraries/core/stryker.config.mjs b/packages/logger/stryker.config.mjs similarity index 100% rename from packages/logger/libraries/core/stryker.config.mjs rename to packages/logger/stryker.config.mjs diff --git a/packages/logger/libraries/core/tsconfig.cjs.json b/packages/logger/tsconfig.cjs.json similarity index 100% rename from packages/logger/libraries/core/tsconfig.cjs.json rename to packages/logger/tsconfig.cjs.json diff --git a/packages/logger/libraries/core/tsconfig.esm.json b/packages/logger/tsconfig.esm.json similarity index 100% rename from packages/logger/libraries/core/tsconfig.esm.json rename to packages/logger/tsconfig.esm.json diff --git a/packages/logger/libraries/core/tsconfig.json b/packages/logger/tsconfig.json similarity index 100% rename from packages/logger/libraries/core/tsconfig.json rename to packages/logger/tsconfig.json diff --git a/packages/logger/libraries/core/vitest.config.mjs b/packages/logger/vitest.config.mjs similarity index 100% rename from packages/logger/libraries/core/vitest.config.mjs rename to packages/logger/vitest.config.mjs diff --git a/packages/logger/libraries/core/vitest.config.stryker.mjs b/packages/logger/vitest.config.stryker.mjs similarity index 100% rename from packages/logger/libraries/core/vitest.config.stryker.mjs rename to packages/logger/vitest.config.stryker.mjs diff --git a/packages/logger/libraries/core/vitest.workspace.mjs b/packages/logger/vitest.workspace.mjs similarity index 100% rename from packages/logger/libraries/core/vitest.workspace.mjs rename to packages/logger/vitest.workspace.mjs diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 50f10bb1..b4c9a73b 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -7,7 +7,7 @@ packages: - packages/foundation/tools/* - packages/http/libraries/* - packages/http/tools/* - - packages/logger/libraries/* + - packages/logger onlyBuiltDependencies: - '@swc/core'