diff --git a/packages/hydrooj/src/interface.ts b/packages/hydrooj/src/interface.ts index 56e94538e..f2bf5bbbf 100644 --- a/packages/hydrooj/src/interface.ts +++ b/packages/hydrooj/src/interface.ts @@ -622,7 +622,7 @@ export interface ProblemSearchOptions { export type ProblemSearch = (domainId: string, q: string, options?: ProblemSearchOptions) => Promise; -export type UIInjectableFields = 'ProblemAdd' | 'Notification' | 'Nav' | 'UserDropdown' | 'DomainManage' | 'ControlPanel' | 'Route'; +export type UIInjectableFields = 'ProblemAdd' | 'Notification' | 'Nav' | 'UserDropdown' | 'DomainManage' | 'ControlPanel'; export interface UI { nodes: Record; getNodes: typeof import('./lib/ui').getNodes; diff --git a/packages/ui-next/index.ts b/packages/ui-next/index.ts index 2f4f0d741..58e3489e7 100644 --- a/packages/ui-next/index.ts +++ b/packages/ui-next/index.ts @@ -5,7 +5,7 @@ import react from '@vitejs/plugin-react'; import c2k from 'koa2-connect/ts'; import { createServer, type Plugin } from 'vite'; import { serializer } from '@hydrooj/framework'; -import { Context, getNodes } from 'hydrooj'; +import { Context } from 'hydrooj'; const INJECT_MARKER = ''; const buildInject = (str: string) => ``; @@ -23,10 +23,14 @@ function hydroPlugins(): Plugin { }, load(id) { if (id === resolvedVirtualModuleId) { - const plugins = getNodes('Route'); - if (!plugins) return 'export default [];'; - const imports = plugins.map((p, i) => `import plugin${i} from '${p.args.entry}';`).join('\n'); - const exports = `export default [${plugins.map((p, i) => `plugin${i}`).join(', ')}];`; + const entries: string[] = []; + for (const addon of Object.values(global.addons)) { + const uiEntry = path.resolve(addon, 'ui', 'index.ts'); + if (fs.existsSync(uiEntry)) entries.push(uiEntry); + } + if (!entries.length) return 'export default [];'; + const imports = entries.map((e, i) => `import plugin${i} from '${e}';`).join('\n'); + const exports = `export default [${entries.map((_, i) => `plugin${i}`).join(', ')}];`; return `${imports}\n${exports}`; } },