Skip to content

Commit b4d5dca

Browse files
authored
fix: Merge pull request #31 from seamapi/fix-allow-returning-dates
2 parents 42f399a + 32cadae commit b4d5dca

File tree

2 files changed

+34
-4
lines changed

2 files changed

+34
-4
lines changed

src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,8 @@ const isSerializable = (obj: Record<any, any>): boolean => {
3030
typeof val === "string" ||
3131
typeof val === "boolean" ||
3232
typeof val === "number" ||
33+
val?.constructor === Date ||
34+
val === null ||
3335
Array.isArray(val) ||
3436
isPlainObject(val)
3537
)

src/tests/hooks.test.ts

Lines changed: 32 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -125,25 +125,53 @@ test("beforeTemplateIsBaked (propagates error that isn't serializable)", async (
125125
})
126126

127127
test("beforeTemplateIsBaked (result isn't serializable)", async (t) => {
128-
const getTestServer = getTestPostgresDatabaseFactory({
128+
type HookReturn = {
129+
type: "function" | "date" | null
130+
}
131+
132+
const getTestServer = getTestPostgresDatabaseFactory<HookReturn>({
129133
postgresVersion: process.env.POSTGRES_VERSION,
130134
workerDedupeKey: "beforeTemplateIsBakedHookNonSerializable",
131-
beforeTemplateIsBaked: async () => {
135+
beforeTemplateIsBaked: async ({ params: { type } }) => {
136+
if (type === "function") {
137+
return {
138+
foo: () => "bar",
139+
}
140+
}
141+
142+
if (type === "date") {
143+
return {
144+
foo: new Date(),
145+
}
146+
}
147+
132148
return {
133-
foo: () => "bar",
149+
foo: null,
134150
}
135151
},
136152
})
137153

138154
// Should throw error with clear message
139155
await t.throwsAsync(
140156
async () => {
141-
await getTestServer(t)
157+
await getTestServer(t, { type: "function" })
142158
},
143159
{
144160
message: /could not be serialized/,
145161
}
146162
)
163+
164+
// Can return a date
165+
const { beforeTemplateIsBakedResult } = await getTestServer(t, {
166+
type: "date",
167+
})
168+
t.true(beforeTemplateIsBakedResult.foo instanceof Date)
169+
170+
// Can return null
171+
const { beforeTemplateIsBakedResult: result } = await getTestServer(t, {
172+
type: null,
173+
})
174+
t.is(result.foo, null)
147175
})
148176

149177
test("beforeTemplateIsBaked with manual template build", async (t) => {

0 commit comments

Comments
 (0)