Merge pull request #20547 from strapi/fix/lifecycle-order

fix: lifecycle order, provider 1st during bootstrap
This commit is contained in:
Alexandre BODIN 2024-06-18 16:00:55 +02:00 committed by GitHub
commit fa2d17519f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 13 additions and 5 deletions

View File

@ -400,7 +400,8 @@ class Strapi extends Container implements Core.Strapi {
await provider.register?.(this);
}
await this.runLifecyclesFunctions(utils.LIFECYCLES.REGISTER);
await this.runPluginsLifecycles(utils.LIFECYCLES.REGISTER);
await this.runUserLifecycles(utils.LIFECYCLES.REGISTER);
// NOTE: Swap type customField for underlying data type
utils.convertCustomFieldType(this);
@ -458,12 +459,14 @@ class Strapi extends Container implements Core.Strapi {
await this.contentAPI.permissions.registerActions();
await this.runLifecyclesFunctions(utils.LIFECYCLES.BOOTSTRAP);
await this.runPluginsLifecycles(utils.LIFECYCLES.BOOTSTRAP);
for (const provider of providers) {
await provider.bootstrap?.(this);
}
await this.runUserLifecycles(utils.LIFECYCLES.BOOTSTRAP);
return this;
}
@ -491,12 +494,14 @@ class Strapi extends Container implements Core.Strapi {
async destroy() {
this.log.info('Shutting down Strapi');
await this.runLifecyclesFunctions(utils.LIFECYCLES.DESTROY);
await this.runPluginsLifecycles(utils.LIFECYCLES.DESTROY);
for (const provider of providers) {
await provider.destroy?.(this);
}
await this.runUserLifecycles(utils.LIFECYCLES.DESTROY);
await this.server.destroy();
this.eventHub.destroy();
@ -511,10 +516,12 @@ class Strapi extends Container implements Core.Strapi {
this.log.info('Strapi has been shut down');
}
async runLifecyclesFunctions(lifecycleName: 'register' | 'bootstrap' | 'destroy') {
async runPluginsLifecycles(lifecycleName: 'register' | 'bootstrap' | 'destroy') {
// plugins
await this.get('modules')[lifecycleName]();
}
async runUserLifecycles(lifecycleName: 'register' | 'bootstrap' | 'destroy') {
// user
const userLifecycleFunction = this.app && this.app[lifecycleName];
if (isFunction(userLifecycleFunction)) {

View File

@ -84,7 +84,8 @@ export interface Strapi extends Container {
stop(exitCode?: number): never;
register(): Promise<Strapi>;
bootstrap(): Promise<Strapi>;
runLifecyclesFunctions(lifecycleName: 'register' | 'bootstrap' | 'destroy'): Promise<void>;
runPluginsLifecycles(lifecycleName: 'register' | 'bootstrap' | 'destroy'): Promise<void>;
runUserLifecycles(lifecycleName: 'register' | 'bootstrap' | 'destroy'): Promise<void>;
getModel<TSchemaUID extends UID.Schema>(
uid: TSchemaUID
): TSchemaUID extends UID.ContentType