Skip to content

Commit

Permalink
Merge pull request #37 from medishen/dev/v2
Browse files Browse the repository at this point in the history
refactor(events): Entering data for the publish method became optional.
  • Loading branch information
m-mdy-m authored Feb 17, 2025
2 parents ef5ca55 + 7e151a1 commit 174a108
Show file tree
Hide file tree
Showing 10 changed files with 154 additions and 2 deletions.
3 changes: 3 additions & 0 deletions packages/debug/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
export * from './services';
export * from './types';
export * from './interfaces';
1 change: 1 addition & 0 deletions packages/debug/interfaces/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './logger.interfaces';
37 changes: 37 additions & 0 deletions packages/debug/interfaces/logger.interfaces.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { LogLevel } from '../types/logger.types';

/**
* @public
*/
export interface LoggerService {
/**
* Write a 'log' level log.
*/
log(message: any, ...optionalParams: any[]): any;

/**
* Write an 'error' level log.
*/
error(message: any, ...optionalParams: any[]): any;

/**
* Write a 'warn' level log.
*/
warn(message: any, ...optionalParams: any[]): any;

/**
* Write a 'debug' level log.
*/
debug?(message: any, ...optionalParams: any[]): any;

/**
* Write a 'verbose' level log.
*/
verbose?(message: any, ...optionalParams: any[]): any;

/**
* Set log levels.
* @param levels log levels
*/
setLogLevels?(levels: LogLevel[]): any;
}
12 changes: 12 additions & 0 deletions packages/debug/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
{
"name": "@gland/debug",
"version": "1.0.0",
"author": "Mahdi",
"license": "MIT",
"scripts": {
"build": "tsc"
},
"devDependencies": {
"typescript": "^5.5.4"
}
}
1 change: 1 addition & 0 deletions packages/debug/services/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './logger.service';
82 changes: 82 additions & 0 deletions packages/debug/services/logger.service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
import { LoggerService } from '../interfaces/logger.interfaces';
import { LogLevel } from '../types/logger.types';
const DEFAULT_LOGGER = console;

export class Logger implements LoggerService {
protected static logLevels: LogLevel[] = ['log', 'error', 'warn', 'debug', 'verbose'];
private static staticInstance: LoggerService = DEFAULT_LOGGER;
private static defaultContext = 'Application';

constructor(protected context?: string, protected options: { timestamp?: boolean } = {}) {}

/**
* Write an 'error' level log.
*/
error(message: any, stack?: string, context?: string): void;
error(message: any, ...optionalParams: [...any, string?, string?]): void;
error(message: any, ...optionalParams: any[]) {
this.logWithLevel('error', message, optionalParams);
}

/**
* Write a 'log' level log.
*/
log(message: any, context?: string): void;
log(message: any, ...optionalParams: [...any, string?]): void;
log(message: any, ...optionalParams: any[]) {
this.logWithLevel('log', message, optionalParams);
}

/**
* Write a 'warn' level log.
*/
warn(message: any, context?: string): void;
warn(message: any, ...optionalParams: [...any, string?]): void;
warn(message: any, ...optionalParams: any[]) {
this.logWithLevel('warn', message, optionalParams);
}

/**
* Write a 'debug' level log.
*/
debug(message: any, context?: string): void;
debug(message: any, ...optionalParams: [...any, string?]): void;
debug(message: any, ...optionalParams: any[]) {
this.logWithLevel('debug', message, optionalParams);
}

/**
* Write a 'verbose' level log.
*/
verbose(message: any, context?: string): void;
verbose(message: any, ...optionalParams: [...any, string?]): void;
verbose(message: any, ...optionalParams: any[]) {
this.logWithLevel('verbose', message, optionalParams);
}
static setLogLevels(levels: LogLevel[]): void {
this.logLevels = levels;
}

static getTimestamp(): string {
return new Date().toISOString();
}

static isLevelEnabled(level: LogLevel): boolean {
return this.logLevels!.includes(level);
}

private logWithLevel(level: LogLevel, message: any, params: any[]): void {
if (!Logger.isLevelEnabled(level)) return;

const logger = Logger.staticInstance;
const context = this.context || Logger.defaultContext;
const timestamp = this.options.timestamp ? `[${Logger.getTimestamp()}] ` : '';

const formattedMessage = `${timestamp}[${context}] ${message}`;
if (typeof logger[level] === 'function') {
logger[level](formattedMessage, ...params);
} else {
logger.log(formattedMessage, ...params);
}
}
}
11 changes: 11 additions & 0 deletions packages/debug/tsconfig.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
{
"extends": "../../tsconfig.json",
"compilerOptions": {
"rootDir": ".",
"outDir": "."
},
"files": [],
"include": ["**/*.ts"],
"exclude": ["node_modules"],
"references": []
}
1 change: 1 addition & 0 deletions packages/debug/types/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from './logger.types';
4 changes: 4 additions & 0 deletions packages/debug/types/logger.types.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
/**
* @public
*/
export type LogLevel = 'log' | 'error' | 'warn' | 'debug' | 'verbose';
4 changes: 2 additions & 2 deletions packages/events/core/event-manager.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,13 +31,13 @@ export class EventManager {
return new ImmediateStrategy();
}
}
async publish<T extends string, D>(qualified: QualifiedEvent<T>, data: D): Promise<void> {
async publish<T extends string, D>(qualified: QualifiedEvent<T>, data?: D): Promise<void> {
const { phase, type } = EventMapper.parseQualifiedType(qualified);

const event: Event<typeof type, typeof phase, D> = {
type,
phase,
data,
data: data ?? ({} as D),
lifecycle: {
startedAt: new Date(),
},
Expand Down

0 comments on commit 174a108

Please sign in to comment.