[{"data":1,"prerenderedAt":1429},["ShallowReactive",2],{"navigation_docs":3,"-benchmarks-rpc-heavy-validation":399},[4,162,346],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":24},"RPC","icon-park-outline:lightning","\u002Frpc","01.rpc",[10,25,63,77,102,136],{"title":11,"icon":12,"redirect":7,"path":13,"stem":14,"children":15,"page":24},"Introduction","icon-park-outline:home","\u002Frpc\u002Fintroduction","01.rpc\u002F01.introduction",[16,20],{"title":17,"path":18,"stem":19},"Quick Start","\u002Frpc\u002Fintroduction\u002Fquick-start","01.rpc\u002F01.introduction\u002F02.quick-start",{"title":21,"path":22,"stem":23},"Manual Install","\u002Frpc\u002Fintroduction\u002Fmanual-install","01.rpc\u002F01.introduction\u002F03.manual-install",false,{"title":26,"icon":27,"path":28,"stem":29,"children":30,"page":24},"Server","icon-park-outline:server","\u002Frpc\u002Fserver","01.rpc\u002F02.server",[31,35,39,43,47,51,55,59],{"title":32,"path":33,"stem":34},"Routes","\u002Frpc\u002Fserver\u002Froutes","01.rpc\u002F02.server\u002F01.routes",{"title":36,"path":37,"stem":38},"Middleware","\u002Frpc\u002Fserver\u002Fmiddleware","01.rpc\u002F02.server\u002F02.middleware",{"title":40,"path":41,"stem":42},"Call Context","\u002Frpc\u002Fserver\u002Fcall-context","01.rpc\u002F02.server\u002F03.call-context",{"title":44,"path":45,"stem":46},"Headers","\u002Frpc\u002Fserver\u002Fheaders","01.rpc\u002F02.server\u002F04.headers",{"title":48,"path":49,"stem":50},"Error Handling","\u002Frpc\u002Fserver\u002Ferror-handling","01.rpc\u002F02.server\u002F05.error-handling",{"title":52,"path":53,"stem":54},"Validation","\u002Frpc\u002Fserver\u002Fvalidation","01.rpc\u002F02.server\u002F06.validation",{"title":56,"path":57,"stem":58},"JSON Round Trip","\u002Frpc\u002Fserver\u002Fjson-round-trip","01.rpc\u002F02.server\u002F07.json-round-trip",{"title":60,"path":61,"stem":62},"Drizzle Tables","\u002Frpc\u002Fserver\u002Fdrizzle-tables","01.rpc\u002F02.server\u002F08.drizzle-tables",{"title":64,"icon":65,"path":66,"stem":67,"children":68,"page":24},"Middlewares","icon-park-outline:link-one","\u002Frpc\u002Fmiddlewares","01.rpc\u002F03.middlewares",[69,73],{"title":70,"path":71,"stem":72},"fetchMetadata","\u002Frpc\u002Fmiddlewares\u002Ffetch-metadata","01.rpc\u002F03.middlewares\u002F01.fetch-metadata",{"title":74,"path":75,"stem":76},"syncRoutes","\u002Frpc\u002Fmiddlewares\u002Fsync-routes","01.rpc\u002F03.middlewares\u002F02.sync-routes",{"title":78,"icon":79,"path":80,"stem":81,"children":82,"page":24},"Client","icon-park-outline:computer","\u002Frpc\u002Fclient","01.rpc\u002F04.client",[83,87,91,94,98],{"title":84,"path":85,"stem":86},"Client Overview","\u002Frpc\u002Fclient\u002Fclient-overview","01.rpc\u002F04.client\u002F00.client-overview",{"title":88,"path":89,"stem":90},"Client Middleware","\u002Frpc\u002Fclient\u002Fclient-middleware","01.rpc\u002F04.client\u002F01.client-middleware",{"title":48,"path":92,"stem":93},"\u002Frpc\u002Fclient\u002Ferror-handling","01.rpc\u002F04.client\u002F02.error-handling",{"title":95,"path":96,"stem":97},"Batch Requests","\u002Frpc\u002Fclient\u002Fbatch","01.rpc\u002F04.client\u002F03.batch",{"title":99,"path":100,"stem":101},"Cancellation & Timeouts","\u002Frpc\u002Fclient\u002Fcancellation-timeouts","01.rpc\u002F04.client\u002F04.cancellation-timeouts",{"title":103,"redirect":104,"icon":105,"path":106,"stem":107,"children":108,"page":24},"Platforms","\u002Frpc\u002Fplatforms\u002Fnode-js","icon-park-outline:play","\u002Frpc\u002Fplatforms","01.rpc\u002F06.platforms",[109,112,116,120,124,128,132],{"title":110,"path":104,"stem":111},"Node.js","01.rpc\u002F06.platforms\u002F01.node-js",{"title":113,"path":114,"stem":115},"Bun","\u002Frpc\u002Fplatforms\u002Fbun","01.rpc\u002F06.platforms\u002F02.bun",{"title":117,"path":118,"stem":119},"AWS Lambda","\u002Frpc\u002Fplatforms\u002Faws-lambda","01.rpc\u002F06.platforms\u002F03.aws-lambda",{"title":121,"path":122,"stem":123},"Google Cloud Functions","\u002Frpc\u002Fplatforms\u002Fgoogle-cloud-functions","01.rpc\u002F06.platforms\u002F04.google-cloud-functions",{"title":125,"path":126,"stem":127},"Cloudflare Workers","\u002Frpc\u002Fplatforms\u002Fcloudflare","01.rpc\u002F06.platforms\u002F05.cloudflare",{"title":129,"path":130,"stem":131},"Vercel","\u002Frpc\u002Fplatforms\u002Fvercel","01.rpc\u002F06.platforms\u002F06.vercel",{"title":133,"path":134,"stem":135},"uWebSockets.js","\u002Frpc\u002Fplatforms\u002Fuwebsockets","01.rpc\u002F06.platforms\u002F07.uwebsockets",{"title":137,"icon":138,"path":139,"stem":140,"children":141,"page":24},"Devtools","icon-park-outline:tool","\u002Frpc\u002Fdevtools","01.rpc\u002F07.devtools",[142,146,150,154,158],{"title":143,"path":144,"stem":145},"Linter","\u002Frpc\u002Fdevtools\u002Flinter","01.rpc\u002F07.devtools\u002F01.linter",{"title":147,"path":148,"stem":149},"Vite","\u002Frpc\u002Fdevtools\u002Fvite","01.rpc\u002F07.devtools\u002F02.vite",{"title":151,"path":152,"stem":153},"Next.js","\u002Frpc\u002Fdevtools\u002Fnextjs","01.rpc\u002F07.devtools\u002F03.nextjs",{"title":155,"path":156,"stem":157},"CLI","\u002Frpc\u002Fdevtools\u002Fcli","01.rpc\u002F07.devtools\u002F04.cli",{"title":159,"path":160,"stem":161},"API Types","\u002Frpc\u002Fdevtools\u002Fapi-types","01.rpc\u002F07.devtools\u002F05.api-types",{"title":163,"icon":164,"path":165,"stem":166,"children":167,"page":24},"RunTypes","i-lucide-braces","\u002Fruntypes","02.runtypes",[168,184,224,254,268,290,332],{"title":11,"icon":169,"redirect":165,"path":170,"stem":171,"children":172,"page":24},"i-lucide-rocket","\u002Fruntypes\u002Fintroduction","02.runtypes\u002F01.introduction",[173,177,180],{"title":174,"path":175,"stem":176},"Built on typescript-go","\u002Fruntypes\u002Fintroduction\u002Fbuilt-on-typescript-go","02.runtypes\u002F01.introduction\u002F02.built-on-typescript-go",{"title":17,"path":178,"stem":179},"\u002Fruntypes\u002Fintroduction\u002Fquick-start","02.runtypes\u002F01.introduction\u002F03.quick-start",{"title":181,"path":182,"stem":183},"Configuration","\u002Fruntypes\u002Fintroduction\u002Fconfiguration","02.runtypes\u002F01.introduction\u002F04.configuration",{"title":185,"icon":186,"redirect":187,"path":188,"stem":189,"children":190,"page":24},"Guide","i-lucide-book-open","\u002Fruntypes\u002Fguide\u002Ftype-builders","\u002Fruntypes\u002Fguide","02.runtypes\u002F02.guide",[191,194,198,201,204,208,212,216,220],{"title":192,"path":187,"stem":193},"Types vs Type Builders","02.runtypes\u002F02.guide\u002F01.type-builders",{"title":195,"path":196,"stem":197},"Reflection","\u002Fruntypes\u002Fguide\u002Freflection","02.runtypes\u002F02.guide\u002F02.reflection",{"title":52,"path":199,"stem":200},"\u002Fruntypes\u002Fguide\u002Fvalidation","02.runtypes\u002F02.guide\u002F03.validation",{"title":56,"path":202,"stem":203},"\u002Fruntypes\u002Fguide\u002Fjson-round-trip","02.runtypes\u002F02.guide\u002F04.json-round-trip",{"title":205,"path":206,"stem":207},"Data Mocking","\u002Fruntypes\u002Fguide\u002Fmocking","02.runtypes\u002F02.guide\u002F07.mocking",{"title":209,"path":210,"stem":211},"JSON Schemas","\u002Fruntypes\u002Fguide\u002Fjson-schemas","02.runtypes\u002F02.guide\u002F08.json-schemas",{"title":213,"path":214,"stem":215},"Pure Functions","\u002Fruntypes\u002Fguide\u002Fpure-functions","02.runtypes\u002F02.guide\u002F09.pure-functions",{"title":217,"path":218,"stem":219},"Compiler Markers","\u002Fruntypes\u002Fguide\u002Fcompiler-markers","02.runtypes\u002F02.guide\u002F10.compiler-markers",{"title":221,"path":222,"stem":223},"All Compiled Functions","\u002Fruntypes\u002Fguide\u002Fall-compiled-functions","02.runtypes\u002F02.guide\u002F11.all-compiled-functions",{"title":225,"icon":226,"redirect":227,"path":228,"stem":229,"children":230,"page":24},"Type Formats","i-lucide-shapes","\u002Fruntypes\u002Ftype-formats\u002Foverview","\u002Fruntypes\u002Ftype-formats","02.runtypes\u002F03.type-formats",[231,234,238,242,246,250],{"title":232,"path":227,"stem":233},"Overview","02.runtypes\u002F03.type-formats\u002F01.overview",{"title":235,"path":236,"stem":237},"String Formats","\u002Fruntypes\u002Ftype-formats\u002Fstring","02.runtypes\u002F03.type-formats\u002F02.string",{"title":239,"path":240,"stem":241},"Number Formats","\u002Fruntypes\u002Ftype-formats\u002Fnumber","02.runtypes\u002F03.type-formats\u002F03.number",{"title":243,"path":244,"stem":245},"BigInt Formats","\u002Fruntypes\u002Ftype-formats\u002Fbigint","02.runtypes\u002F03.type-formats\u002F04.bigint",{"title":247,"path":248,"stem":249},"Date and Time Formats","\u002Fruntypes\u002Ftype-formats\u002Fdate-time","02.runtypes\u002F03.type-formats\u002F05.date-time",{"title":251,"path":252,"stem":253},"Collection Formats","\u002Fruntypes\u002Ftype-formats\u002Fcollections","02.runtypes\u002F03.type-formats\u002F06.collections",{"title":255,"icon":256,"redirect":257,"path":258,"stem":259,"children":260,"page":24},"Tooling","i-lucide-wrench","\u002Fruntypes\u002Ftooling\u002Flinting","\u002Fruntypes\u002Ftooling","02.runtypes\u002F04.tooling",[261,264],{"title":262,"path":257,"stem":263},"Linting","02.runtypes\u002F04.tooling\u002F01.linting",{"title":265,"path":266,"stem":267},"Source Conversion","\u002Fruntypes\u002Ftooling\u002Fsource-conversion","02.runtypes\u002F04.tooling\u002F02.source-conversion",{"title":269,"icon":270,"redirect":271,"path":272,"stem":273,"children":274,"page":24},"AI Integration","i-lucide-sparkles","\u002Fruntypes\u002Fai-integration\u002Fworkflow-and-commands","\u002Fruntypes\u002Fai-integration","02.runtypes\u002F05.ai-integration",[275,278,282,286],{"title":276,"path":271,"stem":277},"AI Workflow","02.runtypes\u002F05.ai-integration\u002F01.workflow-and-commands",{"title":279,"path":280,"stem":281},"FriendlyText","\u002Fruntypes\u002Fai-integration\u002Ffriendly-text","02.runtypes\u002F05.ai-integration\u002F02.friendly-text",{"title":283,"path":284,"stem":285},"MockData","\u002Fruntypes\u002Fai-integration\u002Fmock-data","02.runtypes\u002F05.ai-integration\u002F03.mock-data",{"title":287,"path":288,"stem":289},"Translations (i18n)","\u002Fruntypes\u002Fai-integration\u002Fi18n","02.runtypes\u002F05.ai-integration\u002F04.i18n",{"title":291,"icon":292,"redirect":293,"path":294,"stem":295,"children":296,"page":24},"Drizzle ORM","i-lineicons-drizzle","\u002Fruntypes\u002Fdrizzle-orm\u002Fdrizzle-overview","\u002Fruntypes\u002Fdrizzle-orm","02.runtypes\u002F06.drizzle-orm",[297,300,304,308,312,316,320,324,328],{"title":298,"path":293,"stem":299},"Drizzle Overview","02.runtypes\u002F06.drizzle-orm\u002F00.drizzle-overview",{"title":301,"path":302,"stem":303},"Column Formats","\u002Fruntypes\u002Fdrizzle-orm\u002Fcolumn-formats","02.runtypes\u002F06.drizzle-orm\u002F01.column-formats",{"title":305,"path":306,"stem":307},"Views","\u002Fruntypes\u002Fdrizzle-orm\u002Fviews","02.runtypes\u002F06.drizzle-orm\u002F02.views",{"title":309,"path":310,"stem":311},"Indexes and Constraints","\u002Fruntypes\u002Fdrizzle-orm\u002Fconstraints","02.runtypes\u002F06.drizzle-orm\u002F03.constraints",{"title":313,"path":314,"stem":315},"Row Level Security","\u002Fruntypes\u002Fdrizzle-orm\u002Frow-level-security","02.runtypes\u002F06.drizzle-orm\u002F04.row-level-security",{"title":317,"path":318,"stem":319},"Relations","\u002Fruntypes\u002Fdrizzle-orm\u002Frelations","02.runtypes\u002F06.drizzle-orm\u002F05.relations",{"title":321,"path":322,"stem":323},"The Schema File","\u002Fruntypes\u002Fdrizzle-orm\u002Fschema-file","02.runtypes\u002F06.drizzle-orm\u002F06.schema-file",{"title":325,"path":326,"stem":327},"Migrate an Existing Schema","\u002Fruntypes\u002Fdrizzle-orm\u002Fmigrate-an-existing-schema","02.runtypes\u002F06.drizzle-orm\u002F07.migrate-an-existing-schema",{"title":329,"path":330,"stem":331},"Cloudflare D1 and Durable Objects","\u002Fruntypes\u002Fdrizzle-orm\u002Fcloudflare-storage","02.runtypes\u002F06.drizzle-orm\u002F08.cloudflare-storage",{"title":333,"icon":334,"redirect":335,"path":336,"stem":337,"children":338,"page":24},"Diagnostics","i-lucide-triangle-alert","\u002Fruntypes\u002Fdiagnostics\u002Ferror-levels","\u002Fruntypes\u002Fdiagnostics","02.runtypes\u002F08.diagnostics",[339,342],{"title":340,"path":335,"stem":341},"Error Levels","02.runtypes\u002F08.diagnostics\u002F01.error-levels",{"title":343,"path":344,"stem":345},"All Diagnostics","\u002Fruntypes\u002Fdiagnostics\u002Fall-diagnostics","02.runtypes\u002F08.diagnostics\u002F02.all-diagnostics",{"title":347,"icon":348,"path":349,"stem":350,"children":351,"page":24},"Benchmarks","i-lucide-gauge","\u002Fbenchmarks","03.benchmarks",[352,372],{"title":5,"icon":6,"redirect":353,"path":354,"stem":355,"children":356,"page":24},"\u002Fbenchmarks\u002Frpc\u002Fhello-world","\u002Fbenchmarks\u002Frpc","03.benchmarks\u002F02.rpc",[357,360,364,368],{"title":358,"path":353,"stem":359},"Hello World","03.benchmarks\u002F02.rpc\u002F01.hello-world",{"title":361,"path":362,"stem":363},"Light Validation","\u002Fbenchmarks\u002Frpc\u002Flight-validation","03.benchmarks\u002F02.rpc\u002F02.light-validation",{"title":365,"path":366,"stem":367},"Heavy Validation","\u002Fbenchmarks\u002Frpc\u002Fheavy-validation","03.benchmarks\u002F02.rpc\u002F03.heavy-validation",{"title":369,"path":370,"stem":371},"Payload Sizes","\u002Fbenchmarks\u002Frpc\u002Fpayload-sizes","03.benchmarks\u002F02.rpc\u002F04.payload-sizes",{"title":163,"icon":164,"redirect":373,"path":374,"stem":375,"children":376,"page":24},"\u002Fbenchmarks\u002Fruntypes\u002Fis-valid","\u002Fbenchmarks\u002Fruntypes","03.benchmarks\u002F03.runtypes",[377,380,384,388,392,395],{"title":378,"path":373,"stem":379},"Is Valid","03.benchmarks\u002F03.runtypes\u002F01.is-valid",{"title":381,"path":382,"stem":383},"Is Valid Formats","\u002Fbenchmarks\u002Fruntypes\u002Fis-valid-formats","03.benchmarks\u002F03.runtypes\u002F02.is-valid-formats",{"title":385,"path":386,"stem":387},"Get Errors","\u002Fbenchmarks\u002Fruntypes\u002Fget-errors","03.benchmarks\u002F03.runtypes\u002F03.get-errors",{"title":389,"path":390,"stem":391},"Get Errors Formats","\u002Fbenchmarks\u002Fruntypes\u002Fget-errors-formats","03.benchmarks\u002F03.runtypes\u002F04.get-errors-formats",{"title":56,"path":393,"stem":394},"\u002Fbenchmarks\u002Fruntypes\u002Fjson-round-trip","03.benchmarks\u002F03.runtypes\u002F05.json-round-trip",{"title":396,"path":397,"stem":398},"Type Checking","\u002Fbenchmarks\u002Fruntypes\u002Ftype-checking","03.benchmarks\u002F03.runtypes\u002F07.type-checking",{"id":400,"title":365,"body":401,"description":1423,"extension":1424,"links":1425,"meta":1426,"navigation":833,"path":366,"seo":1427,"stem":367,"__hash__":1428},"docs\u002F03.benchmarks\u002F02.rpc\u002F03.heavy-validation.md",{"type":402,"value":403},"minimark",[404,412,421,426,432,436,438,442,444,448,451,455,458,463,471,1395,1399,1406,1412,1419],[405,406,407,408,411],"p",{},"A ~1 KB user update: heavy validation and the JSON round trip, on top of routing. It compares Zod and TypeBox with ",[409,410,163],"a",{"href":165},".",[413,414],"u-button",{"color":415,"icon":416,"label":417,"size":418,"to":419,"variant":420},"neutral","i-lucide-code","See the code","sm","#benchmark-code","outline",[422,423,425],"h4",{"id":424},"requests-per-second","Requests per Second",[427,428],"server-bench-bars",{"bench":429,"metric":430,":show-meta":431},"servers-heavy-validation","requests","true",[422,433,435],{"id":434},"throughput","Throughput",[427,437],{"bench":429,"metric":434},[422,439,441],{"id":440},"latency","Latency",[427,443],{"bench":429,"metric":440},[422,445,447],{"id":446},"max-memory","Max Memory",[427,449],{"bench":429,"metric":450},"maxMem",[422,452,454],{"id":453},"max-cpu","Max CPU",[427,456],{"bench":429,"metric":457},"maxCpu",[459,460,462],"h2",{"id":461},"benchmark-code","Benchmark Code",[405,464,465,466,470],{},"Each request is an ",[467,468,469],"code",{},"updateUser"," call with a complex User model.",[472,473,478],"pre",{"className":474,"code":475,"language":476,"meta":477,"style":477},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export interface User {\n  id: number;\n  username: string;\n  email: string;\n  profile: {\n    firstName: string;\n    lastName: string;\n    displayName: string;\n    bio?: string;\n    avatarUrl?: string;\n    dateOfBirth: Date;\n  };\n  role: \"admin\" | \"user\" | \"guest\" | \"moderator\";\n  status: \"active\" | \"suspended\" | \"pending_verification\" | \"deactivated\";\n  address: Address;\n  paymentMethods: PaymentMethod[]; \u002F\u002F Discriminated union\n  preferences: UserPreferences;\n  createdAt: Date;\n  updatedAt: Date;\n  lastLoginAt?: Date;\n  tags: string[];\n}\n\n\u002F\u002F ### mion ###\n\u002F\u002F user arrives validated and deserialized: Date fields are Date objects, not JSON strings\nexport const routes: Routes = {\n  updateUser: (ctx, user: User): User => {\n    user.updatedAt = new Date();\n    user.lastLoginAt = new Date();\n    user.profile.displayName = `${user.profile.firstName} ${user.profile.lastName.charAt(0)}.`;\n    return user;\n  },\n};\n\n\u002F\u002F ### Other frameworks (Express, Hapi, Hono) ###\n\u002F\u002F Zod validates and coerces dates, compiled for speed\nconst UserSchema = z.compile(z.object({\n  id: z.number(),\n  username: z.string(),\n  \u002F\u002F ... full schema with nested objects, discriminated unions, etc.\n  createdAt: z.coerce.date(),\n  updatedAt: z.coerce.date(),\n  \u002F\u002F ...\n}));\n\napp.post(\"\u002FupdateUser\", function (req, res) {\n  const user = UserSchema.parse(req.body);\n  user.updatedAt = new Date();\n  user.lastLoginAt = new Date();\n  user.profile.displayName = `${user.profile.firstName} ${user.profile.lastName.charAt(0)}.`;\n  res.json(user);\n});\n","ts","",[467,479,480,501,517,530,542,552,564,576,588,601,613,626,632,680,724,737,759,772,784,796,808,822,828,835,841,847,868,904,927,947,1019,1029,1035,1041,1046,1052,1058,1091,1110,1128,1134,1157,1178,1184,1194,1199,1238,1269,1289,1308,1367,1386],{"__ignoreMap":477},[481,482,485,489,493,497],"span",{"class":483,"line":484},"line",1,[481,486,488],{"class":487},"s7zQu","export",[481,490,492],{"class":491},"spNyl"," interface",[481,494,496],{"class":495},"sBMFI"," User",[481,498,500],{"class":499},"sMK4o"," {\n",[481,502,504,508,511,514],{"class":483,"line":503},2,[481,505,507],{"class":506},"swJcz","  id",[481,509,510],{"class":499},":",[481,512,513],{"class":495}," number",[481,515,516],{"class":499},";\n",[481,518,520,523,525,528],{"class":483,"line":519},3,[481,521,522],{"class":506},"  username",[481,524,510],{"class":499},[481,526,527],{"class":495}," string",[481,529,516],{"class":499},[481,531,533,536,538,540],{"class":483,"line":532},4,[481,534,535],{"class":506},"  email",[481,537,510],{"class":499},[481,539,527],{"class":495},[481,541,516],{"class":499},[481,543,545,548,550],{"class":483,"line":544},5,[481,546,547],{"class":506},"  profile",[481,549,510],{"class":499},[481,551,500],{"class":499},[481,553,555,558,560,562],{"class":483,"line":554},6,[481,556,557],{"class":506},"    firstName",[481,559,510],{"class":499},[481,561,527],{"class":495},[481,563,516],{"class":499},[481,565,567,570,572,574],{"class":483,"line":566},7,[481,568,569],{"class":506},"    lastName",[481,571,510],{"class":499},[481,573,527],{"class":495},[481,575,516],{"class":499},[481,577,579,582,584,586],{"class":483,"line":578},8,[481,580,581],{"class":506},"    displayName",[481,583,510],{"class":499},[481,585,527],{"class":495},[481,587,516],{"class":499},[481,589,591,594,597,599],{"class":483,"line":590},9,[481,592,593],{"class":506},"    bio",[481,595,596],{"class":499},"?:",[481,598,527],{"class":495},[481,600,516],{"class":499},[481,602,604,607,609,611],{"class":483,"line":603},10,[481,605,606],{"class":506},"    avatarUrl",[481,608,596],{"class":499},[481,610,527],{"class":495},[481,612,516],{"class":499},[481,614,616,619,621,624],{"class":483,"line":615},11,[481,617,618],{"class":506},"    dateOfBirth",[481,620,510],{"class":499},[481,622,623],{"class":495}," Date",[481,625,516],{"class":499},[481,627,629],{"class":483,"line":628},12,[481,630,631],{"class":499},"  };\n",[481,633,635,638,640,643,647,650,653,655,658,660,662,664,667,669,671,673,676,678],{"class":483,"line":634},13,[481,636,637],{"class":506},"  role",[481,639,510],{"class":499},[481,641,642],{"class":499}," \"",[481,644,646],{"class":645},"sfazB","admin",[481,648,649],{"class":499},"\"",[481,651,652],{"class":499}," |",[481,654,642],{"class":499},[481,656,657],{"class":645},"user",[481,659,649],{"class":499},[481,661,652],{"class":499},[481,663,642],{"class":499},[481,665,666],{"class":645},"guest",[481,668,649],{"class":499},[481,670,652],{"class":499},[481,672,642],{"class":499},[481,674,675],{"class":645},"moderator",[481,677,649],{"class":499},[481,679,516],{"class":499},[481,681,683,686,688,690,693,695,697,699,702,704,706,708,711,713,715,717,720,722],{"class":483,"line":682},14,[481,684,685],{"class":506},"  status",[481,687,510],{"class":499},[481,689,642],{"class":499},[481,691,692],{"class":645},"active",[481,694,649],{"class":499},[481,696,652],{"class":499},[481,698,642],{"class":499},[481,700,701],{"class":645},"suspended",[481,703,649],{"class":499},[481,705,652],{"class":499},[481,707,642],{"class":499},[481,709,710],{"class":645},"pending_verification",[481,712,649],{"class":499},[481,714,652],{"class":499},[481,716,642],{"class":499},[481,718,719],{"class":645},"deactivated",[481,721,649],{"class":499},[481,723,516],{"class":499},[481,725,727,730,732,735],{"class":483,"line":726},15,[481,728,729],{"class":506},"  address",[481,731,510],{"class":499},[481,733,734],{"class":495}," Address",[481,736,516],{"class":499},[481,738,740,743,745,748,752,755],{"class":483,"line":739},16,[481,741,742],{"class":506},"  paymentMethods",[481,744,510],{"class":499},[481,746,747],{"class":495}," PaymentMethod",[481,749,751],{"class":750},"sTEyZ","[]",[481,753,754],{"class":499},";",[481,756,758],{"class":757},"sHwdD"," \u002F\u002F Discriminated union\n",[481,760,762,765,767,770],{"class":483,"line":761},17,[481,763,764],{"class":506},"  preferences",[481,766,510],{"class":499},[481,768,769],{"class":495}," UserPreferences",[481,771,516],{"class":499},[481,773,775,778,780,782],{"class":483,"line":774},18,[481,776,777],{"class":506},"  createdAt",[481,779,510],{"class":499},[481,781,623],{"class":495},[481,783,516],{"class":499},[481,785,787,790,792,794],{"class":483,"line":786},19,[481,788,789],{"class":506},"  updatedAt",[481,791,510],{"class":499},[481,793,623],{"class":495},[481,795,516],{"class":499},[481,797,799,802,804,806],{"class":483,"line":798},20,[481,800,801],{"class":506},"  lastLoginAt",[481,803,596],{"class":499},[481,805,623],{"class":495},[481,807,516],{"class":499},[481,809,811,814,816,818,820],{"class":483,"line":810},21,[481,812,813],{"class":506},"  tags",[481,815,510],{"class":499},[481,817,527],{"class":495},[481,819,751],{"class":750},[481,821,516],{"class":499},[481,823,825],{"class":483,"line":824},22,[481,826,827],{"class":499},"}\n",[481,829,831],{"class":483,"line":830},23,[481,832,834],{"emptyLinePlaceholder":833},true,"\n",[481,836,838],{"class":483,"line":837},24,[481,839,840],{"class":757},"\u002F\u002F ### mion ###\n",[481,842,844],{"class":483,"line":843},25,[481,845,846],{"class":757},"\u002F\u002F user arrives validated and deserialized: Date fields are Date objects, not JSON strings\n",[481,848,850,852,855,858,860,863,866],{"class":483,"line":849},26,[481,851,488],{"class":487},[481,853,854],{"class":491}," const",[481,856,857],{"class":750}," routes",[481,859,510],{"class":499},[481,861,862],{"class":495}," Routes",[481,864,865],{"class":499}," =",[481,867,500],{"class":499},[481,869,871,875,877,880,884,887,890,892,894,897,899,902],{"class":483,"line":870},27,[481,872,874],{"class":873},"s2Zo4","  updateUser",[481,876,510],{"class":499},[481,878,879],{"class":499}," (",[481,881,883],{"class":882},"sHdIc","ctx",[481,885,886],{"class":499},",",[481,888,889],{"class":882}," user",[481,891,510],{"class":499},[481,893,496],{"class":495},[481,895,896],{"class":499},"):",[481,898,496],{"class":495},[481,900,901],{"class":491}," =>",[481,903,500],{"class":499},[481,905,907,910,912,915,917,920,922,925],{"class":483,"line":906},28,[481,908,909],{"class":750},"    user",[481,911,411],{"class":499},[481,913,914],{"class":750},"updatedAt",[481,916,865],{"class":499},[481,918,919],{"class":499}," new",[481,921,623],{"class":873},[481,923,924],{"class":506},"()",[481,926,516],{"class":499},[481,928,930,932,934,937,939,941,943,945],{"class":483,"line":929},29,[481,931,909],{"class":750},[481,933,411],{"class":499},[481,935,936],{"class":750},"lastLoginAt",[481,938,865],{"class":499},[481,940,919],{"class":499},[481,942,623],{"class":873},[481,944,924],{"class":506},[481,946,516],{"class":499},[481,948,950,952,954,957,959,962,964,967,969,971,973,975,978,981,984,986,988,990,992,995,997,1000,1003,1007,1010,1012,1014,1017],{"class":483,"line":949},30,[481,951,909],{"class":750},[481,953,411],{"class":499},[481,955,956],{"class":750},"profile",[481,958,411],{"class":499},[481,960,961],{"class":750},"displayName",[481,963,865],{"class":499},[481,965,966],{"class":499}," `${",[481,968,657],{"class":750},[481,970,411],{"class":499},[481,972,956],{"class":750},[481,974,411],{"class":499},[481,976,977],{"class":750},"firstName",[481,979,980],{"class":499},"}",[481,982,983],{"class":499}," ${",[481,985,657],{"class":750},[481,987,411],{"class":499},[481,989,956],{"class":750},[481,991,411],{"class":499},[481,993,994],{"class":750},"lastName",[481,996,411],{"class":499},[481,998,999],{"class":873},"charAt",[481,1001,1002],{"class":750},"(",[481,1004,1006],{"class":1005},"sbssI","0",[481,1008,1009],{"class":750},")",[481,1011,980],{"class":499},[481,1013,411],{"class":645},[481,1015,1016],{"class":499},"`",[481,1018,516],{"class":499},[481,1020,1022,1025,1027],{"class":483,"line":1021},31,[481,1023,1024],{"class":487},"    return",[481,1026,889],{"class":750},[481,1028,516],{"class":499},[481,1030,1032],{"class":483,"line":1031},32,[481,1033,1034],{"class":499},"  },\n",[481,1036,1038],{"class":483,"line":1037},33,[481,1039,1040],{"class":499},"};\n",[481,1042,1044],{"class":483,"line":1043},34,[481,1045,834],{"emptyLinePlaceholder":833},[481,1047,1049],{"class":483,"line":1048},35,[481,1050,1051],{"class":757},"\u002F\u002F ### Other frameworks (Express, Hapi, Hono) ###\n",[481,1053,1055],{"class":483,"line":1054},36,[481,1056,1057],{"class":757},"\u002F\u002F Zod validates and coerces dates, compiled for speed\n",[481,1059,1061,1064,1067,1070,1073,1075,1078,1081,1083,1086,1088],{"class":483,"line":1060},37,[481,1062,1063],{"class":491},"const",[481,1065,1066],{"class":750}," UserSchema ",[481,1068,1069],{"class":499},"=",[481,1071,1072],{"class":750}," z",[481,1074,411],{"class":499},[481,1076,1077],{"class":873},"compile",[481,1079,1080],{"class":750},"(z",[481,1082,411],{"class":499},[481,1084,1085],{"class":873},"object",[481,1087,1002],{"class":750},[481,1089,1090],{"class":499},"{\n",[481,1092,1094,1096,1098,1100,1102,1105,1107],{"class":483,"line":1093},38,[481,1095,507],{"class":506},[481,1097,510],{"class":499},[481,1099,1072],{"class":750},[481,1101,411],{"class":499},[481,1103,1104],{"class":873},"number",[481,1106,924],{"class":750},[481,1108,1109],{"class":499},",\n",[481,1111,1113,1115,1117,1119,1121,1124,1126],{"class":483,"line":1112},39,[481,1114,522],{"class":506},[481,1116,510],{"class":499},[481,1118,1072],{"class":750},[481,1120,411],{"class":499},[481,1122,1123],{"class":873},"string",[481,1125,924],{"class":750},[481,1127,1109],{"class":499},[481,1129,1131],{"class":483,"line":1130},40,[481,1132,1133],{"class":757},"  \u002F\u002F ... full schema with nested objects, discriminated unions, etc.\n",[481,1135,1137,1139,1141,1143,1145,1148,1150,1153,1155],{"class":483,"line":1136},41,[481,1138,777],{"class":506},[481,1140,510],{"class":499},[481,1142,1072],{"class":750},[481,1144,411],{"class":499},[481,1146,1147],{"class":750},"coerce",[481,1149,411],{"class":499},[481,1151,1152],{"class":873},"date",[481,1154,924],{"class":750},[481,1156,1109],{"class":499},[481,1158,1160,1162,1164,1166,1168,1170,1172,1174,1176],{"class":483,"line":1159},42,[481,1161,789],{"class":506},[481,1163,510],{"class":499},[481,1165,1072],{"class":750},[481,1167,411],{"class":499},[481,1169,1147],{"class":750},[481,1171,411],{"class":499},[481,1173,1152],{"class":873},[481,1175,924],{"class":750},[481,1177,1109],{"class":499},[481,1179,1181],{"class":483,"line":1180},43,[481,1182,1183],{"class":757},"  \u002F\u002F ...\n",[481,1185,1187,1189,1192],{"class":483,"line":1186},44,[481,1188,980],{"class":499},[481,1190,1191],{"class":750},"))",[481,1193,516],{"class":499},[481,1195,1197],{"class":483,"line":1196},45,[481,1198,834],{"emptyLinePlaceholder":833},[481,1200,1202,1205,1207,1210,1212,1214,1217,1219,1221,1224,1226,1229,1231,1234,1236],{"class":483,"line":1201},46,[481,1203,1204],{"class":750},"app",[481,1206,411],{"class":499},[481,1208,1209],{"class":873},"post",[481,1211,1002],{"class":750},[481,1213,649],{"class":499},[481,1215,1216],{"class":645},"\u002FupdateUser",[481,1218,649],{"class":499},[481,1220,886],{"class":499},[481,1222,1223],{"class":491}," function",[481,1225,879],{"class":499},[481,1227,1228],{"class":882},"req",[481,1230,886],{"class":499},[481,1232,1233],{"class":882}," res",[481,1235,1009],{"class":499},[481,1237,500],{"class":499},[481,1239,1241,1244,1246,1248,1251,1253,1256,1258,1260,1262,1265,1267],{"class":483,"line":1240},47,[481,1242,1243],{"class":491},"  const",[481,1245,889],{"class":750},[481,1247,865],{"class":499},[481,1249,1250],{"class":750}," UserSchema",[481,1252,411],{"class":499},[481,1254,1255],{"class":873},"parse",[481,1257,1002],{"class":506},[481,1259,1228],{"class":750},[481,1261,411],{"class":499},[481,1263,1264],{"class":750},"body",[481,1266,1009],{"class":506},[481,1268,516],{"class":499},[481,1270,1272,1275,1277,1279,1281,1283,1285,1287],{"class":483,"line":1271},48,[481,1273,1274],{"class":750},"  user",[481,1276,411],{"class":499},[481,1278,914],{"class":750},[481,1280,865],{"class":499},[481,1282,919],{"class":499},[481,1284,623],{"class":873},[481,1286,924],{"class":506},[481,1288,516],{"class":499},[481,1290,1292,1294,1296,1298,1300,1302,1304,1306],{"class":483,"line":1291},49,[481,1293,1274],{"class":750},[481,1295,411],{"class":499},[481,1297,936],{"class":750},[481,1299,865],{"class":499},[481,1301,919],{"class":499},[481,1303,623],{"class":873},[481,1305,924],{"class":506},[481,1307,516],{"class":499},[481,1309,1311,1313,1315,1317,1319,1321,1323,1325,1327,1329,1331,1333,1335,1337,1339,1341,1343,1345,1347,1349,1351,1353,1355,1357,1359,1361,1363,1365],{"class":483,"line":1310},50,[481,1312,1274],{"class":750},[481,1314,411],{"class":499},[481,1316,956],{"class":750},[481,1318,411],{"class":499},[481,1320,961],{"class":750},[481,1322,865],{"class":499},[481,1324,966],{"class":499},[481,1326,657],{"class":750},[481,1328,411],{"class":499},[481,1330,956],{"class":750},[481,1332,411],{"class":499},[481,1334,977],{"class":750},[481,1336,980],{"class":499},[481,1338,983],{"class":499},[481,1340,657],{"class":750},[481,1342,411],{"class":499},[481,1344,956],{"class":750},[481,1346,411],{"class":499},[481,1348,994],{"class":750},[481,1350,411],{"class":499},[481,1352,999],{"class":873},[481,1354,1002],{"class":750},[481,1356,1006],{"class":1005},[481,1358,1009],{"class":750},[481,1360,980],{"class":499},[481,1362,411],{"class":645},[481,1364,1016],{"class":499},[481,1366,516],{"class":499},[481,1368,1370,1373,1375,1378,1380,1382,1384],{"class":483,"line":1369},51,[481,1371,1372],{"class":750},"  res",[481,1374,411],{"class":499},[481,1376,1377],{"class":873},"json",[481,1379,1002],{"class":506},[481,1381,657],{"class":750},[481,1383,1009],{"class":506},[481,1385,516],{"class":499},[481,1387,1389,1391,1393],{"class":483,"line":1388},52,[481,1390,980],{"class":499},[481,1392,1009],{"class":750},[481,1394,516],{"class":499},[459,1396,1398],{"id":1397},"reading-the-results","Reading the Results",[405,1400,1401,1402,1405],{},"Requests take much longer than in the ",[409,1403,1404],{"href":353},"'hello world'"," benchmark, mostly because of validation and the JSON round trip.",[405,1407,1408],{},[1409,1410,1411],"strong",{},"Here, the validation and JSON round trip libraries can matter more than the routing.",[1413,1414,1415,1416,1418],"note",{},"The more validation and JSON round trip a request needs, the better mion performs, thanks to its optimized JIT ",[409,1417,163],{"href":165}," functions.",[1420,1421,1422],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}","Benchmarks for an Update User endpoint with heavy validation and JSON round trip.","md",null,{"toc":24},{"title":365,"description":1423},"7fulWfgkOZqjKmq_s646xULeK5GQXDkb4MOCCrtqEms",1793324367481]