DEV: Use optionalRequire instead of require/requirejs (#36504)

This commit is contained in:
Jarek Radosz
2025-12-08 14:57:46 +01:00
committed by GitHub
parent 5cc2d3f711
commit 11dae2820a
5 changed files with 26 additions and 21 deletions
+6 -3
View File
@@ -1,11 +1,14 @@
import { optionalRequire } from "./utilities";
export function applyLocalDates(dates, siteSettings, timezone) {
if (!siteSettings.discourse_local_dates_enabled) {
return;
}
const _applyLocalDates = requirejs(
"discourse/plugins/discourse-local-dates/initializers/discourse-local-dates"
).applyLocalDates;
const _applyLocalDates = optionalRequire(
"discourse/plugins/discourse-local-dates/initializers/discourse-local-dates",
"applyLocalDates"
);
_applyLocalDates(dates, siteSettings, timezone);
}
@@ -37,6 +37,7 @@ import {
initUserStatusHtml,
renderUserStatusHtml,
} from "discourse/lib/user-status-on-autocomplete";
import { optionalRequire } from "discourse/lib/utilities";
import virtualElementFromTextRange from "discourse/lib/virtual-element-from-text-range";
import { waitForClosedKeyboard } from "discourse/lib/wait-for-keyboard";
import DAutocompleteModifier, {
@@ -201,9 +202,9 @@ export default class ChatComposer extends Component {
@action
insertDiscourseLocalDate() {
// JIT import because local-dates isn't necessarily enabled
const LocalDatesCreateModal =
require("discourse/plugins/discourse-local-dates/discourse/components/modal/local-dates-create").default;
const LocalDatesCreateModal = optionalRequire(
"discourse/plugins/discourse-local-dates/discourse/components/modal/local-dates-create"
);
this.modal.show(LocalDatesCreateModal, {
model: {
@@ -5,7 +5,7 @@ import { modifier } from "ember-modifier";
import DecoratedHtml from "discourse/components/decorated-html";
import domFromString from "discourse/lib/dom-from-string";
import lightbox from "discourse/lib/lightbox";
import { escapeExpression } from "discourse/lib/utilities";
import { escapeExpression, optionalRequire } from "discourse/lib/utilities";
import { and } from "discourse/truth-helpers";
import { i18n } from "discourse-i18n";
import ChatUpload from "discourse/plugins/chat/discourse/components/chat-upload";
@@ -65,18 +65,18 @@ export default class ChatMessageCollapser extends Component {
}
get lazyVideoComponent() {
const path =
"discourse/plugins/discourse-lazy-videos/discourse/components/lazy-video";
return require.has(path) && require(path).default;
return optionalRequire(
"discourse/plugins/discourse-lazy-videos/discourse/components/lazy-video"
);
}
lazyVideoCooked(elements) {
const getVideoAttributes = optionalRequire(
"discourse/plugins/discourse-lazy-videos/lib/lazy-video-attributes"
);
return elements.reduce((acc, e) => {
if (this.siteSettings.lazy_videos_enabled && lazyVideoPredicate(e)) {
const getVideoAttributes = requirejs(
"discourse/plugins/discourse-lazy-videos/lib/lazy-video-attributes"
).default;
const videoAttributes = getVideoAttributes(e);
if (this.siteSettings[`lazy_${videoAttributes.providerName}_enabled`]) {
@@ -1,5 +1,6 @@
import { applyLocalDates } from "discourse/lib/local-dates";
import { withPluginApi } from "discourse/lib/plugin-api";
import { optionalRequire } from "discourse/lib/utilities";
export default {
name: "chat-plugin-decorators",
@@ -18,9 +19,10 @@ export default {
);
if (siteSettings.spoiler_enabled) {
const applySpoiler = requirejs(
const applySpoiler = optionalRequire(
"discourse/plugins/spoiler-alert/lib/apply-spoiler"
).default;
);
api.decorateChatMessage(
(element) => {
element.querySelectorAll(".spoiler").forEach((spoiler) => {
@@ -1,4 +1,5 @@
import { withPluginApi } from "discourse/lib/plugin-api";
import { optionalRequire } from "discourse/lib/utilities";
import AdminReportEmotion from "../components/admin-report-emotion";
export default {
@@ -10,11 +11,9 @@ export default {
return;
}
// We need to import dynamically with CommonJS require because
// using ESM import in an initializer would cause the component to be imported globally
// and cause errors for non-admin users since the component is only available to admins
const AdminReportSentimentAnalysis =
require("discourse/plugins/discourse-ai/discourse/components/admin-report-sentiment-analysis").default;
const AdminReportSentimentAnalysis = optionalRequire(
"discourse/plugins/discourse-ai/discourse/components/admin-report-sentiment-analysis"
);
withPluginApi((api) => {
api.registerReportModeComponent("emotion", AdminReportEmotion);