From 2b9f98895eaca255e01278674b11cd7cb69b388f Mon Sep 17 00:00:00 2001 From: Philip Korsholm <88927411+pKorsholm@users.noreply.github.com> Date: Wed, 17 Jan 2024 11:46:44 +0100 Subject: [PATCH] Feat(modules-sdk): Run hooks on application start (#6111) **What** - run `onApplicationStart` hook when starting modules --- .changeset/neat-seals-help.md | 5 +++++ packages/modules-sdk/src/medusa-app.ts | 18 +++++++++++------- packages/modules-sdk/src/medusa-module.ts | 16 ++++++++++++++++ 3 files changed, 32 insertions(+), 7 deletions(-) create mode 100644 .changeset/neat-seals-help.md diff --git a/.changeset/neat-seals-help.md b/.changeset/neat-seals-help.md new file mode 100644 index 0000000000..f3b0c6d196 --- /dev/null +++ b/.changeset/neat-seals-help.md @@ -0,0 +1,5 @@ +--- +"@medusajs/modules-sdk": patch +--- + +feat(modules-sdk): run hooks on application start diff --git a/packages/modules-sdk/src/medusa-app.ts b/packages/modules-sdk/src/medusa-app.ts index 9ba593ab93..062a38a5ed 100644 --- a/packages/modules-sdk/src/medusa-app.ts +++ b/packages/modules-sdk/src/medusa-app.ts @@ -308,12 +308,16 @@ export async function MedusaApp( })) } - return { - modules: allModules, - link: remoteLink, - query, - entitiesMap: schema.getTypeMap(), - notFound, - runMigrations, + try { + return { + modules: allModules, + link: remoteLink, + query, + entitiesMap: schema.getTypeMap(), + notFound, + runMigrations, + } + } finally { + await MedusaModule.onApplicationStart() } } diff --git a/packages/modules-sdk/src/medusa-module.ts b/packages/modules-sdk/src/medusa-module.ts index 19c036071e..6144d93ff8 100644 --- a/packages/modules-sdk/src/medusa-module.ts +++ b/packages/modules-sdk/src/medusa-module.ts @@ -1,5 +1,6 @@ import { ExternalModuleDeclaration, + IModuleService, InternalModuleDeclaration, LinkModuleDefinition, LoadedModule, @@ -85,6 +86,21 @@ export class MedusaModule { return MedusaModule.getModuleInstance(key) }) } + + public static onApplicationStart(): void { + for (const instances of MedusaModule.instances_.values()) { + for (const instance of Object.values(instances) as IModuleService[]) { + if (instance?.__hooks) { + instance.__hooks?.onApplicationStart + ?.bind(instance)() + .catch(() => { + // The module should handle this and log it + return void 0 + }) + } + } + } + } public static clearInstances(): void { MedusaModule.instances_.clear()