Skip to content
New issue

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

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

Already on GitHub? Sign in 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

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

Successfully merging this pull request may close these issues.

types: createServerFn does not accept branded strings
2 participants