From 69966e5fe92acdf8f24eadfa2cea059fa8592afb Mon Sep 17 00:00:00 2001 From: undefined Date: Sat, 5 Oct 2024 20:38:41 +0800 Subject: [PATCH] bug fixes --- framework/eslint-config/package.json | 4 +- framework/framework/package.json | 2 +- package.json | 1 + packages/hydrooj/locales/ko.yaml | 1 + packages/hydrooj/locales/zh_TW.yaml | 1 + packages/hydrooj/package.json | 8 ++-- packages/hydrooj/src/commands/install.ts | 2 + .../components/scratchpad/index.tsx | 7 +++- packages/ui-default/lazyload.ts | 41 +++++++++++++++++-- packages/ui-default/package.json | 8 ++-- packages/utils/package.json | 2 +- 11 files changed, 61 insertions(+), 16 deletions(-) diff --git a/framework/eslint-config/package.json b/framework/eslint-config/package.json index d755e8f85..58e7276d6 100644 --- a/framework/eslint-config/package.json +++ b/framework/eslint-config/package.json @@ -4,12 +4,12 @@ "license": "MIT", "main": "react.yaml", "dependencies": { - "@stylistic/eslint-plugin": "^2.8.0", + "@stylistic/eslint-plugin": "^2.9.0", "@typescript-eslint/eslint-plugin": "^8.8.0", "@typescript-eslint/parser": "^8.8.0", "eslint-config-airbnb": "^19.0.4", "eslint-plugin-github": "^5.0.2", - "eslint-plugin-import": "2.30.0", + "eslint-plugin-import": "2.31.0", "eslint-plugin-jsx-a11y": "^6.10.0", "eslint-plugin-react": "^7.37.1", "eslint-plugin-react-hooks": "^4.6.2", diff --git a/framework/framework/package.json b/framework/framework/package.json index f2e64ad86..1c9458b16 100644 --- a/framework/framework/package.json +++ b/framework/framework/package.json @@ -27,7 +27,7 @@ "@types/koa": "^2.15.0", "@types/koa-compress": "^4.0.6", "@types/koa-router": "^7.4.8", - "@types/lodash": "^4.17.9", + "@types/lodash": "^4.17.10", "@types/saslprep": "^1.0.3", "@types/ws": "^8.5.12" } diff --git a/package.json b/package.json index 00c2b9e49..9b3dfb29c 100644 --- a/package.json +++ b/package.json @@ -62,6 +62,7 @@ "wtfnode": "^0.9.3" }, "resolutions": { + "cosmokit": "1.6.3", "monaco-editor": "0.50.0" } } diff --git a/packages/hydrooj/locales/ko.yaml b/packages/hydrooj/locales/ko.yaml index a5e9c72d4..aec6eac96 100644 --- a/packages/hydrooj/locales/ko.yaml +++ b/packages/hydrooj/locales/ko.yaml @@ -235,6 +235,7 @@ Domain {0} not found.: 그룹 {0} 없음 Domain ID cannot be changed once the domain is created.: 그룹 ID는 수정할 수 없습니다. Domain ID: 그룹 ID Domain Settings: 그룹 설정 +domain_create: 그룹 생성 domain_dashboard: 그룹 게시판 domain_discussion: 그룹 토론 domain_edit: 그룹 수정 diff --git a/packages/hydrooj/locales/zh_TW.yaml b/packages/hydrooj/locales/zh_TW.yaml index 28d182d58..f7df250cf 100644 --- a/packages/hydrooj/locales/zh_TW.yaml +++ b/packages/hydrooj/locales/zh_TW.yaml @@ -148,6 +148,7 @@ Domain {0} already exists.: 域 {0} 已經存在。 Domain {0} is bulit-in and cannot be modified.: 域 {0} 為內建,不可修改。 Domain {0} not found.: 域 {0} 不存在。 Domain ID cannot be changed once the domain is created.: 在創建後不能更改 ID。 +domain_create: 創建域 domain_main: 首頁 Don't have an account?: 還沒有賬戶? Done: 已結束 diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index 254c2bf67..34928c305 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -12,10 +12,10 @@ }, "preferUnplugged": true, "dependencies": { - "@aws-sdk/client-s3": "3.664.0", - "@aws-sdk/lib-storage": "3.664.0", - "@aws-sdk/s3-presigned-post": "3.664.0", - "@aws-sdk/s3-request-presigner": "3.664.0", + "@aws-sdk/client-s3": "3.665.0", + "@aws-sdk/lib-storage": "3.665.0", + "@aws-sdk/s3-presigned-post": "3.665.0", + "@aws-sdk/s3-request-presigner": "3.665.0", "@graphql-tools/schema": "^10.0.6", "@hydrooj/framework": "workspace:^", "@hydrooj/utils": "workspace:^", diff --git a/packages/hydrooj/src/commands/install.ts b/packages/hydrooj/src/commands/install.ts index cd104f829..b2db45b69 100644 --- a/packages/hydrooj/src/commands/install.ts +++ b/packages/hydrooj/src/commands/install.ts @@ -87,6 +87,8 @@ export function register(cli: CAC) { src: _src, lastUpdate: Date.now(), })); + logger.success(`Successfully installed ${_src}.`); + logger.info('Please restart Hydro to apply changes.'); }); cli.command('uninstall [package]').action(async (name) => { if (!name) { diff --git a/packages/ui-default/components/scratchpad/index.tsx b/packages/ui-default/components/scratchpad/index.tsx index 2f215f931..820dacaf2 100644 --- a/packages/ui-default/components/scratchpad/index.tsx +++ b/packages/ui-default/components/scratchpad/index.tsx @@ -60,9 +60,14 @@ declare module '../../context' { } } +let scratchpad: ScratchpadService; + export default function ScratchpadContainer() { const store = useStore(); - ctx.set('scratchpad', new ScratchpadService(store)); + if (!scratchpad) { + scratchpad = new ScratchpadService(store); + ctx.set('scratchpad', scratchpad); + } const [, updateState] = React.useState(); const forceUpdate = React.useCallback(() => updateState({}), []); React.useEffect(() => { diff --git a/packages/ui-default/lazyload.ts b/packages/ui-default/lazyload.ts index e70557a92..0ed81fb20 100644 --- a/packages/ui-default/lazyload.ts +++ b/packages/ui-default/lazyload.ts @@ -8,6 +8,7 @@ export default async function load(name: string) { if (lazyModules[name]) return lazyModules[name]; const tag = document.createElement('script'); tag.src = `/lazy/${window.lazyloadMetadata[`${name}.lazy.js`]}/${name}.lazy.js`; + console.log('loading module: ', name); lazyModules[name] = new Promise((resolve, reject) => { tag.onerror = reject; const timeout = setTimeout(reject, 30000); @@ -19,16 +20,50 @@ export default async function load(name: string) { document.body.appendChild(tag); return lazyModules[name]; } + +const val: Record = {}; +/** @deprecated */ +async function legacyLoadExternalModule(target: string) { + if (val[target]) return val[target]; + const ele = document.createElement('script'); + ele.src = target; + await new Promise((resolve, reject) => { + ele.onload = resolve; + ele.onerror = reject; + document.head.appendChild(ele); + }); + val[target] = window.exports; + return val[target]; +} + export { load }; export async function getFeatures(name: string) { const legacy = Object.keys(window.externalModules).filter((i) => i === name || i.startsWith(`${name}@`)) .map((i) => window.externalModules[i]); const c = Object.keys(features).filter((i) => i === name || i.startsWith(`${name}@`)) .map((i) => features[i]); - console.log(legacy, c, features); + console.log('query features for:', name, 'legacy:', legacy, 'selected:', c, 'all:', features); return c.concat(legacy); } -export function provideFeature(name: string, content: string | (() => Promise)) { - features[name] = content; +export const loaded = []; +export async function loadFeatures(name: string, ...args: any[]) { + if (loaded.includes(name)) return; + loaded.push(name); + for (const item of await getFeatures(name)) { + let apply = typeof item === 'function' + ? item + : (item.startsWith('http') || item.startsWith('/')) + ? await legacyLoadExternalModule(item) + : (await load(item)).apply; + if (typeof apply !== 'function') apply = apply.default || apply.apply; + if (typeof apply === 'function') await apply(...args); + } +} + +export function provideFeature(name: string, content: string | (() => Promise)) { + console.debug('Providing feature', name); + if (features[name]) console.warn('Feature', name, 'already provided'); + features[name] = content; + if (loaded.includes(name)) console.warn('Feature', name, 'already loaded'); } diff --git a/packages/ui-default/package.json b/packages/ui-default/package.json index 73dc72033..85509f71b 100644 --- a/packages/ui-default/package.json +++ b/packages/ui-default/package.json @@ -14,7 +14,7 @@ "cli": false }, "devDependencies": { - "@blueprintjs/core": "^5.13.0", + "@blueprintjs/core": "^5.13.1", "@cordisjs/core": "3.18.1", "@fontsource/dm-mono": "^5.1.0", "@fontsource/fira-code": "^5.1.0", @@ -25,8 +25,8 @@ "@fontsource/source-code-pro": "^5.1.0", "@fontsource/ubuntu-mono": "^5.1.0", "@hydrooj/utils": "workspace:^", - "@sentry/browser": "^8.32.0", - "@sentry/webpack-plugin": "^2.22.4", + "@sentry/browser": "^8.33.1", + "@sentry/webpack-plugin": "^2.22.5", "@simplewebauthn/browser": "9.0.1", "@svgr/webpack": "^8.1.0", "@types/jquery": "^3.5.31", @@ -37,7 +37,7 @@ "@types/nunjucks": "^3.2.6", "@types/pickadate": "^3.5.35", "@types/qrcode": "^1.5.5", - "@types/react": "^18.3.10", + "@types/react": "^18.3.11", "@types/react-dom": "^18.3.0", "@types/redux-logger": "^3.0.13", "@types/uuid": "^10.0.0", diff --git a/packages/utils/package.json b/packages/utils/package.json index 5600f56b5..9e62583c5 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -14,7 +14,7 @@ "js-yaml": "^4.1.0", "moment-timezone": "^0.5.45", "mongodb": "^5.9.2", - "reggol": "^1.7.0", + "reggol": "^1.7.1", "search-query-parser": "^1.6.0", "systeminformation": "^5.23.5" },