Commit 5e804213 authored by nanahira's avatar nanahira

version

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