diff options
| author | Dax Raad <[email protected]> | 2025-08-23 12:21:58 -0400 |
|---|---|---|
| committer | Dax Raad <[email protected]> | 2025-08-23 12:21:58 -0400 |
| commit | 732b67f8ce65ca8154574088abfbce06dd5054bb (patch) | |
| tree | 7015c72112c26424f8213555172f2206ea4c1928 /packages/sdk/js/src/gen/core/bodySerializer.ts | |
| parent | d47bb967849ff4a38c8926ef2450ffa883ff477f (diff) | |
| download | opencode-732b67f8ce65ca8154574088abfbce06dd5054bb.tar.gz opencode-732b67f8ce65ca8154574088abfbce06dd5054bb.zip | |
ci: stuff
Diffstat (limited to 'packages/sdk/js/src/gen/core/bodySerializer.ts')
| -rw-r--r-- | packages/sdk/js/src/gen/core/bodySerializer.ts | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/packages/sdk/js/src/gen/core/bodySerializer.ts b/packages/sdk/js/src/gen/core/bodySerializer.ts new file mode 100644 index 000000000..8a4a13410 --- /dev/null +++ b/packages/sdk/js/src/gen/core/bodySerializer.ts @@ -0,0 +1,70 @@ +import type { ArrayStyle, ObjectStyle, SerializerOptions } from "./pathSerializer.js" + +export type QuerySerializer = (query: Record<string, unknown>) => string + +export type BodySerializer = (body: any) => any + +export interface QuerySerializerOptions { + allowReserved?: boolean + array?: SerializerOptions<ArrayStyle> + object?: SerializerOptions<ObjectStyle> +} + +const serializeFormDataPair = (data: FormData, key: string, value: unknown): void => { + if (typeof value === "string" || value instanceof Blob) { + data.append(key, value) + } else { + data.append(key, JSON.stringify(value)) + } +} + +const serializeUrlSearchParamsPair = (data: URLSearchParams, key: string, value: unknown): void => { + if (typeof value === "string") { + data.append(key, value) + } else { + data.append(key, JSON.stringify(value)) + } +} + +export const formDataBodySerializer = { + bodySerializer: <T extends Record<string, any> | Array<Record<string, any>>>(body: T): FormData => { + const data = new FormData() + + Object.entries(body).forEach(([key, value]) => { + if (value === undefined || value === null) { + return + } + if (Array.isArray(value)) { + value.forEach((v) => serializeFormDataPair(data, key, v)) + } else { + serializeFormDataPair(data, key, value) + } + }) + + return data + }, +} + +export const jsonBodySerializer = { + bodySerializer: <T>(body: T): string => + JSON.stringify(body, (_key, value) => (typeof value === "bigint" ? value.toString() : value)), +} + +export const urlSearchParamsBodySerializer = { + bodySerializer: <T extends Record<string, any> | Array<Record<string, any>>>(body: T): string => { + const data = new URLSearchParams() + + Object.entries(body).forEach(([key, value]) => { + if (value === undefined || value === null) { + return + } + if (Array.isArray(value)) { + value.forEach((v) => serializeUrlSearchParamsPair(data, key, v)) + } else { + serializeUrlSearchParamsPair(data, key, value) + } + }) + + return data.toString() + }, +} |
