revert: 移除构建期 IME 守卫补丁 — 补丁打在产物上不具持久性

taekchef 的 apply-ime-guard.mjs 在每次 build/prepare/bundle 后把守卫
字符串注入 lib/client.js,但补丁对象是构建产物而非源码:
- 裸 tsdown 重建 / 其他构建路径产出无守卫的 bundle(#562 复发根因)
- 守卫逻辑游离于源码之外,难以测试与维护

运行时方案(src/client/ime-guard.ts + tests/ime-guard.spec.ts)已在
源码内实现同等守卫,经 document capture 覆盖全部劫持路径,任何构建
方式产物都自带守卫。合并远端提交后撤掉构建期补丁,保留运行时方案。
This commit is contained in:
Menghuan1918
2026-08-12 14:41:36 +08:00
parent d1c393a048
commit 7eccc49f6e
2 changed files with 3 additions and 29 deletions
+3 -3
View File
@@ -51,11 +51,11 @@
"src"
],
"scripts": {
"build": "rm -rf lib && tsc -p tsconfig.build.json && tsdown && node scripts/apply-ime-guard.mjs",
"build": "rm -rf lib && tsc -p tsconfig.build.json && tsdown",
"typecheck": "tsc --noEmit",
"bundle": "tsdown && node scripts/apply-ime-guard.mjs",
"bundle": "tsdown",
"watch": "tsdown --watch",
"prepare": "tsdown && node scripts/apply-ime-guard.mjs",
"prepare": "tsdown",
"test": "vitest run"
},
"license": "MIT",
-26
View File
@@ -1,26 +0,0 @@
// 持久 IME 守卫补丁(2026-08-10,changelog 见 AGENTS.md):
// Univer InputNumber 在 document capture 拦截全页 ↑/↓ 且无 isComposing 守卫,
// 会摧毁中文输入法组合(候选词导航被劫持)。每次 build 后自动重打。
import { readFileSync, writeFileSync } from 'node:fs'
import { fileURLToPath } from 'node:url'
import { dirname, join } from 'node:path'
const root = join(dirname(fileURLToPath(import.meta.url)), '..')
const target = join(root, 'lib/client.js')
const src = readFileSync(target, 'utf8')
const pattern = /function handleKeyDown\(e\) \{(\s*)if \(disabled\) return;/
const guard = 'function handleKeyDown(e) {\n\t\t\t\t\tif (e.isComposing || e.keyCode === 229) return;\n\t\t\t\t\tif (disabled) return;'
if (src.includes('e.isComposing || e.keyCode === 229')) {
console.log('[apply-ime-guard] guard already present, skip')
process.exit(0)
}
const count = src.match(new RegExp(pattern.source, 'g'))?.length ?? 0
if (count === 0) {
console.error('[apply-ime-guard] ERROR: pattern not found in lib/client.js — univer structure may have changed, inspect manually!')
process.exit(1)
}
const next = src.replace(pattern, guard)
writeFileSync(target, next)
console.log(`[apply-ime-guard] injected IME guard (${count} site(s))`)