import { readFileSync } from 'node:fs';
import { join } from 'node:path';

/**
 * `.swcrc` 的 exclude 必须是**锚定**正则。
 *
 * 踩过的坑:原本写成 `["node_modules", "dist"]`,看着像目录名,实际 swc 当**正则**去匹配
 * 整个文件路径 —— 于是 `priority-distribution.service.ts` 因为文件名里含 "dist" 被静默跳过。
 * 271 个源文件只编译出 270 个,swc **不报任何错**("Successfully compiled: 270 files"),
 * 直到进程启动时才 `Cannot find module './priority-distribution.service'`。
 *
 * 同类地雷还有 distinct / distance / district / nodemodules… 任何文件名撞上子串都会中招,
 * 而且只在 swc 构建路径(dev / `--builder swc`)复现,`nest build`(tsc)一切正常 —— 极难排查。
 */
describe('.swcrc exclude 必须锚定', () => {
  const swcrc = JSON.parse(
    readFileSync(join(__dirname, '..', '.swcrc'), 'utf8'),
  ) as { exclude?: string[] };

  test('⭐ 每条 exclude 都以 ^ 开头(否则会误伤文件名含该子串的源文件)', () => {
    const unanchored = (swcrc.exclude ?? []).filter((p) => !p.startsWith('^'));
    expect(unanchored).toEqual([]);
  });

  test('⭐ 现有源文件不会被 exclude 误伤', () => {
    // 用真实存在过的受害者当样本 —— 加新文件时若又被排除,这条会红
    const samples = [
      'src/modules/plan/priority-distribution.service.ts',
      'src/modules/persona/persona-diff.ts',
      'src/modules/sync/cold-import/cold-import.service.ts',
    ];
    const patterns = (swcrc.exclude ?? []).map((p) => new RegExp(p));
    const excluded = samples.filter((f) => patterns.some((re) => re.test(f)));
    expect(excluded).toEqual([]);
  });
});
