diff --git a/app/assets/javascripts/discourse/app/app.js b/app/assets/javascripts/discourse/app/app.js index fc51dd47d9a..e303100c63d 100644 --- a/app/assets/javascripts/discourse/app/app.js +++ b/app/assets/javascripts/discourse/app/app.js @@ -37,7 +37,7 @@ const Discourse = Application.extend({ Object.keys(requirejs._eak_seen).forEach((key) => { if (/\/pre\-initializers\//.test(key)) { this.initializer(this._prepareInitializer(key)); - } else if (/\/initializers\//.test(key)) { + } else if (/\/(api\-)?initializers\//.test(key)) { this.instanceInitializer(this._prepareInitializer(key)); } }); diff --git a/app/assets/javascripts/discourse/app/lib/api.js b/app/assets/javascripts/discourse/app/lib/api.js new file mode 100644 index 00000000000..51a933f67ad --- /dev/null +++ b/app/assets/javascripts/discourse/app/lib/api.js @@ -0,0 +1,18 @@ +import { withPluginApi } from "discourse/lib/plugin-api"; + +/** + * apiInitializer(version, apiCodeCallback, opts) + * + * An API to simplify the creation of initializers for plugins/themes by removing + * some of the boilerplate. + */ +let _apiInitializerId = 0; +export function apiInitializer(version, cb, opts) { + return { + name: `api-initializer${_apiInitializerId++}`, + after: "inject-objects", + initialize() { + return withPluginApi(version, cb, opts); + }, + }; +}