From e5ed861f1b6da99de8508c816ec7873a723b458e Mon Sep 17 00:00:00 2001 From: undefined Date: Wed, 16 Sep 2020 23:12:16 +0800 Subject: [PATCH] =?UTF-8?q?core:=20=E6=B7=BB=E5=8A=A0app/load=E9=92=A9?= =?UTF-8?q?=E5=AD=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- packages/hydrooj/package.json | 2 +- packages/hydrooj/src/entry/common.ts | 9 +++++++++ packages/hydrooj/src/interface.ts | 8 -------- packages/hydrooj/src/model/document.ts | 7 ++++--- packages/hydrooj/src/model/problem.ts | 3 ++- packages/hydrooj/src/model/system.ts | 3 ++- packages/hydrooj/src/model/user.ts | 5 +++-- packages/hydrooj/src/script/deleteUser.ts | 4 +++- packages/hydrooj/src/service/bus.ts | 11 +++++++++-- packages/hydrooj/src/typeutils.ts | 11 +++++++++++ 10 files changed, 44 insertions(+), 19 deletions(-) create mode 100644 packages/hydrooj/src/typeutils.ts diff --git a/packages/hydrooj/package.json b/packages/hydrooj/package.json index be3e41c57..9a21f6224 100644 --- a/packages/hydrooj/package.json +++ b/packages/hydrooj/package.json @@ -1,6 +1,6 @@ { "name": "hydrooj", - "version": "2.13.11", + "version": "2.13.12", "bin": "bin/hydrooj.js", "main": "dist/loader.js", "typings": "dist/loader.d.ts", diff --git a/packages/hydrooj/src/entry/common.ts b/packages/hydrooj/src/entry/common.ts index cc4370173..e32b8ef41 100644 --- a/packages/hydrooj/src/entry/common.ts +++ b/packages/hydrooj/src/entry/common.ts @@ -4,6 +4,7 @@ import fs from 'fs'; import path from 'path'; import yaml from 'js-yaml'; import { Logger } from '../logger'; +import * as bus from '../service/bus'; const logger = new Logger('common', true); @@ -57,6 +58,7 @@ export async function handler(pending: string[], fail: string[]) { } } } + await bus.serial('app/load/handler'); } export async function locale(pending: string[], fail: string[]) { @@ -80,6 +82,7 @@ export async function locale(pending: string[], fail: string[]) { } } } + await bus.serial('app/load/locale'); } export async function setting(pending: string[], fail: string[], modelSetting: typeof import('../model/setting')) { @@ -110,6 +113,7 @@ export async function setting(pending: string[], fail: string[], modelSetting: t } } } + await bus.serial('app/load/setting'); } export async function template(pending: string[], fail: string[]) { @@ -132,6 +136,7 @@ export async function template(pending: string[], fail: string[]) { } } } + await bus.serial('app/load/template'); } export async function uistatic(pending: string[], fail: string[]) { @@ -161,6 +166,7 @@ export async function model(pending: string[], fail: string[]) { } } } + await bus.serial('app/load/model'); } export async function lib(pending: string[], fail: string[]) { @@ -177,6 +183,7 @@ export async function lib(pending: string[], fail: string[]) { } } } + await bus.serial('app/load/lib'); } export async function service(pending: string[], fail: string[]) { @@ -193,6 +200,7 @@ export async function service(pending: string[], fail: string[]) { } } } + await bus.serial('app/load/service'); } export async function script(pending: string[], fail: string[], active: string[]) { @@ -210,4 +218,5 @@ export async function script(pending: string[], fail: string[], active: string[] } active.push(i); } + await bus.serial('app/load/script'); } diff --git a/packages/hydrooj/src/interface.ts b/packages/hydrooj/src/interface.ts index b72da173a..5685372ac 100644 --- a/packages/hydrooj/src/interface.ts +++ b/packages/hydrooj/src/interface.ts @@ -5,14 +5,6 @@ import { Dictionary, NumericDictionary } from 'lodash'; type document = typeof import('./model/document'); -export type NumberKeys = { - [K in keyof O]: number extends O[K] ? K : never -}[keyof O]; - -export type ArrayKeys = { - [K in keyof O]: P[] extends O[K] ? K : never -}[keyof O] - export interface System { _id: string, value: any, diff --git a/packages/hydrooj/src/model/document.ts b/packages/hydrooj/src/model/document.ts index 297369fef..bc32f605e 100644 --- a/packages/hydrooj/src/model/document.ts +++ b/packages/hydrooj/src/model/document.ts @@ -3,11 +3,12 @@ import assert from 'assert'; import { ObjectID, Cursor, FilterQuery, UpdateQuery, } from 'mongodb'; +import { + Pdoc, Ddoc, Drdoc, Tdoc, TrainingDoc, ProblemStatusDoc, +} from '../interface'; +import { NumberKeys, ArrayKeys } from '../typeutils'; import * as db from '../service/db'; import * as bus from '../service/bus'; -import { - Pdoc, Ddoc, Drdoc, Tdoc, TrainingDoc, NumberKeys, ArrayKeys, ProblemStatusDoc, -} from '../interface'; type DocID = ObjectID | string | number; diff --git a/packages/hydrooj/src/model/problem.ts b/packages/hydrooj/src/model/problem.ts index de51ed9b4..71d3b9804 100644 --- a/packages/hydrooj/src/model/problem.ts +++ b/packages/hydrooj/src/model/problem.ts @@ -6,8 +6,9 @@ import * as file from './file'; import * as document from './document'; import * as domain from './domain'; import { - Pdoc, Pdict, ProblemDataSource, ProblemStatusDoc, NumberKeys, + Pdoc, Pdict, ProblemDataSource, ProblemStatusDoc, } from '../interface'; +import { NumberKeys } from '../typeutils'; import { ProblemNotFoundError } from '../error'; import * as testdataConfig from '../lib/testdataConfig'; diff --git a/packages/hydrooj/src/model/system.ts b/packages/hydrooj/src/model/system.ts index 65498002b..c2329626b 100644 --- a/packages/hydrooj/src/model/system.ts +++ b/packages/hydrooj/src/model/system.ts @@ -1,5 +1,6 @@ import Lru from 'lru-cache'; -import { NumberKeys, SystemKeys } from '../interface'; +import { NumberKeys } from '../typeutils'; +import { SystemKeys } from '../interface'; import * as db from '../service/db'; const coll = db.collection('system'); diff --git a/packages/hydrooj/src/model/user.ts b/packages/hydrooj/src/model/user.ts index 4ee4314e5..ce52c1efc 100644 --- a/packages/hydrooj/src/model/user.ts +++ b/packages/hydrooj/src/model/user.ts @@ -6,6 +6,7 @@ import * as domain from './domain'; import { BUILTIN_USERS, PRIV } from './builtin'; import { UserNotFoundError, UserAlreadyExistError, LoginError } from '../error'; import { User as _User, Udoc, Udict } from '../interface'; +import { Value } from '../typeutils'; import pwhash from '../lib/hash.hydro'; import * as db from '../service/db'; import * as bus from '../service/bus'; @@ -172,11 +173,11 @@ export async function getByEmail(domainId: string, mail: string): Promise, $unset?: Value, ''>) { const op: any = {}; if ($set && Object.keys($set).length) op.$set = $set; if ($unset && Object.keys($unset).length) op.$unset = $unset; - return coll.findOneAndUpdate({ _id: uid }, op); + return await coll.findOneAndUpdate({ _id: uid }, op); } export function setEmail(uid: number, mail: string) { diff --git a/packages/hydrooj/src/script/deleteUser.ts b/packages/hydrooj/src/script/deleteUser.ts index f1ffd904b..27e6d0eb2 100644 --- a/packages/hydrooj/src/script/deleteUser.ts +++ b/packages/hydrooj/src/script/deleteUser.ts @@ -1,4 +1,6 @@ /* eslint-disable no-await-in-loop */ +import { Udoc } from '../interface'; +import { Value } from '../typeutils'; import * as user from '../model/user'; import * as document from '../model/document'; import * as setting from '../model/setting'; @@ -12,7 +14,7 @@ const collDocument = db.collection('document'); const collDomainUser = db.collection('domain.user'); const collRecord = db.collection('record'); -const $unset = { +const $unset: Value> = { regip: '', regat: '', loginat: '', loginip: '', }; for (const s of setting.PREFERENCE_SETTINGS) { diff --git a/packages/hydrooj/src/service/bus.ts b/packages/hydrooj/src/service/bus.ts index 94cec9dae..0693863e6 100644 --- a/packages/hydrooj/src/service/bus.ts +++ b/packages/hydrooj/src/service/bus.ts @@ -20,8 +20,15 @@ export type VoidReturn = Promise | void export interface EventMap { 'app/started': () => void - 'app/exit': () => Promise | void - 'dispose': () => void + 'app/load/lib': () => VoidReturn + 'app/load/locale': () => VoidReturn + 'app/load/template': () => VoidReturn + 'app/load/script': () => VoidReturn + 'app/load/setting': () => VoidReturn + 'app/load/model': () => VoidReturn + 'app/load/handler': () => VoidReturn + 'app/load/service': () => VoidReturn + 'app/exit': () => VoidReturn 'database/connect': (db: Db) => void diff --git a/packages/hydrooj/src/typeutils.ts b/packages/hydrooj/src/typeutils.ts new file mode 100644 index 000000000..59abdde3c --- /dev/null +++ b/packages/hydrooj/src/typeutils.ts @@ -0,0 +1,11 @@ +export type NumberKeys = { + [K in keyof O]: number extends O[K] ? K : never +}[keyof O]; + +export type ArrayKeys = { + [K in keyof O]: P[] extends O[K] ? K : never +}[keyof O] + +export type Value = { + [K in keyof O]: V +}