This repository has been archived on 2023-03-18. You can view files and clone it, but cannot push or open issues or pull requests.
osr-discourse-src/app/assets/javascripts/discourse/tests/helpers/temporary-module-helper.js
David Taylor 9f022112e3
DEV: Support theme/plugin overrides of colocated component templates (#19237)
To theme/plugin developers, the process is the same as for overriding non-colocated component templates. Once merged, this should allow us to seamlessly convert all of core's component templates to be colocated.
2022-11-30 14:14:38 +00:00

41 lines
1.3 KiB
JavaScript

import DiscourseTemplateMap from "discourse-common/lib/discourse-template-map";
import { expireConnectorCache } from "discourse/lib/plugin-connectors";
const modifications = [];
function generateTemporaryModule(defaultExport) {
return function (_exports) {
Object.defineProperty(_exports, "__esModule", {
value: true,
});
_exports.default = defaultExport;
};
}
export function registerTemporaryModule(moduleName, defaultExport) {
const modificationData = {
moduleName,
existingModule: requirejs.entries[moduleName],
};
delete requirejs.entries[moduleName];
define(moduleName, ["exports"], generateTemporaryModule(defaultExport));
modifications.push(modificationData);
expireConnectorCache();
DiscourseTemplateMap.setModuleNames(Object.keys(requirejs.entries));
}
export function cleanupTemporaryModuleRegistrations() {
for (const modificationData of modifications.reverse()) {
const { moduleName, existingModule } = modificationData;
delete requirejs.entries[moduleName];
if (existingModule) {
requirejs.entries[moduleName] = existingModule;
}
}
if (modifications.length) {
expireConnectorCache();
DiscourseTemplateMap.setModuleNames(Object.keys(requirejs.entries));
}
modifications.clear();
}