fix: close housekeeping foundation review findings
This commit is contained in:
1 parent
ebc263da35
commit
08f8d54888
21 files changed
+593
-46
No files matched your search
@@ -98,6 +98,9 @@ const forbiddenModuleRoots = [
|
||||
"src/app/actions",
|
||||
"src/app/admin",
|
||||
"src/app/mod",
|
||||
"@prisma/client",
|
||||
"drizzle-orm",
|
||||
"mysql2",
|
||||
] as const;
|
||||
|
||||
interface BabelNode {
|
||||
@@ -287,10 +290,6 @@ function canonicalizeLocalSpecifier(
|
||||
const suffixIndex = specifier.search(/[?#]/);
|
||||
const withoutSuffix =
|
||||
suffixIndex === -1 ? specifier : specifier.slice(0, suffixIndex);
|
||||
const slashNormalized = withoutSuffix.replaceAll("\\", "/");
|
||||
if (!slashNormalized.startsWith("@/") && !slashNormalized.startsWith(".")) {
|
||||
return { candidates: [], violation: null };
|
||||
}
|
||||
|
||||
let decoded: string;
|
||||
try {
|
||||
@@ -305,12 +304,15 @@ function canonicalizeLocalSpecifier(
|
||||
} else if (decoded.startsWith(".")) {
|
||||
normalized = posix.normalize(posix.join(posix.dirname(routeFile), decoded));
|
||||
} else {
|
||||
return { candidates: [], violation: "<malformed local specifier>" };
|
||||
normalized = posix.normalize(decoded);
|
||||
}
|
||||
|
||||
const extensionless = normalized.replace(resolverExtensionPattern, "");
|
||||
return {
|
||||
candidates: [...new Set([normalized, extensionless])],
|
||||
candidates:
|
||||
decoded.startsWith("@/") || decoded.startsWith(".")
|
||||
? [...new Set([normalized, extensionless])]
|
||||
: [normalized],
|
||||
violation: null,
|
||||
};
|
||||
}
|
||||
@@ -785,6 +787,24 @@ describe("preview route import boundary", () => {
|
||||
'import("../mod/users/page")',
|
||||
"src/app/mod/users/page",
|
||||
],
|
||||
[
|
||||
"Prisma TypeScript import type",
|
||||
"src/app/admin-next/page.tsx",
|
||||
'type PrismaClient = import("@prisma/client").PrismaClient;',
|
||||
"@prisma/client",
|
||||
],
|
||||
[
|
||||
"Drizzle package import",
|
||||
"src/app/admin-next/page.tsx",
|
||||
'import { sql } from "drizzle-orm";',
|
||||
"drizzle-orm",
|
||||
],
|
||||
[
|
||||
"mysql2 package import",
|
||||
"src/app/admin-next/page.tsx",
|
||||
'import type { Pool } from "mysql2";',
|
||||
"mysql2",
|
||||
],
|
||||
] as const)("detects %s", (_name, routeFile, source, expectedPath) => {
|
||||
expect(findRouteImportBoundaryViolations(source, routeFile)).toContain(
|
||||
expectedPath,
|
||||
@@ -824,6 +844,9 @@ describe("preview route import boundary", () => {
|
||||
'import dbTools from "../../lib/db-tools.ts";',
|
||||
'import auth from "../../lib/authentication";',
|
||||
'import preview from "../admin-next-shared";',
|
||||
'import prismaTools from "@prisma/client-tools";',
|
||||
'import drizzleTools from "drizzle-orm-kit";',
|
||||
'import mysqlTools from "mysql2-wrapper";',
|
||||
"const documentation = \"import db from '../../lib/db'\";",
|
||||
'const rawTemplate = `import("../../actions/users")`;',
|
||||
'// import db from "../../lib/db";',
|
||||
|
||||
Reference in new issue
Block a user