summaryrefslogtreecommitdiffhomepage
path: root/packages/sdk/js/src/gen/core/bodySerializer.ts
diff options
context:
space:
mode:
authorDax Raad <[email protected]>2025-08-23 12:21:58 -0400
committerDax Raad <[email protected]>2025-08-23 12:21:58 -0400
commit732b67f8ce65ca8154574088abfbce06dd5054bb (patch)
tree7015c72112c26424f8213555172f2206ea4c1928 /packages/sdk/js/src/gen/core/bodySerializer.ts
parentd47bb967849ff4a38c8926ef2450ffa883ff477f (diff)
downloadopencode-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.ts70
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()
+ },
+}