refactor: organize supply frontend structure
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
import { existsSync, readdirSync, readFileSync } from "node:fs";
|
||||
import { join, relative } from "node:path";
|
||||
import { describe, expect, it } from "vitest";
|
||||
|
||||
const sourceRoot = join(process.cwd(), "src");
|
||||
|
||||
function listRuntimeFiles(directory: string): string[] {
|
||||
return readdirSync(directory, { withFileTypes: true }).flatMap((entry) => {
|
||||
const target = join(directory, entry.name);
|
||||
if (entry.isDirectory()) return listRuntimeFiles(target);
|
||||
if (!/\.(ts|tsx)$/.test(entry.name) || /\.(test|e2e)\.(ts|tsx)$/.test(entry.name)) return [];
|
||||
return [target];
|
||||
});
|
||||
}
|
||||
|
||||
function findMatches(directory: string, pattern: RegExp): string[] {
|
||||
return listRuntimeFiles(directory).flatMap((file) => {
|
||||
const source = readFileSync(file, "utf8");
|
||||
return pattern.test(source) ? [relative(sourceRoot, file)] : [];
|
||||
});
|
||||
}
|
||||
|
||||
describe("frontend module boundaries", () => {
|
||||
it("uses public feature entry points for absolute feature imports", () => {
|
||||
expect(findMatches(sourceRoot, /@\/features\/(?:agent|workbench|map\/core)\//)).toEqual([]);
|
||||
});
|
||||
|
||||
it("keeps shared independent from app, features, and mocks", () => {
|
||||
expect(findMatches(join(sourceRoot, "shared"), /@\/(?:app|features|mocks)\//)).toEqual([]);
|
||||
});
|
||||
|
||||
it("keeps map core independent from Agent and workbench code", () => {
|
||||
expect(
|
||||
findMatches(
|
||||
join(sourceRoot, "features/map/core"),
|
||||
/@\/features\/(?:agent|workbench)(?:\/|["'])/
|
||||
)
|
||||
).toEqual([]);
|
||||
});
|
||||
|
||||
it("keeps Agent code independent from workbench code", () => {
|
||||
expect(
|
||||
findMatches(join(sourceRoot, "features/agent"), /@\/features\/workbench(?:\/|["'])/)
|
||||
).toEqual([]);
|
||||
});
|
||||
|
||||
it("does not restore Next.js client directives or the catch-all lib directory", () => {
|
||||
expect(findMatches(sourceRoot, /^["']use client["'];?/m)).toEqual([]);
|
||||
expect(existsSync(join(sourceRoot, "lib"))).toBe(false);
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user