refactor(*): 稳定期治理 - 收敛核心架构、错误语义并修复跨项目数据竞态
This commit is contained in:
1 parent
bacd502f5c
commit
b5f3413ded
298 files changed
+12681
-26428
No files matched your search
@@ -0,0 +1,64 @@
|
||||
import { expect, test } from "bun:test";
|
||||
import { readdirSync, readFileSync } from "node:fs";
|
||||
import { join, relative, resolve } from "node:path";
|
||||
|
||||
function walkSourceFiles(dir: string): string[] {
|
||||
const files: string[] = [];
|
||||
for (const entry of readdirSync(dir, { withFileTypes: true })) {
|
||||
const path = join(dir, entry.name);
|
||||
if (entry.isDirectory()) {
|
||||
files.push(...walkSourceFiles(path));
|
||||
continue;
|
||||
}
|
||||
if (/\.(ts|tsx)$/.test(entry.name)) files.push(path);
|
||||
}
|
||||
return files;
|
||||
}
|
||||
|
||||
const webRoot = resolve(import.meta.dir, "..");
|
||||
const srcRoot = resolve(webRoot, "src");
|
||||
|
||||
const axiosAllowed = new Set([
|
||||
"services/api/request.ts",
|
||||
"services/api/channel-transport.ts",
|
||||
"services/api/image-response.ts",
|
||||
"services/api/video-response.ts",
|
||||
"services/diagnostics/client-diagnostics.ts",
|
||||
]);
|
||||
|
||||
test("business API modules call http instead of axios or request(apiClient)", () => {
|
||||
const offenders = walkSourceFiles(resolve(srcRoot, "services"))
|
||||
.filter((file) => {
|
||||
const rel = relative(srcRoot, file);
|
||||
if (axiosAllowed.has(rel)) return false;
|
||||
const source = readFileSync(file, "utf8");
|
||||
return /from ["']axios["']/.test(source) || /request\s*(?:<[^>]+>)?\s*\(\s*apiClient\./.test(source) || /const api = apiClient/.test(source);
|
||||
})
|
||||
.map((file) => relative(srcRoot, file));
|
||||
expect(offenders).toEqual([]);
|
||||
});
|
||||
|
||||
test("axios.create stays in the shared request client", () => {
|
||||
const offenders = walkSourceFiles(srcRoot)
|
||||
.filter((file) => {
|
||||
if (relative(srcRoot, file) === "services/api/request.ts") return false;
|
||||
return readFileSync(file, "utf8").includes("axios.create(");
|
||||
})
|
||||
.map((file) => relative(srcRoot, file));
|
||||
expect(offenders).toEqual([]);
|
||||
});
|
||||
|
||||
test("copied flush Modal padding lives only in AppModal", () => {
|
||||
const banned = [
|
||||
'styles={{ container: { padding: 0, overflow: "hidden" }, body: { padding: 0 } }}',
|
||||
"styles={{ container: { padding: 0 }, body: { padding: 0 } }}",
|
||||
];
|
||||
const offenders = walkSourceFiles(srcRoot)
|
||||
.filter((file) => {
|
||||
if (relative(srcRoot, file) === "components/ui/product/app-modal/app-modal.tsx") return false;
|
||||
const source = readFileSync(file, "utf8");
|
||||
return banned.some((snippet) => source.includes(snippet));
|
||||
})
|
||||
.map((file) => relative(srcRoot, file));
|
||||
expect(offenders).toEqual([]);
|
||||
});
|
||||
Reference in new issue
Block a user