From 4d1cfb591d3990fffeda0c9a8979c92558a5fe03 Mon Sep 17 00:00:00 2001 From: adrien2p Date: Mon, 24 Jan 2022 00:25:30 +0100 Subject: [PATCH] Feat() Move decorator and types to this package --- .eslintrc.js | 2 +- assets/medusa-extender.jpeg | Bin 50888 -> 57146 bytes package.json | 2 +- src/decorators/onMedusaEvent.decorator.ts | 108 ++++++++++++++ src/decorators/types.ts | 34 +++++ src/index.ts | 3 + src/loaders/entities.loader.ts | 5 +- src/loaders/index.ts | 1 - src/loaders/tests/api.loader.spec.ts | 2 +- src/loaders/tests/entities.loader.spec.ts | 2 +- src/loaders/tests/repositories.loader.spec.ts | 2 +- src/loaders/tests/utils/asArray.ts | 2 +- src/medusa-event-emitter.ts | 134 +++++++++--------- src/medusa-utils.ts | 4 +- 14 files changed, 226 insertions(+), 75 deletions(-) create mode 100644 src/decorators/onMedusaEvent.decorator.ts create mode 100644 src/decorators/types.ts diff --git a/.eslintrc.js b/.eslintrc.js index a2a0656d..e211da5d 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -1,7 +1,7 @@ module.exports = { parser: '@typescript-eslint/parser', parserOptions: { - project: 'tsconfig.json', + project: 'tsconfig.lint.json', sourceType: 'module', }, plugins: ['@typescript-eslint/eslint-plugin'], diff --git a/assets/medusa-extender.jpeg b/assets/medusa-extender.jpeg index fb9c1ec259ec721db671bad992b4d3f09af1560b..c079f292180e83ed390a1dae8f217951b3d0ad6a 100644 GIT binary patch literal 57146 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 DEE-dm literal 50888 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 ./assets/medusa-extender.jpeg", + "build:graph": "./node_modules/.bin/ts_dependency_graph --filter 'types.ts' --base_path ./src --max_depth 4 --start ./src/medusa.ts | dot -T jpeg > ./assets/medusa-extender.jpeg", "test": "NODE_ENV=test ./node_modules/.bin/jest" }, "dependencies": { diff --git a/src/decorators/onMedusaEvent.decorator.ts b/src/decorators/onMedusaEvent.decorator.ts new file mode 100644 index 00000000..5743765d --- /dev/null +++ b/src/decorators/onMedusaEvent.decorator.ts @@ -0,0 +1,108 @@ +import { Constructor, MedusaServiceStatic } from '../types'; +import { EntityActions, EntityEventActionOptions, MedusaEventEmittedParams } from './types'; +import { medusaEventEmitter } from '../medusa-event-emitter'; + +export class OnMedusaEvent { + readonly #when: string; + #targetEntity: any; + + constructor(when?: string) { + this.#when = when; + } + + static get Before(): OnMedusaEvent { + return this.build('Before'); + } + + static get After(): OnMedusaEvent { + return this.build('After'); + } + + private static build(when: string): OnMedusaEvent { + return new OnMedusaEvent(when); + } + + public InsertEvent(entity: Constructor): string { + return `${this.#when}Insert${entity.name}`; + } + + public UpdateEvent(entity: Constructor): string { + return `${this.#when}Update${entity.name}`; + } + + public RemoveEvent(entity: Constructor): string { + return `${this.#when}Remove${entity.name}`; + } + + public Insert( + entity: Constructor, + options: EntityEventActionOptions = { async: false } + ): MethodDecorator { + return this.buildDecorator('Insert', entity, options); + } + + public Update( + entity: Constructor, + options: EntityEventActionOptions = { async: false } + ): MethodDecorator { + return this.buildDecorator('Update', entity, options); + } + + public Remove( + entity: Constructor, + options: EntityEventActionOptions = { async: false } + ): MethodDecorator { + return this.buildDecorator('Remove', entity, options); + } + + private buildDecorator( + action: EntityActions, + entity: Constructor, + options: EntityEventActionOptions = { async: false } + ) { + this.#targetEntity = entity; + return OnMedusaEntityEventDecorator(`${this.#when}${action}${entity.name}`, entity, options); + } +} + +/** + * Allow to decorate a class method to register it as an event handler for an entity event. + * @param eventName The event that we are listening to + * @param targetEntity The entity for which the event is triggered + * @param async Should the event be awaiting the result + * @param customMetatype The key that represent the class in the container it belongs to (Used to resolve the real instance) + */ +function OnMedusaEntityEventDecorator( + eventName: string, + targetEntity: Constructor, + { async, customMetatype }: { async: boolean; customMetatype?: MedusaServiceStatic } = { + async: false, + } +): MethodDecorator { + return (target: MedusaServiceStatic, propertyKey: string, descriptor: PropertyDescriptor): void => { + const original = descriptor.value; + descriptor.value = async function ({ + values, + resolveOrReject, + }: MedusaEventEmittedParams): Promise { + if (!(values.event.entity instanceof targetEntity)) { + return; + } + + const promise = original.apply(this, [values]); + if (async) { + return promise + .then((res: unknown) => { + return resolveOrReject(null, res); + }) + .catch((err: Error) => { + return resolveOrReject(err); + }); + } else { + return resolveOrReject(); + } + }; + + medusaEventEmitter.register(eventName, propertyKey, customMetatype ?? target); + }; +} diff --git a/src/decorators/types.ts b/src/decorators/types.ts new file mode 100644 index 00000000..916df95d --- /dev/null +++ b/src/decorators/types.ts @@ -0,0 +1,34 @@ +import { EntityManager, InsertEvent, RemoveEvent, UpdateEvent } from 'typeorm'; +import { MedusaServiceStatic } from '../types'; + +export type EntityEventActionOptions = { + async: boolean; + customMetatype?: MedusaServiceStatic; +}; + +export type EntityActions = 'Insert' | 'Update' | 'Remove'; + +/** + * Event types that can be emitted. + */ +export type EntityEventType = TEntityActions extends 'Insert' + ? InsertEvent + : TEntityActions extends 'Update' + ? UpdateEvent + : RemoveEvent; + +/** + * The arguments expected by the {@link OnMedusaEvent} decorator. + */ +export type MedusaEventEmittedParams = { + values: MedusaEventHandlerParams; + resolveOrReject: (err?: Error, res?: unknown) => void; +}; + +/** + * The arguments expected by the event handler. + */ +export type MedusaEventHandlerParams = { + event: EntityEventType; + transactionalEntityManager?: EntityManager; +}; diff --git a/src/index.ts b/src/index.ts index be1fc855..1b364945 100644 --- a/src/index.ts +++ b/src/index.ts @@ -2,6 +2,9 @@ export * from './medusa'; export * from './medusa-event-emitter'; export * from './types'; +export * from './decorators/onMedusaEvent.decorator'; +export * from './decorators/types'; + import { Utils } from './medusa-utils'; export const MedusaUtils = { attachOrReplaceEntitySubscriber: Utils.attachOrReplaceEntitySubscriber, diff --git a/src/loaders/entities.loader.ts b/src/loaders/entities.loader.ts index 6dddf387..4a8e0e70 100644 --- a/src/loaders/entities.loader.ts +++ b/src/loaders/entities.loader.ts @@ -47,6 +47,9 @@ async function overrideEntity(entity: MedusaEntityStatic): Promise { const originalEntity = await import('@medusajs/medusa/dist/models/' + fileName); originalEntity[entity.overriddenType.name] = entity; - const preparedLog = Utils.prepareLog('MedusaLoader#entitiesLoader', `Entity overridden - ${entity.overriddenType.name}`); + const preparedLog = Utils.prepareLog( + 'MedusaLoader#entitiesLoader', + `Entity overridden - ${entity.overriddenType.name}` + ); console.log(preparedLog); } diff --git a/src/loaders/index.ts b/src/loaders/index.ts index 73d0dcac..22bdbfd6 100644 --- a/src/loaders/index.ts +++ b/src/loaders/index.ts @@ -1,4 +1,3 @@ -export * from './middlewares.loader'; export * from './services.loader'; export * from './routes.loader'; export * from './api.loader'; diff --git a/src/loaders/tests/api.loader.spec.ts b/src/loaders/tests/api.loader.spec.ts index d4a70b4c..82075fa4 100644 --- a/src/loaders/tests/api.loader.spec.ts +++ b/src/loaders/tests/api.loader.spec.ts @@ -27,4 +27,4 @@ describe('API loader', () => { medusaApiLoader(cradle); expect(middlewaresLoader).toHaveBeenCalled(); }); -}); \ No newline at end of file +}); diff --git a/src/loaders/tests/entities.loader.spec.ts b/src/loaders/tests/entities.loader.spec.ts index 4a0e1ad8..b2db34ea 100644 --- a/src/loaders/tests/entities.loader.spec.ts +++ b/src/loaders/tests/entities.loader.spec.ts @@ -61,4 +61,4 @@ describe('Entities loader', () => { expect(container.hasRegistration(Another.resolutionKey)).toBeTruthy(); }); }); -}); \ No newline at end of file +}); diff --git a/src/loaders/tests/repositories.loader.spec.ts b/src/loaders/tests/repositories.loader.spec.ts index c623ca7a..55841744 100644 --- a/src/loaders/tests/repositories.loader.spec.ts +++ b/src/loaders/tests/repositories.loader.spec.ts @@ -66,4 +66,4 @@ describe('Repositories loader', () => { expect(container.hasRegistration(AnotherRepository.resolutionKey)).toBeTruthy(); }); }); -}); \ No newline at end of file +}); diff --git a/src/loaders/tests/utils/asArray.ts b/src/loaders/tests/utils/asArray.ts index dbf532fc..556fad8c 100644 --- a/src/loaders/tests/utils/asArray.ts +++ b/src/loaders/tests/utils/asArray.ts @@ -2,4 +2,4 @@ export function asArray(resolvers) { return { resolve: (container, opts) => resolvers.map((r) => container.build(r, opts)), }; -} \ No newline at end of file +} diff --git a/src/medusa-event-emitter.ts b/src/medusa-event-emitter.ts index c5e2593e..43e0d24c 100644 --- a/src/medusa-event-emitter.ts +++ b/src/medusa-event-emitter.ts @@ -1,87 +1,93 @@ import { EventEmitter } from 'events'; import { AwilixContainer } from 'awilix'; -import { MedusaServiceStatic } from './types'; +import { MedusaServiceStatic, Metatype } from './types'; /** * A listener descriptor. */ type ListenerDescriptor = { - eventName: string | symbol; - propertyName: string; - metatype: MedusaServiceStatic; + eventName: string | symbol; + propertyName: string; + metatype: Metatype; }; /** * Extended event emitter to register methods that must be call when certain events are triggered and relay the handling to the API package */ class MedusaEventEmitter extends EventEmitter { - #listeners: Set = new Set(); + #listeners: Set = new Set(); - constructor() { - super(); - } + constructor() { + super(); + } - /** - * Register a new event handler. - * @param eventName The name of the event that has to be triggered - * @param propertyName The name of the class property that will handle the event - * @param metatype The object that contains the property above - */ - public register(eventName: string | symbol, propertyName: string, metatype: MedusaServiceStatic): void { - const descriptor = { eventName, propertyName, metatype }; - if (this.#listeners.has(descriptor)) { - return; - } - this.#listeners.add(descriptor); - } + /** + * Register a new event handler. + * @param eventName The name of the event that has to be triggered + * @param propertyName The name of the class property that will handle the event + * @param metatype The object that contains the property above + */ + public register(eventName: string | symbol, propertyName: string, metatype: MedusaServiceStatic): void { + const descriptor = { eventName, propertyName, metatype }; + if (this.#listeners.has(descriptor)) { + return; + } + this.#listeners.add(descriptor); + } - /** - * Apply all event handlers hold by the `listenerDescriptor`. - * @param container The IoC container that allow to resolve instance - */ - public registerListeners(container: AwilixContainer): void { - this.unregisterListeners(); + /** + * Apply all event handlers hold by the `listenerDescriptor`. + * @param container The IoC container that allow to resolve instance + */ + public registerListeners(container: AwilixContainer): void { + this.unregisterListeners(); - for (const listenerDescriptor of this.#listeners.values()) { - const { eventName, metatype, propertyName } = listenerDescriptor; - const metatypeName = metatype.resolutionKey ?? metatype.name; - const formattedMetatypeName = `${ - metatypeName.charAt(0).toLowerCase() + metatypeName.slice(1, metatypeName.length) - }`; - const metatypeInstance = ((container as any).has(`${formattedMetatypeName}`) - && container.resolve(`${formattedMetatypeName}`)); - this.on(eventName, metatypeInstance[propertyName].bind(metatypeInstance)); - } - } + for (const listenerDescriptor of this.#listeners.values()) { + const { eventName, metatype, propertyName } = listenerDescriptor; + if ((metatype?.constructor as MedusaServiceStatic).resolutionKey) { + const name = (metatype?.constructor as MedusaServiceStatic).resolutionKey; + const metatypeInstance = (container as any).has(name) && container.resolve(name); + this.on(eventName, metatypeInstance[propertyName].bind(metatypeInstance)); + } else { + const metatypeName = metatype?.constructor.name; + const formattedMetatypeName = `${ + metatypeName.charAt(0).toLowerCase() + metatypeName.slice(1, metatypeName.length) + }`; + const metatypeInstance = + (container as any).has(`${formattedMetatypeName}`) && container.resolve(`${formattedMetatypeName}`); + this.on(eventName, metatypeInstance[propertyName].bind(metatypeInstance)); + } + } + } - public unregisterListeners(): void { - for (const listenerDescriptor of this.#listeners.values()) { - const { eventName } = listenerDescriptor; - this.removeAllListeners(eventName); - } - } + public unregisterListeners(): void { + for (const listenerDescriptor of this.#listeners.values()) { + const { eventName } = listenerDescriptor; + this.removeAllListeners(eventName); + } + } - /** - * Emit an asynchrone event entity based and wait for the result. - * @param eventName The event that must be triggered - * @param values The data that are passed to the event handler - */ - public async emitAsync(eventName: string | symbol, values: Record): Promise { - const eventListenerCount = this.listenerCount(eventName); - if (!eventListenerCount) { - return Promise.resolve(); - } + /** + * Emit an asynchrone event entity based and wait for the result. + * @param eventName The event that must be triggered + * @param values The data that are passed to the event handler + */ + public async emitAsync(eventName: string | symbol, values: Record): Promise { + const eventListenerCount = this.listenerCount(eventName); + if (!eventListenerCount) { + return Promise.resolve(); + } - return new Promise((resolve, reject) => { - this.emit(eventName, { - values, - resolveOrReject: (err?: Error, res?: unknown) => { - if (err) return reject(err); - return resolve(res); - }, - }); - }); - } + return new Promise((resolve, reject) => { + this.emit(eventName, { + values, + resolveOrReject: (err?: Error, res?: unknown) => { + if (err) return reject(err); + return resolve(res); + }, + }); + }); + } } /** diff --git a/src/medusa-utils.ts b/src/medusa-utils.ts index 0db83b6b..3e5f51ac 100644 --- a/src/medusa-utils.ts +++ b/src/medusa-utils.ts @@ -67,9 +67,7 @@ export class Utils { */ static prepareLog(context: string, description: string): string { const date = new Date().toLocaleString('en-US', { hour12: true }); - return `${chalk.blue(`[Server] -`)} ${date} ${chalk.yellow(`[${context}]`)} ${chalk.blue( - description - )}`; + return `${chalk.blue(`[Server] -`)} ${date} ${chalk.yellow(`[${context}]`)} ${chalk.blue(description)}`; } /**