DEV: Replace message-bus:main with service:message-bus (#17691)

This will allow consumers to inject it using `messageBus: service()` in preparation for the removal of implicit injections in Ember 4.0. `message-bus:main` is still available and will print a deprecation notice.

The MessageBus library is not en ember object, and doesn't need access to any of our injections. Therefore, we can set up a simple class which defines itself as a 'Service Factory', and returns the MessageBus library in the `create` method.
This commit is contained in:
David Taylor 2022-07-27 17:15:58 +01:00 committed by GitHub
parent 296aad430a
commit 96abd72387
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
9 changed files with 33 additions and 14 deletions

View File

@ -11,7 +11,7 @@ export default {
site.set("banner", banner); site.set("banner", banner);
const messageBus = container.lookup("message-bus:main"); const messageBus = container.lookup("service:message-bus");
if (!messageBus) { if (!messageBus) {
return; return;
} }

View File

@ -7,7 +7,7 @@ export default {
name: "live-development", name: "live-development",
initialize(container) { initialize(container) {
const messageBus = container.lookup("message-bus:main"); const messageBus = container.lookup("service:message-bus");
const session = container.lookup("session:main"); const session = container.lookup("session:main");
// Preserve preview_theme_id=## and pp=async-flamegraph parameters across pages // Preserve preview_theme_id=## and pp=async-flamegraph parameters across pages

View File

@ -10,7 +10,7 @@ export default {
after: "message-bus", after: "message-bus",
initialize(container) { initialize(container) {
const messageBus = container.lookup("message-bus:main"); const messageBus = container.lookup("service:message-bus");
if (!messageBus) { if (!messageBus) {
return; return;

View File

@ -12,7 +12,7 @@ export default {
} }
const siteSettings = container.lookup("site-settings:main"); const siteSettings = container.lookup("site-settings:main");
const messageBus = container.lookup("message-bus:main"); const messageBus = container.lookup("service:message-bus");
const keyValueStore = container.lookup("service:key-value-store"); const keyValueStore = container.lookup("service:key-value-store");
const currentUser = container.lookup("current-user:main"); const currentUser = container.lookup("current-user:main");
LogsNotice.reopenClass(Singleton, { LogsNotice.reopenClass(Singleton, {

View File

@ -40,7 +40,7 @@ export default {
return; return;
} }
const messageBus = container.lookup("message-bus:main"), const messageBus = container.lookup("service:message-bus"),
user = container.lookup("current-user:main"), user = container.lookup("current-user:main"),
siteSettings = container.lookup("site-settings:main"); siteSettings = container.lookup("site-settings:main");

View File

@ -4,7 +4,7 @@ export default {
after: "message-bus", after: "message-bus",
initialize(container) { initialize(container) {
const messageBus = container.lookup("message-bus:main"); const messageBus = container.lookup("service:message-bus");
if (!messageBus) { if (!messageBus) {
return; return;
} }

View File

@ -20,7 +20,7 @@ export default {
initialize(container) { initialize(container) {
const user = container.lookup("current-user:main"); const user = container.lookup("current-user:main");
const bus = container.lookup("message-bus:main"); const bus = container.lookup("service:message-bus");
const appEvents = container.lookup("service:app-events"); const appEvents = container.lookup("service:app-events");
if (user) { if (user) {

View File

@ -2,7 +2,6 @@ import TopicTrackingState, {
startTracking, startTracking,
} from "discourse/models/topic-tracking-state"; } from "discourse/models/topic-tracking-state";
import DiscourseLocation from "discourse/lib/discourse-location"; import DiscourseLocation from "discourse/lib/discourse-location";
import MessageBus from "message-bus-client";
import Session from "discourse/models/session"; import Session from "discourse/models/session";
import Site from "discourse/models/site"; import Site from "discourse/models/site";
import User from "discourse/models/user"; import User from "discourse/models/user";
@ -17,9 +16,6 @@ export function registerObjects(app) {
} }
app.__registeredObjects__ = true; app.__registeredObjects__ = true;
// TODO: This should be included properly
app.register("message-bus:main", MessageBus, { instantiate: false });
const siteSettings = app.SiteSettings; const siteSettings = app.SiteSettings;
app.register("site-settings:main", siteSettings, { instantiate: false }); app.register("site-settings:main", siteSettings, { instantiate: false });
} }
@ -98,6 +94,15 @@ export default {
dropFrom: "3.0.0", dropFrom: "3.0.0",
}); });
deprecateRegistration({
app,
container,
oldName: "message-bus:main",
newName: "service:message-bus",
since: "2.9.0.beta7",
dropFrom: "3.0.0",
});
let siteSettings = container.lookup("site-settings:main"); let siteSettings = container.lookup("site-settings:main");
const currentUser = User.current(); const currentUser = User.current();
@ -105,7 +110,7 @@ export default {
app.currentUser = currentUser; app.currentUser = currentUser;
const topicTrackingState = TopicTrackingState.create({ const topicTrackingState = TopicTrackingState.create({
messageBus: MessageBus, messageBus: container.lookup("service:message-bus"),
siteSettings, siteSettings,
currentUser, currentUser,
}); });
@ -129,14 +134,19 @@ export default {
app.inject(t, "site", "site:main"); app.inject(t, "site", "site:main");
app.inject(t, "searchService", "service:search"); app.inject(t, "searchService", "service:search");
app.inject(t, "session", "session:main"); app.inject(t, "session", "session:main");
app.inject(t, "messageBus", "message-bus:main"); app.inject(t, "messageBus", "service:message-bus");
app.inject(t, "siteSettings", "site-settings:main"); app.inject(t, "siteSettings", "site-settings:main");
app.inject(t, "topicTrackingState", "topic-tracking-state:main"); app.inject(t, "topicTrackingState", "topic-tracking-state:main");
app.inject(t, "keyValueStore", "service:key-value-store"); app.inject(t, "keyValueStore", "service:key-value-store");
}); });
app.inject("service", "session", "session:main"); app.inject("service", "session", "session:main");
app.inject("service", "messageBus", "message-bus:main"); injectServiceIntoService({
container,
app,
property: "messageBus",
specifier: "service:message-bus",
});
app.inject("service", "siteSettings", "site-settings:main"); app.inject("service", "siteSettings", "site-settings:main");
app.inject("service", "topicTrackingState", "topic-tracking-state:main"); app.inject("service", "topicTrackingState", "topic-tracking-state:main");
injectServiceIntoService({ injectServiceIntoService({

View File

@ -0,0 +1,9 @@
import MessageBus from "message-bus-client";
export default class MessageBusService {
static isServiceFactory = true;
static create() {
return MessageBus;
}
}