From 381be92260be449684bc2a942ae3c95d5ccf4ca5 Mon Sep 17 00:00:00 2001 From: Vinayak Sarawagi Date: Sun, 1 Sep 2024 00:27:08 +0530 Subject: [PATCH 1/2] remove console, event and queue explorer and unionize them into a single global explorer --- lib/console/index.ts | 1 - lib/events/explorer.ts | 47 ----------------------------------- lib/events/helpers.ts | 3 --- lib/events/index.ts | 1 - lib/{console => }/explorer.ts | 46 +++++++++++++++++++++++++++++----- lib/module.ts | 9 +++---- lib/queue/explorer.ts | 43 -------------------------------- package-lock.json | 4 +-- 8 files changed, 45 insertions(+), 109 deletions(-) delete mode 100644 lib/events/explorer.ts rename lib/{console => }/explorer.ts (52%) delete mode 100644 lib/queue/explorer.ts diff --git a/lib/console/index.ts b/lib/console/index.ts index 8d53279..ea2c365 100644 --- a/lib/console/index.ts +++ b/lib/console/index.ts @@ -3,7 +3,6 @@ export * from './decorators'; export * from './logger'; export * from './inquirer'; export * from './commands'; -export * from './explorer'; export * from './runner'; export * from './interfaces'; export * from './consoleIO'; diff --git a/lib/events/explorer.ts b/lib/events/explorer.ts deleted file mode 100644 index d9665e7..0000000 --- a/lib/events/explorer.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { Injectable } from '@nestjs/common'; -import { DiscoveryService, MetadataScanner } from '@nestjs/core'; -import { IntentEventConstants } from './constants'; -import { EventMetadata } from './metadata'; - -@Injectable() -export class EventExplorer { - constructor( - private readonly discovery: DiscoveryService, - private readonly metadataScanner: MetadataScanner, - ) {} - - onModuleInit() { - const wrappers = this.discovery.getProviders(); - wrappers.forEach(w => { - const { instance } = w; - if ( - !instance || - typeof instance === 'string' || - !Object.getPrototypeOf(instance) - ) { - return; - } - this.metadataScanner.scanFromPrototype( - instance, - Object.getPrototypeOf(instance), - (key: string) => this.lookupListeners(instance, key), - ); - }); - } - - lookupListeners(instance: Record, key: string) { - const methodRef = instance[key]; - const hasEventMeta = Reflect.hasMetadata( - IntentEventConstants.eventName, - instance, - key, - ); - if (!hasEventMeta) return; - const eventName = Reflect.getMetadata( - IntentEventConstants.eventName, - instance, - key, - ); - EventMetadata.addListener(eventName, methodRef.bind(instance)); - } -} diff --git a/lib/events/helpers.ts b/lib/events/helpers.ts index d7c395c..605d794 100644 --- a/lib/events/helpers.ts +++ b/lib/events/helpers.ts @@ -6,7 +6,6 @@ export async function Emit(...events: EmitsEvent[]): Promise { promises.push(event.emit()); } await Promise.allSettled(promises); - return; } export async function EmitIf( @@ -18,7 +17,6 @@ export async function EmitIf( promises.push(event.emitIf(condition)); } await Promise.allSettled(promises); - return; } export async function emitUnless( @@ -30,7 +28,6 @@ export async function emitUnless( promises.push(event.emitUnless(condition)); } await Promise.allSettled(promises); - return; } export function difference(arr1: T[], arr2: T[]): T[] { diff --git a/lib/events/index.ts b/lib/events/index.ts index 7c89d10..392c920 100644 --- a/lib/events/index.ts +++ b/lib/events/index.ts @@ -1,7 +1,6 @@ export * from './event'; export * from './decorator'; export * from './metadata'; -export * from './explorer'; export * from './interfaces'; export * from './helpers'; export * from './jobListener'; diff --git a/lib/console/explorer.ts b/lib/explorer.ts similarity index 52% rename from lib/console/explorer.ts rename to lib/explorer.ts index 64636c2..19a461d 100644 --- a/lib/console/explorer.ts +++ b/lib/explorer.ts @@ -1,12 +1,15 @@ import { Injectable } from '@nestjs/common'; import { DiscoveryService, MetadataScanner } from '@nestjs/core'; -import { GenericFunction } from '../interfaces'; -import { ConsoleConstants } from './constants'; -import { CommandMetaOptions } from './interfaces'; -import { CommandMeta } from './metadata'; +import { CommandMeta, CommandMetaOptions } from './console'; +import { ConsoleConstants } from './console/constants'; +import { EventMetadata } from './events'; +import { IntentEventConstants } from './events/constants'; +import { GenericFunction } from './interfaces'; +import { JOB_NAME, JOB_OPTIONS } from './queue/constants'; +import { QueueMetadata } from './queue/metadata'; @Injectable() -export class ConsoleExplorer { +export class IntentExplorer { constructor( private readonly discovery: DiscoveryService, private readonly metadataScanner: MetadataScanner, @@ -27,11 +30,42 @@ export class ConsoleExplorer { this.metadataScanner.scanFromPrototype( instance, Object.getPrototypeOf(instance), - (key: string) => this.lookupConsoleCommands(instance, key), + (key: string) => { + this.lookupJobs(instance, key); + this.lookupListeners(instance, key); + this.lookupConsoleCommands(instance, key); + }, ); }); } + lookupJobs(instance: Record, key: string) { + const methodRef = instance[key]; + const hasJobMeta = Reflect.hasMetadata(JOB_NAME, instance, key); + if (!hasJobMeta) return; + const jobName = Reflect.getMetadata(JOB_NAME, instance, key); + QueueMetadata.addJob(jobName, { + options: Reflect.getMetadata(JOB_OPTIONS, instance, key), + target: methodRef.bind(instance), + }); + } + + lookupListeners(instance: Record, key: string) { + const methodRef = instance[key]; + const hasEventMeta = Reflect.hasMetadata( + IntentEventConstants.eventName, + instance, + key, + ); + if (!hasEventMeta) return; + const eventName = Reflect.getMetadata( + IntentEventConstants.eventName, + instance, + key, + ); + EventMetadata.addListener(eventName, methodRef.bind(instance)); + } + lookupConsoleCommands( instance: Record, key: string, diff --git a/lib/module.ts b/lib/module.ts index ec3a445..0d2ecd7 100644 --- a/lib/module.ts +++ b/lib/module.ts @@ -6,34 +6,31 @@ import { CodegenCommand } from './codegen/command'; import { CodegenService } from './codegen/service'; import { ViewConfigCommand } from './config/command'; import { IntentConfig } from './config/service'; -import { ConsoleExplorer, ListCommands } from './console'; +import { ListCommands } from './console'; import { ObjectionService } from './database'; import { DbOperationsCommand } from './database/commands/migrations'; -import { EventExplorer } from './events'; import { EventQueueWorker } from './events/jobListener'; +import { IntentExplorer } from './explorer'; import { GenericFunction } from './interfaces'; import { LocalizationService } from './localization'; import { LoggerService } from './logger/service'; import { MailerService } from './mailer'; import { QueueService } from './queue'; import { QueueConsoleCommands } from './queue/console'; -import { QueueExplorer } from './queue/explorer'; import { QueueMetadata } from './queue/metadata'; import { StorageService } from './storage/service'; import { ExistsConstraint } from './validator/decorators/exists'; import { IsUniqueConstraint } from './validator/decorators/isUnique'; const providers = [ - ConsoleExplorer, + IntentExplorer, ListCommands, DbOperationsCommand, ObjectionService, - EventExplorer, StorageService, CacheService, QueueService, QueueConsoleCommands, - QueueExplorer, CodegenCommand, CodegenService, ViewConfigCommand, diff --git a/lib/queue/explorer.ts b/lib/queue/explorer.ts deleted file mode 100644 index c2856c7..0000000 --- a/lib/queue/explorer.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { Injectable, OnModuleInit } from '@nestjs/common'; -import { DiscoveryService, MetadataScanner } from '@nestjs/core'; -import { GenericFunction } from '../interfaces'; -import { JOB_NAME, JOB_OPTIONS } from './constants'; -import { QueueMetadata } from './metadata'; - -@Injectable() -export class QueueExplorer implements OnModuleInit { - constructor( - private readonly discovery: DiscoveryService, - private readonly metadataScanner: MetadataScanner, - ) {} - - onModuleInit() { - const wrappers = this.discovery.getProviders(); - wrappers.forEach(w => { - const { instance } = w; - if ( - !instance || - typeof instance === 'string' || - !Object.getPrototypeOf(instance) - ) { - return; - } - this.metadataScanner.scanFromPrototype( - instance, - Object.getPrototypeOf(instance), - (key: string) => this.lookupJobs(instance, key), - ); - }); - } - - lookupJobs(instance: Record, key: string) { - const methodRef = instance[key]; - const hasJobMeta = Reflect.hasMetadata(JOB_NAME, instance, key); - if (!hasJobMeta) return; - const jobName = Reflect.getMetadata(JOB_NAME, instance, key); - QueueMetadata.addJob(jobName, { - options: Reflect.getMetadata(JOB_OPTIONS, instance, key), - target: methodRef.bind(instance), - }); - } -} diff --git a/package-lock.json b/package-lock.json index 1ff3a67..93c0400 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@intentjs/core", - "version": "0.1.26", + "version": "0.1.27", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "@intentjs/core", - "version": "0.1.26", + "version": "0.1.27", "license": "MIT", "dependencies": { "@nestjs/config": "^3.2.0", From bf784e3e13f13c5cf83449382b6ea5f6665752f7 Mon Sep 17 00:00:00 2001 From: Vinayak Sarawagi Date: Sun, 1 Sep 2024 00:31:29 +0530 Subject: [PATCH 2/2] eslint fixes --- lib/database/repositories/database.ts | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/lib/database/repositories/database.ts b/lib/database/repositories/database.ts index b809deb..6776d50 100644 --- a/lib/database/repositories/database.ts +++ b/lib/database/repositories/database.ts @@ -1,5 +1,5 @@ import { Knex, Knex as KnexType } from 'knex'; -import { PrimitiveValue , Expression } from 'objection'; +import { PrimitiveValue, Expression } from 'objection'; import { BaseModel } from '../baseModel'; import { ModelNotFound } from '../exceptions'; import { RepositoryError } from '../exceptions/repoError'; @@ -82,6 +82,7 @@ export class DatabaseRepository } for (const key in inputs) { + // eslint-disable-next-line @typescript-eslint/no-unused-expressions Array.isArray(inputs[key] as unknown as any) ? query.whereIn( key, @@ -201,6 +202,7 @@ export class DatabaseRepository const query = this.query(); for (const key in inputs) { + // eslint-disable-next-line @typescript-eslint/no-unused-expressions Array.isArray(inputs[key]) ? query.whereIn(key, inputs[key] as unknown as any[]) : query.where(key, inputs[key] as unknown as any); @@ -229,7 +231,6 @@ export class DatabaseRepository payload: number | string | Array | Record, ): Promise { await model.$relatedQuery(relation).relate(payload); - return; } /** @@ -247,7 +248,6 @@ export class DatabaseRepository if (Array.isArray(payload) && payload.length > 0) { await model.$relatedQuery(relation).relate(payload); } - return; } /** @@ -261,7 +261,6 @@ export class DatabaseRepository const query = this.query(); query.where(where); await query.chunk(cb, size); - return; } /**