elysiajs / eden

Fully type-safe Elysia client
MIT License
172 stars 40 forks source link

Feature request: custom query param serializer #127

Open mnpenner opened 2 months ago

mnpenner commented 2 months ago

undefined is getting serialized to the string "undefined" instead of omitted from the query params, I believe because of this line:

https://github.com/elysiajs/eden/blob/8a0f7b6194ea336b18a1c80d9a7dd6d2b1afbba2/src/treaty2/index.ts#L188C38-L188C56

> encodeURIComponent(undefined)
'undefined'

I would like to omit such params.

I tried using the fetcher option but the URL has already been built by that point. onRequest also doesn't give me access to the query params it seems.

An option like serializeQuery(query: Record<string,any>): string or similar that lets me provide a custom implementation would be great.

blossomoftheend commented 2 months ago

We just encountered the same issue in our code and were surprised about undefined being serialized into "undefined", would be pretty cool to have a custom param serializer, like in axios for example

sorousharzani commented 2 months ago

I also encountered this issue. IMO undefined and null params should be sanitized from the request as Axios does it.

0-don commented 1 week ago

here is what I use

import { Static, t } from "elysia";

const T = t
  .Transform(t.String())
  .Decode((value) => {
    if (value === "null" || value === "undefined" || value === "") return null;
    return value;
  })
  .Encode((value) => {
    if (value === null) return "null";
    if (value === undefined) return "undefined";
    return value;
  });

export const pageable = t.Object({
  cursor: t.Optional(t.Nullable(T)),
});

export type Pageable = Static<typeof pageable>;