diff --git a/js/src/admin/index.js b/js/src/admin/index.js index 67ddd35c82..d5212c69a2 100644 --- a/js/src/admin/index.js +++ b/js/src/admin/index.js @@ -10,8 +10,9 @@ export { app }; // Export public API // Export compat API -import compat from './compat'; +import compatObj from './compat'; +import proxifyCompat from '../common/utils/proxifyCompat'; -compat.app = app; +compatObj.app = app; -export { compat }; +export const compat = proxifyCompat(compatObj, 'admin'); diff --git a/js/src/common/compat.js b/js/src/common/compat.js index 83036d1c5b..5df3654231 100644 --- a/js/src/common/compat.js +++ b/js/src/common/compat.js @@ -21,6 +21,7 @@ import stringToColor from './utils/stringToColor'; import subclassOf from './utils/subclassOf'; import SuperTextarea from './utils/SuperTextarea'; import patchMithril from './utils/patchMithril'; +import proxifyCompat from './utils/proxifyCompat'; import classList from './utils/classList'; import extractText from './utils/extractText'; import formatNumber from './utils/formatNumber'; @@ -94,6 +95,7 @@ export default { 'utils/SuperTextarea': SuperTextarea, 'utils/setRouteWithForcedRefresh': setRouteWithForcedRefresh, 'utils/patchMithril': patchMithril, + 'utils/proxifyCompat': proxifyCompat, 'utils/classList': classList, 'utils/extractText': extractText, 'utils/formatNumber': formatNumber, diff --git a/js/src/common/utils/proxifyCompat.ts b/js/src/common/utils/proxifyCompat.ts new file mode 100644 index 0000000000..8ac7f05c9e --- /dev/null +++ b/js/src/common/utils/proxifyCompat.ts @@ -0,0 +1,10 @@ +export default (compat: { [key: string]: any }, namespace: string) => { + // regex to replace common/ and NAMESPACE/ for core & core extensions + // e.g. admin/utils/extract --> utils/extract + // e.g. tags/common/utils/sortTags --> tags/utils/sortTags + const regex = new RegExp(`(\\w+\\/)?(${namespace}|common)\\/`); + + return new Proxy(compat, { + get: (obj, prop: string) => obj[prop] || obj[prop.replace(regex, '$1')], + }); +}; diff --git a/js/src/forum/index.js b/js/src/forum/index.js index 2a5e26fbd9..bdd5289d48 100644 --- a/js/src/forum/index.js +++ b/js/src/forum/index.js @@ -15,8 +15,9 @@ export { app }; // export { IndexPage, DicsussionList } from './components'; // Export compat API -import compat from './compat'; +import compatObj from './compat'; +import proxifyCompat from '../common/utils/proxifyCompat'; -compat.app = app; +compatObj.app = app; -export { compat }; +export const compat = proxifyCompat(compatObj, 'forum');