router icon indicating copy to clipboard operation
router copied to clipboard

fix: allow json literals in serializer

Open xPapla opened this issue 8 months ago • 5 comments

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)
}

xPapla avatar Mar 25 '25 00:03 xPapla

View your CI Pipeline Execution ↗ for commit 0bfee8ba64e9d49ced189ba5a74a4b2da57de7b6.

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

nx-cloud[bot] avatar Mar 25 '25 00:03 nx-cloud[bot]

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

pkg-pr-new[bot] avatar Mar 25 '25 00:03 pkg-pr-new[bot]

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

schiller-manuel avatar Mar 26 '25 11:03 schiller-manuel

Hoping this still goes through, but noting that post sevoral, this has moved to start-client-core package.

jvliwanag avatar Jul 18 '25 03:07 jvliwanag

@xPapla @jvliwanag , the linked ticket appear to have been closed already - it this PR still relevant?

birkskyum avatar Nov 19 '25 20:11 birkskyum