mirror of
https://github.com/better-auth/better-auth.git
synced 2026-10-20 20:26:55 -05:00
fix(prisma-adapter): leave insensitive range operands unescaped on MongoDB
This commit is contained in:
@@ -283,6 +283,12 @@ describe("prisma-adapter", () => {
|
||||
mode: "insensitive" as const,
|
||||
},
|
||||
{ field: "email", value: "a.c@x.io" },
|
||||
{
|
||||
field: "name",
|
||||
value: "a.c",
|
||||
operator: "gte" as const,
|
||||
mode: "insensitive" as const,
|
||||
},
|
||||
];
|
||||
|
||||
await createAdapter("mongodb").findMany({ model: "user", where });
|
||||
@@ -294,6 +300,7 @@ describe("prisma-adapter", () => {
|
||||
{ email: { equals: "a\\.c@x\\.io", mode: "insensitive" } },
|
||||
{ email: { in: ["a\\+b@x\\.io"], mode: "insensitive" } },
|
||||
{ email: { equals: "a.c@x.io" } },
|
||||
{ name: { gte: "a.c", mode: "insensitive" } },
|
||||
],
|
||||
});
|
||||
|
||||
@@ -306,6 +313,7 @@ describe("prisma-adapter", () => {
|
||||
{ email: { equals: "a.c@x.io", mode: "insensitive" } },
|
||||
{ email: { in: ["a+b@x.io"], mode: "insensitive" } },
|
||||
{ email: { equals: "a.c@x.io" } },
|
||||
{ name: { gte: "a.c", mode: "insensitive" } },
|
||||
],
|
||||
});
|
||||
});
|
||||
|
||||
@@ -279,12 +279,18 @@ export const prismaAdapter = (prisma: PrismaClient, config: PrismaConfig) => {
|
||||
isInsensitive && providerSupportsMode ? "insensitive" : undefined;
|
||||
const modeFilter = prismaMode ? { mode: prismaMode } : {};
|
||||
// Prisma's MongoDB connector builds `$regexMatch` patterns from these values unescaped.
|
||||
// Range operators compare string order instead.
|
||||
const usesRegex =
|
||||
config.provider === "mongodb" &&
|
||||
(prismaMode !== undefined ||
|
||||
w.operator === "contains" ||
|
||||
(w.operator === "contains" ||
|
||||
w.operator === "starts_with" ||
|
||||
w.operator === "ends_with");
|
||||
w.operator === "ends_with" ||
|
||||
(prismaMode !== undefined &&
|
||||
(!w.operator ||
|
||||
w.operator === "eq" ||
|
||||
w.operator === "ne" ||
|
||||
w.operator === "in" ||
|
||||
w.operator === "not_in")));
|
||||
const toPrismaValue = (v: unknown) =>
|
||||
usesRegex && typeof v === "string"
|
||||
? v.replace(/[.*+?^${}()|[\]\\]/g, "\\$&")
|
||||
|
||||
Reference in New Issue
Block a user