[{"data":1,"prerenderedAt":1163},["ShallowReactive",2],{"navigation_docs":3,"-benchmarks-rpc-hello-world":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":358,"body":401,"description":1157,"extension":1158,"links":1159,"meta":1160,"navigation":542,"path":353,"seo":1161,"stem":359,"__hash__":1162},"docs\u002F03.benchmarks\u002F02.rpc\u002F01.hello-world.md",{"type":402,"value":403},"minimark",[404,408,417,422,428,432,434,438,440,444,447,451,454,459,462,1153],[405,406,407],"p",{},"A hello world route with no validation: routing and framework overhead only, about as fast as each framework can get. The numbers are generated on every docs deploy from this repository's code.",[409,410],"u-button",{"color":411,"icon":412,"label":413,"size":414,"to":415,"variant":416},"neutral","i-lucide-code","See the code","sm","#benchmark-code","outline",[418,419,421],"h4",{"id":420},"requests-per-second","Requests per Second",[423,424],"server-bench-bars",{"bench":425,"metric":426,":show-meta":427},"servers-hello-world","requests","true",[418,429,431],{"id":430},"throughput","Throughput",[423,433],{"bench":425,"metric":430},[418,435,437],{"id":436},"latency","Latency",[423,439],{"bench":425,"metric":436},[418,441,443],{"id":442},"max-memory","Max Memory",[423,445],{"bench":425,"metric":446},"maxMem",[418,448,450],{"id":449},"max-cpu","Max CPU",[423,452],{"bench":425,"metric":453},"maxCpu",[455,456,458],"h2",{"id":457},"benchmark-code","Benchmark Code",[405,460,461],{},"Every server answers this same route.",[463,464,469],"pre",{"className":465,"code":466,"language":467,"meta":468,"style":468},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import {FatalError} from '@mionjs\u002Fcore';\nimport {createMionRouter, Routes} from '@mionjs\u002Frouter';\n\nexport type User = {id: string; name: string; surname: string};\n\n\u002F\u002F every helper below gets these options by type\nconst mion = createMionRouter({basePath: 'api\u002Fv1'});\n\n\u002F\u002F parameters are validated before each function runs\nconst routes = {\n  \u002F\u002F reads the HttpOnly session cookie the browser sends\n  auth: mion.middleware((ctx): void | FatalError\u003C'not-authorized'> => {\n    const cookie = ctx.request.headers.get('cookie');\n    \u002F\u002F a FatalError ends the request: sayHello never runs, and the client gets it typed\n    if (!cookie?.includes('session='))\n      return new FatalError({\n        publicMessage: 'Not Authorized',\n        type: 'not-authorized',\n      });\n  }),\n  users: {\n    sayHello: mion.route(\n      (ctx, user: User): string => `Hello ${user.name} ${user.surname}`\n    ),\n  },\n  log: mion.middleware(\n    (ctx): void => console.log(Date.now(), ctx.path, ctx.response.statusCode),\n    {alwaysRun: true}\n  ),\n} satisfies Routes;\n\nexport const myApi = mion.initRoutes(routes);\n\n\u002F\u002F the client imports only this type\nexport type MyApi = typeof myApi;\n","ts","",[470,471,472,508,537,544,595,600,607,648,653,659,672,678,733,775,781,813,829,847,863,873,883,893,911,966,974,980,996,1054,1072,1080,1092,1097,1122,1127,1133],"code",{"__ignoreMap":468},[473,474,477,481,485,489,492,495,498,502,505],"span",{"class":475,"line":476},"line",1,[473,478,480],{"class":479},"s7zQu","import",[473,482,484],{"class":483},"sMK4o"," {",[473,486,488],{"class":487},"sTEyZ","FatalError",[473,490,491],{"class":483},"}",[473,493,494],{"class":479}," from",[473,496,497],{"class":483}," '",[473,499,501],{"class":500},"sfazB","@mionjs\u002Fcore",[473,503,504],{"class":483},"'",[473,506,507],{"class":483},";\n",[473,509,511,513,515,518,521,524,526,528,530,533,535],{"class":475,"line":510},2,[473,512,480],{"class":479},[473,514,484],{"class":483},[473,516,517],{"class":487},"createMionRouter",[473,519,520],{"class":483},",",[473,522,523],{"class":487}," Routes",[473,525,491],{"class":483},[473,527,494],{"class":479},[473,529,497],{"class":483},[473,531,532],{"class":500},"@mionjs\u002Frouter",[473,534,504],{"class":483},[473,536,507],{"class":483},[473,538,540],{"class":475,"line":539},3,[473,541,543],{"emptyLinePlaceholder":542},true,"\n",[473,545,547,550,554,558,561,563,567,570,573,576,579,581,583,585,588,590,592],{"class":475,"line":546},4,[473,548,549],{"class":479},"export",[473,551,553],{"class":552},"spNyl"," type",[473,555,557],{"class":556},"sBMFI"," User",[473,559,560],{"class":483}," =",[473,562,484],{"class":483},[473,564,566],{"class":565},"swJcz","id",[473,568,569],{"class":483},":",[473,571,572],{"class":556}," string",[473,574,575],{"class":483},";",[473,577,578],{"class":565}," name",[473,580,569],{"class":483},[473,582,572],{"class":556},[473,584,575],{"class":483},[473,586,587],{"class":565}," surname",[473,589,569],{"class":483},[473,591,572],{"class":556},[473,593,594],{"class":483},"};\n",[473,596,598],{"class":475,"line":597},5,[473,599,543],{"emptyLinePlaceholder":542},[473,601,603],{"class":475,"line":602},6,[473,604,606],{"class":605},"sHwdD","\u002F\u002F every helper below gets these options by type\n",[473,608,610,613,616,619,623,626,629,632,634,636,639,641,643,646],{"class":475,"line":609},7,[473,611,612],{"class":552},"const",[473,614,615],{"class":487}," mion ",[473,617,618],{"class":483},"=",[473,620,622],{"class":621},"s2Zo4"," createMionRouter",[473,624,625],{"class":487},"(",[473,627,628],{"class":483},"{",[473,630,631],{"class":565},"basePath",[473,633,569],{"class":483},[473,635,497],{"class":483},[473,637,638],{"class":500},"api\u002Fv1",[473,640,504],{"class":483},[473,642,491],{"class":483},[473,644,645],{"class":487},")",[473,647,507],{"class":483},[473,649,651],{"class":475,"line":650},8,[473,652,543],{"emptyLinePlaceholder":542},[473,654,656],{"class":475,"line":655},9,[473,657,658],{"class":605},"\u002F\u002F parameters are validated before each function runs\n",[473,660,662,664,667,669],{"class":475,"line":661},10,[473,663,612],{"class":552},[473,665,666],{"class":487}," routes ",[473,668,618],{"class":483},[473,670,671],{"class":483}," {\n",[473,673,675],{"class":475,"line":674},11,[473,676,677],{"class":605},"  \u002F\u002F reads the HttpOnly session cookie the browser sends\n",[473,679,681,684,686,689,692,695,697,699,703,706,709,712,715,718,720,723,725,728,731],{"class":475,"line":680},12,[473,682,683],{"class":565},"  auth",[473,685,569],{"class":483},[473,687,688],{"class":487}," mion",[473,690,691],{"class":483},".",[473,693,694],{"class":621},"middleware",[473,696,625],{"class":487},[473,698,625],{"class":483},[473,700,702],{"class":701},"sHdIc","ctx",[473,704,705],{"class":483},"):",[473,707,708],{"class":556}," void",[473,710,711],{"class":483}," |",[473,713,714],{"class":556}," FatalError",[473,716,717],{"class":483},"\u003C",[473,719,504],{"class":483},[473,721,722],{"class":500},"not-authorized",[473,724,504],{"class":483},[473,726,727],{"class":483},">",[473,729,730],{"class":552}," =>",[473,732,671],{"class":483},[473,734,736,739,742,744,747,749,752,754,757,759,762,764,766,769,771,773],{"class":475,"line":735},13,[473,737,738],{"class":552},"    const",[473,740,741],{"class":487}," cookie",[473,743,560],{"class":483},[473,745,746],{"class":487}," ctx",[473,748,691],{"class":483},[473,750,751],{"class":487},"request",[473,753,691],{"class":483},[473,755,756],{"class":487},"headers",[473,758,691],{"class":483},[473,760,761],{"class":621},"get",[473,763,625],{"class":565},[473,765,504],{"class":483},[473,767,768],{"class":500},"cookie",[473,770,504],{"class":483},[473,772,645],{"class":565},[473,774,507],{"class":483},[473,776,778],{"class":475,"line":777},14,[473,779,780],{"class":605},"    \u002F\u002F a FatalError ends the request: sayHello never runs, and the client gets it typed\n",[473,782,784,787,790,793,795,798,801,803,805,808,810],{"class":475,"line":783},15,[473,785,786],{"class":479},"    if",[473,788,789],{"class":565}," (",[473,791,792],{"class":483},"!",[473,794,768],{"class":487},[473,796,797],{"class":483},"?.",[473,799,800],{"class":621},"includes",[473,802,625],{"class":565},[473,804,504],{"class":483},[473,806,807],{"class":500},"session=",[473,809,504],{"class":483},[473,811,812],{"class":565},"))\n",[473,814,816,819,822,824,826],{"class":475,"line":815},16,[473,817,818],{"class":479},"      return",[473,820,821],{"class":483}," new",[473,823,714],{"class":621},[473,825,625],{"class":565},[473,827,828],{"class":483},"{\n",[473,830,832,835,837,839,842,844],{"class":475,"line":831},17,[473,833,834],{"class":565},"        publicMessage",[473,836,569],{"class":483},[473,838,497],{"class":483},[473,840,841],{"class":500},"Not Authorized",[473,843,504],{"class":483},[473,845,846],{"class":483},",\n",[473,848,850,853,855,857,859,861],{"class":475,"line":849},18,[473,851,852],{"class":565},"        type",[473,854,569],{"class":483},[473,856,497],{"class":483},[473,858,722],{"class":500},[473,860,504],{"class":483},[473,862,846],{"class":483},[473,864,866,869,871],{"class":475,"line":865},19,[473,867,868],{"class":483},"      }",[473,870,645],{"class":565},[473,872,507],{"class":483},[473,874,876,879,881],{"class":475,"line":875},20,[473,877,878],{"class":483},"  }",[473,880,645],{"class":487},[473,882,846],{"class":483},[473,884,886,889,891],{"class":475,"line":885},21,[473,887,888],{"class":565},"  users",[473,890,569],{"class":483},[473,892,671],{"class":483},[473,894,896,899,901,903,905,908],{"class":475,"line":895},22,[473,897,898],{"class":565},"    sayHello",[473,900,569],{"class":483},[473,902,688],{"class":487},[473,904,691],{"class":483},[473,906,907],{"class":621},"route",[473,909,910],{"class":487},"(\n",[473,912,914,917,919,921,924,926,928,930,932,934,937,940,943,946,948,951,953,956,958,960,963],{"class":475,"line":913},23,[473,915,916],{"class":483},"      (",[473,918,702],{"class":701},[473,920,520],{"class":483},[473,922,923],{"class":701}," user",[473,925,569],{"class":483},[473,927,557],{"class":556},[473,929,705],{"class":483},[473,931,572],{"class":556},[473,933,730],{"class":552},[473,935,936],{"class":483}," `",[473,938,939],{"class":500},"Hello ",[473,941,942],{"class":483},"${",[473,944,945],{"class":487},"user",[473,947,691],{"class":483},[473,949,950],{"class":487},"name",[473,952,491],{"class":483},[473,954,955],{"class":483}," ${",[473,957,945],{"class":487},[473,959,691],{"class":483},[473,961,962],{"class":487},"surname",[473,964,965],{"class":483},"}`\n",[473,967,969,972],{"class":475,"line":968},24,[473,970,971],{"class":487},"    )",[473,973,846],{"class":483},[473,975,977],{"class":475,"line":976},25,[473,978,979],{"class":483},"  },\n",[473,981,983,986,988,990,992,994],{"class":475,"line":982},26,[473,984,985],{"class":565},"  log",[473,987,569],{"class":483},[473,989,688],{"class":487},[473,991,691],{"class":483},[473,993,694],{"class":621},[473,995,910],{"class":487},[473,997,999,1002,1004,1006,1008,1010,1013,1015,1018,1021,1023,1026,1029,1031,1033,1035,1038,1040,1042,1044,1047,1049,1052],{"class":475,"line":998},27,[473,1000,1001],{"class":483},"    (",[473,1003,702],{"class":701},[473,1005,705],{"class":483},[473,1007,708],{"class":556},[473,1009,730],{"class":552},[473,1011,1012],{"class":487}," console",[473,1014,691],{"class":483},[473,1016,1017],{"class":621},"log",[473,1019,1020],{"class":487},"(Date",[473,1022,691],{"class":483},[473,1024,1025],{"class":621},"now",[473,1027,1028],{"class":487},"()",[473,1030,520],{"class":483},[473,1032,746],{"class":487},[473,1034,691],{"class":483},[473,1036,1037],{"class":487},"path",[473,1039,520],{"class":483},[473,1041,746],{"class":487},[473,1043,691],{"class":483},[473,1045,1046],{"class":487},"response",[473,1048,691],{"class":483},[473,1050,1051],{"class":487},"statusCode)",[473,1053,846],{"class":483},[473,1055,1057,1060,1063,1065,1069],{"class":475,"line":1056},28,[473,1058,1059],{"class":483},"    {",[473,1061,1062],{"class":565},"alwaysRun",[473,1064,569],{"class":483},[473,1066,1068],{"class":1067},"sfNiH"," true",[473,1070,1071],{"class":483},"}\n",[473,1073,1075,1078],{"class":475,"line":1074},29,[473,1076,1077],{"class":487},"  )",[473,1079,846],{"class":483},[473,1081,1083,1085,1088,1090],{"class":475,"line":1082},30,[473,1084,491],{"class":483},[473,1086,1087],{"class":479}," satisfies",[473,1089,523],{"class":556},[473,1091,507],{"class":483},[473,1093,1095],{"class":475,"line":1094},31,[473,1096,543],{"emptyLinePlaceholder":542},[473,1098,1100,1102,1105,1108,1110,1112,1114,1117,1120],{"class":475,"line":1099},32,[473,1101,549],{"class":479},[473,1103,1104],{"class":552}," const",[473,1106,1107],{"class":487}," myApi ",[473,1109,618],{"class":483},[473,1111,688],{"class":487},[473,1113,691],{"class":483},[473,1115,1116],{"class":621},"initRoutes",[473,1118,1119],{"class":487},"(routes)",[473,1121,507],{"class":483},[473,1123,1125],{"class":475,"line":1124},33,[473,1126,543],{"emptyLinePlaceholder":542},[473,1128,1130],{"class":475,"line":1129},34,[473,1131,1132],{"class":605},"\u002F\u002F the client imports only this type\n",[473,1134,1136,1138,1140,1143,1145,1148,1151],{"class":475,"line":1135},35,[473,1137,549],{"class":479},[473,1139,553],{"class":552},[473,1141,1142],{"class":556}," MyApi",[473,1144,560],{"class":483},[473,1146,1147],{"class":483}," typeof",[473,1149,1150],{"class":487}," myApi",[473,1152,507],{"class":483},[1154,1155,1156],"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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}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);}","Performance benchmarks for a simple Hello World endpoint.","md",null,{"toc":24},{"title":358,"description":1157},"R4aBOLqYuJb7buwN5_gE4ngtaj2LfvfIOGfynzSYnno",1793324367412]