From 13455a1f8362ddaa1de4d3961465e9d5ab110e58 Mon Sep 17 00:00:00 2001 From: Shigma Date: Sat, 18 Jun 2022 04:52:26 +0800 Subject: [PATCH] refa: prevent hot reload when config file is being written --- packages/cli/src/worker/loader.ts | 11 ++++++++++- packages/core/package.json | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/packages/cli/src/worker/loader.ts b/packages/cli/src/worker/loader.ts index 52c6e0895d..99182d00ca 100644 --- a/packages/cli/src/worker/loader.ts +++ b/packages/cli/src/worker/loader.ts @@ -19,6 +19,7 @@ declare module 'koishi' { // Theoretically, these properties will only appear on `Fork`. // We define them directly on `State` for typing convenience. interface State { + [Loader.update]?: boolean [Loader.kRecord]?: Dict alias?: string } @@ -45,6 +46,7 @@ const group: Plugin.Object = { } export default class Loader extends ConfigLoader { + static readonly update = Symbol.for('koishi.loader.update') static readonly kRecord = Symbol.for('koishi.loader.record') static readonly kWarning = Symbol.for('koishi.loader.warning') @@ -128,7 +130,8 @@ export default class Loader extends ConfigLoader { if (fork) { logger.info(`reload plugin %c`, key) patch(fork.parent, config) - fork.update(config, true) + fork[Loader.update] = true + fork.update(config) } else { logger.info(`apply plugin %c`, key) const name = key.split(':', 1)[0] @@ -164,6 +167,12 @@ export default class Loader extends ConfigLoader { this.entry = this.reloadPlugin(app, 'group:entry', this.config.plugins).context app.on('internal/update', (fork, value) => { + // prevent hot reload when config file is being written + if (fork[Loader.update]) { + fork[Loader.update] = false + return + } + const { runtime } = fork.parent.state const record = runtime[Loader.kRecord] if (!record) return diff --git a/packages/core/package.json b/packages/core/package.json index 9b9e2364c1..5983e12491 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -36,7 +36,7 @@ }, "dependencies": { "@koishijs/utils": "^5.4.5", - "cordis": "^1.5.2", + "cordis": "^1.5.3", "fastest-levenshtein": "^1.0.12", "minato": "^1.2.0" }