Skip to content

Commit d0fb7d1

Browse files
erquhartclaude
andauthored
fix: return dates as numbers from customTransformOutput (#298)
Reverts the adapter change from #236 that returned Date objects instead of numbers. Updates tests to expect numbers for date fields. Fixes the Convex serialization error reported in #288. Convex doesn't support the Date type, so date fields must be numbers. The original change in #236 was attempting to fix a type mismatch (#224), which may be an upstream better-auth issue (tracked in better-auth/better-auth#8619). Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 1e5fc38 commit d0fb7d1

4 files changed

Lines changed: 18 additions & 14 deletions

File tree

src/client/adapter.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ export const convexAdapter = <
200200
},
201201
customTransformOutput: ({ data, fieldAttributes }) => {
202202
if (data && fieldAttributes.type === "date") {
203-
return new Date(data);
203+
return new Date(data).getTime();
204204
}
205205
return data;
206206
},

src/test/adapter-factory/auth-flow.ts

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,8 @@ export const getAuthFlowSuiteTests = (
8282
user: User;
8383
session: Session;
8484
};
85-
signUpResult.user.createdAt = new Date(signUpResult.user.createdAt);
86-
signUpResult.user.updatedAt = new Date(signUpResult.user.updatedAt);
85+
signUpResult.user.createdAt = new Date(signUpResult.user.createdAt).getTime() as unknown as Date;
86+
signUpResult.user.updatedAt = new Date(signUpResult.user.updatedAt).getTime() as unknown as Date;
8787
expect(result?.user).toBeDefined();
8888
expect(result?.user).toStrictEqual(signUpResult.user);
8989
expect(result?.session).toBeDefined();
@@ -117,8 +117,8 @@ export const getAuthFlowSuiteTests = (
117117
body: { email: user.email, password: password },
118118
});
119119
process.env.TZ = "America/Los_Angeles";
120-
expect(userSignUp.user.createdAt.toISOString()).toStrictEqual(
121-
userSignIn.user.createdAt.toISOString(),
120+
expect(userSignUp.user.createdAt).toStrictEqual(
121+
userSignIn.user.createdAt,
122122
);
123123
},
124124
"should sign up with additional fields": async () => {
@@ -135,7 +135,7 @@ export const getAuthFlowSuiteTests = (
135135
name: user.name,
136136
password: crypto.randomUUID(),
137137
//@ts-expect-error - we are testing with additional fields
138-
dateField: dateField.toISOString(), // using iso string to simulate client to server communication (this should be converted back to Date)
138+
dateField: dateField.toISOString(), // using iso string to simulate client to server communication
139139
},
140140
asResponse: true,
141141
});
@@ -145,7 +145,7 @@ export const getAuthFlowSuiteTests = (
145145
headers,
146146
});
147147
//@ts-expect-error - we are testing with additional fields
148-
expect(result?.user.dateField).toStrictEqual(dateField);
148+
expect(result?.user.dateField).toStrictEqual(dateField.getTime());
149149
},
150150
});
151151

src/test/adapter-factory/basic.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,11 @@ export const getNormalTestSuiteTests = (
6868
const transformed = transformGeneratedModel(user);
6969
// console.log(`transformed:`, transformed);
7070
// console.log(`result:`, result);
71-
expect(result).toEqual(transformed);
71+
expect(result).toEqual({
72+
...transformed,
73+
createdAt: new Date(user.createdAt).getTime(),
74+
updatedAt: new Date(user.updatedAt).getTime(),
75+
});
7276
},
7377
"create - should always return an id": async () => {
7478
const { id: _, ...user } = await generate("user");
@@ -599,7 +603,7 @@ export const getNormalTestSuiteTests = (
599603
where: [{ field: "createdAt", value: user.createdAt, operator: "eq" }],
600604
});
601605
expect(result).toEqual(user);
602-
expect(result?.createdAt).toBeInstanceOf(Date);
606+
expect(typeof result?.createdAt).toBe("number");
603607
expect(result?.createdAt).toEqual(user.createdAt);
604608
},
605609
"findOne - should perform backwards joins": async () => {
@@ -753,7 +757,7 @@ export const getNormalTestSuiteTests = (
753757
});
754758
if (result?.session?.length) {
755759
result.session = result.session.sort(
756-
(a, b) => a.createdAt.getTime() - b.createdAt.getTime(),
760+
(a, b) => (a.createdAt as unknown as number) - (b.createdAt as unknown as number),
757761
);
758762
}
759763

@@ -869,7 +873,7 @@ export const getNormalTestSuiteTests = (
869873
"findMany - should find many models with date fields": async () => {
870874
const users = (await insertRandom("user", 3)).map((x) => x[0]);
871875
const youngestUser = users.sort(
872-
(a, b) => b.createdAt.getTime() - a.createdAt.getTime(),
876+
(a, b) => (b.createdAt as unknown as number) - (a.createdAt as unknown as number),
873877
)[0]!;
874878
const result = await adapter.findMany<User>({
875879
model: "user",
@@ -1709,7 +1713,7 @@ export const getNormalTestSuiteTests = (
17091713
"findMany - should find many models with gt operator": async () => {
17101714
const users = (await insertRandom("user", 3)).map((x) => x[0]);
17111715
const oldestUser = users.sort(
1712-
(a, b) => a.createdAt.getTime() - b.createdAt.getTime(),
1716+
(a, b) => (a.createdAt as unknown as number) - (b.createdAt as unknown as number),
17131717
)[0]!;
17141718
const result = await adapter.findMany<User>({
17151719
model: "user",
@@ -1730,7 +1734,7 @@ export const getNormalTestSuiteTests = (
17301734
"findMany - should find many models with gte operator": async () => {
17311735
const users = (await insertRandom("user", 3)).map((x) => x[0]);
17321736
const oldestUser = users.sort(
1733-
(a, b) => b.createdAt.getTime() - a.createdAt.getTime(),
1737+
(a, b) => (b.createdAt as unknown as number) - (a.createdAt as unknown as number),
17341738
)[0]!;
17351739
const result = await adapter.findMany<User>({
17361740
model: "user",

src/test/adapter-factory/convex-custom.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -757,7 +757,7 @@ export const convexCustomTestSuite = createTestSuite(
757757
where: [{ field: "createdAt", value: now }],
758758
}),
759759
).toEqual(user);
760-
expect(user.createdAt).toBeInstanceOf(Date);
760+
expect(typeof user.createdAt).toBe("number");
761761
},
762762
}),
763763
);

0 commit comments

Comments
 (0)