diff --git a/src/categories.ts b/src/categories.ts index 52526eda..6dabbac8 100644 --- a/src/categories.ts +++ b/src/categories.ts @@ -42,6 +42,11 @@ const categories: RawCategory[] = [ // 如微信朋友圈广告/酷安帖子广告/贴吧帖子广告 // 需要分阶段多步操作才能关闭, 会造成屏幕略微闪烁, 稍微影响用户体验 }, + { + key: 9, + name: '功能类', + // 非广告, 点击某些功能按钮 + }, ]; export default categories; diff --git a/src/file.ts b/src/file.ts index 3d34ac8f..8d093abe 100644 --- a/src/file.ts +++ b/src/file.ts @@ -58,13 +58,12 @@ const pkg: typeof PkgT = JSON.parse( ); const pkgKeys = Object.keys(pkg); +const gkdFp = process.cwd() + '/dist/gkd.json5'; +const versionFp = process.cwd() + '/dist/gkd.version.json'; +const oldConfig: RawSubscription = JSON5.parse( + await fs.readFile(gkdFp, 'utf-8').catch(() => '{}'), +); export const writeConfig = async (config: RawSubscription) => { - const gkdFp = process.cwd() + '/dist/gkd.json5'; - const versionFp = process.cwd() + '/dist/gkd.version.json'; - const oldConfig: RawSubscription = JSON5.parse( - await fs.readFile(gkdFp, 'utf-8').catch(() => '{}'), - ); - const newConfig: RawSubscription = { ...config, version: oldConfig.version || 0, @@ -186,7 +185,26 @@ export const checkConfig = (newConfig: RawSubscription) => { apps.forEach((app) => { const deprecatedKeys = app.deprecatedKeys || []; const keys = new Set(); + const oldGroups = oldConfig.apps?.find((a) => a.id == app.id)?.groups || []; app.groups?.forEach((g) => { + const oldGroup = oldGroups.find((og) => og.key == g.key); + if (!oldGroup || !_.isEqual(oldGroup, g)) { + // 检查新增/变动的规则组是否能被分类捕获 + if (!categories.some((c) => g.name.startsWith(c.name))) { + console.error({ + configName: newConfig.name, + appId: app.id, + appName: app.name, + groupName: g.name, + groupKey: g.key, + categories: categories.map((c) => c.name), + }); + throw new Error( + 'invalid group name, it must startsWith any category', + ); + } + } + if (deprecatedKeys.includes(g.key)) { console.error({ configName: newConfig.name,