Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

fix: allow json literals in serializer #3849

Open
wants to merge 1 commit into
base: main
Choose a base branch
from

Conversation

xPapla
Copy link
Contributor

@xPapla xPapla commented Mar 25, 2025

Closes #3157

This PR allows literal values to be passed without transformation in types. As a side effect it allows to pass branded types. See example:

import { createFileRoute } from '@tanstack/react-router'
import { createServerFn } from '@tanstack/react-start'
import { z } from 'zod'

const UserIdSchema = z
  .string()
  .brand('UserId') // this didn't work in the past, now works

const UserSchema = z
  .object({
    id: UserIdSchema,
    name: z.string(),
  })
  .brand('User') // this worked in the past

const getUserInfo = createServerFn({ method: 'GET' })
  .validator(z.number())
  .handler(() => {
    return UserSchema.parse({
      id: '123',
      name: 'asdf',
    })
  })

export const Route = createFileRoute('/')({
  component: Home,
  loader: async () => await getUserInfo({ data: 5 }),
})

function Home() {
  const state = Route.useLoaderData()

  const renderUser = (user: z.infer<typeof UserSchema>) => {
    return (
      <div>
        <h1>{user.name}</h1>
        <p>{user.id}</p>
      </div>
    )
  }

  return renderUser(state)
}

Copy link

nx-cloud bot commented Mar 25, 2025

View your CI Pipeline Execution ↗ for commit 0bfee8b.

Command Status Duration Result
nx affected --targets=test:eslint,test:unit,tes... ✅ Succeeded 4m 53s View ↗
nx run-many --target=build --exclude=examples/*... ✅ Succeeded 2m 3s View ↗

☁️ Nx Cloud last updated this comment at 2025-03-25 00:10:51 UTC

Copy link

pkg-pr-new bot commented Mar 25, 2025

Open in Stackblitz

More templates

@tanstack/arktype-adapter

npm i https://pkg.pr.new/TanStack/router/@tanstack/arktype-adapter@3849

@tanstack/create-router

npm i https://pkg.pr.new/TanStack/router/@tanstack/create-router@3849

@tanstack/create-start

npm i https://pkg.pr.new/TanStack/router/@tanstack/create-start@3849

@tanstack/directive-functions-plugin

npm i https://pkg.pr.new/TanStack/router/@tanstack/directive-functions-plugin@3849

@tanstack/eslint-plugin-router

npm i https://pkg.pr.new/TanStack/router/@tanstack/eslint-plugin-router@3849

@tanstack/history

npm i https://pkg.pr.new/TanStack/router/@tanstack/history@3849

@tanstack/react-router

npm i https://pkg.pr.new/TanStack/router/@tanstack/react-router@3849

@tanstack/react-router-devtools

npm i https://pkg.pr.new/TanStack/router/@tanstack/react-router-devtools@3849

@tanstack/react-start

npm i https://pkg.pr.new/TanStack/router/@tanstack/react-start@3849

@tanstack/react-router-with-query

npm i https://pkg.pr.new/TanStack/router/@tanstack/react-router-with-query@3849

@tanstack/react-start-client

npm i https://pkg.pr.new/TanStack/router/@tanstack/react-start-client@3849

@tanstack/react-start-config

npm i https://pkg.pr.new/TanStack/router/@tanstack/react-start-config@3849

@tanstack/react-start-plugin

npm i https://pkg.pr.new/TanStack/router/@tanstack/react-start-plugin@3849

@tanstack/react-start-router-manifest

npm i https://pkg.pr.new/TanStack/router/@tanstack/react-start-router-manifest@3849

@tanstack/react-start-server

npm i https://pkg.pr.new/TanStack/router/@tanstack/react-start-server@3849

@tanstack/router-cli

npm i https://pkg.pr.new/TanStack/router/@tanstack/router-cli@3849

@tanstack/router-core

npm i https://pkg.pr.new/TanStack/router/@tanstack/router-core@3849

@tanstack/router-devtools

npm i https://pkg.pr.new/TanStack/router/@tanstack/router-devtools@3849

@tanstack/router-devtools-core

npm i https://pkg.pr.new/TanStack/router/@tanstack/router-devtools-core@3849

@tanstack/router-generator

npm i https://pkg.pr.new/TanStack/router/@tanstack/router-generator@3849

@tanstack/router-plugin

npm i https://pkg.pr.new/TanStack/router/@tanstack/router-plugin@3849

@tanstack/router-utils

npm i https://pkg.pr.new/TanStack/router/@tanstack/router-utils@3849

@tanstack/router-vite-plugin

npm i https://pkg.pr.new/TanStack/router/@tanstack/router-vite-plugin@3849

@tanstack/server-functions-plugin

npm i https://pkg.pr.new/TanStack/router/@tanstack/server-functions-plugin@3849

@tanstack/solid-router

npm i https://pkg.pr.new/TanStack/router/@tanstack/solid-router@3849

@tanstack/solid-router-devtools

npm i https://pkg.pr.new/TanStack/router/@tanstack/solid-router-devtools@3849

@tanstack/solid-start

npm i https://pkg.pr.new/TanStack/router/@tanstack/solid-start@3849

@tanstack/solid-start-client

npm i https://pkg.pr.new/TanStack/router/@tanstack/solid-start-client@3849

@tanstack/solid-start-config

npm i https://pkg.pr.new/TanStack/router/@tanstack/solid-start-config@3849

@tanstack/solid-start-plugin

npm i https://pkg.pr.new/TanStack/router/@tanstack/solid-start-plugin@3849

@tanstack/solid-start-router-manifest

npm i https://pkg.pr.new/TanStack/router/@tanstack/solid-start-router-manifest@3849

@tanstack/solid-start-server

npm i https://pkg.pr.new/TanStack/router/@tanstack/solid-start-server@3849

@tanstack/start

npm i https://pkg.pr.new/TanStack/router/@tanstack/start@3849

@tanstack/start-api-routes

npm i https://pkg.pr.new/TanStack/router/@tanstack/start-api-routes@3849

@tanstack/start-client-core

npm i https://pkg.pr.new/TanStack/router/@tanstack/start-client-core@3849

@tanstack/start-config

npm i https://pkg.pr.new/TanStack/router/@tanstack/start-config@3849

@tanstack/start-server-core

npm i https://pkg.pr.new/TanStack/router/@tanstack/start-server-core@3849

@tanstack/start-server-functions-client

npm i https://pkg.pr.new/TanStack/router/@tanstack/start-server-functions-client@3849

@tanstack/start-server-functions-fetcher

npm i https://pkg.pr.new/TanStack/router/@tanstack/start-server-functions-fetcher@3849

@tanstack/start-server-functions-handler

npm i https://pkg.pr.new/TanStack/router/@tanstack/start-server-functions-handler@3849

@tanstack/start-server-functions-server

npm i https://pkg.pr.new/TanStack/router/@tanstack/start-server-functions-server@3849

@tanstack/start-server-functions-ssr

npm i https://pkg.pr.new/TanStack/router/@tanstack/start-server-functions-ssr@3849

@tanstack/valibot-adapter

npm i https://pkg.pr.new/TanStack/router/@tanstack/valibot-adapter@3849

@tanstack/virtual-file-routes

npm i https://pkg.pr.new/TanStack/router/@tanstack/virtual-file-routes@3849

@tanstack/zod-adapter

npm i https://pkg.pr.new/TanStack/router/@tanstack/zod-adapter@3849

commit: 0bfee8b

@schiller-manuel
Copy link
Contributor

we'll migrate to seroval soon, let's revisit this PR then

# for free to join this conversation on GitHub. Already have an account? # to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

types: createServerFn does not accept branded strings
2 participants