// BOM 扫描(AGENTS.md 编码纪律):票 03 新改/新建的 Java 文件必须 UTF-8 无 BOM import { readFileSync } from 'node:fs'; const files = [ // crm-rule 三族 'crm-rule/src/main/java/com/crm/rule/service/impl/OpportunityStageTemplateServiceImpl.java', 'crm-rule/src/main/java/com/crm/rule/service/impl/OpportunitySchemeCardTemplateServiceImpl.java', 'crm-rule/src/main/java/com/crm/rule/service/impl/OpportunityPoolRuleServiceImpl.java', // crm-opportunity 新建 owner 组件 'crm-opportunity/src/main/java/com/crm/opportunity/owner/OwnerSnapshot.java', 'crm-opportunity/src/main/java/com/crm/opportunity/owner/OwnerSnapshotResolver.java', 'crm-opportunity/src/main/java/com/crm/opportunity/owner/impl/OpportunityOwnerSnapshotResolverImpl.java', // crm-opportunity 消费方 'crm-opportunity/src/main/java/com/crm/opportunity/service/impl/OpportunityCreateServiceImpl.java', 'crm-opportunity/src/main/java/com/crm/opportunity/port/inbound/impl/OpportunityCreationPortImpl.java', 'crm-opportunity/src/main/java/com/crm/opportunity/controller/OpportunityTransitionController.java', ]; let bad = 0; for (const f of files) { const b = readFileSync(f); const hasBom = b[0] === 0xef && b[1] === 0xbb && b[2] === 0xbf; if (hasBom) { console.log(`BOM FOUND: ${f}`); bad++; } else { console.log(`ok: ${f}`); } } console.log(bad === 0 ? 'ALL CLEAN' : `${bad} file(s) with BOM`); process.exit(bad === 0 ? 0 : 1);