diff options
Diffstat (limited to 'src/lib/Effect/requestBody.ts')
| -rw-r--r-- | src/lib/Effect/requestBody.ts | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/src/lib/Effect/requestBody.ts b/src/lib/Effect/requestBody.ts new file mode 100644 index 00000000..c43c30b2 --- /dev/null +++ b/src/lib/Effect/requestBody.ts @@ -0,0 +1,15 @@ +import { Schema } from "effect"; + +type SyncDecodingSchema = Schema.Top & { + readonly DecodingServices: never; +}; + +export const decodeUnknownOrThrow = <S extends SyncDecodingSchema>( + schema: S, + input: unknown, +): S["Type"] => Schema.decodeUnknownSync(schema)(input); + +export const decodeRequestJsonOrThrow = async <S extends SyncDecodingSchema>( + request: Request, + schema: S, +): Promise<S["Type"]> => decodeUnknownOrThrow(schema, await request.json()); |