koishi-core
Advanced tools
Comparing version 1.2.0 to 1.3.0
@@ -6,3 +6,2 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const debug_1 = __importDefault(require("debug")); | ||
const escape_string_regexp_1 = __importDefault(require("escape-string-regexp")); | ||
@@ -17,4 +16,2 @@ const sender_1 = require("./sender"); | ||
const messages_1 = require("./messages"); | ||
const showLog = debug_1.default('koishi'); | ||
const showReceiverLog = debug_1.default('koishi:receiver'); | ||
const selfIds = new Set(); | ||
@@ -320,3 +317,3 @@ exports.appMap = {}; | ||
await Promise.all(tasks); | ||
showLog('started'); | ||
this.logger('app').debug('started'); | ||
this.receiver.emit('connect'); | ||
@@ -341,3 +338,3 @@ if (this.selfId && !this._isReady) { | ||
} | ||
showLog('stopped'); | ||
this.logger('app').debug('stopped'); | ||
this.receiver.emit('disconnect'); | ||
@@ -350,3 +347,3 @@ } | ||
continue; | ||
showReceiverLog(path, 'emits', event); | ||
this.logger('receiver').debug(path, 'emits', event); | ||
context.receiver.emit(event, ...payload); | ||
@@ -353,0 +350,0 @@ } |
"use strict"; | ||
var __importDefault = (this && this.__importDefault) || function (mod) { | ||
return (mod && mod.__esModule) ? mod : { "default": mod }; | ||
}; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
@@ -9,5 +6,3 @@ const messages_1 = require("./messages"); | ||
const util_1 = require("util"); | ||
const debug_1 = __importDefault(require("debug")); | ||
const parser_1 = require("./parser"); | ||
const showCommandLog = debug_1.default('koishi:command'); | ||
const defaultConfig = { | ||
@@ -211,3 +206,3 @@ authority: 1, | ||
// execute command | ||
showCommandLog('execute %s', this.name); | ||
this.context.logger('command').debug('execute %s', this.name); | ||
this.app.emitEvent(meta, 'command', argv); | ||
@@ -214,0 +209,0 @@ let skipped = false; |
@@ -22,2 +22,11 @@ /// <reference types="node" /> | ||
} | ||
export interface Logger { | ||
warn(format: any, ...param: any): void; | ||
info(format: any, ...param: any): void; | ||
debug(format: any, ...param: any): void; | ||
success(format: any, ...param: any): void; | ||
error(format: any, ...param: any): void; | ||
} | ||
export declare const logTypes: (keyof Logger)[]; | ||
export declare type LogEvents = 'logger/warn' | 'logger/info' | 'logger/debug' | 'logger/success' | 'logger/error'; | ||
export declare class Context { | ||
@@ -29,2 +38,3 @@ readonly identifier: string; | ||
database: Database; | ||
logger: (scope?: string) => Logger; | ||
receiver: Receiver; | ||
@@ -92,2 +102,8 @@ constructor(identifier: string, _scope: ContextScope); | ||
'error/middleware'(error: Error): any; | ||
'logger'(scope: string, message: string, type: keyof Logger): any; | ||
'logger/debug'(scope: string, message: string): any; | ||
'logger/info'(scope: string, message: string): any; | ||
'logger/error'(scope: string, message: string): any; | ||
'logger/warn'(scope: string, message: string): any; | ||
'logger/success'(scope: string, message: string): any; | ||
'ready'(): any; | ||
@@ -94,0 +110,0 @@ 'before-connect'(): any; |
@@ -36,2 +36,3 @@ "use strict"; | ||
const noopIdentifier = ContextScope.stringify(noopScope); | ||
exports.logTypes = ['warn', 'info', 'debug', 'success', 'error']; | ||
class Context { | ||
@@ -42,5 +43,15 @@ constructor(identifier, _scope) { | ||
this.receiver = new events_1.EventEmitter(); | ||
// prevent event emitter from crashing | ||
// https://nodejs.org/api/events.html#events_error_events | ||
this.receiver.on('error', koishi_utils_1.noop); | ||
this.receiver.on('error', (error) => { | ||
this.logger().warn(error); | ||
}); | ||
this.logger = (scope = '') => { | ||
const logger = {}; | ||
for (const type of exports.logTypes) { | ||
logger[type] = (...args) => { | ||
this.app.receiver.emit('logger', scope, util_1.format(...args), type); | ||
this.app.receiver.emit(`logger/${type}`, scope, util_1.format(...args)); | ||
}; | ||
} | ||
return logger; | ||
}; | ||
} | ||
@@ -47,0 +58,0 @@ inverse() { |
@@ -6,6 +6,4 @@ "use strict"; | ||
Object.defineProperty(exports, "__esModule", { value: true }); | ||
const debug_1 = __importDefault(require("debug")); | ||
const axios_1 = __importDefault(require("axios")); | ||
const koishi_utils_1 = require("koishi-utils"); | ||
const showSenderLog = debug_1.default('koishi:sender'); | ||
class SenderError extends Error { | ||
@@ -44,5 +42,5 @@ constructor(args, url, retcode) { | ||
async get(action, params = {}, silent = false) { | ||
showSenderLog('request %s %o', action, params); | ||
this.app.logger('sender').debug('request %s %o', action, params); | ||
const response = await this._get(action, koishi_utils_1.snakeCase(params)); | ||
showSenderLog('response %o', response); | ||
this.app.logger('sender').debug('response %o', response); | ||
const { data, retcode } = response; | ||
@@ -49,0 +47,0 @@ if (retcode === 0 && !silent) { |
@@ -15,2 +15,7 @@ /// <reference types="node" /> | ||
constructor(app: App); | ||
/** | ||
* representative app | ||
*/ | ||
get app(): App; | ||
protected debug(format: any, ...params: any[]): void; | ||
protected prepareMeta(data: any): Meta<import("./meta").PostType>; | ||
@@ -17,0 +22,0 @@ parseMeta(meta: Meta): string[]; |
@@ -14,3 +14,2 @@ "use strict"; | ||
const ws_1 = __importDefault(require("ws")); | ||
const debug_1 = __importDefault(require("debug")); | ||
const http = __importStar(require("http")); | ||
@@ -21,5 +20,2 @@ const messages_1 = require("./messages"); | ||
const util_1 = require("util"); | ||
const showServerLog = debug_1.default('koishi:server'); | ||
// @ts-ignore: @types/debug does not include the property | ||
showServerLog.inspectOpts.depth = 0; | ||
class Server { | ||
@@ -32,2 +28,12 @@ constructor(app) { | ||
} | ||
/** | ||
* representative app | ||
*/ | ||
get app() { | ||
return this.appList[0]; | ||
} | ||
debug(format, ...params) { | ||
var _a; | ||
(_a = this.app) === null || _a === void 0 ? void 0 : _a.logger('sender').debug(format, ...params); | ||
} | ||
prepareMeta(data) { | ||
@@ -37,3 +43,3 @@ const meta = koishi_utils_1.camelCase(data); | ||
// below version 3.4 | ||
meta.selfId = this.appList[0].selfId; | ||
meta.selfId = this.app.selfId; | ||
} | ||
@@ -230,3 +236,3 @@ else if (!this.appMap[meta.selfId]) { | ||
const data = JSON.parse(body); | ||
showServerLog('receive %o', data); | ||
this.debug('receive %o', data); | ||
const meta = this.prepareMeta(data); | ||
@@ -261,7 +267,7 @@ if (!meta) { | ||
async _listen() { | ||
showServerLog('http server opening'); | ||
const { port } = this.appList[0].options; | ||
this.debug('http server opening'); | ||
const { port } = this.app.options; | ||
this.server.listen(port); | ||
try { | ||
this.version = await this.appList[0].sender.getVersionInfo(); | ||
this.version = await this.app.sender.getVersionInfo(); | ||
} | ||
@@ -271,7 +277,7 @@ catch (error) { | ||
} | ||
showServerLog('http server listen to', port); | ||
this.debug('http server listen to', port); | ||
} | ||
_close() { | ||
this.server.close(); | ||
showServerLog('http server closed'); | ||
this.debug('http server closed'); | ||
} | ||
@@ -298,5 +304,5 @@ } | ||
return new Promise((resolve, reject) => { | ||
showServerLog('websocket client opening'); | ||
this.debug('websocket client opening'); | ||
const headers = {}; | ||
const { token, server } = this.appList[0].options; | ||
const { token, server } = this.app.options; | ||
if (token) | ||
@@ -318,3 +324,3 @@ headers.Authorization = `Bearer ${token}`; | ||
data = data.toString(); | ||
showServerLog('receive', data); | ||
this.debug('receive', data); | ||
let parsed; | ||
@@ -329,4 +335,3 @@ try { | ||
resolved = true; | ||
const { server } = this.appList[0].options; | ||
showServerLog('connect to ws server:', server); | ||
this.debug('connect to ws server:', this.app.options.server); | ||
resolve(); | ||
@@ -351,3 +356,3 @@ } | ||
this.socket.close(); | ||
showServerLog('websocket client closed'); | ||
this.debug('websocket client closed'); | ||
} | ||
@@ -354,0 +359,0 @@ } |
{ | ||
"name": "koishi-core", | ||
"description": "Core features for Koishi", | ||
"version": "1.2.0", | ||
"version": "1.3.0", | ||
"main": "dist/index.js", | ||
@@ -42,3 +42,2 @@ "typings": "dist/index.d.ts", | ||
"axios": "^0.19.1", | ||
"debug": "^4.1.1", | ||
"escape-string-regexp": "^2.0.0", | ||
@@ -45,0 +44,0 @@ "koishi-utils": "^1.0.2", |
# shiki-core | ||
[](https://github.com/koishijs/koishi/actions?query=workflow:CI) | ||
[](https://www.npmjs.com/package/koishi-core) | ||
A bot based on CoolQ HTTP API. | ||
Core features of Koishi. |
117699
5
2909
7
- Removeddebug@^4.1.1