Commit 5e804213 authored by nanahira's avatar nanahira

version

parent 8e61cfd5
......@@ -553,6 +553,12 @@ export class AppModule {}
## 更新历史
### 2.4.0
* 适配新版 Koishi 。
* 增加了从 koishi-thirdeye 移植而来的 empty 和 `@UseBeforeEvent`
* 修复了一个问题,这个问题曾导致 `@UseEvent` 的 prepend 不生效。
### 2.3.0
* 适配新版 Koishi 的 http server 启动机制。
......
......@@ -35,7 +35,7 @@
"eslint-plugin-prettier": "^3.4.1",
"express": "^4.17.1",
"jest": "^27.4.4",
"koishi": "^4.0.0-beta.4",
"koishi": "^4.0.0-beta.5",
"prettier": "^2.4.1",
"reflect-metadata": "^0.1.13",
"rxjs": "^7.4.0",
......@@ -1043,14 +1043,14 @@
"dev": true
},
"node_modules/@koishijs/core": {
"version": "4.0.0-beta.4",
"resolved": "https://registry.npmjs.org/@koishijs/core/-/core-4.0.0-beta.4.tgz",
"integrity": "sha512-i+66ZR3mSAIm1pJmC21QID8QhqJDdJ7zmZ8pCn3mPcfZFGiwL8MDMvwuDvG2ceCyILmtzmXwstURrc2tjB+QPg==",
"version": "4.0.0-beta.5",
"resolved": "https://registry.npmjs.org/@koishijs/core/-/core-4.0.0-beta.5.tgz",
"integrity": "sha512-r7cM7FM0QJ+6BYWFAe/H+8WkI85ffAFEyKWA3li71Pf26lPQ6h5Ms2bbIpHCsq/VFR7/EFQjzYWxK+wmwX/wwQ==",
"dev": true,
"dependencies": {
"@koishijs/utils": "^5.0.0-beta.1",
"fastest-levenshtein": "^1.0.12",
"schemastery": "^2.1.0"
"schemastery": "^2.1.1"
},
"engines": {
"node": ">=12.0.0"
......@@ -5338,13 +5338,13 @@
}
},
"node_modules/koishi": {
"version": "4.0.0-beta.4",
"resolved": "https://registry.npmjs.org/koishi/-/koishi-4.0.0-beta.4.tgz",
"integrity": "sha512-H0ci/bZ+wHDCnNmLFM125RI+cdprz3McJLEbyK43tGsGuf2y13BuFb+j1ovb6FBRuT3SXlDqH+BpVMlCV2ZaVg==",
"version": "4.0.0-beta.5",
"resolved": "https://registry.npmjs.org/koishi/-/koishi-4.0.0-beta.5.tgz",
"integrity": "sha512-and+I4Ed7tgHg9uX2HgyVyUwCU2PWujhG17JXu6dvC+XXlwrkwh2BB5oF18OAKUMNLwXXPl2rQZmvvG+Zj6aUw==",
"dev": true,
"dependencies": {
"@koa/router": "^10.1.1",
"@koishijs/core": "^4.0.0-beta.4",
"@koishijs/core": "^4.0.0-beta.5",
"@koishijs/utils": "^5.0.0-beta.1",
"@types/koa": "*",
"@types/koa__router": "*",
......@@ -6399,9 +6399,9 @@
}
},
"node_modules/schemastery": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/schemastery/-/schemastery-2.1.0.tgz",
"integrity": "sha512-D5wGNn5lc8GnhTzSl2ClH6RwUB69NMUrIXn6qWJVZSSq1fJtEodL9zXoJUbzoLQlL7rGMuO6entajhZvJY25Tw==",
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/schemastery/-/schemastery-2.1.1.tgz",
"integrity": "sha512-ORumqcbLhe4fp+eN5COUFejTxvdfAUCQCFVF4c69HuFdexbU8kgqQsOHjJ3ZXokV15xstwWHPwAVQ8/AwldROw==",
"dev": true
},
"node_modules/semver": {
......@@ -8250,14 +8250,14 @@
}
},
"@koishijs/core": {
"version": "4.0.0-beta.4",
"resolved": "https://registry.npmjs.org/@koishijs/core/-/core-4.0.0-beta.4.tgz",
"integrity": "sha512-i+66ZR3mSAIm1pJmC21QID8QhqJDdJ7zmZ8pCn3mPcfZFGiwL8MDMvwuDvG2ceCyILmtzmXwstURrc2tjB+QPg==",
"version": "4.0.0-beta.5",
"resolved": "https://registry.npmjs.org/@koishijs/core/-/core-4.0.0-beta.5.tgz",
"integrity": "sha512-r7cM7FM0QJ+6BYWFAe/H+8WkI85ffAFEyKWA3li71Pf26lPQ6h5Ms2bbIpHCsq/VFR7/EFQjzYWxK+wmwX/wwQ==",
"dev": true,
"requires": {
"@koishijs/utils": "^5.0.0-beta.1",
"fastest-levenshtein": "^1.0.12",
"schemastery": "^2.1.0"
"schemastery": "^2.1.1"
}
},
"@koishijs/utils": {
......@@ -11554,13 +11554,13 @@
}
},
"koishi": {
"version": "4.0.0-beta.4",
"resolved": "https://registry.npmjs.org/koishi/-/koishi-4.0.0-beta.4.tgz",
"integrity": "sha512-H0ci/bZ+wHDCnNmLFM125RI+cdprz3McJLEbyK43tGsGuf2y13BuFb+j1ovb6FBRuT3SXlDqH+BpVMlCV2ZaVg==",
"version": "4.0.0-beta.5",
"resolved": "https://registry.npmjs.org/koishi/-/koishi-4.0.0-beta.5.tgz",
"integrity": "sha512-and+I4Ed7tgHg9uX2HgyVyUwCU2PWujhG17JXu6dvC+XXlwrkwh2BB5oF18OAKUMNLwXXPl2rQZmvvG+Zj6aUw==",
"dev": true,
"requires": {
"@koa/router": "^10.1.1",
"@koishijs/core": "^4.0.0-beta.4",
"@koishijs/core": "^4.0.0-beta.5",
"@koishijs/utils": "^5.0.0-beta.1",
"@types/koa": "*",
"@types/koa__router": "*",
......@@ -12366,9 +12366,9 @@
}
},
"schemastery": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/schemastery/-/schemastery-2.1.0.tgz",
"integrity": "sha512-D5wGNn5lc8GnhTzSl2ClH6RwUB69NMUrIXn6qWJVZSSq1fJtEodL9zXoJUbzoLQlL7rGMuO6entajhZvJY25Tw==",
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/schemastery/-/schemastery-2.1.1.tgz",
"integrity": "sha512-ORumqcbLhe4fp+eN5COUFejTxvdfAUCQCFVF4c69HuFdexbU8kgqQsOHjJ3ZXokV15xstwWHPwAVQ8/AwldROw==",
"dev": true
},
"semver": {
......
......@@ -33,7 +33,7 @@
"peerDependencies": {
"@nestjs/common": "^8.0.0",
"@nestjs/core": "^8.0.0",
"koishi": "^4.0.0-beta.4",
"koishi": "^4.0.0-beta.5",
"reflect-metadata": "^0.1.13",
"rxjs": "^7.4.0"
},
......@@ -55,7 +55,7 @@
"eslint-plugin-prettier": "^3.4.1",
"express": "^4.17.1",
"jest": "^27.4.4",
"koishi": "^4.0.0-beta.4",
"koishi": "^4.0.0-beta.5",
"prettier": "^2.4.1",
"reflect-metadata": "^0.1.13",
"rxjs": "^7.4.0",
......
......@@ -149,17 +149,22 @@ export class KoishiMetascanService {
case 'onevent':
const { data: eventData } = regData as DoRegisterConfig<'onevent'>;
const eventName = eventData.name;
baseContext.on(eventData.name, (...args: any[]) =>
methodFun.call(instance, ...args),
baseContext.on(
eventName,
(...args: any[]) => methodFun.call(instance, ...args),
eventData.prepend,
);
// special events
/*if (typeof eventName === 'string' && eventName.startsWith('service/')) {
const serviceName = eventName.slice(8);
if (baseContext[serviceName] != null) {
methodFun.call(instance);
}
}*/
break;
case 'beforeEvent':
const {
data: beforeEventData,
} = regData as DoRegisterConfig<'beforeEvent'>;
const beforeEventName = beforeEventData.name;
baseContext.before(
beforeEventName,
(...args: any[]) => this[methodKey](...args),
beforeEventData.prepend,
);
case 'plugin':
const pluginDesc: KoishiModulePlugin<any> = await methodFun.call(
instance,
......@@ -184,6 +189,9 @@ export class KoishiMetascanService {
for (const commandDef of commandDefs) {
command = commandDef(command) || command;
}
if (commandData.config?.empty) {
break;
}
const interceptorDefs = _.uniq(
this.metaFetcher.getPropertyMetadataArray(
KoishiCommandInterceptorDef,
......
......@@ -12,6 +12,8 @@ import {
MetadataArrayMap,
} from './koishi.constants';
import {
BeforeEventName,
CommandConfigExtended,
CommandDefinitionFun,
CommandPutConfig,
CommandPutConfigMap,
......@@ -108,24 +110,34 @@ export const UseEvent = (name: EventName, prepend?: boolean): MethodDecorator =>
KoishiDoRegister,
GenerateMappingStruct('onevent', { name, prepend }),
);
export const BeforeEvent = (
name: BeforeEventName,
prepend?: boolean,
): MethodDecorator =>
SetMetadata(
KoishiDoRegister,
GenerateMappingStruct('beforeEvent', { name, prepend }),
);
export const UsePlugin = (): MethodDecorator =>
SetMetadata(KoishiDoRegister, GenerateMappingStruct('plugin'));
export function UseCommand<D extends string>(
def: D,
config?: Command.Config,
config?: CommandConfigExtended,
): MethodDecorator;
export function UseCommand<D extends string>(
def: D,
desc: string,
config?: Command.Config,
config?: CommandConfigExtended,
): MethodDecorator;
export function UseCommand(
def: string,
...args: [Command.Config?] | [string, Command.Config?]
...args: [CommandConfigExtended?] | [string, CommandConfigExtended?]
): MethodDecorator {
const desc = typeof args[0] === 'string' ? (args.shift() as string) : '';
const config = args[0] as Command.Config;
const config = args[0] as CommandConfigExtended;
return (obj, key: string, des) => {
const putOptions: CommandPutConfig<keyof CommandPutConfigMap>[] =
Reflect.getMetadata(KoishiCommandPutDef, obj.constructor, key) ||
......
......@@ -2,6 +2,7 @@ import { ModuleMetadata, Provider, Type } from '@nestjs/common';
import {
App,
Argv,
BeforeEventMap,
Channel,
Command,
Context,
......@@ -106,17 +107,23 @@ export interface KoishiModuleAsyncOptions
extraProviders?: Provider[];
}
export type EventName = keyof EventMap;
export interface EventNameAndPrepend {
name: EventName;
export interface CommonEventNameAndPrepend<T extends keyof any> {
name: T;
prepend?: boolean;
}
export type EventName = keyof EventMap;
export type EventNameAndPrepend = CommonEventNameAndPrepend<EventName>;
export type BeforeEventName = keyof BeforeEventMap;
export type BeforeEventNameAndPrepend = CommonEventNameAndPrepend<BeforeEventName>;
export type ContextFunction<T> = (ctx: Context) => T;
export type OnContextFunction = ContextFunction<Context>;
export interface DoRegisterConfigDataMap {
middleware: boolean; // prepend
onevent: EventNameAndPrepend;
beforeEvent: BeforeEventNameAndPrepend;
plugin: never;
command: CommandRegisterConfig;
}
......@@ -148,10 +155,14 @@ export type DoRegisterConfig<
export interface CommandRegisterConfig<D extends string = string> {
def: D;
desc?: string;
config?: Command.Config;
config?: CommandConfigExtended;
putOptions?: CommandPutConfig<keyof CommandPutConfigMap>[];
}
export interface CommandConfigExtended extends Command.Config {
empty?: boolean;
}
export interface CommandOptionConfig {
name: string;
desc: string;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment