diff --git a/package.json b/package.json index 8e1e2790..d806a2c7 100644 --- a/package.json +++ b/package.json @@ -61,9 +61,9 @@ "mongodb-memory-server": "^8.9.3", "nyc": "^15.1.0", "ora": "^6.1.2", - "semver": "^7.3.7", + "semver": "^7.3.8", "supertest": "^6.3.0", - "typescript": "4.7.4" + "typescript": "4.8.4" }, "packageManager": "yarn@3.2.3" } diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index 9fae227b..e6fb04a1 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -48,7 +48,7 @@ "require-resolve-hook": "^1.1.0", "saslprep": "^1.0.3", "schemastery": "^3.5.4", - "semver": "^7.3.7", + "semver": "^7.3.8", "serialize-javascript": "^6.0.0", "superagent": "^8.0.2", "thirty-two": "^1.0.2", diff --git a/packages/hydrooj/src/entry/worker.ts b/packages/hydrooj/src/entry/worker.ts index 735219f1..f3affce7 100644 --- a/packages/hydrooj/src/entry/worker.ts +++ b/packages/hydrooj/src/entry/worker.ts @@ -40,7 +40,7 @@ export async function apply(ctx: Context) { await storage.loadStorageService(); await require('../service/server').apply(ctx); // Make sure everything is ready and then start main entry - if (argv.options.watch) await ctx.loader.reloadPlugin(ctx, 'hydrooj/src/service/watcher', {}); + if (argv.options.watch) ctx.plugin(require('../service/watcher').default, {}); await ctx.root.start(); require('../lib/index'); await lib(pending, fail, ctx); diff --git a/packages/hydrooj/src/interface.ts b/packages/hydrooj/src/interface.ts index 26c2d739..c3ed3ff9 100644 --- a/packages/hydrooj/src/interface.ts +++ b/packages/hydrooj/src/interface.ts @@ -726,7 +726,8 @@ declare global { addons: string[], } } - var bus: typeof import('./service/bus'); // eslint-disable-line + /** @deprecated */ + var bus: Context; // eslint-disable-line var app: Context; // eslint-disable-line var Hydro: HydroGlobal; // eslint-disable-line var addons: string[]; // eslint-disable-line diff --git a/packages/hydrooj/src/model/setting.ts b/packages/hydrooj/src/model/setting.ts index 69a2cf37..9aef9f35 100644 --- a/packages/hydrooj/src/model/setting.ts +++ b/packages/hydrooj/src/model/setting.ts @@ -70,7 +70,7 @@ export const Setting = ( export const PreferenceSetting = (...settings: _Setting[]) => { for (const setting of settings) { - if (PREFERENCE_SETTINGS.find((s) => s.key === setting.key)) throw new Error(`Duplicate setting key: ${setting.key}`); + if (PREFERENCE_SETTINGS.find((s) => s.key === setting.key)) logger.warn(`Duplicate setting key: ${setting.key}`); PREFERENCE_SETTINGS.push(setting); SETTINGS.push(setting); SETTINGS_BY_KEY[setting.key] = setting; @@ -78,7 +78,7 @@ export const PreferenceSetting = (...settings: _Setting[]) => { }; export const AccountSetting = (...settings: _Setting[]) => { for (const setting of settings) { - if (ACCOUNT_SETTINGS.find((s) => s.key === setting.key)) throw new Error(`Duplicate setting key: ${setting.key}`); + if (ACCOUNT_SETTINGS.find((s) => s.key === setting.key)) logger.warn(`Duplicate setting key: ${setting.key}`); ACCOUNT_SETTINGS.push(setting); SETTINGS.push(setting); SETTINGS_BY_KEY[setting.key] = setting; @@ -86,21 +86,21 @@ export const AccountSetting = (...settings: _Setting[]) => { }; export const DomainUserSetting = (...settings: _Setting[]) => { for (const setting of settings) { - if (DOMAIN_USER_SETTINGS.find((s) => s.key === setting.key)) throw new Error(`Duplicate setting key: ${setting.key}`); + if (DOMAIN_USER_SETTINGS.find((s) => s.key === setting.key)) logger.warn(`Duplicate setting key: ${setting.key}`); DOMAIN_USER_SETTINGS.push(setting); DOMAIN_USER_SETTINGS_BY_KEY[setting.key] = setting; } }; export const DomainSetting = (...settings: _Setting[]) => { for (const setting of settings) { - if (DOMAIN_SETTINGS.find((s) => s.key === setting.key)) throw new Error(`Duplicate setting key: ${setting.key}`); + if (DOMAIN_SETTINGS.find((s) => s.key === setting.key)) logger.warn(`Duplicate setting key: ${setting.key}`); DOMAIN_SETTINGS.push(setting); DOMAIN_SETTINGS_BY_KEY[setting.key] = setting; } }; export const SystemSetting = (...settings: _Setting[]) => { for (const setting of settings) { - if (SYSTEM_SETTINGS.find((s) => s.key === setting.key)) throw new Error(`Duplicate setting key: ${setting.key}`); + if (SYSTEM_SETTINGS.find((s) => s.key === setting.key)) logger.warn(`Duplicate setting key: ${setting.key}`); SYSTEM_SETTINGS.push(setting); SYSTEM_SETTINGS_BY_KEY[setting.key] = setting; } diff --git a/packages/hydrooj/src/service/bus.ts b/packages/hydrooj/src/service/bus.ts index 240a9204..3b99c2ca 100644 --- a/packages/hydrooj/src/service/bus.ts +++ b/packages/hydrooj/src/service/bus.ts @@ -126,3 +126,4 @@ export const serial: any = app.parallel.bind(app); export const broadcast = app.broadcast.bind(app); global.Hydro.service.bus = app as any; +global.bus = app; diff --git a/packages/onlyoffice/index.ts b/packages/onlyoffice/index.ts index 412fd036..3b85312f 100644 --- a/packages/onlyoffice/index.ts +++ b/packages/onlyoffice/index.ts @@ -1,8 +1,22 @@ -import { SystemModel, UiContextBase } from 'hydrooj'; +import { Context, SystemModel, UiContextBase } from 'hydrooj'; declare module 'hydrooj' { interface UiContextBase { onlyofficeApi?: string; } } -UiContextBase.onlyofficeApi = SystemModel.get('onlyoffice.api'); + +export function apply(ctx: Context) { + Object.defineProperty(UiContextBase, 'onlyofficeApi', { + configurable: true, + enumerable: true, + get() { + return SystemModel.get('onlyoffice.api'); + }, + }); + ctx.on('dispose', () => { + Object.defineProperty(UiContextBase, 'onlyofficeApi', { + enumerable: false, + }); + }); +} diff --git a/packages/ui-default/entry.js b/packages/ui-default/entry.js index a065836e..866a9186 100644 --- a/packages/ui-default/entry.js +++ b/packages/ui-default/entry.js @@ -1,4 +1,4 @@ -import $ from 'jquery'; +import * as $ from 'jquery'; import * as bus from './bus'; window.Hydro = { diff --git a/packages/ui-default/hydro.ts b/packages/ui-default/hydro.ts index 8642dfd6..2dceb8c2 100644 --- a/packages/ui-default/hydro.ts +++ b/packages/ui-default/hydro.ts @@ -26,8 +26,6 @@ function buildSequence(pages, type) { throw new Error("'type' should be one of 'before' or 'after'"); } } - // eslint bug - // eslint-disable-next-line react/jsx-indent return pages .filter((p) => p && p[`${type}Loading`]) .map((p) => ({ diff --git a/packages/utils/lib/utils.ts b/packages/utils/lib/utils.ts index 2821c394..7ca8f1e9 100644 --- a/packages/utils/lib/utils.ts +++ b/packages/utils/lib/utils.ts @@ -161,10 +161,23 @@ export namespace Time { export function errorMessage(err: Error | string) { const t = typeof err === 'string' ? err : err.stack; - const parsed = t - .split('\n') - .filter((i) => !i.includes(' (node:')) - .join('\n') + const lines = t.split('\n') + .filter((i) => !i.includes(' (node:') && !i.includes('(internal')); + let cursor = 1; + let count = 0; + while (cursor < lines.length) { + if (lines[cursor] !== lines[cursor - 1]) { + if (count) { + lines[cursor - 1] += ` [+${count}]`; + count = 0; + } + cursor++; + } else { + count++; + lines.splice(cursor, 1); + } + } + const parsed = lines.join('\n') .replace(/[A-Z]:\\.+\\@hydrooj\\/g, '@hydrooj\\') .replace(/\/.+\/@hydrooj\//g, '\\') .replace(/[A-Z]:\\.+\\hydrooj\\/g, 'hydrooj\\') diff --git a/packages/utils/package.json b/packages/utils/package.json index e3bb8711..917bbf94 100644 --- a/packages/utils/package.json +++ b/packages/utils/package.json @@ -14,7 +14,7 @@ "js-yaml": "^4.1.0", "moment-timezone": "^0.5.37", "mongodb": "^3.7.3", - "reggol": "^1.2.1", + "reggol": "^1.3.0", "source-map-support": "^0.5.21", "systeminformation": "^5.12.6" },