Skip to content

Commit

Permalink
feat(logger): make the module compatible with browser env
Browse files Browse the repository at this point in the history
  • Loading branch information
Romakita committed Mar 12, 2024
1 parent dbf500f commit ed04216
Show file tree
Hide file tree
Showing 66 changed files with 1,300 additions and 172 deletions.
4 changes: 2 additions & 2 deletions .eslintrc
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,9 @@
"extends": ["prettier", "plugin:@typescript-eslint/recommended"],
"plugins": ["@typescript-eslint"],
"parserOptions": {
"ecmaVersion": 2018,
"ecmaVersion": 2023,
"sourceType": "module",
"project": "./tsconfig.base.json"
"project": "./tsconfig.eslint.json"
},
"env": {
"node": true,
Expand Down
2 changes: 1 addition & 1 deletion jest.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ export default {
coveragePathIgnorePatterns: ['index.ts', '/node_modules/'],
moduleNameMapper: {
'^(\\.{1,2}/.*)\\.js$': '$1',
'^@tsed/logger(.*)$': '<rootDir>/packages/logger$1/src'
'^@tsed/logger$': '<rootDir>/packages/logger/src/node/index.ts',
},

// An object that configures minimum threshold enforcement for coverage results
Expand Down
2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,8 @@
"semantic-release-slack-bot": "^4.0.2",
"ts-node": "^10.9.2",
"typescript": "5.4.2",
"vite": "5.1.6",
"vite-plugin-dts": "^3.7.3",
"vue-analytics": "5.22.1",
"vuepress": "1.9.10",
"vuepress-theme-tsed": "3.20.8"
Expand Down
5 changes: 5 additions & 0 deletions packages/logger/.barrelsby.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"directory": ["./src/common", "./src/browser", "./src/node"],
"exclude": ["__mock__", "__mocks__", ".spec.ts"],
"delete": true
}
29 changes: 18 additions & 11 deletions packages/logger/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -6,21 +6,26 @@
"name": "Romain Lenzotti"
},
"license": "MIT",
"source": "./src/index.ts",
"main": "./lib/cjs/index.js",
"module": "./lib/esm/index.js",
"typings": "./lib/types/index.d.ts",
"source": "./src/node/index.ts",
"main": "./lib/cjs/node/index.js",
"module": "./lib/esm/node/index.js",
"browser": "./lib/browser/logger.umd.js",
"typings": "./lib/types/node/index.d.ts",
"exports": {
"types": "./lib/types/index.d.ts",
"import": "./lib/esm/index.js",
"require": "./lib/cjs/index.js",
"default": "./lib/esm/index.js"
".": {
"types": "./lib/types/node/index.d.ts",
"browser": "./lib/browser/logger.umd.js",
"import": "./lib/esm/node/index.js",
"require": "./lib/cjs/node/index.js",
"default": "./lib/esm/node/index.js"
}
},
"scripts": {
"build": "yarn barrels && yarn run build:esm && yarn run build:cjs",
"build": "yarn barrels && yarn run build:esm && yarn run build:cjs && yarn run build:browser",
"build:browser": "vite build",
"build:cjs": "tsc --build tsconfig.json",
"build:esm": "tsc --build tsconfig.esm.json",
"barrels": "barrelsby --delete -d ./src -e \"\\.spec\\.ts\" -e \"__mock__\" -e \".benchmark.ts\""
"barrels": "yarn barrelsby --config .barrelsby.json"
},
"repository": {
"type": "git",
Expand All @@ -44,6 +49,8 @@
"tslib": "2.6.2"
},
"devDependencies": {
"typescript": "5.4.2"
"barrelsby": "^2.8.1",
"typescript": "5.4.2",
"vite": "5.1.6"
}
}
6 changes: 0 additions & 6 deletions packages/logger/src/appenders/registries/AppendersRegistry.ts

This file was deleted.

5 changes: 5 additions & 0 deletions packages/logger/src/browser/exports.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
import {Logger} from "../common";

export const $log: Logger = new Logger("default");

$log.appenders.set("console", {type: "console", levels: ["info", "debug", "trace", "fatal", "error", "warn"]});
5 changes: 5 additions & 0 deletions packages/logger/src/browser/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
/**
* @file Automatically generated by barrelsby.
*/

export * from "./exports";
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
import {BaseAppender, LogEvent} from "../../../src";
import {levels} from "../../../src/core/LogLevel";
import {levels} from "../../core/LogLevel";
import {BaseAppender} from "./BaseAppender";
import {LogEvent} from "../../core/LogEvent";
import "../../layouts/components/ColoredLayout";
import "../../layouts/components/DummyLayout";

const buildStub = jest.fn();

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -53,14 +53,16 @@ export interface BaseAppenderMethods {
export abstract class BaseAppender<Opts = any> implements BaseAppenderMethods {
#layout: any;

public appenderOptions: AppenderOptions;

[key: string]: any;

constructor(public readonly config: AppenderConfiguration<Opts>) {
this.configure(config);
}

get appenderOptions(): AppenderOptions {
return this.__proto__.constructor.$appenderOptions;
}

configure(config: PartialAppenderConfiguration) {
Object.assign(this.config, config);

Expand All @@ -69,6 +71,7 @@ export abstract class BaseAppender<Opts = any> implements BaseAppenderMethods {
if (this.config.layout) {
this.#layout = Layouts.get(this.config.layout.type, this.config.layout);
}

return this;
}

Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import {ConsoleAppender} from "../../../src/appenders/components/ConsoleAppender";
import {levels, LogEvent} from "../../../src";
import {ConsoleAppender} from "./ConsoleAppender";
import {LogEvent} from "../../core/LogEvent";
import {levels} from "../../core/LogLevel";
import "../../layouts/components/ColoredLayout";

describe("ConsoleAppender", () => {
it("should log something", () => {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,9 @@ import {AppenderOptions} from "../class/BaseAppender";

export function Appender(options: AppenderOptions) {
return (target: any) => {
target.prototype.appenderOptions = options;
target.$appenderOptions = options;
target.$name = options.name;

AppendersRegistry.set(options.name, {provide: target});
};
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import {BaseAppender} from "../class/BaseAppender";

export interface AppenderProvider {
provide: any;
instance?: any;
defaultLayout?: string;
}

export const AppendersRegistry: Map<string | any, AppenderProvider> = new Map<string, AppenderProvider>();
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,30 +1,28 @@
import {LogEvent} from "../../src/core/LogEvent";
import {levels, LogContext} from "@tsed/logger";
import {LogEvent} from "./LogEvent";
import {levels} from "./LogLevel";
import {LogContext} from "./LogContext";

describe("LogEvent", () => {
it("should create a new logevent (data)", () => {
const event = new LogEvent(
"category",
levels().INFO,
[{
test: "test"
}],
[
{
test: "test"
}
],
new LogContext()
);

expect(event.getData()).toEqual({
"test": "test"
test: "test"
});
expect(event.getMessage()).toBeUndefined();
});

it("should create a new logevent (message)", () => {
const event = new LogEvent(
"category",
levels().INFO,
["message"],
new LogContext()
);
const event = new LogEvent("category", levels().INFO, ["message"], new LogContext());

expect(event.getData()).toEqual({});
expect(event.getMessage()).toEqual(["message"]);
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import {levels, LogLevel} from "../../src/core/LogLevel";
import {levels, LogLevel} from "./LogLevel";

describe("LogLevel", () => {
it("should define some levels", () => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
export class LogLevel {
constructor(readonly level: number, readonly levelStr: string) {
constructor(
readonly level: number,
readonly levelStr: string
) {
this.level = level;
this.levelStr = levelStr;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,6 @@

export * from "./appenders/class/BaseAppender";
export * from "./appenders/components/ConsoleAppender";
export * from "./appenders/components/StderrAppender";
export * from "./appenders/components/StdoutAppender";
export * from "./appenders/decorators/appender";
export * from "./appenders/interfaces/AppenderConfiguration";
export * from "./appenders/registries/AppendersRegistry";
Expand All @@ -31,7 +29,6 @@ export * from "./layouts/utils/StringUtils";
export * from "./layouts/utils/colorizeUtils";
export * from "./layouts/utils/logEventToObject";
export * from "./layouts/utils/timestampLevelAndCategory";
export * from "./logger/exports";
export * from "./logger/class/Logger";
export * from "./logger/class/LoggerAppenders";
export * from "./logger/utils/tableUtils";
Original file line number Diff line number Diff line change
@@ -1,17 +1,21 @@
import * as Os from "os";
import * as Util from "util";
// @ts-ignore
import * as dateFormat from "date-format";
import {LogEvent} from "../../core/LogEvent";
import {LOG_COLORS} from "../constants/logColors";
import {colorizeEnd, colorizeStart} from "../utils/colorizeUtils";
import {IReplacers} from "../interfaces/Replacers";
import {TokensHandlers} from "../interfaces/BasicLayoutConfiguration";

const eol = Os.EOL || "\n";
import {format} from "../utils/StringUtils";

export class LayoutReplacer {
constructor(private tokens: TokensHandlers, private timezoneOffset: number) {}
static EOL = "\n";
static HOSTNAME = "";
static formatter = format;

constructor(
private tokens: TokensHandlers,
private timezoneOffset: number
) {}

/**
*
Expand Down Expand Up @@ -59,15 +63,15 @@ export class LayoutReplacer {
* @returns {string}
*/
public hostname = (): string => {
return Os.hostname().toString();
return LayoutReplacer.HOSTNAME || "";
};
/**
*
* @param loggingEvent
* @returns {any}
*/
public formatMessage = (loggingEvent: LogEvent): string => {
return (Util.format as any)(...loggingEvent.data);
return (LayoutReplacer.formatter as any)(...loggingEvent.data);
};

public formatJson = (loggingEvent: LogEvent): string => {
Expand All @@ -78,7 +82,7 @@ export class LayoutReplacer {
* @returns {string|string}
*/
public endOfLine = () => {
return eol;
return LayoutReplacer.EOL;
};
/**
*
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import {LogEvent} from "../../../src/core/LogEvent";
import {levels} from "../../../src/core/LogLevel";
import {BasicLayout} from "../../../src/layouts/components/BasicLayout";
import {LogEvent} from "../../core/LogEvent";
import {levels} from "../../core/LogLevel";
import {BasicLayout} from "./BasicLayout";

describe("BasicLayout", () => {
it("should return a formated string", () => {
Expand All @@ -14,8 +14,6 @@ describe("BasicLayout", () => {
(logEvent as any)._startTime = new Date("2017-06-18 22:29:38.234");
const result = layout.transform(logEvent);

expect(result).toEqual(
expect.stringContaining("[2017-06-18T22:29:38.234] [DEBUG] [category] - data")
);
expect(result).toEqual(expect.stringContaining("[2017-06-18T22:29:38.234] [DEBUG] [category] - data"));
});
});
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import {LogEvent} from "../../../src/core/LogEvent";
import {levels} from "../../../src/core/LogLevel";
import {ColoredLayout} from "../../../src/layouts/components/ColoredLayout";
import {LogEvent} from "../../core/LogEvent";
import {levels} from "../../core/LogLevel";
import {ColoredLayout} from "./ColoredLayout";

describe("ColoredLayout", () => {
it("should return a formatted string", () => {
Expand All @@ -16,8 +16,6 @@ describe("ColoredLayout", () => {

const result = layout.transform(logEvent);

expect(result).toEqual(
expect.stringContaining("[36m[2017-06-18T22:29:38.234] [DEBUG] [category] - data")
);
expect(result).toEqual(expect.stringContaining("[36m[2017-06-18T22:29:38.234] [DEBUG] [category] - data"));
});
});
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import {LogEvent} from "../../../src/core/LogEvent";
import {levels} from "../../../src/core/LogLevel";
import {DummyLayout} from "../../../src/layouts/components/DummyLayout";
import {LogEvent} from "../../core/LogEvent";
import {levels} from "../../core/LogLevel";
import {DummyLayout} from "./DummyLayout";

describe("DummyLayout", () => {
it("should return a formated string", () => {
Expand Down
Loading

0 comments on commit ed04216

Please sign in to comment.