[{"data":1,"prerenderedAt":7980},["ShallowReactive",2],{"navigation_docs":3,"-client-validation-errors":195,"-client-validation-errors-surround":7975},[4,27,61,75,100,126,147,177],{"title":5,"icon":6,"redirect":7,"path":8,"stem":9,"children":10,"page":26},"Introduction","icon-park-outline:home","\u002Fintroduction\u002Fabout-mion","\u002Fintroduction","1.introduction",[11,14,18,22],{"title":12,"path":7,"stem":13},"About mion","1.introduction\u002F1.about-mion",{"title":15,"path":16,"stem":17},"Quick Start","\u002Fintroduction\u002Fquick-start","1.introduction\u002F2.quick-start",{"title":19,"path":20,"stem":21},"Manual Install","\u002Fintroduction\u002Fmanual-install","1.introduction\u002F3.manual-install",{"title":23,"path":24,"stem":25},"What's Next","\u002Fintroduction\u002Fwhat-is-next","1.introduction\u002F4.what-is-next",false,{"title":28,"icon":29,"path":30,"stem":31,"children":32,"page":26},"Server","icon-park-outline:server","\u002Fserver","20.server",[33,37,41,45,49,53,57],{"title":34,"path":35,"stem":36},"Router Overview","\u002Fserver\u002Foverview","20.server\u002F0.overview",{"title":38,"path":39,"stem":40},"Routes","\u002Fserver\u002Froutes","20.server\u002F1.routes",{"title":42,"path":43,"stem":44},"Middleware","\u002Fserver\u002Fmiddle-fns","20.server\u002F2.middle-fns",{"title":46,"path":47,"stem":48},"Request & Response","\u002Fserver\u002Frequest-and-response","20.server\u002F5.request-and-response",{"title":50,"path":51,"stem":52},"Error Handling","\u002Fserver\u002Ferror-handling","20.server\u002F6.error-handling",{"title":54,"path":55,"stem":56},"Validation","\u002Fserver\u002Fvalidation","20.server\u002F7.validation",{"title":58,"path":59,"stem":60},"Serialization","\u002Fserver\u002Fserialization","20.server\u002F8.serialization",{"title":62,"icon":63,"path":64,"stem":65,"children":66,"page":26},"Drizzle ORM","i-lineicons-drizzle","\u002Fdrizzle-orm","21.drizzle-orm",[67,71],{"title":68,"path":69,"stem":70},"Drizzle Overview","\u002Fdrizzle-orm\u002Fdrizzle-overview","21.drizzle-orm\u002F0.drizzle-overview",{"title":72,"path":73,"stem":74},"Column Mapping","\u002Fdrizzle-orm\u002Fcolumn-mapping","21.drizzle-orm\u002F1.column-mapping",{"title":76,"icon":77,"path":78,"stem":79,"children":80,"page":26},"Client","icon-park-outline:computer","\u002Fclient","3.client",[81,85,88,92,96],{"title":82,"path":83,"stem":84},"Client Overview","\u002Fclient\u002Fclient-overview","3.client\u002F0.client-overview",{"title":50,"path":86,"stem":87},"\u002Fclient\u002Ferror-handling","3.client\u002F1.error-handling",{"title":89,"path":90,"stem":91},"Validation Errors","\u002Fclient\u002Fvalidation-errors","3.client\u002F2.validation-errors",{"title":93,"path":94,"stem":95},"Routes Flow","\u002Fclient\u002Fclient-flow","3.client\u002F3.client-flow",{"title":97,"path":98,"stem":99},"Cancellation & Timeouts","\u002Fclient\u002Fcancellation-timeouts","3.client\u002F4.cancellation-timeouts",{"title":101,"icon":102,"redirect":103,"path":104,"stem":105,"children":106,"page":26},"RunTypes","i-lucide-scan-text","\u002Frun-types\u002Foverview","\u002Frun-types","4.run-types",[107,110,114,118,122],{"title":108,"path":103,"stem":109},"RunTypes Overview","4.run-types\u002F0.overview",{"title":111,"path":112,"stem":113},"Supported Types","\u002Frun-types\u002Ffeatures","4.run-types\u002F1.features",{"title":115,"path":116,"stem":117},"Type Formats","\u002Frun-types\u002Ftype-formats","4.run-types\u002F2.type-formats",{"title":119,"path":120,"stem":121},"Built-in Formats","\u002Frun-types\u002Fbuilt-in-formats","4.run-types\u002F3.built-in-formats",{"title":123,"path":124,"stem":125},"Caveats","\u002Frun-types\u002Fcaveats","4.run-types\u002F4.caveats",{"title":127,"path":128,"stem":129,"children":130,"page":26},"Devtools","\u002Fdevtools","5.devtools",[131,135,139,143],{"title":132,"path":133,"stem":134},"AOT Compilation","\u002Fdevtools\u002Faot-compilation","5.devtools\u002F0.aot-compilation",{"title":136,"path":137,"stem":138},"Pure Functions","\u002Fdevtools\u002Fpure-functions","5.devtools\u002F1.pure-functions",{"title":140,"path":141,"stem":142},"ESLint Rules","\u002Fdevtools\u002Feslint-rules","5.devtools\u002F2.eslint-rules",{"title":144,"path":145,"stem":146},"Vite Configuration","\u002Fdevtools\u002Fvite-config","5.devtools\u002F3.vite-config",{"title":148,"redirect":149,"icon":150,"path":151,"stem":152,"children":153,"page":26},"Platforms","\u002Fplatforms\u002Fnode-js","icon-park-outline:play","\u002Fplatforms","6.platforms",[154,157,161,165,169,173],{"title":155,"path":149,"stem":156},"Node.js","6.platforms\u002F1.node-js",{"title":158,"path":159,"stem":160},"Bun","\u002Fplatforms\u002Fbun","6.platforms\u002F2.bun",{"title":162,"path":163,"stem":164},"AWS Lambda","\u002Fplatforms\u002Faws-lambda","6.platforms\u002F3.aws-lambda",{"title":166,"path":167,"stem":168},"Google Cloud Functions","\u002Fplatforms\u002Fgoogle-cloud-functions","6.platforms\u002F4.google-cloud-functions",{"title":170,"path":171,"stem":172},"Cloudflare Workers","\u002Fplatforms\u002Fcloudflare","6.platforms\u002F5.cloudflare",{"title":174,"path":175,"stem":176},"Vercel","\u002Fplatforms\u002Fvercel","6.platforms\u002F6.vercel",{"title":178,"icon":179,"redirect":180,"path":181,"stem":182,"children":183,"page":26},"Benchmarks","icon-park-outline:chart-line","\u002Fbenchmarks\u002Fhello-world","\u002Fbenchmarks","7.benchmarks",[184,187,191],{"title":185,"path":180,"stem":186},"Hello World","7.benchmarks\u002F1.hello-world",{"title":188,"path":189,"stem":190},"Light Validation","\u002Fbenchmarks\u002Flight-validation","7.benchmarks\u002F2.light-validation",{"title":192,"path":193,"stem":194},"Heavy Validation","\u002Fbenchmarks\u002Fheavy-validation","7.benchmarks\u002F3.heavy-validation",{"id":196,"title":89,"body":197,"description":7969,"extension":7970,"links":7971,"meta":7972,"navigation":301,"path":90,"seo":7973,"stem":91,"__hash__":7974},"docs\u002F3.client\u002F2.validation-errors.md",{"type":198,"value":199,"toc":7949},"minimark",[200,213,218,225,1637,1641,1645,1654,3936,3940,3957,4559,4564,4567,4714,4717,4758,4762,4766,4785,4794,4803,4807,4819,4837,4953,4957,4963,4966,4974,4978,4985,5102,5106,5111,5115,5125,5416,5419,5707,5711,5725,6154,6159,6163,6173,6418,6422,6425,7114,7118,7122,7125,7942,7945],[201,202,203,204,208,209,212],"p",{},"When validation fails, mion returns an",[205,206,207],"code",{},"RpcError\u003C'validation-error', ValidationErrorData>"," containing technical information about the failure. The ",[205,210,211],{},"getFriendlyErrors"," function transforms these errors into user-friendly messages that can be displayed directly in your UI.",[214,215,217],"h2",{"id":216},"defining-friendly-error-handlers","Defining Friendly Error Handlers",[201,219,220,221,224],{},"The ",[205,222,223],{},"FriendlyErrors\u003CT>"," type creates a map that mirrors your data structure. Each property can have a handler function that receives error parameters and returns a friendly message string.",[226,227,232],"pre",{"className":228,"code":229,"language":230,"meta":231,"style":231},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import type {FriendlyErrors} from '@mionjs\u002Fcore';\nimport {RouteParamType} from '@mionjs\u002Fclient';\n\nimport type {MyApi} from '.\u002Ffriendly-errors-server.ts';\nexport type User = RouteParamType\u003CMyApi['setUser'], 0>;\n\nexport const userFriendlyErrors: FriendlyErrors\u003CUser> = {\n    \u002F\u002F Handler is called ONCE per field with ALL aggregated error params\n    name: (failed) => {\n        \u002F\u002F All failed constraints are available at once\n        const messages: string[] = [];\n        if (failed.minLength) messages.push(`at least ${failed.minLength.val} characters`);\n        if (failed.maxLength) messages.push(`at most ${failed.maxLength.val} characters`);\n        if (messages.length > 0) return `Name must be ${messages.join(' and ')}`;\n        return 'Name must be a valid string';\n    },\n    age: (failed) => {\n        const messages: string[] = [];\n        if (failed.min) messages.push(`at least ${failed.min.val}`);\n        if (failed.max) messages.push(`at most ${failed.max.val}`);\n        if (messages.length > 0) return `Age must be ${messages.join(' and ')} years`;\n        return 'Age must be a valid number';\n    },\n    balance: (failed) => {\n        if (failed.min) return `Balance cannot be negative`;\n        return 'Balance must be a valid number';\n    },\n    isActive: () => `isActive must be a boolean (true or false)`,\n    tags: (failed) => {\n        return `Tag ${failed.index} must be a valid string`;\n    },\n    createdAt: (failed) => {\n        const messages: string[] = [];\n        if (failed.date) messages.push('date format is invalid');\n        if (failed.time) messages.push('time format is invalid');\n        if (failed.splitChar) messages.push('separator is invalid');\n        if (messages.length > 0) return `Created at: ${messages.join(', ')}`;\n        return `Created at must be a valid date-time string`;\n    },\n    nested: {\n        email: (failed) => {\n            const messages: string[] = [];\n            if (failed.pattern) messages.push('invalid format');\n            if (failed.localPart) messages.push('invalid username');\n            if (failed.domain) messages.push('invalid domain');\n            if (messages.length > 0) return `Email: ${messages.join(', ')}`;\n            return `Email must be a valid string`;\n        },\n        score: (failed) => {\n            const messages: string[] = [];\n            if (failed.min) messages.push(`at least ${failed.min.val}`);\n            if (failed.max) messages.push(`at most ${failed.max.val}`);\n            if (messages.length > 0) return `Score must be ${messages.join(' and ')}`;\n            return `Score must be a valid number`;\n        },\n    },\n};\n","ts","",[205,233,234,273,296,303,328,375,380,410,417,441,447,473,534,585,640,655,661,679,698,744,790,843,857,862,880,906,920,925,948,966,994,999,1017,1036,1071,1106,1141,1190,1204,1209,1219,1237,1257,1293,1328,1363,1411,1426,1432,1450,1469,1514,1559,1607,1621,1626,1631],{"__ignoreMap":231},[235,236,239,243,246,250,254,257,260,263,267,270],"span",{"class":237,"line":238},"line",1,[235,240,242],{"class":241},"s7zQu","import",[235,244,245],{"class":241}," type",[235,247,249],{"class":248},"sMK4o"," {",[235,251,253],{"class":252},"sTEyZ","FriendlyErrors",[235,255,256],{"class":248},"}",[235,258,259],{"class":241}," from",[235,261,262],{"class":248}," '",[235,264,266],{"class":265},"sfazB","@mionjs\u002Fcore",[235,268,269],{"class":248},"'",[235,271,272],{"class":248},";\n",[235,274,276,278,280,283,285,287,289,292,294],{"class":237,"line":275},2,[235,277,242],{"class":241},[235,279,249],{"class":248},[235,281,282],{"class":252},"RouteParamType",[235,284,256],{"class":248},[235,286,259],{"class":241},[235,288,262],{"class":248},[235,290,291],{"class":265},"@mionjs\u002Fclient",[235,293,269],{"class":248},[235,295,272],{"class":248},[235,297,299],{"class":237,"line":298},3,[235,300,302],{"emptyLinePlaceholder":301},true,"\n",[235,304,306,308,310,312,315,317,319,321,324,326],{"class":237,"line":305},4,[235,307,242],{"class":241},[235,309,245],{"class":241},[235,311,249],{"class":248},[235,313,314],{"class":252},"MyApi",[235,316,256],{"class":248},[235,318,259],{"class":241},[235,320,262],{"class":248},[235,322,323],{"class":265},".\u002Ffriendly-errors-server.ts",[235,325,269],{"class":248},[235,327,272],{"class":248},[235,329,331,334,337,341,344,347,350,352,355,357,360,362,365,368,372],{"class":237,"line":330},5,[235,332,333],{"class":241},"export",[235,335,245],{"class":336},"spNyl",[235,338,340],{"class":339},"sBMFI"," User",[235,342,343],{"class":248}," =",[235,345,346],{"class":339}," RouteParamType",[235,348,349],{"class":248},"\u003C",[235,351,314],{"class":339},[235,353,354],{"class":252},"[",[235,356,269],{"class":248},[235,358,359],{"class":265},"setUser",[235,361,269],{"class":248},[235,363,364],{"class":252},"]",[235,366,367],{"class":248},",",[235,369,371],{"class":370},"sbssI"," 0",[235,373,374],{"class":248},">;\n",[235,376,378],{"class":237,"line":377},6,[235,379,302],{"emptyLinePlaceholder":301},[235,381,383,385,388,391,394,397,399,402,405,407],{"class":237,"line":382},7,[235,384,333],{"class":241},[235,386,387],{"class":336}," const",[235,389,390],{"class":252}," userFriendlyErrors",[235,392,393],{"class":248},":",[235,395,396],{"class":339}," FriendlyErrors",[235,398,349],{"class":248},[235,400,401],{"class":339},"User",[235,403,404],{"class":248},">",[235,406,343],{"class":248},[235,408,409],{"class":248}," {\n",[235,411,413],{"class":237,"line":412},8,[235,414,416],{"class":415},"sHwdD","    \u002F\u002F Handler is called ONCE per field with ALL aggregated error params\n",[235,418,420,424,426,429,433,436,439],{"class":237,"line":419},9,[235,421,423],{"class":422},"s2Zo4","    name",[235,425,393],{"class":248},[235,427,428],{"class":248}," (",[235,430,432],{"class":431},"sHdIc","failed",[235,434,435],{"class":248},")",[235,437,438],{"class":336}," =>",[235,440,409],{"class":248},[235,442,444],{"class":237,"line":443},10,[235,445,446],{"class":415},"        \u002F\u002F All failed constraints are available at once\n",[235,448,450,453,456,458,461,465,468,471],{"class":237,"line":449},11,[235,451,452],{"class":336},"        const",[235,454,455],{"class":252}," messages",[235,457,393],{"class":248},[235,459,460],{"class":339}," string",[235,462,464],{"class":463},"swJcz","[] ",[235,466,467],{"class":248},"=",[235,469,470],{"class":463}," []",[235,472,272],{"class":248},[235,474,476,479,481,483,486,489,492,495,497,500,503,506,509,512,514,516,518,520,523,525,528,530,532],{"class":237,"line":475},12,[235,477,478],{"class":241},"        if",[235,480,428],{"class":463},[235,482,432],{"class":252},[235,484,485],{"class":248},".",[235,487,488],{"class":252},"minLength",[235,490,491],{"class":463},") ",[235,493,494],{"class":252},"messages",[235,496,485],{"class":248},[235,498,499],{"class":422},"push",[235,501,502],{"class":463},"(",[235,504,505],{"class":248},"`",[235,507,508],{"class":265},"at least ",[235,510,511],{"class":248},"${",[235,513,432],{"class":252},[235,515,485],{"class":248},[235,517,488],{"class":252},[235,519,485],{"class":248},[235,521,522],{"class":252},"val",[235,524,256],{"class":248},[235,526,527],{"class":265}," characters",[235,529,505],{"class":248},[235,531,435],{"class":463},[235,533,272],{"class":248},[235,535,537,539,541,543,545,548,550,552,554,556,558,560,563,565,567,569,571,573,575,577,579,581,583],{"class":237,"line":536},13,[235,538,478],{"class":241},[235,540,428],{"class":463},[235,542,432],{"class":252},[235,544,485],{"class":248},[235,546,547],{"class":252},"maxLength",[235,549,491],{"class":463},[235,551,494],{"class":252},[235,553,485],{"class":248},[235,555,499],{"class":422},[235,557,502],{"class":463},[235,559,505],{"class":248},[235,561,562],{"class":265},"at most ",[235,564,511],{"class":248},[235,566,432],{"class":252},[235,568,485],{"class":248},[235,570,547],{"class":252},[235,572,485],{"class":248},[235,574,522],{"class":252},[235,576,256],{"class":248},[235,578,527],{"class":265},[235,580,505],{"class":248},[235,582,435],{"class":463},[235,584,272],{"class":248},[235,586,588,590,592,594,596,599,602,604,606,609,612,615,617,619,621,624,626,628,631,633,635,638],{"class":237,"line":587},14,[235,589,478],{"class":241},[235,591,428],{"class":463},[235,593,494],{"class":252},[235,595,485],{"class":248},[235,597,598],{"class":252},"length",[235,600,601],{"class":248}," >",[235,603,371],{"class":370},[235,605,491],{"class":463},[235,607,608],{"class":241},"return",[235,610,611],{"class":248}," `",[235,613,614],{"class":265},"Name must be ",[235,616,511],{"class":248},[235,618,494],{"class":252},[235,620,485],{"class":248},[235,622,623],{"class":422},"join",[235,625,502],{"class":252},[235,627,269],{"class":248},[235,629,630],{"class":265}," and ",[235,632,269],{"class":248},[235,634,435],{"class":252},[235,636,637],{"class":248},"}`",[235,639,272],{"class":248},[235,641,643,646,648,651,653],{"class":237,"line":642},15,[235,644,645],{"class":241},"        return",[235,647,262],{"class":248},[235,649,650],{"class":265},"Name must be a valid string",[235,652,269],{"class":248},[235,654,272],{"class":248},[235,656,658],{"class":237,"line":657},16,[235,659,660],{"class":248},"    },\n",[235,662,664,667,669,671,673,675,677],{"class":237,"line":663},17,[235,665,666],{"class":422},"    age",[235,668,393],{"class":248},[235,670,428],{"class":248},[235,672,432],{"class":431},[235,674,435],{"class":248},[235,676,438],{"class":336},[235,678,409],{"class":248},[235,680,682,684,686,688,690,692,694,696],{"class":237,"line":681},18,[235,683,452],{"class":336},[235,685,455],{"class":252},[235,687,393],{"class":248},[235,689,460],{"class":339},[235,691,464],{"class":463},[235,693,467],{"class":248},[235,695,470],{"class":463},[235,697,272],{"class":248},[235,699,701,703,705,707,709,712,714,716,718,720,722,724,726,728,730,732,734,736,738,740,742],{"class":237,"line":700},19,[235,702,478],{"class":241},[235,704,428],{"class":463},[235,706,432],{"class":252},[235,708,485],{"class":248},[235,710,711],{"class":252},"min",[235,713,491],{"class":463},[235,715,494],{"class":252},[235,717,485],{"class":248},[235,719,499],{"class":422},[235,721,502],{"class":463},[235,723,505],{"class":248},[235,725,508],{"class":265},[235,727,511],{"class":248},[235,729,432],{"class":252},[235,731,485],{"class":248},[235,733,711],{"class":252},[235,735,485],{"class":248},[235,737,522],{"class":252},[235,739,637],{"class":248},[235,741,435],{"class":463},[235,743,272],{"class":248},[235,745,747,749,751,753,755,758,760,762,764,766,768,770,772,774,776,778,780,782,784,786,788],{"class":237,"line":746},20,[235,748,478],{"class":241},[235,750,428],{"class":463},[235,752,432],{"class":252},[235,754,485],{"class":248},[235,756,757],{"class":252},"max",[235,759,491],{"class":463},[235,761,494],{"class":252},[235,763,485],{"class":248},[235,765,499],{"class":422},[235,767,502],{"class":463},[235,769,505],{"class":248},[235,771,562],{"class":265},[235,773,511],{"class":248},[235,775,432],{"class":252},[235,777,485],{"class":248},[235,779,757],{"class":252},[235,781,485],{"class":248},[235,783,522],{"class":252},[235,785,637],{"class":248},[235,787,435],{"class":463},[235,789,272],{"class":248},[235,791,793,795,797,799,801,803,805,807,809,811,813,816,818,820,822,824,826,828,830,832,834,836,839,841],{"class":237,"line":792},21,[235,794,478],{"class":241},[235,796,428],{"class":463},[235,798,494],{"class":252},[235,800,485],{"class":248},[235,802,598],{"class":252},[235,804,601],{"class":248},[235,806,371],{"class":370},[235,808,491],{"class":463},[235,810,608],{"class":241},[235,812,611],{"class":248},[235,814,815],{"class":265},"Age must be ",[235,817,511],{"class":248},[235,819,494],{"class":252},[235,821,485],{"class":248},[235,823,623],{"class":422},[235,825,502],{"class":252},[235,827,269],{"class":248},[235,829,630],{"class":265},[235,831,269],{"class":248},[235,833,435],{"class":252},[235,835,256],{"class":248},[235,837,838],{"class":265}," years",[235,840,505],{"class":248},[235,842,272],{"class":248},[235,844,846,848,850,853,855],{"class":237,"line":845},22,[235,847,645],{"class":241},[235,849,262],{"class":248},[235,851,852],{"class":265},"Age must be a valid number",[235,854,269],{"class":248},[235,856,272],{"class":248},[235,858,860],{"class":237,"line":859},23,[235,861,660],{"class":248},[235,863,865,868,870,872,874,876,878],{"class":237,"line":864},24,[235,866,867],{"class":422},"    balance",[235,869,393],{"class":248},[235,871,428],{"class":248},[235,873,432],{"class":431},[235,875,435],{"class":248},[235,877,438],{"class":336},[235,879,409],{"class":248},[235,881,883,885,887,889,891,893,895,897,899,902,904],{"class":237,"line":882},25,[235,884,478],{"class":241},[235,886,428],{"class":463},[235,888,432],{"class":252},[235,890,485],{"class":248},[235,892,711],{"class":252},[235,894,491],{"class":463},[235,896,608],{"class":241},[235,898,611],{"class":248},[235,900,901],{"class":265},"Balance cannot be negative",[235,903,505],{"class":248},[235,905,272],{"class":248},[235,907,909,911,913,916,918],{"class":237,"line":908},26,[235,910,645],{"class":241},[235,912,262],{"class":248},[235,914,915],{"class":265},"Balance must be a valid number",[235,917,269],{"class":248},[235,919,272],{"class":248},[235,921,923],{"class":237,"line":922},27,[235,924,660],{"class":248},[235,926,928,931,933,936,938,940,943,945],{"class":237,"line":927},28,[235,929,930],{"class":422},"    isActive",[235,932,393],{"class":248},[235,934,935],{"class":248}," ()",[235,937,438],{"class":336},[235,939,611],{"class":248},[235,941,942],{"class":265},"isActive must be a boolean (true or false)",[235,944,505],{"class":248},[235,946,947],{"class":248},",\n",[235,949,951,954,956,958,960,962,964],{"class":237,"line":950},29,[235,952,953],{"class":422},"    tags",[235,955,393],{"class":248},[235,957,428],{"class":248},[235,959,432],{"class":431},[235,961,435],{"class":248},[235,963,438],{"class":336},[235,965,409],{"class":248},[235,967,969,971,973,976,978,980,982,985,987,990,992],{"class":237,"line":968},30,[235,970,645],{"class":241},[235,972,611],{"class":248},[235,974,975],{"class":265},"Tag ",[235,977,511],{"class":248},[235,979,432],{"class":252},[235,981,485],{"class":248},[235,983,984],{"class":252},"index",[235,986,256],{"class":248},[235,988,989],{"class":265}," must be a valid string",[235,991,505],{"class":248},[235,993,272],{"class":248},[235,995,997],{"class":237,"line":996},31,[235,998,660],{"class":248},[235,1000,1002,1005,1007,1009,1011,1013,1015],{"class":237,"line":1001},32,[235,1003,1004],{"class":422},"    createdAt",[235,1006,393],{"class":248},[235,1008,428],{"class":248},[235,1010,432],{"class":431},[235,1012,435],{"class":248},[235,1014,438],{"class":336},[235,1016,409],{"class":248},[235,1018,1020,1022,1024,1026,1028,1030,1032,1034],{"class":237,"line":1019},33,[235,1021,452],{"class":336},[235,1023,455],{"class":252},[235,1025,393],{"class":248},[235,1027,460],{"class":339},[235,1029,464],{"class":463},[235,1031,467],{"class":248},[235,1033,470],{"class":463},[235,1035,272],{"class":248},[235,1037,1039,1041,1043,1045,1047,1050,1052,1054,1056,1058,1060,1062,1065,1067,1069],{"class":237,"line":1038},34,[235,1040,478],{"class":241},[235,1042,428],{"class":463},[235,1044,432],{"class":252},[235,1046,485],{"class":248},[235,1048,1049],{"class":252},"date",[235,1051,491],{"class":463},[235,1053,494],{"class":252},[235,1055,485],{"class":248},[235,1057,499],{"class":422},[235,1059,502],{"class":463},[235,1061,269],{"class":248},[235,1063,1064],{"class":265},"date format is invalid",[235,1066,269],{"class":248},[235,1068,435],{"class":463},[235,1070,272],{"class":248},[235,1072,1074,1076,1078,1080,1082,1085,1087,1089,1091,1093,1095,1097,1100,1102,1104],{"class":237,"line":1073},35,[235,1075,478],{"class":241},[235,1077,428],{"class":463},[235,1079,432],{"class":252},[235,1081,485],{"class":248},[235,1083,1084],{"class":252},"time",[235,1086,491],{"class":463},[235,1088,494],{"class":252},[235,1090,485],{"class":248},[235,1092,499],{"class":422},[235,1094,502],{"class":463},[235,1096,269],{"class":248},[235,1098,1099],{"class":265},"time format is invalid",[235,1101,269],{"class":248},[235,1103,435],{"class":463},[235,1105,272],{"class":248},[235,1107,1109,1111,1113,1115,1117,1120,1122,1124,1126,1128,1130,1132,1135,1137,1139],{"class":237,"line":1108},36,[235,1110,478],{"class":241},[235,1112,428],{"class":463},[235,1114,432],{"class":252},[235,1116,485],{"class":248},[235,1118,1119],{"class":252},"splitChar",[235,1121,491],{"class":463},[235,1123,494],{"class":252},[235,1125,485],{"class":248},[235,1127,499],{"class":422},[235,1129,502],{"class":463},[235,1131,269],{"class":248},[235,1133,1134],{"class":265},"separator is invalid",[235,1136,269],{"class":248},[235,1138,435],{"class":463},[235,1140,272],{"class":248},[235,1142,1144,1146,1148,1150,1152,1154,1156,1158,1160,1162,1164,1167,1169,1171,1173,1175,1177,1179,1182,1184,1186,1188],{"class":237,"line":1143},37,[235,1145,478],{"class":241},[235,1147,428],{"class":463},[235,1149,494],{"class":252},[235,1151,485],{"class":248},[235,1153,598],{"class":252},[235,1155,601],{"class":248},[235,1157,371],{"class":370},[235,1159,491],{"class":463},[235,1161,608],{"class":241},[235,1163,611],{"class":248},[235,1165,1166],{"class":265},"Created at: ",[235,1168,511],{"class":248},[235,1170,494],{"class":252},[235,1172,485],{"class":248},[235,1174,623],{"class":422},[235,1176,502],{"class":252},[235,1178,269],{"class":248},[235,1180,1181],{"class":265},", ",[235,1183,269],{"class":248},[235,1185,435],{"class":252},[235,1187,637],{"class":248},[235,1189,272],{"class":248},[235,1191,1193,1195,1197,1200,1202],{"class":237,"line":1192},38,[235,1194,645],{"class":241},[235,1196,611],{"class":248},[235,1198,1199],{"class":265},"Created at must be a valid date-time string",[235,1201,505],{"class":248},[235,1203,272],{"class":248},[235,1205,1207],{"class":237,"line":1206},39,[235,1208,660],{"class":248},[235,1210,1212,1215,1217],{"class":237,"line":1211},40,[235,1213,1214],{"class":463},"    nested",[235,1216,393],{"class":248},[235,1218,409],{"class":248},[235,1220,1222,1225,1227,1229,1231,1233,1235],{"class":237,"line":1221},41,[235,1223,1224],{"class":422},"        email",[235,1226,393],{"class":248},[235,1228,428],{"class":248},[235,1230,432],{"class":431},[235,1232,435],{"class":248},[235,1234,438],{"class":336},[235,1236,409],{"class":248},[235,1238,1240,1243,1245,1247,1249,1251,1253,1255],{"class":237,"line":1239},42,[235,1241,1242],{"class":336},"            const",[235,1244,455],{"class":252},[235,1246,393],{"class":248},[235,1248,460],{"class":339},[235,1250,464],{"class":463},[235,1252,467],{"class":248},[235,1254,470],{"class":463},[235,1256,272],{"class":248},[235,1258,1260,1263,1265,1267,1269,1272,1274,1276,1278,1280,1282,1284,1287,1289,1291],{"class":237,"line":1259},43,[235,1261,1262],{"class":241},"            if",[235,1264,428],{"class":463},[235,1266,432],{"class":252},[235,1268,485],{"class":248},[235,1270,1271],{"class":252},"pattern",[235,1273,491],{"class":463},[235,1275,494],{"class":252},[235,1277,485],{"class":248},[235,1279,499],{"class":422},[235,1281,502],{"class":463},[235,1283,269],{"class":248},[235,1285,1286],{"class":265},"invalid format",[235,1288,269],{"class":248},[235,1290,435],{"class":463},[235,1292,272],{"class":248},[235,1294,1296,1298,1300,1302,1304,1307,1309,1311,1313,1315,1317,1319,1322,1324,1326],{"class":237,"line":1295},44,[235,1297,1262],{"class":241},[235,1299,428],{"class":463},[235,1301,432],{"class":252},[235,1303,485],{"class":248},[235,1305,1306],{"class":252},"localPart",[235,1308,491],{"class":463},[235,1310,494],{"class":252},[235,1312,485],{"class":248},[235,1314,499],{"class":422},[235,1316,502],{"class":463},[235,1318,269],{"class":248},[235,1320,1321],{"class":265},"invalid username",[235,1323,269],{"class":248},[235,1325,435],{"class":463},[235,1327,272],{"class":248},[235,1329,1331,1333,1335,1337,1339,1342,1344,1346,1348,1350,1352,1354,1357,1359,1361],{"class":237,"line":1330},45,[235,1332,1262],{"class":241},[235,1334,428],{"class":463},[235,1336,432],{"class":252},[235,1338,485],{"class":248},[235,1340,1341],{"class":252},"domain",[235,1343,491],{"class":463},[235,1345,494],{"class":252},[235,1347,485],{"class":248},[235,1349,499],{"class":422},[235,1351,502],{"class":463},[235,1353,269],{"class":248},[235,1355,1356],{"class":265},"invalid domain",[235,1358,269],{"class":248},[235,1360,435],{"class":463},[235,1362,272],{"class":248},[235,1364,1366,1368,1370,1372,1374,1376,1378,1380,1382,1384,1386,1389,1391,1393,1395,1397,1399,1401,1403,1405,1407,1409],{"class":237,"line":1365},46,[235,1367,1262],{"class":241},[235,1369,428],{"class":463},[235,1371,494],{"class":252},[235,1373,485],{"class":248},[235,1375,598],{"class":252},[235,1377,601],{"class":248},[235,1379,371],{"class":370},[235,1381,491],{"class":463},[235,1383,608],{"class":241},[235,1385,611],{"class":248},[235,1387,1388],{"class":265},"Email: ",[235,1390,511],{"class":248},[235,1392,494],{"class":252},[235,1394,485],{"class":248},[235,1396,623],{"class":422},[235,1398,502],{"class":252},[235,1400,269],{"class":248},[235,1402,1181],{"class":265},[235,1404,269],{"class":248},[235,1406,435],{"class":252},[235,1408,637],{"class":248},[235,1410,272],{"class":248},[235,1412,1414,1417,1419,1422,1424],{"class":237,"line":1413},47,[235,1415,1416],{"class":241},"            return",[235,1418,611],{"class":248},[235,1420,1421],{"class":265},"Email must be a valid string",[235,1423,505],{"class":248},[235,1425,272],{"class":248},[235,1427,1429],{"class":237,"line":1428},48,[235,1430,1431],{"class":248},"        },\n",[235,1433,1435,1438,1440,1442,1444,1446,1448],{"class":237,"line":1434},49,[235,1436,1437],{"class":422},"        score",[235,1439,393],{"class":248},[235,1441,428],{"class":248},[235,1443,432],{"class":431},[235,1445,435],{"class":248},[235,1447,438],{"class":336},[235,1449,409],{"class":248},[235,1451,1453,1455,1457,1459,1461,1463,1465,1467],{"class":237,"line":1452},50,[235,1454,1242],{"class":336},[235,1456,455],{"class":252},[235,1458,393],{"class":248},[235,1460,460],{"class":339},[235,1462,464],{"class":463},[235,1464,467],{"class":248},[235,1466,470],{"class":463},[235,1468,272],{"class":248},[235,1470,1472,1474,1476,1478,1480,1482,1484,1486,1488,1490,1492,1494,1496,1498,1500,1502,1504,1506,1508,1510,1512],{"class":237,"line":1471},51,[235,1473,1262],{"class":241},[235,1475,428],{"class":463},[235,1477,432],{"class":252},[235,1479,485],{"class":248},[235,1481,711],{"class":252},[235,1483,491],{"class":463},[235,1485,494],{"class":252},[235,1487,485],{"class":248},[235,1489,499],{"class":422},[235,1491,502],{"class":463},[235,1493,505],{"class":248},[235,1495,508],{"class":265},[235,1497,511],{"class":248},[235,1499,432],{"class":252},[235,1501,485],{"class":248},[235,1503,711],{"class":252},[235,1505,485],{"class":248},[235,1507,522],{"class":252},[235,1509,637],{"class":248},[235,1511,435],{"class":463},[235,1513,272],{"class":248},[235,1515,1517,1519,1521,1523,1525,1527,1529,1531,1533,1535,1537,1539,1541,1543,1545,1547,1549,1551,1553,1555,1557],{"class":237,"line":1516},52,[235,1518,1262],{"class":241},[235,1520,428],{"class":463},[235,1522,432],{"class":252},[235,1524,485],{"class":248},[235,1526,757],{"class":252},[235,1528,491],{"class":463},[235,1530,494],{"class":252},[235,1532,485],{"class":248},[235,1534,499],{"class":422},[235,1536,502],{"class":463},[235,1538,505],{"class":248},[235,1540,562],{"class":265},[235,1542,511],{"class":248},[235,1544,432],{"class":252},[235,1546,485],{"class":248},[235,1548,757],{"class":252},[235,1550,485],{"class":248},[235,1552,522],{"class":252},[235,1554,637],{"class":248},[235,1556,435],{"class":463},[235,1558,272],{"class":248},[235,1560,1562,1564,1566,1568,1570,1572,1574,1576,1578,1580,1582,1585,1587,1589,1591,1593,1595,1597,1599,1601,1603,1605],{"class":237,"line":1561},53,[235,1563,1262],{"class":241},[235,1565,428],{"class":463},[235,1567,494],{"class":252},[235,1569,485],{"class":248},[235,1571,598],{"class":252},[235,1573,601],{"class":248},[235,1575,371],{"class":370},[235,1577,491],{"class":463},[235,1579,608],{"class":241},[235,1581,611],{"class":248},[235,1583,1584],{"class":265},"Score must be ",[235,1586,511],{"class":248},[235,1588,494],{"class":252},[235,1590,485],{"class":248},[235,1592,623],{"class":422},[235,1594,502],{"class":252},[235,1596,269],{"class":248},[235,1598,630],{"class":265},[235,1600,269],{"class":248},[235,1602,435],{"class":252},[235,1604,637],{"class":248},[235,1606,272],{"class":248},[235,1608,1610,1612,1614,1617,1619],{"class":237,"line":1609},54,[235,1611,1416],{"class":241},[235,1613,611],{"class":248},[235,1615,1616],{"class":265},"Score must be a valid number",[235,1618,505],{"class":248},[235,1620,272],{"class":248},[235,1622,1624],{"class":237,"line":1623},55,[235,1625,1431],{"class":248},[235,1627,1629],{"class":237,"line":1628},56,[235,1630,660],{"class":248},[235,1632,1634],{"class":237,"line":1633},57,[235,1635,1636],{"class":248},"};\n",[1638,1639,1640],"tip",{},"For nested objects, you can define nested handler objects. For arrays, a single handler applies to all array elements.",[214,1642,1644],{"id":1643},"basic-usage","Basic Usage",[201,1646,220,1647,1649,1650,1653],{},[205,1648,211],{}," function takes an array of validation errors and a map of error handler functions, returning an object with the same shape as your data type but with a single ",[205,1651,1652],{},"string"," error message for each failed property.",[1655,1656,1657,2294,3515],"code-group",{},[226,1658,1660],{"className":228,"code":1659,"filename":76,"language":230,"meta":231,"style":231},"\u002F* eslint-disable @typescript-eslint\u002Fno-unused-vars *\u002F\nimport {getFriendlyErrors} from '@mionjs\u002Fcore';\nimport {RouteParamType, initClient} from '@mionjs\u002Fclient';\nimport type {MyApi} from '.\u002Ffriendly-errors-server.ts';\nimport {userFriendlyErrors} from '.\u002Ffriendly-errors-map.ts';\n\nconst {routes} = initClient\u003CMyApi>({baseURL: 'http:\u002F\u002Flocalhost:3000'});\ntype User = RouteParamType\u003CMyApi['setUser'], 0>;\n\nconst invalidUser = {\n    name: 'A', \u002F\u002F Too short (min 2)\n    age: 5, \u002F\u002F no errors\n    balance: -100n, \u002F\u002F Negative (min 0)\n    isActive: 'yes' as unknown as boolean, \u002F\u002F Wrong type\n    tags: 'not-an-array' as unknown as string[], \u002F\u002F Wrong type\n    createdAt: 'invalid-date',\n    nested: {\n        email: 'invalid-email',\n        score: -10, \u002F\u002F Negative (min 0)\n    },\n};\nconst [user, error] = await routes.setUser(invalidUser as User).call();\nif (error?.type === 'validation-error') {\n    const validationErrors = error.errorData?.typeErrors || [];\n    \u002F\u002F getFriendlyErrors() aggregates all errors per field and calls handler once with all params\n    const friendlyErrors = getFriendlyErrors\u003CUser>(validationErrors, userFriendlyErrors);\n    console.log(friendlyErrors.age); \u002F\u002F undefined, age is valid\n    console.log(friendlyErrors.name); \u002F\u002F 'Name must be at least 2 characters' (single string per field)\n}\nif (error?.type === 'user-exists') {\n    console.log('User already exists');\n}\nconsole.log('User created:', user);\n",[205,1661,1662,1667,1687,1712,1734,1756,1760,1805,1836,1840,1851,1869,1883,1903,1932,1960,1975,1983,1998,2013,2017,2021,2070,2099,2128,2133,2164,2192,2216,2221,2244,2265,2269],{"__ignoreMap":231},[235,1663,1664],{"class":237,"line":238},[235,1665,1666],{"class":415},"\u002F* eslint-disable @typescript-eslint\u002Fno-unused-vars *\u002F\n",[235,1668,1669,1671,1673,1675,1677,1679,1681,1683,1685],{"class":237,"line":275},[235,1670,242],{"class":241},[235,1672,249],{"class":248},[235,1674,211],{"class":252},[235,1676,256],{"class":248},[235,1678,259],{"class":241},[235,1680,262],{"class":248},[235,1682,266],{"class":265},[235,1684,269],{"class":248},[235,1686,272],{"class":248},[235,1688,1689,1691,1693,1695,1697,1700,1702,1704,1706,1708,1710],{"class":237,"line":298},[235,1690,242],{"class":241},[235,1692,249],{"class":248},[235,1694,282],{"class":252},[235,1696,367],{"class":248},[235,1698,1699],{"class":252}," initClient",[235,1701,256],{"class":248},[235,1703,259],{"class":241},[235,1705,262],{"class":248},[235,1707,291],{"class":265},[235,1709,269],{"class":248},[235,1711,272],{"class":248},[235,1713,1714,1716,1718,1720,1722,1724,1726,1728,1730,1732],{"class":237,"line":305},[235,1715,242],{"class":241},[235,1717,245],{"class":241},[235,1719,249],{"class":248},[235,1721,314],{"class":252},[235,1723,256],{"class":248},[235,1725,259],{"class":241},[235,1727,262],{"class":248},[235,1729,323],{"class":265},[235,1731,269],{"class":248},[235,1733,272],{"class":248},[235,1735,1736,1738,1740,1743,1745,1747,1749,1752,1754],{"class":237,"line":330},[235,1737,242],{"class":241},[235,1739,249],{"class":248},[235,1741,1742],{"class":252},"userFriendlyErrors",[235,1744,256],{"class":248},[235,1746,259],{"class":241},[235,1748,262],{"class":248},[235,1750,1751],{"class":265},".\u002Ffriendly-errors-map.ts",[235,1753,269],{"class":248},[235,1755,272],{"class":248},[235,1757,1758],{"class":237,"line":377},[235,1759,302],{"emptyLinePlaceholder":301},[235,1761,1762,1765,1767,1770,1772,1774,1776,1778,1780,1782,1784,1787,1790,1792,1794,1797,1799,1801,1803],{"class":237,"line":382},[235,1763,1764],{"class":336},"const",[235,1766,249],{"class":248},[235,1768,1769],{"class":252},"routes",[235,1771,256],{"class":248},[235,1773,343],{"class":248},[235,1775,1699],{"class":422},[235,1777,349],{"class":248},[235,1779,314],{"class":339},[235,1781,404],{"class":248},[235,1783,502],{"class":252},[235,1785,1786],{"class":248},"{",[235,1788,1789],{"class":463},"baseURL",[235,1791,393],{"class":248},[235,1793,262],{"class":248},[235,1795,1796],{"class":265},"http:\u002F\u002Flocalhost:3000",[235,1798,269],{"class":248},[235,1800,256],{"class":248},[235,1802,435],{"class":252},[235,1804,272],{"class":248},[235,1806,1807,1810,1812,1814,1816,1818,1820,1822,1824,1826,1828,1830,1832,1834],{"class":237,"line":412},[235,1808,1809],{"class":336},"type",[235,1811,340],{"class":339},[235,1813,343],{"class":248},[235,1815,346],{"class":339},[235,1817,349],{"class":248},[235,1819,314],{"class":339},[235,1821,354],{"class":252},[235,1823,269],{"class":248},[235,1825,359],{"class":265},[235,1827,269],{"class":248},[235,1829,364],{"class":252},[235,1831,367],{"class":248},[235,1833,371],{"class":370},[235,1835,374],{"class":248},[235,1837,1838],{"class":237,"line":419},[235,1839,302],{"emptyLinePlaceholder":301},[235,1841,1842,1844,1847,1849],{"class":237,"line":443},[235,1843,1764],{"class":336},[235,1845,1846],{"class":252}," invalidUser ",[235,1848,467],{"class":248},[235,1850,409],{"class":248},[235,1852,1853,1855,1857,1859,1862,1864,1866],{"class":237,"line":449},[235,1854,423],{"class":463},[235,1856,393],{"class":248},[235,1858,262],{"class":248},[235,1860,1861],{"class":265},"A",[235,1863,269],{"class":248},[235,1865,367],{"class":248},[235,1867,1868],{"class":415}," \u002F\u002F Too short (min 2)\n",[235,1870,1871,1873,1875,1878,1880],{"class":237,"line":475},[235,1872,666],{"class":463},[235,1874,393],{"class":248},[235,1876,1877],{"class":370}," 5",[235,1879,367],{"class":248},[235,1881,1882],{"class":415}," \u002F\u002F no errors\n",[235,1884,1885,1887,1889,1892,1895,1898,1900],{"class":237,"line":536},[235,1886,867],{"class":463},[235,1888,393],{"class":248},[235,1890,1891],{"class":248}," -",[235,1893,1894],{"class":370},"100",[235,1896,1897],{"class":336},"n",[235,1899,367],{"class":248},[235,1901,1902],{"class":415}," \u002F\u002F Negative (min 0)\n",[235,1904,1905,1907,1909,1911,1914,1916,1919,1922,1924,1927,1929],{"class":237,"line":587},[235,1906,930],{"class":463},[235,1908,393],{"class":248},[235,1910,262],{"class":248},[235,1912,1913],{"class":265},"yes",[235,1915,269],{"class":248},[235,1917,1918],{"class":241}," as",[235,1920,1921],{"class":339}," unknown",[235,1923,1918],{"class":241},[235,1925,1926],{"class":339}," boolean",[235,1928,367],{"class":248},[235,1930,1931],{"class":415}," \u002F\u002F Wrong type\n",[235,1933,1934,1936,1938,1940,1943,1945,1947,1949,1951,1953,1956,1958],{"class":237,"line":642},[235,1935,953],{"class":463},[235,1937,393],{"class":248},[235,1939,262],{"class":248},[235,1941,1942],{"class":265},"not-an-array",[235,1944,269],{"class":248},[235,1946,1918],{"class":241},[235,1948,1921],{"class":339},[235,1950,1918],{"class":241},[235,1952,460],{"class":339},[235,1954,1955],{"class":252},"[]",[235,1957,367],{"class":248},[235,1959,1931],{"class":415},[235,1961,1962,1964,1966,1968,1971,1973],{"class":237,"line":657},[235,1963,1004],{"class":463},[235,1965,393],{"class":248},[235,1967,262],{"class":248},[235,1969,1970],{"class":265},"invalid-date",[235,1972,269],{"class":248},[235,1974,947],{"class":248},[235,1976,1977,1979,1981],{"class":237,"line":663},[235,1978,1214],{"class":463},[235,1980,393],{"class":248},[235,1982,409],{"class":248},[235,1984,1985,1987,1989,1991,1994,1996],{"class":237,"line":681},[235,1986,1224],{"class":463},[235,1988,393],{"class":248},[235,1990,262],{"class":248},[235,1992,1993],{"class":265},"invalid-email",[235,1995,269],{"class":248},[235,1997,947],{"class":248},[235,1999,2000,2002,2004,2006,2009,2011],{"class":237,"line":700},[235,2001,1437],{"class":463},[235,2003,393],{"class":248},[235,2005,1891],{"class":248},[235,2007,2008],{"class":370},"10",[235,2010,367],{"class":248},[235,2012,1902],{"class":415},[235,2014,2015],{"class":237,"line":746},[235,2016,660],{"class":248},[235,2018,2019],{"class":237,"line":792},[235,2020,1636],{"class":248},[235,2022,2023,2025,2028,2031,2033,2036,2038,2040,2043,2046,2048,2050,2053,2056,2058,2060,2062,2065,2068],{"class":237,"line":845},[235,2024,1764],{"class":336},[235,2026,2027],{"class":248}," [",[235,2029,2030],{"class":252},"user",[235,2032,367],{"class":248},[235,2034,2035],{"class":252}," error",[235,2037,364],{"class":248},[235,2039,343],{"class":248},[235,2041,2042],{"class":241}," await",[235,2044,2045],{"class":252}," routes",[235,2047,485],{"class":248},[235,2049,359],{"class":422},[235,2051,2052],{"class":252},"(invalidUser ",[235,2054,2055],{"class":241},"as",[235,2057,340],{"class":339},[235,2059,435],{"class":252},[235,2061,485],{"class":248},[235,2063,2064],{"class":422},"call",[235,2066,2067],{"class":252},"()",[235,2069,272],{"class":248},[235,2071,2072,2075,2078,2081,2084,2087,2089,2092,2094,2096],{"class":237,"line":859},[235,2073,2074],{"class":241},"if",[235,2076,2077],{"class":252}," (error",[235,2079,2080],{"class":248},"?.",[235,2082,2083],{"class":252},"type ",[235,2085,2086],{"class":248},"===",[235,2088,262],{"class":248},[235,2090,2091],{"class":265},"validation-error",[235,2093,269],{"class":248},[235,2095,491],{"class":252},[235,2097,2098],{"class":248},"{\n",[235,2100,2101,2104,2107,2109,2111,2113,2116,2118,2121,2124,2126],{"class":237,"line":864},[235,2102,2103],{"class":336},"    const",[235,2105,2106],{"class":252}," validationErrors",[235,2108,343],{"class":248},[235,2110,2035],{"class":252},[235,2112,485],{"class":248},[235,2114,2115],{"class":252},"errorData",[235,2117,2080],{"class":248},[235,2119,2120],{"class":252},"typeErrors",[235,2122,2123],{"class":248}," ||",[235,2125,470],{"class":463},[235,2127,272],{"class":248},[235,2129,2130],{"class":237,"line":882},[235,2131,2132],{"class":415},"    \u002F\u002F getFriendlyErrors() aggregates all errors per field and calls handler once with all params\n",[235,2134,2135,2137,2140,2142,2145,2147,2149,2151,2153,2156,2158,2160,2162],{"class":237,"line":908},[235,2136,2103],{"class":336},[235,2138,2139],{"class":252}," friendlyErrors",[235,2141,343],{"class":248},[235,2143,2144],{"class":422}," getFriendlyErrors",[235,2146,349],{"class":248},[235,2148,401],{"class":339},[235,2150,404],{"class":248},[235,2152,502],{"class":463},[235,2154,2155],{"class":252},"validationErrors",[235,2157,367],{"class":248},[235,2159,390],{"class":252},[235,2161,435],{"class":463},[235,2163,272],{"class":248},[235,2165,2166,2169,2171,2174,2176,2179,2181,2184,2186,2189],{"class":237,"line":922},[235,2167,2168],{"class":252},"    console",[235,2170,485],{"class":248},[235,2172,2173],{"class":422},"log",[235,2175,502],{"class":463},[235,2177,2178],{"class":252},"friendlyErrors",[235,2180,485],{"class":248},[235,2182,2183],{"class":252},"age",[235,2185,435],{"class":463},[235,2187,2188],{"class":248},";",[235,2190,2191],{"class":415}," \u002F\u002F undefined, age is valid\n",[235,2193,2194,2196,2198,2200,2202,2204,2206,2209,2211,2213],{"class":237,"line":927},[235,2195,2168],{"class":252},[235,2197,485],{"class":248},[235,2199,2173],{"class":422},[235,2201,502],{"class":463},[235,2203,2178],{"class":252},[235,2205,485],{"class":248},[235,2207,2208],{"class":252},"name",[235,2210,435],{"class":463},[235,2212,2188],{"class":248},[235,2214,2215],{"class":415}," \u002F\u002F 'Name must be at least 2 characters' (single string per field)\n",[235,2217,2218],{"class":237,"line":950},[235,2219,2220],{"class":248},"}\n",[235,2222,2223,2225,2227,2229,2231,2233,2235,2238,2240,2242],{"class":237,"line":968},[235,2224,2074],{"class":241},[235,2226,2077],{"class":252},[235,2228,2080],{"class":248},[235,2230,2083],{"class":252},[235,2232,2086],{"class":248},[235,2234,262],{"class":248},[235,2236,2237],{"class":265},"user-exists",[235,2239,269],{"class":248},[235,2241,491],{"class":252},[235,2243,2098],{"class":248},[235,2245,2246,2248,2250,2252,2254,2256,2259,2261,2263],{"class":237,"line":996},[235,2247,2168],{"class":252},[235,2249,485],{"class":248},[235,2251,2173],{"class":422},[235,2253,502],{"class":463},[235,2255,269],{"class":248},[235,2257,2258],{"class":265},"User already exists",[235,2260,269],{"class":248},[235,2262,435],{"class":463},[235,2264,272],{"class":248},[235,2266,2267],{"class":237,"line":1001},[235,2268,2220],{"class":248},[235,2270,2271,2274,2276,2278,2280,2282,2285,2287,2289,2292],{"class":237,"line":1019},[235,2272,2273],{"class":252},"console",[235,2275,485],{"class":248},[235,2277,2173],{"class":422},[235,2279,502],{"class":252},[235,2281,269],{"class":248},[235,2283,2284],{"class":265},"User created:",[235,2286,269],{"class":248},[235,2288,367],{"class":248},[235,2290,2291],{"class":252}," user)",[235,2293,272],{"class":248},[226,2295,2297],{"className":228,"code":229,"filename":2296,"language":230,"meta":231,"style":231},"FriendlyErrors Map",[205,2298,2299,2321,2341,2345,2367,2399,2403,2425,2429,2445,2449,2467,2515,2563,2609,2621,2625,2641,2659,2703,2747,2797,2809,2813,2829,2853,2865,2869,2887,2903,2927,2931,2947,2965,2997,3029,3061,3107,3119,3123,3131,3147,3165,3197,3229,3261,3307,3319,3323,3339,3357,3401,3445,3491,3503,3507,3511],{"__ignoreMap":231},[235,2300,2301,2303,2305,2307,2309,2311,2313,2315,2317,2319],{"class":237,"line":238},[235,2302,242],{"class":241},[235,2304,245],{"class":241},[235,2306,249],{"class":248},[235,2308,253],{"class":252},[235,2310,256],{"class":248},[235,2312,259],{"class":241},[235,2314,262],{"class":248},[235,2316,266],{"class":265},[235,2318,269],{"class":248},[235,2320,272],{"class":248},[235,2322,2323,2325,2327,2329,2331,2333,2335,2337,2339],{"class":237,"line":275},[235,2324,242],{"class":241},[235,2326,249],{"class":248},[235,2328,282],{"class":252},[235,2330,256],{"class":248},[235,2332,259],{"class":241},[235,2334,262],{"class":248},[235,2336,291],{"class":265},[235,2338,269],{"class":248},[235,2340,272],{"class":248},[235,2342,2343],{"class":237,"line":298},[235,2344,302],{"emptyLinePlaceholder":301},[235,2346,2347,2349,2351,2353,2355,2357,2359,2361,2363,2365],{"class":237,"line":305},[235,2348,242],{"class":241},[235,2350,245],{"class":241},[235,2352,249],{"class":248},[235,2354,314],{"class":252},[235,2356,256],{"class":248},[235,2358,259],{"class":241},[235,2360,262],{"class":248},[235,2362,323],{"class":265},[235,2364,269],{"class":248},[235,2366,272],{"class":248},[235,2368,2369,2371,2373,2375,2377,2379,2381,2383,2385,2387,2389,2391,2393,2395,2397],{"class":237,"line":330},[235,2370,333],{"class":241},[235,2372,245],{"class":336},[235,2374,340],{"class":339},[235,2376,343],{"class":248},[235,2378,346],{"class":339},[235,2380,349],{"class":248},[235,2382,314],{"class":339},[235,2384,354],{"class":252},[235,2386,269],{"class":248},[235,2388,359],{"class":265},[235,2390,269],{"class":248},[235,2392,364],{"class":252},[235,2394,367],{"class":248},[235,2396,371],{"class":370},[235,2398,374],{"class":248},[235,2400,2401],{"class":237,"line":377},[235,2402,302],{"emptyLinePlaceholder":301},[235,2404,2405,2407,2409,2411,2413,2415,2417,2419,2421,2423],{"class":237,"line":382},[235,2406,333],{"class":241},[235,2408,387],{"class":336},[235,2410,390],{"class":252},[235,2412,393],{"class":248},[235,2414,396],{"class":339},[235,2416,349],{"class":248},[235,2418,401],{"class":339},[235,2420,404],{"class":248},[235,2422,343],{"class":248},[235,2424,409],{"class":248},[235,2426,2427],{"class":237,"line":412},[235,2428,416],{"class":415},[235,2430,2431,2433,2435,2437,2439,2441,2443],{"class":237,"line":419},[235,2432,423],{"class":422},[235,2434,393],{"class":248},[235,2436,428],{"class":248},[235,2438,432],{"class":431},[235,2440,435],{"class":248},[235,2442,438],{"class":336},[235,2444,409],{"class":248},[235,2446,2447],{"class":237,"line":443},[235,2448,446],{"class":415},[235,2450,2451,2453,2455,2457,2459,2461,2463,2465],{"class":237,"line":449},[235,2452,452],{"class":336},[235,2454,455],{"class":252},[235,2456,393],{"class":248},[235,2458,460],{"class":339},[235,2460,464],{"class":463},[235,2462,467],{"class":248},[235,2464,470],{"class":463},[235,2466,272],{"class":248},[235,2468,2469,2471,2473,2475,2477,2479,2481,2483,2485,2487,2489,2491,2493,2495,2497,2499,2501,2503,2505,2507,2509,2511,2513],{"class":237,"line":475},[235,2470,478],{"class":241},[235,2472,428],{"class":463},[235,2474,432],{"class":252},[235,2476,485],{"class":248},[235,2478,488],{"class":252},[235,2480,491],{"class":463},[235,2482,494],{"class":252},[235,2484,485],{"class":248},[235,2486,499],{"class":422},[235,2488,502],{"class":463},[235,2490,505],{"class":248},[235,2492,508],{"class":265},[235,2494,511],{"class":248},[235,2496,432],{"class":252},[235,2498,485],{"class":248},[235,2500,488],{"class":252},[235,2502,485],{"class":248},[235,2504,522],{"class":252},[235,2506,256],{"class":248},[235,2508,527],{"class":265},[235,2510,505],{"class":248},[235,2512,435],{"class":463},[235,2514,272],{"class":248},[235,2516,2517,2519,2521,2523,2525,2527,2529,2531,2533,2535,2537,2539,2541,2543,2545,2547,2549,2551,2553,2555,2557,2559,2561],{"class":237,"line":536},[235,2518,478],{"class":241},[235,2520,428],{"class":463},[235,2522,432],{"class":252},[235,2524,485],{"class":248},[235,2526,547],{"class":252},[235,2528,491],{"class":463},[235,2530,494],{"class":252},[235,2532,485],{"class":248},[235,2534,499],{"class":422},[235,2536,502],{"class":463},[235,2538,505],{"class":248},[235,2540,562],{"class":265},[235,2542,511],{"class":248},[235,2544,432],{"class":252},[235,2546,485],{"class":248},[235,2548,547],{"class":252},[235,2550,485],{"class":248},[235,2552,522],{"class":252},[235,2554,256],{"class":248},[235,2556,527],{"class":265},[235,2558,505],{"class":248},[235,2560,435],{"class":463},[235,2562,272],{"class":248},[235,2564,2565,2567,2569,2571,2573,2575,2577,2579,2581,2583,2585,2587,2589,2591,2593,2595,2597,2599,2601,2603,2605,2607],{"class":237,"line":587},[235,2566,478],{"class":241},[235,2568,428],{"class":463},[235,2570,494],{"class":252},[235,2572,485],{"class":248},[235,2574,598],{"class":252},[235,2576,601],{"class":248},[235,2578,371],{"class":370},[235,2580,491],{"class":463},[235,2582,608],{"class":241},[235,2584,611],{"class":248},[235,2586,614],{"class":265},[235,2588,511],{"class":248},[235,2590,494],{"class":252},[235,2592,485],{"class":248},[235,2594,623],{"class":422},[235,2596,502],{"class":252},[235,2598,269],{"class":248},[235,2600,630],{"class":265},[235,2602,269],{"class":248},[235,2604,435],{"class":252},[235,2606,637],{"class":248},[235,2608,272],{"class":248},[235,2610,2611,2613,2615,2617,2619],{"class":237,"line":642},[235,2612,645],{"class":241},[235,2614,262],{"class":248},[235,2616,650],{"class":265},[235,2618,269],{"class":248},[235,2620,272],{"class":248},[235,2622,2623],{"class":237,"line":657},[235,2624,660],{"class":248},[235,2626,2627,2629,2631,2633,2635,2637,2639],{"class":237,"line":663},[235,2628,666],{"class":422},[235,2630,393],{"class":248},[235,2632,428],{"class":248},[235,2634,432],{"class":431},[235,2636,435],{"class":248},[235,2638,438],{"class":336},[235,2640,409],{"class":248},[235,2642,2643,2645,2647,2649,2651,2653,2655,2657],{"class":237,"line":681},[235,2644,452],{"class":336},[235,2646,455],{"class":252},[235,2648,393],{"class":248},[235,2650,460],{"class":339},[235,2652,464],{"class":463},[235,2654,467],{"class":248},[235,2656,470],{"class":463},[235,2658,272],{"class":248},[235,2660,2661,2663,2665,2667,2669,2671,2673,2675,2677,2679,2681,2683,2685,2687,2689,2691,2693,2695,2697,2699,2701],{"class":237,"line":700},[235,2662,478],{"class":241},[235,2664,428],{"class":463},[235,2666,432],{"class":252},[235,2668,485],{"class":248},[235,2670,711],{"class":252},[235,2672,491],{"class":463},[235,2674,494],{"class":252},[235,2676,485],{"class":248},[235,2678,499],{"class":422},[235,2680,502],{"class":463},[235,2682,505],{"class":248},[235,2684,508],{"class":265},[235,2686,511],{"class":248},[235,2688,432],{"class":252},[235,2690,485],{"class":248},[235,2692,711],{"class":252},[235,2694,485],{"class":248},[235,2696,522],{"class":252},[235,2698,637],{"class":248},[235,2700,435],{"class":463},[235,2702,272],{"class":248},[235,2704,2705,2707,2709,2711,2713,2715,2717,2719,2721,2723,2725,2727,2729,2731,2733,2735,2737,2739,2741,2743,2745],{"class":237,"line":746},[235,2706,478],{"class":241},[235,2708,428],{"class":463},[235,2710,432],{"class":252},[235,2712,485],{"class":248},[235,2714,757],{"class":252},[235,2716,491],{"class":463},[235,2718,494],{"class":252},[235,2720,485],{"class":248},[235,2722,499],{"class":422},[235,2724,502],{"class":463},[235,2726,505],{"class":248},[235,2728,562],{"class":265},[235,2730,511],{"class":248},[235,2732,432],{"class":252},[235,2734,485],{"class":248},[235,2736,757],{"class":252},[235,2738,485],{"class":248},[235,2740,522],{"class":252},[235,2742,637],{"class":248},[235,2744,435],{"class":463},[235,2746,272],{"class":248},[235,2748,2749,2751,2753,2755,2757,2759,2761,2763,2765,2767,2769,2771,2773,2775,2777,2779,2781,2783,2785,2787,2789,2791,2793,2795],{"class":237,"line":792},[235,2750,478],{"class":241},[235,2752,428],{"class":463},[235,2754,494],{"class":252},[235,2756,485],{"class":248},[235,2758,598],{"class":252},[235,2760,601],{"class":248},[235,2762,371],{"class":370},[235,2764,491],{"class":463},[235,2766,608],{"class":241},[235,2768,611],{"class":248},[235,2770,815],{"class":265},[235,2772,511],{"class":248},[235,2774,494],{"class":252},[235,2776,485],{"class":248},[235,2778,623],{"class":422},[235,2780,502],{"class":252},[235,2782,269],{"class":248},[235,2784,630],{"class":265},[235,2786,269],{"class":248},[235,2788,435],{"class":252},[235,2790,256],{"class":248},[235,2792,838],{"class":265},[235,2794,505],{"class":248},[235,2796,272],{"class":248},[235,2798,2799,2801,2803,2805,2807],{"class":237,"line":845},[235,2800,645],{"class":241},[235,2802,262],{"class":248},[235,2804,852],{"class":265},[235,2806,269],{"class":248},[235,2808,272],{"class":248},[235,2810,2811],{"class":237,"line":859},[235,2812,660],{"class":248},[235,2814,2815,2817,2819,2821,2823,2825,2827],{"class":237,"line":864},[235,2816,867],{"class":422},[235,2818,393],{"class":248},[235,2820,428],{"class":248},[235,2822,432],{"class":431},[235,2824,435],{"class":248},[235,2826,438],{"class":336},[235,2828,409],{"class":248},[235,2830,2831,2833,2835,2837,2839,2841,2843,2845,2847,2849,2851],{"class":237,"line":882},[235,2832,478],{"class":241},[235,2834,428],{"class":463},[235,2836,432],{"class":252},[235,2838,485],{"class":248},[235,2840,711],{"class":252},[235,2842,491],{"class":463},[235,2844,608],{"class":241},[235,2846,611],{"class":248},[235,2848,901],{"class":265},[235,2850,505],{"class":248},[235,2852,272],{"class":248},[235,2854,2855,2857,2859,2861,2863],{"class":237,"line":908},[235,2856,645],{"class":241},[235,2858,262],{"class":248},[235,2860,915],{"class":265},[235,2862,269],{"class":248},[235,2864,272],{"class":248},[235,2866,2867],{"class":237,"line":922},[235,2868,660],{"class":248},[235,2870,2871,2873,2875,2877,2879,2881,2883,2885],{"class":237,"line":927},[235,2872,930],{"class":422},[235,2874,393],{"class":248},[235,2876,935],{"class":248},[235,2878,438],{"class":336},[235,2880,611],{"class":248},[235,2882,942],{"class":265},[235,2884,505],{"class":248},[235,2886,947],{"class":248},[235,2888,2889,2891,2893,2895,2897,2899,2901],{"class":237,"line":950},[235,2890,953],{"class":422},[235,2892,393],{"class":248},[235,2894,428],{"class":248},[235,2896,432],{"class":431},[235,2898,435],{"class":248},[235,2900,438],{"class":336},[235,2902,409],{"class":248},[235,2904,2905,2907,2909,2911,2913,2915,2917,2919,2921,2923,2925],{"class":237,"line":968},[235,2906,645],{"class":241},[235,2908,611],{"class":248},[235,2910,975],{"class":265},[235,2912,511],{"class":248},[235,2914,432],{"class":252},[235,2916,485],{"class":248},[235,2918,984],{"class":252},[235,2920,256],{"class":248},[235,2922,989],{"class":265},[235,2924,505],{"class":248},[235,2926,272],{"class":248},[235,2928,2929],{"class":237,"line":996},[235,2930,660],{"class":248},[235,2932,2933,2935,2937,2939,2941,2943,2945],{"class":237,"line":1001},[235,2934,1004],{"class":422},[235,2936,393],{"class":248},[235,2938,428],{"class":248},[235,2940,432],{"class":431},[235,2942,435],{"class":248},[235,2944,438],{"class":336},[235,2946,409],{"class":248},[235,2948,2949,2951,2953,2955,2957,2959,2961,2963],{"class":237,"line":1019},[235,2950,452],{"class":336},[235,2952,455],{"class":252},[235,2954,393],{"class":248},[235,2956,460],{"class":339},[235,2958,464],{"class":463},[235,2960,467],{"class":248},[235,2962,470],{"class":463},[235,2964,272],{"class":248},[235,2966,2967,2969,2971,2973,2975,2977,2979,2981,2983,2985,2987,2989,2991,2993,2995],{"class":237,"line":1038},[235,2968,478],{"class":241},[235,2970,428],{"class":463},[235,2972,432],{"class":252},[235,2974,485],{"class":248},[235,2976,1049],{"class":252},[235,2978,491],{"class":463},[235,2980,494],{"class":252},[235,2982,485],{"class":248},[235,2984,499],{"class":422},[235,2986,502],{"class":463},[235,2988,269],{"class":248},[235,2990,1064],{"class":265},[235,2992,269],{"class":248},[235,2994,435],{"class":463},[235,2996,272],{"class":248},[235,2998,2999,3001,3003,3005,3007,3009,3011,3013,3015,3017,3019,3021,3023,3025,3027],{"class":237,"line":1073},[235,3000,478],{"class":241},[235,3002,428],{"class":463},[235,3004,432],{"class":252},[235,3006,485],{"class":248},[235,3008,1084],{"class":252},[235,3010,491],{"class":463},[235,3012,494],{"class":252},[235,3014,485],{"class":248},[235,3016,499],{"class":422},[235,3018,502],{"class":463},[235,3020,269],{"class":248},[235,3022,1099],{"class":265},[235,3024,269],{"class":248},[235,3026,435],{"class":463},[235,3028,272],{"class":248},[235,3030,3031,3033,3035,3037,3039,3041,3043,3045,3047,3049,3051,3053,3055,3057,3059],{"class":237,"line":1108},[235,3032,478],{"class":241},[235,3034,428],{"class":463},[235,3036,432],{"class":252},[235,3038,485],{"class":248},[235,3040,1119],{"class":252},[235,3042,491],{"class":463},[235,3044,494],{"class":252},[235,3046,485],{"class":248},[235,3048,499],{"class":422},[235,3050,502],{"class":463},[235,3052,269],{"class":248},[235,3054,1134],{"class":265},[235,3056,269],{"class":248},[235,3058,435],{"class":463},[235,3060,272],{"class":248},[235,3062,3063,3065,3067,3069,3071,3073,3075,3077,3079,3081,3083,3085,3087,3089,3091,3093,3095,3097,3099,3101,3103,3105],{"class":237,"line":1143},[235,3064,478],{"class":241},[235,3066,428],{"class":463},[235,3068,494],{"class":252},[235,3070,485],{"class":248},[235,3072,598],{"class":252},[235,3074,601],{"class":248},[235,3076,371],{"class":370},[235,3078,491],{"class":463},[235,3080,608],{"class":241},[235,3082,611],{"class":248},[235,3084,1166],{"class":265},[235,3086,511],{"class":248},[235,3088,494],{"class":252},[235,3090,485],{"class":248},[235,3092,623],{"class":422},[235,3094,502],{"class":252},[235,3096,269],{"class":248},[235,3098,1181],{"class":265},[235,3100,269],{"class":248},[235,3102,435],{"class":252},[235,3104,637],{"class":248},[235,3106,272],{"class":248},[235,3108,3109,3111,3113,3115,3117],{"class":237,"line":1192},[235,3110,645],{"class":241},[235,3112,611],{"class":248},[235,3114,1199],{"class":265},[235,3116,505],{"class":248},[235,3118,272],{"class":248},[235,3120,3121],{"class":237,"line":1206},[235,3122,660],{"class":248},[235,3124,3125,3127,3129],{"class":237,"line":1211},[235,3126,1214],{"class":463},[235,3128,393],{"class":248},[235,3130,409],{"class":248},[235,3132,3133,3135,3137,3139,3141,3143,3145],{"class":237,"line":1221},[235,3134,1224],{"class":422},[235,3136,393],{"class":248},[235,3138,428],{"class":248},[235,3140,432],{"class":431},[235,3142,435],{"class":248},[235,3144,438],{"class":336},[235,3146,409],{"class":248},[235,3148,3149,3151,3153,3155,3157,3159,3161,3163],{"class":237,"line":1239},[235,3150,1242],{"class":336},[235,3152,455],{"class":252},[235,3154,393],{"class":248},[235,3156,460],{"class":339},[235,3158,464],{"class":463},[235,3160,467],{"class":248},[235,3162,470],{"class":463},[235,3164,272],{"class":248},[235,3166,3167,3169,3171,3173,3175,3177,3179,3181,3183,3185,3187,3189,3191,3193,3195],{"class":237,"line":1259},[235,3168,1262],{"class":241},[235,3170,428],{"class":463},[235,3172,432],{"class":252},[235,3174,485],{"class":248},[235,3176,1271],{"class":252},[235,3178,491],{"class":463},[235,3180,494],{"class":252},[235,3182,485],{"class":248},[235,3184,499],{"class":422},[235,3186,502],{"class":463},[235,3188,269],{"class":248},[235,3190,1286],{"class":265},[235,3192,269],{"class":248},[235,3194,435],{"class":463},[235,3196,272],{"class":248},[235,3198,3199,3201,3203,3205,3207,3209,3211,3213,3215,3217,3219,3221,3223,3225,3227],{"class":237,"line":1295},[235,3200,1262],{"class":241},[235,3202,428],{"class":463},[235,3204,432],{"class":252},[235,3206,485],{"class":248},[235,3208,1306],{"class":252},[235,3210,491],{"class":463},[235,3212,494],{"class":252},[235,3214,485],{"class":248},[235,3216,499],{"class":422},[235,3218,502],{"class":463},[235,3220,269],{"class":248},[235,3222,1321],{"class":265},[235,3224,269],{"class":248},[235,3226,435],{"class":463},[235,3228,272],{"class":248},[235,3230,3231,3233,3235,3237,3239,3241,3243,3245,3247,3249,3251,3253,3255,3257,3259],{"class":237,"line":1330},[235,3232,1262],{"class":241},[235,3234,428],{"class":463},[235,3236,432],{"class":252},[235,3238,485],{"class":248},[235,3240,1341],{"class":252},[235,3242,491],{"class":463},[235,3244,494],{"class":252},[235,3246,485],{"class":248},[235,3248,499],{"class":422},[235,3250,502],{"class":463},[235,3252,269],{"class":248},[235,3254,1356],{"class":265},[235,3256,269],{"class":248},[235,3258,435],{"class":463},[235,3260,272],{"class":248},[235,3262,3263,3265,3267,3269,3271,3273,3275,3277,3279,3281,3283,3285,3287,3289,3291,3293,3295,3297,3299,3301,3303,3305],{"class":237,"line":1365},[235,3264,1262],{"class":241},[235,3266,428],{"class":463},[235,3268,494],{"class":252},[235,3270,485],{"class":248},[235,3272,598],{"class":252},[235,3274,601],{"class":248},[235,3276,371],{"class":370},[235,3278,491],{"class":463},[235,3280,608],{"class":241},[235,3282,611],{"class":248},[235,3284,1388],{"class":265},[235,3286,511],{"class":248},[235,3288,494],{"class":252},[235,3290,485],{"class":248},[235,3292,623],{"class":422},[235,3294,502],{"class":252},[235,3296,269],{"class":248},[235,3298,1181],{"class":265},[235,3300,269],{"class":248},[235,3302,435],{"class":252},[235,3304,637],{"class":248},[235,3306,272],{"class":248},[235,3308,3309,3311,3313,3315,3317],{"class":237,"line":1413},[235,3310,1416],{"class":241},[235,3312,611],{"class":248},[235,3314,1421],{"class":265},[235,3316,505],{"class":248},[235,3318,272],{"class":248},[235,3320,3321],{"class":237,"line":1428},[235,3322,1431],{"class":248},[235,3324,3325,3327,3329,3331,3333,3335,3337],{"class":237,"line":1434},[235,3326,1437],{"class":422},[235,3328,393],{"class":248},[235,3330,428],{"class":248},[235,3332,432],{"class":431},[235,3334,435],{"class":248},[235,3336,438],{"class":336},[235,3338,409],{"class":248},[235,3340,3341,3343,3345,3347,3349,3351,3353,3355],{"class":237,"line":1452},[235,3342,1242],{"class":336},[235,3344,455],{"class":252},[235,3346,393],{"class":248},[235,3348,460],{"class":339},[235,3350,464],{"class":463},[235,3352,467],{"class":248},[235,3354,470],{"class":463},[235,3356,272],{"class":248},[235,3358,3359,3361,3363,3365,3367,3369,3371,3373,3375,3377,3379,3381,3383,3385,3387,3389,3391,3393,3395,3397,3399],{"class":237,"line":1471},[235,3360,1262],{"class":241},[235,3362,428],{"class":463},[235,3364,432],{"class":252},[235,3366,485],{"class":248},[235,3368,711],{"class":252},[235,3370,491],{"class":463},[235,3372,494],{"class":252},[235,3374,485],{"class":248},[235,3376,499],{"class":422},[235,3378,502],{"class":463},[235,3380,505],{"class":248},[235,3382,508],{"class":265},[235,3384,511],{"class":248},[235,3386,432],{"class":252},[235,3388,485],{"class":248},[235,3390,711],{"class":252},[235,3392,485],{"class":248},[235,3394,522],{"class":252},[235,3396,637],{"class":248},[235,3398,435],{"class":463},[235,3400,272],{"class":248},[235,3402,3403,3405,3407,3409,3411,3413,3415,3417,3419,3421,3423,3425,3427,3429,3431,3433,3435,3437,3439,3441,3443],{"class":237,"line":1516},[235,3404,1262],{"class":241},[235,3406,428],{"class":463},[235,3408,432],{"class":252},[235,3410,485],{"class":248},[235,3412,757],{"class":252},[235,3414,491],{"class":463},[235,3416,494],{"class":252},[235,3418,485],{"class":248},[235,3420,499],{"class":422},[235,3422,502],{"class":463},[235,3424,505],{"class":248},[235,3426,562],{"class":265},[235,3428,511],{"class":248},[235,3430,432],{"class":252},[235,3432,485],{"class":248},[235,3434,757],{"class":252},[235,3436,485],{"class":248},[235,3438,522],{"class":252},[235,3440,637],{"class":248},[235,3442,435],{"class":463},[235,3444,272],{"class":248},[235,3446,3447,3449,3451,3453,3455,3457,3459,3461,3463,3465,3467,3469,3471,3473,3475,3477,3479,3481,3483,3485,3487,3489],{"class":237,"line":1561},[235,3448,1262],{"class":241},[235,3450,428],{"class":463},[235,3452,494],{"class":252},[235,3454,485],{"class":248},[235,3456,598],{"class":252},[235,3458,601],{"class":248},[235,3460,371],{"class":370},[235,3462,491],{"class":463},[235,3464,608],{"class":241},[235,3466,611],{"class":248},[235,3468,1584],{"class":265},[235,3470,511],{"class":248},[235,3472,494],{"class":252},[235,3474,485],{"class":248},[235,3476,623],{"class":422},[235,3478,502],{"class":252},[235,3480,269],{"class":248},[235,3482,630],{"class":265},[235,3484,269],{"class":248},[235,3486,435],{"class":252},[235,3488,637],{"class":248},[235,3490,272],{"class":248},[235,3492,3493,3495,3497,3499,3501],{"class":237,"line":1609},[235,3494,1416],{"class":241},[235,3496,611],{"class":248},[235,3498,1616],{"class":265},[235,3500,505],{"class":248},[235,3502,272],{"class":248},[235,3504,3505],{"class":237,"line":1623},[235,3506,1431],{"class":248},[235,3508,3509],{"class":237,"line":1628},[235,3510,660],{"class":248},[235,3512,3513],{"class":237,"line":1633},[235,3514,1636],{"class":248},[226,3516,3518],{"className":228,"code":3517,"filename":28,"language":230,"meta":231,"style":231},"import {FormatString, FormatEmail, FormatStringDateTime} from '@mionjs\u002Ftype-formats\u002FStringFormats';\nimport {FormatNumber} from '@mionjs\u002Ftype-formats\u002FNumberFormats';\nimport {FormatBigInt} from '@mionjs\u002Ftype-formats\u002FBigintFormats';\nimport {initMionRouter, route} from '@mionjs\u002Frouter';\nimport {RpcError} from '@mionjs\u002Fcore';\n\ntype UserWithFormats = {\n    name: FormatString\u003C{maxLength: 100; minLength: 2}>;\n    age: FormatNumber\u003C{min: 0; max: 150}>;\n    balance: FormatBigInt\u003C{min: 0n}>;\n    isActive: boolean;\n    tags: string[];\n    createdAt: FormatStringDateTime;\n    nested: {\n        email: FormatEmail;\n        score: FormatNumber\u003C{min: 0}>;\n    };\n};\n\nexport const myApi = await initMionRouter({\n    setUser: route((_ctx, user: UserWithFormats): UserWithFormats | RpcError\u003C'user-exists'> => {\n        return user;\n    }),\n});\nexport type MyApi = typeof myApi;\n",[205,3519,3520,3552,3574,3596,3623,3644,3648,3659,3691,3720,3741,3751,3763,3773,3781,3791,3809,3814,3818,3822,3842,3892,3900,3909,3917],{"__ignoreMap":231},[235,3521,3522,3524,3526,3529,3531,3534,3536,3539,3541,3543,3545,3548,3550],{"class":237,"line":238},[235,3523,242],{"class":241},[235,3525,249],{"class":248},[235,3527,3528],{"class":252},"FormatString",[235,3530,367],{"class":248},[235,3532,3533],{"class":252}," FormatEmail",[235,3535,367],{"class":248},[235,3537,3538],{"class":252}," FormatStringDateTime",[235,3540,256],{"class":248},[235,3542,259],{"class":241},[235,3544,262],{"class":248},[235,3546,3547],{"class":265},"@mionjs\u002Ftype-formats\u002FStringFormats",[235,3549,269],{"class":248},[235,3551,272],{"class":248},[235,3553,3554,3556,3558,3561,3563,3565,3567,3570,3572],{"class":237,"line":275},[235,3555,242],{"class":241},[235,3557,249],{"class":248},[235,3559,3560],{"class":252},"FormatNumber",[235,3562,256],{"class":248},[235,3564,259],{"class":241},[235,3566,262],{"class":248},[235,3568,3569],{"class":265},"@mionjs\u002Ftype-formats\u002FNumberFormats",[235,3571,269],{"class":248},[235,3573,272],{"class":248},[235,3575,3576,3578,3580,3583,3585,3587,3589,3592,3594],{"class":237,"line":298},[235,3577,242],{"class":241},[235,3579,249],{"class":248},[235,3581,3582],{"class":252},"FormatBigInt",[235,3584,256],{"class":248},[235,3586,259],{"class":241},[235,3588,262],{"class":248},[235,3590,3591],{"class":265},"@mionjs\u002Ftype-formats\u002FBigintFormats",[235,3593,269],{"class":248},[235,3595,272],{"class":248},[235,3597,3598,3600,3602,3605,3607,3610,3612,3614,3616,3619,3621],{"class":237,"line":305},[235,3599,242],{"class":241},[235,3601,249],{"class":248},[235,3603,3604],{"class":252},"initMionRouter",[235,3606,367],{"class":248},[235,3608,3609],{"class":252}," route",[235,3611,256],{"class":248},[235,3613,259],{"class":241},[235,3615,262],{"class":248},[235,3617,3618],{"class":265},"@mionjs\u002Frouter",[235,3620,269],{"class":248},[235,3622,272],{"class":248},[235,3624,3625,3627,3629,3632,3634,3636,3638,3640,3642],{"class":237,"line":330},[235,3626,242],{"class":241},[235,3628,249],{"class":248},[235,3630,3631],{"class":252},"RpcError",[235,3633,256],{"class":248},[235,3635,259],{"class":241},[235,3637,262],{"class":248},[235,3639,266],{"class":265},[235,3641,269],{"class":248},[235,3643,272],{"class":248},[235,3645,3646],{"class":237,"line":377},[235,3647,302],{"emptyLinePlaceholder":301},[235,3649,3650,3652,3655,3657],{"class":237,"line":382},[235,3651,1809],{"class":336},[235,3653,3654],{"class":339}," UserWithFormats",[235,3656,343],{"class":248},[235,3658,409],{"class":248},[235,3660,3661,3663,3665,3668,3671,3673,3675,3678,3680,3683,3685,3688],{"class":237,"line":412},[235,3662,423],{"class":463},[235,3664,393],{"class":248},[235,3666,3667],{"class":339}," FormatString",[235,3669,3670],{"class":248},"\u003C{",[235,3672,547],{"class":463},[235,3674,393],{"class":248},[235,3676,3677],{"class":370}," 100",[235,3679,2188],{"class":248},[235,3681,3682],{"class":463}," minLength",[235,3684,393],{"class":248},[235,3686,3687],{"class":370}," 2",[235,3689,3690],{"class":248},"}>;\n",[235,3692,3693,3695,3697,3700,3702,3704,3706,3708,3710,3713,3715,3718],{"class":237,"line":419},[235,3694,666],{"class":463},[235,3696,393],{"class":248},[235,3698,3699],{"class":339}," FormatNumber",[235,3701,3670],{"class":248},[235,3703,711],{"class":463},[235,3705,393],{"class":248},[235,3707,371],{"class":370},[235,3709,2188],{"class":248},[235,3711,3712],{"class":463}," max",[235,3714,393],{"class":248},[235,3716,3717],{"class":370}," 150",[235,3719,3690],{"class":248},[235,3721,3722,3724,3726,3729,3731,3733,3735,3737,3739],{"class":237,"line":443},[235,3723,867],{"class":463},[235,3725,393],{"class":248},[235,3727,3728],{"class":339}," FormatBigInt",[235,3730,3670],{"class":248},[235,3732,711],{"class":463},[235,3734,393],{"class":248},[235,3736,371],{"class":370},[235,3738,1897],{"class":336},[235,3740,3690],{"class":248},[235,3742,3743,3745,3747,3749],{"class":237,"line":449},[235,3744,930],{"class":463},[235,3746,393],{"class":248},[235,3748,1926],{"class":339},[235,3750,272],{"class":248},[235,3752,3753,3755,3757,3759,3761],{"class":237,"line":475},[235,3754,953],{"class":463},[235,3756,393],{"class":248},[235,3758,460],{"class":339},[235,3760,1955],{"class":252},[235,3762,272],{"class":248},[235,3764,3765,3767,3769,3771],{"class":237,"line":536},[235,3766,1004],{"class":463},[235,3768,393],{"class":248},[235,3770,3538],{"class":339},[235,3772,272],{"class":248},[235,3774,3775,3777,3779],{"class":237,"line":587},[235,3776,1214],{"class":463},[235,3778,393],{"class":248},[235,3780,409],{"class":248},[235,3782,3783,3785,3787,3789],{"class":237,"line":642},[235,3784,1224],{"class":463},[235,3786,393],{"class":248},[235,3788,3533],{"class":339},[235,3790,272],{"class":248},[235,3792,3793,3795,3797,3799,3801,3803,3805,3807],{"class":237,"line":657},[235,3794,1437],{"class":463},[235,3796,393],{"class":248},[235,3798,3699],{"class":339},[235,3800,3670],{"class":248},[235,3802,711],{"class":463},[235,3804,393],{"class":248},[235,3806,371],{"class":370},[235,3808,3690],{"class":248},[235,3810,3811],{"class":237,"line":663},[235,3812,3813],{"class":248},"    };\n",[235,3815,3816],{"class":237,"line":681},[235,3817,1636],{"class":248},[235,3819,3820],{"class":237,"line":700},[235,3821,302],{"emptyLinePlaceholder":301},[235,3823,3824,3826,3828,3831,3833,3835,3838,3840],{"class":237,"line":746},[235,3825,333],{"class":241},[235,3827,387],{"class":336},[235,3829,3830],{"class":252}," myApi ",[235,3832,467],{"class":248},[235,3834,2042],{"class":241},[235,3836,3837],{"class":422}," initMionRouter",[235,3839,502],{"class":252},[235,3841,2098],{"class":248},[235,3843,3844,3847,3849,3851,3853,3855,3858,3860,3863,3865,3867,3870,3872,3875,3878,3880,3882,3884,3886,3888,3890],{"class":237,"line":792},[235,3845,3846],{"class":463},"    setUser",[235,3848,393],{"class":248},[235,3850,3609],{"class":422},[235,3852,502],{"class":252},[235,3854,502],{"class":248},[235,3856,3857],{"class":431},"_ctx",[235,3859,367],{"class":248},[235,3861,3862],{"class":431}," user",[235,3864,393],{"class":248},[235,3866,3654],{"class":339},[235,3868,3869],{"class":248},"):",[235,3871,3654],{"class":339},[235,3873,3874],{"class":248}," |",[235,3876,3877],{"class":339}," RpcError",[235,3879,349],{"class":248},[235,3881,269],{"class":248},[235,3883,2237],{"class":265},[235,3885,269],{"class":248},[235,3887,404],{"class":248},[235,3889,438],{"class":336},[235,3891,409],{"class":248},[235,3893,3894,3896,3898],{"class":237,"line":845},[235,3895,645],{"class":241},[235,3897,3862],{"class":252},[235,3899,272],{"class":248},[235,3901,3902,3905,3907],{"class":237,"line":859},[235,3903,3904],{"class":248},"    }",[235,3906,435],{"class":252},[235,3908,947],{"class":248},[235,3910,3911,3913,3915],{"class":237,"line":864},[235,3912,256],{"class":248},[235,3914,435],{"class":252},[235,3916,272],{"class":248},[235,3918,3919,3921,3923,3926,3928,3931,3934],{"class":237,"line":882},[235,3920,333],{"class":241},[235,3922,245],{"class":336},[235,3924,3925],{"class":339}," MyApi",[235,3927,343],{"class":248},[235,3929,3930],{"class":248}," typeof",[235,3932,3933],{"class":252}," myApi",[235,3935,272],{"class":248},[214,3937,3939],{"id":3938},"error-parameter-types","Error Parameter Types",[201,3941,3942,3943,1181,3946,1181,3949,3951,3952,3956],{},"When using branded format types (like ",[205,3944,3945],{},"FormatEmail",[205,3947,3948],{},"FormatUrl",[205,3950,3560],{},", etc.), the error parameter types are ",[3953,3954,3955],"strong",{},"automatically inferred",". This means you get proper intellisense for the format parameters that might have failed without needing to manually specify the type.",[226,3958,3960],{"className":228,"code":3959,"language":230,"meta":231,"style":231},"\u002F\u002F Define a simple type with format constraints\ntype ContactInfo = {\n    name: FormatString\u003C{minLength: 2; maxLength: 50}>;\n    email: FormatEmail;\n    website: FormatString\u003C{minLength: 10}>;\n};\n\n\u002F\u002F Error params are automatically inferred from the branded type\n\u002F\u002F Handler is called ONCE per field with ALL aggregated error params\nconst contactErrors: FriendlyErrors\u003CContactInfo> = {\n    \u002F\u002F FormatString infers StringErrorParams: minLength, maxLength, pattern, length, etc.\n    \u002F\u002F All failed constraints are available at once in the params object\n    name: (failed) => {\n        const messages: string[] = [];\n        if (failed.minLength) messages.push(`at least ${failed.minLength.val} characters`);\n        if (failed.maxLength) messages.push(`at most ${failed.maxLength.val} characters`);\n        if (messages.length > 0) return `Name must be ${messages.join(' and ')}`;\n        return 'Name must be a valid string';\n    },\n    \u002F\u002F FormatEmail infers EmailErrorParams: pattern, localPart, domain, minLength, maxLength\n    email: (failed) => {\n        const messages: string[] = [];\n        if (failed.pattern) messages.push('invalid format');\n        if (failed.localPart) messages.push('invalid username');\n        if (failed.domain) messages.push('invalid domain');\n        if (messages.length > 0) return `Email: ${messages.join(', ')}`;\n        return 'Email must be a valid string';\n    },\n    \u002F\u002F FormatString infers StringErrorParams automatically\n    website: (failed) => {\n        if (failed.minLength) return `Website must be at least ${failed.minLength.val} characters`;\n        return 'Website must be a valid string';\n    },\n};\n",[205,3961,3962,3967,3978,4006,4017,4037,4041,4045,4050,4055,4077,4082,4087,4103,4121,4169,4217,4263,4275,4279,4284,4300,4318,4350,4382,4414,4460,4472,4476,4481,4497,4538,4551,4555],{"__ignoreMap":231},[235,3963,3964],{"class":237,"line":238},[235,3965,3966],{"class":415},"\u002F\u002F Define a simple type with format constraints\n",[235,3968,3969,3971,3974,3976],{"class":237,"line":275},[235,3970,1809],{"class":336},[235,3972,3973],{"class":339}," ContactInfo",[235,3975,343],{"class":248},[235,3977,409],{"class":248},[235,3979,3980,3982,3984,3986,3988,3990,3992,3994,3996,3999,4001,4004],{"class":237,"line":298},[235,3981,423],{"class":463},[235,3983,393],{"class":248},[235,3985,3667],{"class":339},[235,3987,3670],{"class":248},[235,3989,488],{"class":463},[235,3991,393],{"class":248},[235,3993,3687],{"class":370},[235,3995,2188],{"class":248},[235,3997,3998],{"class":463}," maxLength",[235,4000,393],{"class":248},[235,4002,4003],{"class":370}," 50",[235,4005,3690],{"class":248},[235,4007,4008,4011,4013,4015],{"class":237,"line":305},[235,4009,4010],{"class":463},"    email",[235,4012,393],{"class":248},[235,4014,3533],{"class":339},[235,4016,272],{"class":248},[235,4018,4019,4022,4024,4026,4028,4030,4032,4035],{"class":237,"line":330},[235,4020,4021],{"class":463},"    website",[235,4023,393],{"class":248},[235,4025,3667],{"class":339},[235,4027,3670],{"class":248},[235,4029,488],{"class":463},[235,4031,393],{"class":248},[235,4033,4034],{"class":370}," 10",[235,4036,3690],{"class":248},[235,4038,4039],{"class":237,"line":377},[235,4040,1636],{"class":248},[235,4042,4043],{"class":237,"line":382},[235,4044,302],{"emptyLinePlaceholder":301},[235,4046,4047],{"class":237,"line":412},[235,4048,4049],{"class":415},"\u002F\u002F Error params are automatically inferred from the branded type\n",[235,4051,4052],{"class":237,"line":419},[235,4053,4054],{"class":415},"\u002F\u002F Handler is called ONCE per field with ALL aggregated error params\n",[235,4056,4057,4059,4062,4064,4066,4068,4071,4073,4075],{"class":237,"line":443},[235,4058,1764],{"class":336},[235,4060,4061],{"class":252}," contactErrors",[235,4063,393],{"class":248},[235,4065,396],{"class":339},[235,4067,349],{"class":248},[235,4069,4070],{"class":339},"ContactInfo",[235,4072,404],{"class":248},[235,4074,343],{"class":248},[235,4076,409],{"class":248},[235,4078,4079],{"class":237,"line":449},[235,4080,4081],{"class":415},"    \u002F\u002F FormatString infers StringErrorParams: minLength, maxLength, pattern, length, etc.\n",[235,4083,4084],{"class":237,"line":475},[235,4085,4086],{"class":415},"    \u002F\u002F All failed constraints are available at once in the params object\n",[235,4088,4089,4091,4093,4095,4097,4099,4101],{"class":237,"line":536},[235,4090,423],{"class":422},[235,4092,393],{"class":248},[235,4094,428],{"class":248},[235,4096,432],{"class":431},[235,4098,435],{"class":248},[235,4100,438],{"class":336},[235,4102,409],{"class":248},[235,4104,4105,4107,4109,4111,4113,4115,4117,4119],{"class":237,"line":587},[235,4106,452],{"class":336},[235,4108,455],{"class":252},[235,4110,393],{"class":248},[235,4112,460],{"class":339},[235,4114,464],{"class":463},[235,4116,467],{"class":248},[235,4118,470],{"class":463},[235,4120,272],{"class":248},[235,4122,4123,4125,4127,4129,4131,4133,4135,4137,4139,4141,4143,4145,4147,4149,4151,4153,4155,4157,4159,4161,4163,4165,4167],{"class":237,"line":642},[235,4124,478],{"class":241},[235,4126,428],{"class":463},[235,4128,432],{"class":252},[235,4130,485],{"class":248},[235,4132,488],{"class":252},[235,4134,491],{"class":463},[235,4136,494],{"class":252},[235,4138,485],{"class":248},[235,4140,499],{"class":422},[235,4142,502],{"class":463},[235,4144,505],{"class":248},[235,4146,508],{"class":265},[235,4148,511],{"class":248},[235,4150,432],{"class":252},[235,4152,485],{"class":248},[235,4154,488],{"class":252},[235,4156,485],{"class":248},[235,4158,522],{"class":252},[235,4160,256],{"class":248},[235,4162,527],{"class":265},[235,4164,505],{"class":248},[235,4166,435],{"class":463},[235,4168,272],{"class":248},[235,4170,4171,4173,4175,4177,4179,4181,4183,4185,4187,4189,4191,4193,4195,4197,4199,4201,4203,4205,4207,4209,4211,4213,4215],{"class":237,"line":657},[235,4172,478],{"class":241},[235,4174,428],{"class":463},[235,4176,432],{"class":252},[235,4178,485],{"class":248},[235,4180,547],{"class":252},[235,4182,491],{"class":463},[235,4184,494],{"class":252},[235,4186,485],{"class":248},[235,4188,499],{"class":422},[235,4190,502],{"class":463},[235,4192,505],{"class":248},[235,4194,562],{"class":265},[235,4196,511],{"class":248},[235,4198,432],{"class":252},[235,4200,485],{"class":248},[235,4202,547],{"class":252},[235,4204,485],{"class":248},[235,4206,522],{"class":252},[235,4208,256],{"class":248},[235,4210,527],{"class":265},[235,4212,505],{"class":248},[235,4214,435],{"class":463},[235,4216,272],{"class":248},[235,4218,4219,4221,4223,4225,4227,4229,4231,4233,4235,4237,4239,4241,4243,4245,4247,4249,4251,4253,4255,4257,4259,4261],{"class":237,"line":663},[235,4220,478],{"class":241},[235,4222,428],{"class":463},[235,4224,494],{"class":252},[235,4226,485],{"class":248},[235,4228,598],{"class":252},[235,4230,601],{"class":248},[235,4232,371],{"class":370},[235,4234,491],{"class":463},[235,4236,608],{"class":241},[235,4238,611],{"class":248},[235,4240,614],{"class":265},[235,4242,511],{"class":248},[235,4244,494],{"class":252},[235,4246,485],{"class":248},[235,4248,623],{"class":422},[235,4250,502],{"class":252},[235,4252,269],{"class":248},[235,4254,630],{"class":265},[235,4256,269],{"class":248},[235,4258,435],{"class":252},[235,4260,637],{"class":248},[235,4262,272],{"class":248},[235,4264,4265,4267,4269,4271,4273],{"class":237,"line":681},[235,4266,645],{"class":241},[235,4268,262],{"class":248},[235,4270,650],{"class":265},[235,4272,269],{"class":248},[235,4274,272],{"class":248},[235,4276,4277],{"class":237,"line":700},[235,4278,660],{"class":248},[235,4280,4281],{"class":237,"line":746},[235,4282,4283],{"class":415},"    \u002F\u002F FormatEmail infers EmailErrorParams: pattern, localPart, domain, minLength, maxLength\n",[235,4285,4286,4288,4290,4292,4294,4296,4298],{"class":237,"line":792},[235,4287,4010],{"class":422},[235,4289,393],{"class":248},[235,4291,428],{"class":248},[235,4293,432],{"class":431},[235,4295,435],{"class":248},[235,4297,438],{"class":336},[235,4299,409],{"class":248},[235,4301,4302,4304,4306,4308,4310,4312,4314,4316],{"class":237,"line":845},[235,4303,452],{"class":336},[235,4305,455],{"class":252},[235,4307,393],{"class":248},[235,4309,460],{"class":339},[235,4311,464],{"class":463},[235,4313,467],{"class":248},[235,4315,470],{"class":463},[235,4317,272],{"class":248},[235,4319,4320,4322,4324,4326,4328,4330,4332,4334,4336,4338,4340,4342,4344,4346,4348],{"class":237,"line":859},[235,4321,478],{"class":241},[235,4323,428],{"class":463},[235,4325,432],{"class":252},[235,4327,485],{"class":248},[235,4329,1271],{"class":252},[235,4331,491],{"class":463},[235,4333,494],{"class":252},[235,4335,485],{"class":248},[235,4337,499],{"class":422},[235,4339,502],{"class":463},[235,4341,269],{"class":248},[235,4343,1286],{"class":265},[235,4345,269],{"class":248},[235,4347,435],{"class":463},[235,4349,272],{"class":248},[235,4351,4352,4354,4356,4358,4360,4362,4364,4366,4368,4370,4372,4374,4376,4378,4380],{"class":237,"line":864},[235,4353,478],{"class":241},[235,4355,428],{"class":463},[235,4357,432],{"class":252},[235,4359,485],{"class":248},[235,4361,1306],{"class":252},[235,4363,491],{"class":463},[235,4365,494],{"class":252},[235,4367,485],{"class":248},[235,4369,499],{"class":422},[235,4371,502],{"class":463},[235,4373,269],{"class":248},[235,4375,1321],{"class":265},[235,4377,269],{"class":248},[235,4379,435],{"class":463},[235,4381,272],{"class":248},[235,4383,4384,4386,4388,4390,4392,4394,4396,4398,4400,4402,4404,4406,4408,4410,4412],{"class":237,"line":882},[235,4385,478],{"class":241},[235,4387,428],{"class":463},[235,4389,432],{"class":252},[235,4391,485],{"class":248},[235,4393,1341],{"class":252},[235,4395,491],{"class":463},[235,4397,494],{"class":252},[235,4399,485],{"class":248},[235,4401,499],{"class":422},[235,4403,502],{"class":463},[235,4405,269],{"class":248},[235,4407,1356],{"class":265},[235,4409,269],{"class":248},[235,4411,435],{"class":463},[235,4413,272],{"class":248},[235,4415,4416,4418,4420,4422,4424,4426,4428,4430,4432,4434,4436,4438,4440,4442,4444,4446,4448,4450,4452,4454,4456,4458],{"class":237,"line":908},[235,4417,478],{"class":241},[235,4419,428],{"class":463},[235,4421,494],{"class":252},[235,4423,485],{"class":248},[235,4425,598],{"class":252},[235,4427,601],{"class":248},[235,4429,371],{"class":370},[235,4431,491],{"class":463},[235,4433,608],{"class":241},[235,4435,611],{"class":248},[235,4437,1388],{"class":265},[235,4439,511],{"class":248},[235,4441,494],{"class":252},[235,4443,485],{"class":248},[235,4445,623],{"class":422},[235,4447,502],{"class":252},[235,4449,269],{"class":248},[235,4451,1181],{"class":265},[235,4453,269],{"class":248},[235,4455,435],{"class":252},[235,4457,637],{"class":248},[235,4459,272],{"class":248},[235,4461,4462,4464,4466,4468,4470],{"class":237,"line":922},[235,4463,645],{"class":241},[235,4465,262],{"class":248},[235,4467,1421],{"class":265},[235,4469,269],{"class":248},[235,4471,272],{"class":248},[235,4473,4474],{"class":237,"line":927},[235,4475,660],{"class":248},[235,4477,4478],{"class":237,"line":950},[235,4479,4480],{"class":415},"    \u002F\u002F FormatString infers StringErrorParams automatically\n",[235,4482,4483,4485,4487,4489,4491,4493,4495],{"class":237,"line":968},[235,4484,4021],{"class":422},[235,4486,393],{"class":248},[235,4488,428],{"class":248},[235,4490,432],{"class":431},[235,4492,435],{"class":248},[235,4494,438],{"class":336},[235,4496,409],{"class":248},[235,4498,4499,4501,4503,4505,4507,4509,4511,4513,4515,4518,4520,4522,4524,4526,4528,4530,4532,4534,4536],{"class":237,"line":996},[235,4500,478],{"class":241},[235,4502,428],{"class":463},[235,4504,432],{"class":252},[235,4506,485],{"class":248},[235,4508,488],{"class":252},[235,4510,491],{"class":463},[235,4512,608],{"class":241},[235,4514,611],{"class":248},[235,4516,4517],{"class":265},"Website must be at least ",[235,4519,511],{"class":248},[235,4521,432],{"class":252},[235,4523,485],{"class":248},[235,4525,488],{"class":252},[235,4527,485],{"class":248},[235,4529,522],{"class":252},[235,4531,256],{"class":248},[235,4533,527],{"class":265},[235,4535,505],{"class":248},[235,4537,272],{"class":248},[235,4539,4540,4542,4544,4547,4549],{"class":237,"line":1001},[235,4541,645],{"class":241},[235,4543,262],{"class":248},[235,4545,4546],{"class":265},"Website must be a valid string",[235,4548,269],{"class":248},[235,4550,272],{"class":248},[235,4552,4553],{"class":237,"line":1019},[235,4554,660],{"class":248},[235,4556,4557],{"class":237,"line":1038},[235,4558,1636],{"class":248},[4560,4561,4563],"h3",{"id":4562},"available-error-parameter-types","Available Error Parameter Types",[201,4565,4566],{},"The following error parameter types are automatically inferred based on the branded type:",[4568,4569,4570,4583],"table",{},[4571,4572,4573],"thead",{},[4574,4575,4576,4580],"tr",{},[4577,4578,4579],"th",{},"Type",[4577,4581,4582],{},"Use For",[4584,4585,4586,4598,4609,4620,4632,4644,4656,4668,4680,4692,4703],"tbody",{},[4574,4587,4588,4594],{},[4589,4590,4591],"td",{},[205,4592,4593],{},"StringErrorParams",[4589,4595,4596],{},[205,4597,3528],{},[4574,4599,4600,4605],{},[4589,4601,4602],{},[205,4603,4604],{},"EmailErrorParams",[4589,4606,4607],{},[205,4608,3945],{},[4574,4610,4611,4616],{},[4589,4612,4613],{},[205,4614,4615],{},"UrlErrorParams",[4589,4617,4618],{},[205,4619,3948],{},[4574,4621,4622,4627],{},[4589,4623,4624],{},[205,4625,4626],{},"DomainErrorParams",[4589,4628,4629],{},[205,4630,4631],{},"FormatDomain",[4574,4633,4634,4639],{},[4589,4635,4636],{},[205,4637,4638],{},"IPErrorParams",[4589,4640,4641],{},[205,4642,4643],{},"FormatIP",[4574,4645,4646,4651],{},[4589,4647,4648],{},[205,4649,4650],{},"UUIDErrorParams",[4589,4652,4653],{},[205,4654,4655],{},"FormatUUID",[4574,4657,4658,4663],{},[4589,4659,4660],{},[205,4661,4662],{},"DateTimeErrorParams",[4589,4664,4665],{},[205,4666,4667],{},"FormatStringDateTime",[4574,4669,4670,4675],{},[4589,4671,4672],{},[205,4673,4674],{},"DateErrorParams",[4589,4676,4677],{},[205,4678,4679],{},"FormatStringDate",[4574,4681,4682,4687],{},[4589,4683,4684],{},[205,4685,4686],{},"TimeErrorParams",[4589,4688,4689],{},[205,4690,4691],{},"FormatStringTime",[4574,4693,4694,4699],{},[4589,4695,4696],{},[205,4697,4698],{},"NumberErrorParams",[4589,4700,4701],{},[205,4702,3560],{},[4574,4704,4705,4710],{},[4589,4706,4707],{},[205,4708,4709],{},"BigIntErrorParams",[4589,4711,4712],{},[205,4713,3582],{},[201,4715,4716],{},"All error parameter types also include:",[4718,4719,4720,4738,4747,4753],"ul",{},[4721,4722,4723,4726,4727,4730,4731,1181,4734,4737],"li",{},[205,4724,4725],{},"rtError"," - The full ",[205,4728,4729],{},"RunTypeError"," object for access to ",[205,4732,4733],{},"expected",[205,4735,4736],{},"path",", etc. (last error if multiple)",[4721,4739,4740,4743,4744,4746],{},[205,4741,4742],{},"rtErrors"," - Array of all ",[205,4745,4729],{}," objects for this field (aggregated from all validation failures)",[4721,4748,4749,4752],{},[205,4750,4751],{},"propName"," - The name of the property that failed validation",[4721,4754,4755,4757],{},[205,4756,984],{}," - The array index (for array element errors)",[214,4759,4761],{"id":4760},"important-considerations","Important Considerations",[4560,4763,4765],{"id":4764},"error-aggregation-per-field","Error Aggregation Per Field",[201,4767,4768,4769,630,4771,4773,4774,4776,4777,4780,4781,4784],{},"A single property can fail multiple validation constraints. For example, a string might fail both ",[205,4770,488],{},[205,4772,1271],{}," validations. The ",[205,4775,211],{}," function ",[3953,4778,4779],{},"aggregates all errors per field"," and calls the handler function ",[3953,4782,4783],{},"once per field"," with all failed parameters available.",[201,4786,4787,4788,4790,4791,4793],{},"This means your handler receives all error params at once (e.g., both ",[205,4789,488],{}," AND ",[205,4792,547],{}," if both failed), allowing you to generate a single comprehensive error message.",[201,4795,4796,4797,4799,4800,485],{},"The result object contains a single ",[205,4798,1652],{}," per field. When using the default error printer (no custom handler), multiple error messages are joined with ",[205,4801,4802],{},"'; '",[4560,4804,4806],{"id":4805},"accessing-error-values","Accessing Error Values",[201,4808,4809,4810,1181,4812,4814,4815,4818],{},"Each error parameter (like ",[205,4811,488],{},[205,4813,757],{},", etc.) is a ",[205,4816,4817],{},"TypeFormatError"," object containing:",[4718,4820,4821,4826,4831],{},[4721,4822,4823,4825],{},[205,4824,522],{}," - The constraint value that was violated",[4721,4827,4828,4830],{},[205,4829,2208],{}," - The format name",[4721,4832,4833,4836],{},[205,4834,4835],{},"formatPath"," - Path to the format parameter",[226,4838,4840],{"className":228,"code":4839,"language":230,"meta":231,"style":231},"\u002F\u002F Access the constraint value from error parameters\nconst accessingErrorValues = (failed) => {\n    if (failed.minLength) {\n        const minValue = failed.minLength.val; \u002F\u002F e.g., 5\n        return `Must be at least ${minValue} characters`;\n    }\n    return 'Invalid value';\n};\n",[205,4841,4842,4847,4866,4883,4908,4930,4935,4949],{"__ignoreMap":231},[235,4843,4844],{"class":237,"line":238},[235,4845,4846],{"class":415},"\u002F\u002F Access the constraint value from error parameters\n",[235,4848,4849,4851,4854,4856,4858,4860,4862,4864],{"class":237,"line":275},[235,4850,1764],{"class":336},[235,4852,4853],{"class":252}," accessingErrorValues ",[235,4855,467],{"class":248},[235,4857,428],{"class":248},[235,4859,432],{"class":431},[235,4861,435],{"class":248},[235,4863,438],{"class":336},[235,4865,409],{"class":248},[235,4867,4868,4871,4873,4875,4877,4879,4881],{"class":237,"line":298},[235,4869,4870],{"class":241},"    if",[235,4872,428],{"class":463},[235,4874,432],{"class":252},[235,4876,485],{"class":248},[235,4878,488],{"class":252},[235,4880,491],{"class":463},[235,4882,2098],{"class":248},[235,4884,4885,4887,4890,4892,4895,4897,4899,4901,4903,4905],{"class":237,"line":305},[235,4886,452],{"class":336},[235,4888,4889],{"class":252}," minValue",[235,4891,343],{"class":248},[235,4893,4894],{"class":252}," failed",[235,4896,485],{"class":248},[235,4898,488],{"class":252},[235,4900,485],{"class":248},[235,4902,522],{"class":252},[235,4904,2188],{"class":248},[235,4906,4907],{"class":415}," \u002F\u002F e.g., 5\n",[235,4909,4910,4912,4914,4917,4919,4922,4924,4926,4928],{"class":237,"line":330},[235,4911,645],{"class":241},[235,4913,611],{"class":248},[235,4915,4916],{"class":265},"Must be at least ",[235,4918,511],{"class":248},[235,4920,4921],{"class":252},"minValue",[235,4923,256],{"class":248},[235,4925,527],{"class":265},[235,4927,505],{"class":248},[235,4929,272],{"class":248},[235,4931,4932],{"class":237,"line":377},[235,4933,4934],{"class":248},"    }\n",[235,4936,4937,4940,4942,4945,4947],{"class":237,"line":382},[235,4938,4939],{"class":241},"    return",[235,4941,262],{"class":248},[235,4943,4944],{"class":265},"Invalid value",[235,4946,269],{"class":248},[235,4948,272],{"class":248},[235,4950,4951],{"class":237,"line":412},[235,4952,1636],{"class":248},[4560,4954,4956],{"id":4955},"default-error-printer","Default Error Printer",[201,4958,4959,4960,4962],{},"If no handler is provided for a property, ",[205,4961,211],{}," uses a default error printer and logs a warning to the console. The default messages are technical and not suitable for UI and end users.",[201,4964,4965],{},"Always provide custom handlers for user-facing applications.",[4967,4968,4969,4970,4973],"warning",{},"Default messages look like: ",[205,4971,4972],{},"name: minLength validation failed (expected 5)"," - these are not user-friendly!",[4560,4975,4977],{"id":4976},"root-level-errors","Root Level Errors",[201,4979,4980,4981,4984],{},"In rare cases, validation might fail at the root level (empty path). These errors are stored in a special ",[205,4982,4983],{},"$root"," property:",[226,4986,4988],{"className":228,"code":4987,"language":230,"meta":231,"style":231},"\u002F\u002F Handle root level errors (when path is empty)\nconst validationErrors: Parameters\u003Ctypeof getFriendlyErrors>[0] = [];\nconst result = getFriendlyErrors\u003CUser>(validationErrors, userFriendlyErrors);\nif (result.$root) {\n    console.log('Root errors:', result.$root);\n}\n",[205,4989,4990,4995,5027,5054,5068,5098],{"__ignoreMap":231},[235,4991,4992],{"class":237,"line":238},[235,4993,4994],{"class":415},"\u002F\u002F Handle root level errors (when path is empty)\n",[235,4996,4997,4999,5001,5003,5006,5009,5011,5013,5015,5018,5021,5023,5025],{"class":237,"line":275},[235,4998,1764],{"class":336},[235,5000,2106],{"class":252},[235,5002,393],{"class":248},[235,5004,5005],{"class":339}," Parameters",[235,5007,5008],{"class":248},"\u003Ctypeof",[235,5010,2144],{"class":252},[235,5012,404],{"class":248},[235,5014,354],{"class":252},[235,5016,5017],{"class":370},"0",[235,5019,5020],{"class":252},"] ",[235,5022,467],{"class":248},[235,5024,470],{"class":252},[235,5026,272],{"class":248},[235,5028,5029,5031,5034,5036,5038,5040,5042,5044,5047,5049,5052],{"class":237,"line":298},[235,5030,1764],{"class":336},[235,5032,5033],{"class":252}," result ",[235,5035,467],{"class":248},[235,5037,2144],{"class":422},[235,5039,349],{"class":248},[235,5041,401],{"class":339},[235,5043,404],{"class":248},[235,5045,5046],{"class":252},"(validationErrors",[235,5048,367],{"class":248},[235,5050,5051],{"class":252}," userFriendlyErrors)",[235,5053,272],{"class":248},[235,5055,5056,5058,5061,5063,5066],{"class":237,"line":305},[235,5057,2074],{"class":241},[235,5059,5060],{"class":252}," (result",[235,5062,485],{"class":248},[235,5064,5065],{"class":252},"$root) ",[235,5067,2098],{"class":248},[235,5069,5070,5072,5074,5076,5078,5080,5083,5085,5087,5090,5092,5094,5096],{"class":237,"line":330},[235,5071,2168],{"class":252},[235,5073,485],{"class":248},[235,5075,2173],{"class":422},[235,5077,502],{"class":463},[235,5079,269],{"class":248},[235,5081,5082],{"class":265},"Root errors:",[235,5084,269],{"class":248},[235,5086,367],{"class":248},[235,5088,5089],{"class":252}," result",[235,5091,485],{"class":248},[235,5093,4983],{"class":252},[235,5095,435],{"class":463},[235,5097,272],{"class":248},[235,5099,5100],{"class":237,"line":377},[235,5101,2220],{"class":248},[214,5103,5105],{"id":5104},"advanced-types","Advanced Types",[201,5107,220,5108,5110],{},[205,5109,223],{}," type supports advanced collection types including top-level arrays, Maps, and Sets.",[4560,5112,5114],{"id":5113},"top-level-arrays","Top-Level Arrays",[201,5116,5117,5118,5121,5122,5124],{},"For top-level array types (e.g., ",[205,5119,5120],{},"string[]","), provide a single handler function that receives the ",[205,5123,984],{}," parameter:",[226,5126,5128],{"className":228,"code":5127,"language":230,"meta":231,"style":231},"\u002F**\n * Example 1a: Top-level array of primitives with a single handler function\n * The handler is called for each array item that fails validation\n *\u002F\ntype TagList = string[];\n\nexport const tagListErrors: FriendlyErrors\u003CTagList> = (failed) => {\n    \u002F\u002F failed.index contains the array index that failed\n    const messages: string[] = [];\n    if (failed.minLength) messages.push(`at least ${failed.minLength.val} characters`);\n    if (failed.maxLength) messages.push(`at most ${failed.maxLength.val} characters`);\n    if (messages.length > 0) {\n        return `Tag at index ${failed.index} must be ${messages.join(' and ')}`;\n    }\n    return `Tag at index ${failed.index} must be a valid string`;\n};\n",[205,5129,5130,5135,5140,5145,5150,5165,5169,5201,5206,5224,5272,5320,5340,5384,5388,5412],{"__ignoreMap":231},[235,5131,5132],{"class":237,"line":238},[235,5133,5134],{"class":415},"\u002F**\n",[235,5136,5137],{"class":237,"line":275},[235,5138,5139],{"class":415}," * Example 1a: Top-level array of primitives with a single handler function\n",[235,5141,5142],{"class":237,"line":298},[235,5143,5144],{"class":415}," * The handler is called for each array item that fails validation\n",[235,5146,5147],{"class":237,"line":305},[235,5148,5149],{"class":415}," *\u002F\n",[235,5151,5152,5154,5157,5159,5161,5163],{"class":237,"line":330},[235,5153,1809],{"class":336},[235,5155,5156],{"class":339}," TagList",[235,5158,343],{"class":248},[235,5160,460],{"class":339},[235,5162,1955],{"class":252},[235,5164,272],{"class":248},[235,5166,5167],{"class":237,"line":377},[235,5168,302],{"emptyLinePlaceholder":301},[235,5170,5171,5173,5175,5178,5180,5182,5184,5187,5189,5191,5193,5195,5197,5199],{"class":237,"line":382},[235,5172,333],{"class":241},[235,5174,387],{"class":336},[235,5176,5177],{"class":252}," tagListErrors",[235,5179,393],{"class":248},[235,5181,396],{"class":339},[235,5183,349],{"class":248},[235,5185,5186],{"class":339},"TagList",[235,5188,404],{"class":248},[235,5190,343],{"class":248},[235,5192,428],{"class":248},[235,5194,432],{"class":431},[235,5196,435],{"class":248},[235,5198,438],{"class":336},[235,5200,409],{"class":248},[235,5202,5203],{"class":237,"line":412},[235,5204,5205],{"class":415},"    \u002F\u002F failed.index contains the array index that failed\n",[235,5207,5208,5210,5212,5214,5216,5218,5220,5222],{"class":237,"line":419},[235,5209,2103],{"class":336},[235,5211,455],{"class":252},[235,5213,393],{"class":248},[235,5215,460],{"class":339},[235,5217,464],{"class":463},[235,5219,467],{"class":248},[235,5221,470],{"class":463},[235,5223,272],{"class":248},[235,5225,5226,5228,5230,5232,5234,5236,5238,5240,5242,5244,5246,5248,5250,5252,5254,5256,5258,5260,5262,5264,5266,5268,5270],{"class":237,"line":443},[235,5227,4870],{"class":241},[235,5229,428],{"class":463},[235,5231,432],{"class":252},[235,5233,485],{"class":248},[235,5235,488],{"class":252},[235,5237,491],{"class":463},[235,5239,494],{"class":252},[235,5241,485],{"class":248},[235,5243,499],{"class":422},[235,5245,502],{"class":463},[235,5247,505],{"class":248},[235,5249,508],{"class":265},[235,5251,511],{"class":248},[235,5253,432],{"class":252},[235,5255,485],{"class":248},[235,5257,488],{"class":252},[235,5259,485],{"class":248},[235,5261,522],{"class":252},[235,5263,256],{"class":248},[235,5265,527],{"class":265},[235,5267,505],{"class":248},[235,5269,435],{"class":463},[235,5271,272],{"class":248},[235,5273,5274,5276,5278,5280,5282,5284,5286,5288,5290,5292,5294,5296,5298,5300,5302,5304,5306,5308,5310,5312,5314,5316,5318],{"class":237,"line":449},[235,5275,4870],{"class":241},[235,5277,428],{"class":463},[235,5279,432],{"class":252},[235,5281,485],{"class":248},[235,5283,547],{"class":252},[235,5285,491],{"class":463},[235,5287,494],{"class":252},[235,5289,485],{"class":248},[235,5291,499],{"class":422},[235,5293,502],{"class":463},[235,5295,505],{"class":248},[235,5297,562],{"class":265},[235,5299,511],{"class":248},[235,5301,432],{"class":252},[235,5303,485],{"class":248},[235,5305,547],{"class":252},[235,5307,485],{"class":248},[235,5309,522],{"class":252},[235,5311,256],{"class":248},[235,5313,527],{"class":265},[235,5315,505],{"class":248},[235,5317,435],{"class":463},[235,5319,272],{"class":248},[235,5321,5322,5324,5326,5328,5330,5332,5334,5336,5338],{"class":237,"line":475},[235,5323,4870],{"class":241},[235,5325,428],{"class":463},[235,5327,494],{"class":252},[235,5329,485],{"class":248},[235,5331,598],{"class":252},[235,5333,601],{"class":248},[235,5335,371],{"class":370},[235,5337,491],{"class":463},[235,5339,2098],{"class":248},[235,5341,5342,5344,5346,5349,5351,5353,5355,5357,5359,5362,5364,5366,5368,5370,5372,5374,5376,5378,5380,5382],{"class":237,"line":536},[235,5343,645],{"class":241},[235,5345,611],{"class":248},[235,5347,5348],{"class":265},"Tag at index ",[235,5350,511],{"class":248},[235,5352,432],{"class":252},[235,5354,485],{"class":248},[235,5356,984],{"class":252},[235,5358,256],{"class":248},[235,5360,5361],{"class":265}," must be ",[235,5363,511],{"class":248},[235,5365,494],{"class":252},[235,5367,485],{"class":248},[235,5369,623],{"class":422},[235,5371,502],{"class":252},[235,5373,269],{"class":248},[235,5375,630],{"class":265},[235,5377,269],{"class":248},[235,5379,435],{"class":252},[235,5381,637],{"class":248},[235,5383,272],{"class":248},[235,5385,5386],{"class":237,"line":587},[235,5387,4934],{"class":248},[235,5389,5390,5392,5394,5396,5398,5400,5402,5404,5406,5408,5410],{"class":237,"line":642},[235,5391,4939],{"class":241},[235,5393,611],{"class":248},[235,5395,5348],{"class":265},[235,5397,511],{"class":248},[235,5399,432],{"class":252},[235,5401,485],{"class":248},[235,5403,984],{"class":252},[235,5405,256],{"class":248},[235,5407,989],{"class":265},[235,5409,505],{"class":248},[235,5411,272],{"class":248},[235,5413,5414],{"class":237,"line":657},[235,5415,1636],{"class":248},[201,5417,5418],{},"For arrays of complex objects, provide nested handlers that mirror the object structure:",[226,5420,5422],{"className":228,"code":5421,"language":230,"meta":231,"style":231},"\u002F**\n * Example 1b: Top-level array of complex objects with nested handlers\n * The error map mirrors the structure of the array item type\n *\u002F\ntype UserList = User[];\n\nexport const userListErrors: FriendlyErrors\u003CUserList> = {\n    \u002F\u002F Each property of User gets its own handler\n    name: (failed) => {\n        if (failed.minLength) return `Name must be at least ${failed.minLength.val} characters`;\n        return 'Name is required';\n    },\n    email: (failed) => {\n        return 'Email must be a valid email address';\n    },\n    age: (failed) => {\n        if (failed.min) return `Age must be at least ${failed.min.val}`;\n        if (failed.max) return `Age must be at most ${failed.max.val}`;\n        return 'Age must be a valid number';\n    },\n};\n",[205,5423,5424,5428,5433,5438,5442,5457,5461,5485,5490,5506,5547,5560,5564,5580,5593,5597,5613,5650,5687,5699,5703],{"__ignoreMap":231},[235,5425,5426],{"class":237,"line":238},[235,5427,5134],{"class":415},[235,5429,5430],{"class":237,"line":275},[235,5431,5432],{"class":415}," * Example 1b: Top-level array of complex objects with nested handlers\n",[235,5434,5435],{"class":237,"line":298},[235,5436,5437],{"class":415}," * The error map mirrors the structure of the array item type\n",[235,5439,5440],{"class":237,"line":305},[235,5441,5149],{"class":415},[235,5443,5444,5446,5449,5451,5453,5455],{"class":237,"line":330},[235,5445,1809],{"class":336},[235,5447,5448],{"class":339}," UserList",[235,5450,343],{"class":248},[235,5452,340],{"class":339},[235,5454,1955],{"class":252},[235,5456,272],{"class":248},[235,5458,5459],{"class":237,"line":377},[235,5460,302],{"emptyLinePlaceholder":301},[235,5462,5463,5465,5467,5470,5472,5474,5476,5479,5481,5483],{"class":237,"line":382},[235,5464,333],{"class":241},[235,5466,387],{"class":336},[235,5468,5469],{"class":252}," userListErrors",[235,5471,393],{"class":248},[235,5473,396],{"class":339},[235,5475,349],{"class":248},[235,5477,5478],{"class":339},"UserList",[235,5480,404],{"class":248},[235,5482,343],{"class":248},[235,5484,409],{"class":248},[235,5486,5487],{"class":237,"line":412},[235,5488,5489],{"class":415},"    \u002F\u002F Each property of User gets its own handler\n",[235,5491,5492,5494,5496,5498,5500,5502,5504],{"class":237,"line":419},[235,5493,423],{"class":422},[235,5495,393],{"class":248},[235,5497,428],{"class":248},[235,5499,432],{"class":431},[235,5501,435],{"class":248},[235,5503,438],{"class":336},[235,5505,409],{"class":248},[235,5507,5508,5510,5512,5514,5516,5518,5520,5522,5524,5527,5529,5531,5533,5535,5537,5539,5541,5543,5545],{"class":237,"line":443},[235,5509,478],{"class":241},[235,5511,428],{"class":463},[235,5513,432],{"class":252},[235,5515,485],{"class":248},[235,5517,488],{"class":252},[235,5519,491],{"class":463},[235,5521,608],{"class":241},[235,5523,611],{"class":248},[235,5525,5526],{"class":265},"Name must be at least ",[235,5528,511],{"class":248},[235,5530,432],{"class":252},[235,5532,485],{"class":248},[235,5534,488],{"class":252},[235,5536,485],{"class":248},[235,5538,522],{"class":252},[235,5540,256],{"class":248},[235,5542,527],{"class":265},[235,5544,505],{"class":248},[235,5546,272],{"class":248},[235,5548,5549,5551,5553,5556,5558],{"class":237,"line":449},[235,5550,645],{"class":241},[235,5552,262],{"class":248},[235,5554,5555],{"class":265},"Name is required",[235,5557,269],{"class":248},[235,5559,272],{"class":248},[235,5561,5562],{"class":237,"line":475},[235,5563,660],{"class":248},[235,5565,5566,5568,5570,5572,5574,5576,5578],{"class":237,"line":536},[235,5567,4010],{"class":422},[235,5569,393],{"class":248},[235,5571,428],{"class":248},[235,5573,432],{"class":431},[235,5575,435],{"class":248},[235,5577,438],{"class":336},[235,5579,409],{"class":248},[235,5581,5582,5584,5586,5589,5591],{"class":237,"line":587},[235,5583,645],{"class":241},[235,5585,262],{"class":248},[235,5587,5588],{"class":265},"Email must be a valid email address",[235,5590,269],{"class":248},[235,5592,272],{"class":248},[235,5594,5595],{"class":237,"line":642},[235,5596,660],{"class":248},[235,5598,5599,5601,5603,5605,5607,5609,5611],{"class":237,"line":657},[235,5600,666],{"class":422},[235,5602,393],{"class":248},[235,5604,428],{"class":248},[235,5606,432],{"class":431},[235,5608,435],{"class":248},[235,5610,438],{"class":336},[235,5612,409],{"class":248},[235,5614,5615,5617,5619,5621,5623,5625,5627,5629,5631,5634,5636,5638,5640,5642,5644,5646,5648],{"class":237,"line":663},[235,5616,478],{"class":241},[235,5618,428],{"class":463},[235,5620,432],{"class":252},[235,5622,485],{"class":248},[235,5624,711],{"class":252},[235,5626,491],{"class":463},[235,5628,608],{"class":241},[235,5630,611],{"class":248},[235,5632,5633],{"class":265},"Age must be at least ",[235,5635,511],{"class":248},[235,5637,432],{"class":252},[235,5639,485],{"class":248},[235,5641,711],{"class":252},[235,5643,485],{"class":248},[235,5645,522],{"class":252},[235,5647,637],{"class":248},[235,5649,272],{"class":248},[235,5651,5652,5654,5656,5658,5660,5662,5664,5666,5668,5671,5673,5675,5677,5679,5681,5683,5685],{"class":237,"line":681},[235,5653,478],{"class":241},[235,5655,428],{"class":463},[235,5657,432],{"class":252},[235,5659,485],{"class":248},[235,5661,757],{"class":252},[235,5663,491],{"class":463},[235,5665,608],{"class":241},[235,5667,611],{"class":248},[235,5669,5670],{"class":265},"Age must be at most ",[235,5672,511],{"class":248},[235,5674,432],{"class":252},[235,5676,485],{"class":248},[235,5678,757],{"class":252},[235,5680,485],{"class":248},[235,5682,522],{"class":252},[235,5684,637],{"class":248},[235,5686,272],{"class":248},[235,5688,5689,5691,5693,5695,5697],{"class":237,"line":700},[235,5690,645],{"class":241},[235,5692,262],{"class":248},[235,5694,852],{"class":265},[235,5696,269],{"class":248},[235,5698,272],{"class":248},[235,5700,5701],{"class":237,"line":746},[235,5702,660],{"class":248},[235,5704,5705],{"class":237,"line":792},[235,5706,1636],{"class":248},[4560,5708,5710],{"id":5709},"map-types","Map Types",[201,5712,5713,5714,5717,5718,630,5721,5724],{},"For ",[205,5715,5716],{},"Map\u003CK, V>"," types, use ",[205,5719,5720],{},"$key",[205,5722,5723],{},"$value"," handlers to handle key and value validation errors separately:",[226,5726,5728],{"className":228,"code":5727,"language":230,"meta":231,"style":231},"\u002F**\n * Example 2: Top-level Map with separate $key and $value handlers\n * - $key handler is called for key validation errors\n * - $value handler is called for value validation errors\n *\u002F\ntype UserMap = Map\u003Cstring, User>;\n\nexport const userMapErrors: FriendlyErrors\u003CUserMap> = {\n    \u002F\u002F Handler for key validation errors\n    $key: (failed) => {\n        \u002F\u002F failed.index contains the position in the Map\n        if (failed.minLength) {\n            return `User ID at position ${failed.index} must be at least ${failed.minLength.val} characters`;\n        }\n        return `User ID at position ${failed.index} is invalid`;\n    },\n    \u002F\u002F Handler for value validation errors (can be nested for complex values)\n    $value: {\n        name: (failed) => {\n            if (failed.minLength) return `Name must be at least ${failed.minLength.val} characters`;\n            return 'Name is required';\n        },\n        email: (failed) => {\n            return 'Email must be a valid email address';\n        },\n        age: (failed) => {\n            if (failed.min) return `Age must be at least ${failed.min.val}`;\n            if (failed.max) return `Age must be at most ${failed.max.val}`;\n            return 'Age must be a valid number';\n        },\n    },\n};\n",[205,5729,5730,5734,5739,5744,5749,5753,5775,5779,5803,5808,5825,5830,5846,5888,5893,5918,5922,5927,5936,5953,5993,6005,6009,6025,6037,6041,6058,6094,6130,6142,6146,6150],{"__ignoreMap":231},[235,5731,5732],{"class":237,"line":238},[235,5733,5134],{"class":415},[235,5735,5736],{"class":237,"line":275},[235,5737,5738],{"class":415}," * Example 2: Top-level Map with separate $key and $value handlers\n",[235,5740,5741],{"class":237,"line":298},[235,5742,5743],{"class":415}," * - $key handler is called for key validation errors\n",[235,5745,5746],{"class":237,"line":305},[235,5747,5748],{"class":415}," * - $value handler is called for value validation errors\n",[235,5750,5751],{"class":237,"line":330},[235,5752,5149],{"class":415},[235,5754,5755,5757,5760,5762,5765,5767,5769,5771,5773],{"class":237,"line":377},[235,5756,1809],{"class":336},[235,5758,5759],{"class":339}," UserMap",[235,5761,343],{"class":248},[235,5763,5764],{"class":339}," Map",[235,5766,349],{"class":248},[235,5768,1652],{"class":339},[235,5770,367],{"class":248},[235,5772,340],{"class":339},[235,5774,374],{"class":248},[235,5776,5777],{"class":237,"line":382},[235,5778,302],{"emptyLinePlaceholder":301},[235,5780,5781,5783,5785,5788,5790,5792,5794,5797,5799,5801],{"class":237,"line":412},[235,5782,333],{"class":241},[235,5784,387],{"class":336},[235,5786,5787],{"class":252}," userMapErrors",[235,5789,393],{"class":248},[235,5791,396],{"class":339},[235,5793,349],{"class":248},[235,5795,5796],{"class":339},"UserMap",[235,5798,404],{"class":248},[235,5800,343],{"class":248},[235,5802,409],{"class":248},[235,5804,5805],{"class":237,"line":419},[235,5806,5807],{"class":415},"    \u002F\u002F Handler for key validation errors\n",[235,5809,5810,5813,5815,5817,5819,5821,5823],{"class":237,"line":443},[235,5811,5812],{"class":422},"    $key",[235,5814,393],{"class":248},[235,5816,428],{"class":248},[235,5818,432],{"class":431},[235,5820,435],{"class":248},[235,5822,438],{"class":336},[235,5824,409],{"class":248},[235,5826,5827],{"class":237,"line":449},[235,5828,5829],{"class":415},"        \u002F\u002F failed.index contains the position in the Map\n",[235,5831,5832,5834,5836,5838,5840,5842,5844],{"class":237,"line":475},[235,5833,478],{"class":241},[235,5835,428],{"class":463},[235,5837,432],{"class":252},[235,5839,485],{"class":248},[235,5841,488],{"class":252},[235,5843,491],{"class":463},[235,5845,2098],{"class":248},[235,5847,5848,5850,5852,5855,5857,5859,5861,5863,5865,5868,5870,5872,5874,5876,5878,5880,5882,5884,5886],{"class":237,"line":536},[235,5849,1416],{"class":241},[235,5851,611],{"class":248},[235,5853,5854],{"class":265},"User ID at position ",[235,5856,511],{"class":248},[235,5858,432],{"class":252},[235,5860,485],{"class":248},[235,5862,984],{"class":252},[235,5864,256],{"class":248},[235,5866,5867],{"class":265}," must be at least ",[235,5869,511],{"class":248},[235,5871,432],{"class":252},[235,5873,485],{"class":248},[235,5875,488],{"class":252},[235,5877,485],{"class":248},[235,5879,522],{"class":252},[235,5881,256],{"class":248},[235,5883,527],{"class":265},[235,5885,505],{"class":248},[235,5887,272],{"class":248},[235,5889,5890],{"class":237,"line":587},[235,5891,5892],{"class":248},"        }\n",[235,5894,5895,5897,5899,5901,5903,5905,5907,5909,5911,5914,5916],{"class":237,"line":642},[235,5896,645],{"class":241},[235,5898,611],{"class":248},[235,5900,5854],{"class":265},[235,5902,511],{"class":248},[235,5904,432],{"class":252},[235,5906,485],{"class":248},[235,5908,984],{"class":252},[235,5910,256],{"class":248},[235,5912,5913],{"class":265}," is invalid",[235,5915,505],{"class":248},[235,5917,272],{"class":248},[235,5919,5920],{"class":237,"line":657},[235,5921,660],{"class":248},[235,5923,5924],{"class":237,"line":663},[235,5925,5926],{"class":415},"    \u002F\u002F Handler for value validation errors (can be nested for complex values)\n",[235,5928,5929,5932,5934],{"class":237,"line":681},[235,5930,5931],{"class":463},"    $value",[235,5933,393],{"class":248},[235,5935,409],{"class":248},[235,5937,5938,5941,5943,5945,5947,5949,5951],{"class":237,"line":700},[235,5939,5940],{"class":422},"        name",[235,5942,393],{"class":248},[235,5944,428],{"class":248},[235,5946,432],{"class":431},[235,5948,435],{"class":248},[235,5950,438],{"class":336},[235,5952,409],{"class":248},[235,5954,5955,5957,5959,5961,5963,5965,5967,5969,5971,5973,5975,5977,5979,5981,5983,5985,5987,5989,5991],{"class":237,"line":746},[235,5956,1262],{"class":241},[235,5958,428],{"class":463},[235,5960,432],{"class":252},[235,5962,485],{"class":248},[235,5964,488],{"class":252},[235,5966,491],{"class":463},[235,5968,608],{"class":241},[235,5970,611],{"class":248},[235,5972,5526],{"class":265},[235,5974,511],{"class":248},[235,5976,432],{"class":252},[235,5978,485],{"class":248},[235,5980,488],{"class":252},[235,5982,485],{"class":248},[235,5984,522],{"class":252},[235,5986,256],{"class":248},[235,5988,527],{"class":265},[235,5990,505],{"class":248},[235,5992,272],{"class":248},[235,5994,5995,5997,5999,6001,6003],{"class":237,"line":792},[235,5996,1416],{"class":241},[235,5998,262],{"class":248},[235,6000,5555],{"class":265},[235,6002,269],{"class":248},[235,6004,272],{"class":248},[235,6006,6007],{"class":237,"line":845},[235,6008,1431],{"class":248},[235,6010,6011,6013,6015,6017,6019,6021,6023],{"class":237,"line":859},[235,6012,1224],{"class":422},[235,6014,393],{"class":248},[235,6016,428],{"class":248},[235,6018,432],{"class":431},[235,6020,435],{"class":248},[235,6022,438],{"class":336},[235,6024,409],{"class":248},[235,6026,6027,6029,6031,6033,6035],{"class":237,"line":864},[235,6028,1416],{"class":241},[235,6030,262],{"class":248},[235,6032,5588],{"class":265},[235,6034,269],{"class":248},[235,6036,272],{"class":248},[235,6038,6039],{"class":237,"line":882},[235,6040,1431],{"class":248},[235,6042,6043,6046,6048,6050,6052,6054,6056],{"class":237,"line":908},[235,6044,6045],{"class":422},"        age",[235,6047,393],{"class":248},[235,6049,428],{"class":248},[235,6051,432],{"class":431},[235,6053,435],{"class":248},[235,6055,438],{"class":336},[235,6057,409],{"class":248},[235,6059,6060,6062,6064,6066,6068,6070,6072,6074,6076,6078,6080,6082,6084,6086,6088,6090,6092],{"class":237,"line":922},[235,6061,1262],{"class":241},[235,6063,428],{"class":463},[235,6065,432],{"class":252},[235,6067,485],{"class":248},[235,6069,711],{"class":252},[235,6071,491],{"class":463},[235,6073,608],{"class":241},[235,6075,611],{"class":248},[235,6077,5633],{"class":265},[235,6079,511],{"class":248},[235,6081,432],{"class":252},[235,6083,485],{"class":248},[235,6085,711],{"class":252},[235,6087,485],{"class":248},[235,6089,522],{"class":252},[235,6091,637],{"class":248},[235,6093,272],{"class":248},[235,6095,6096,6098,6100,6102,6104,6106,6108,6110,6112,6114,6116,6118,6120,6122,6124,6126,6128],{"class":237,"line":927},[235,6097,1262],{"class":241},[235,6099,428],{"class":463},[235,6101,432],{"class":252},[235,6103,485],{"class":248},[235,6105,757],{"class":252},[235,6107,491],{"class":463},[235,6109,608],{"class":241},[235,6111,611],{"class":248},[235,6113,5670],{"class":265},[235,6115,511],{"class":248},[235,6117,432],{"class":252},[235,6119,485],{"class":248},[235,6121,757],{"class":252},[235,6123,485],{"class":248},[235,6125,522],{"class":252},[235,6127,637],{"class":248},[235,6129,272],{"class":248},[235,6131,6132,6134,6136,6138,6140],{"class":237,"line":950},[235,6133,1416],{"class":241},[235,6135,262],{"class":248},[235,6137,852],{"class":265},[235,6139,269],{"class":248},[235,6141,272],{"class":248},[235,6143,6144],{"class":237,"line":968},[235,6145,1431],{"class":248},[235,6147,6148],{"class":237,"line":996},[235,6149,660],{"class":248},[235,6151,6152],{"class":237,"line":1001},[235,6153,1636],{"class":248},[1638,6155,220,6156,6158],{},[205,6157,5723],{}," handler can be a nested object for complex value types, or a single function for primitive values.",[4560,6160,6162],{"id":6161},"set-types","Set Types",[201,6164,5713,6165,6168,6169,6172],{},[205,6166,6167],{},"Set\u003CT>"," types, use the ",[205,6170,6171],{},"$item"," handler:",[226,6174,6176],{"className":228,"code":6175,"language":230,"meta":231,"style":231},"\u002F**\n * Example 4a: Top-level Set of primitives with $item handler\n * The $item handler is called for each Set item that fails validation\n *\u002F\ntype RoleSet = Set\u003Cstring>;\n\nexport const roleSetErrors: FriendlyErrors\u003CRoleSet> = {\n    $item: (failed) => {\n        \u002F\u002F failed.index contains the position in the Set\n        if (failed.minLength) {\n            return `Role at position ${failed.index} must be at least ${failed.minLength.val} characters`;\n        }\n        if (failed.maxLength) {\n            return `Role at position ${failed.index} must be at most ${failed.maxLength.val} characters`;\n        }\n        return `Role at position ${failed.index} must be a valid string`;\n    },\n};\n",[205,6177,6178,6182,6187,6192,6196,6214,6218,6242,6259,6264,6280,6321,6325,6341,6382,6386,6410,6414],{"__ignoreMap":231},[235,6179,6180],{"class":237,"line":238},[235,6181,5134],{"class":415},[235,6183,6184],{"class":237,"line":275},[235,6185,6186],{"class":415}," * Example 4a: Top-level Set of primitives with $item handler\n",[235,6188,6189],{"class":237,"line":298},[235,6190,6191],{"class":415}," * The $item handler is called for each Set item that fails validation\n",[235,6193,6194],{"class":237,"line":305},[235,6195,5149],{"class":415},[235,6197,6198,6200,6203,6205,6208,6210,6212],{"class":237,"line":330},[235,6199,1809],{"class":336},[235,6201,6202],{"class":339}," RoleSet",[235,6204,343],{"class":248},[235,6206,6207],{"class":339}," Set",[235,6209,349],{"class":248},[235,6211,1652],{"class":339},[235,6213,374],{"class":248},[235,6215,6216],{"class":237,"line":377},[235,6217,302],{"emptyLinePlaceholder":301},[235,6219,6220,6222,6224,6227,6229,6231,6233,6236,6238,6240],{"class":237,"line":382},[235,6221,333],{"class":241},[235,6223,387],{"class":336},[235,6225,6226],{"class":252}," roleSetErrors",[235,6228,393],{"class":248},[235,6230,396],{"class":339},[235,6232,349],{"class":248},[235,6234,6235],{"class":339},"RoleSet",[235,6237,404],{"class":248},[235,6239,343],{"class":248},[235,6241,409],{"class":248},[235,6243,6244,6247,6249,6251,6253,6255,6257],{"class":237,"line":412},[235,6245,6246],{"class":422},"    $item",[235,6248,393],{"class":248},[235,6250,428],{"class":248},[235,6252,432],{"class":431},[235,6254,435],{"class":248},[235,6256,438],{"class":336},[235,6258,409],{"class":248},[235,6260,6261],{"class":237,"line":419},[235,6262,6263],{"class":415},"        \u002F\u002F failed.index contains the position in the Set\n",[235,6265,6266,6268,6270,6272,6274,6276,6278],{"class":237,"line":443},[235,6267,478],{"class":241},[235,6269,428],{"class":463},[235,6271,432],{"class":252},[235,6273,485],{"class":248},[235,6275,488],{"class":252},[235,6277,491],{"class":463},[235,6279,2098],{"class":248},[235,6281,6282,6284,6286,6289,6291,6293,6295,6297,6299,6301,6303,6305,6307,6309,6311,6313,6315,6317,6319],{"class":237,"line":449},[235,6283,1416],{"class":241},[235,6285,611],{"class":248},[235,6287,6288],{"class":265},"Role at position ",[235,6290,511],{"class":248},[235,6292,432],{"class":252},[235,6294,485],{"class":248},[235,6296,984],{"class":252},[235,6298,256],{"class":248},[235,6300,5867],{"class":265},[235,6302,511],{"class":248},[235,6304,432],{"class":252},[235,6306,485],{"class":248},[235,6308,488],{"class":252},[235,6310,485],{"class":248},[235,6312,522],{"class":252},[235,6314,256],{"class":248},[235,6316,527],{"class":265},[235,6318,505],{"class":248},[235,6320,272],{"class":248},[235,6322,6323],{"class":237,"line":475},[235,6324,5892],{"class":248},[235,6326,6327,6329,6331,6333,6335,6337,6339],{"class":237,"line":536},[235,6328,478],{"class":241},[235,6330,428],{"class":463},[235,6332,432],{"class":252},[235,6334,485],{"class":248},[235,6336,547],{"class":252},[235,6338,491],{"class":463},[235,6340,2098],{"class":248},[235,6342,6343,6345,6347,6349,6351,6353,6355,6357,6359,6362,6364,6366,6368,6370,6372,6374,6376,6378,6380],{"class":237,"line":587},[235,6344,1416],{"class":241},[235,6346,611],{"class":248},[235,6348,6288],{"class":265},[235,6350,511],{"class":248},[235,6352,432],{"class":252},[235,6354,485],{"class":248},[235,6356,984],{"class":252},[235,6358,256],{"class":248},[235,6360,6361],{"class":265}," must be at most ",[235,6363,511],{"class":248},[235,6365,432],{"class":252},[235,6367,485],{"class":248},[235,6369,547],{"class":252},[235,6371,485],{"class":248},[235,6373,522],{"class":252},[235,6375,256],{"class":248},[235,6377,527],{"class":265},[235,6379,505],{"class":248},[235,6381,272],{"class":248},[235,6383,6384],{"class":237,"line":642},[235,6385,5892],{"class":248},[235,6387,6388,6390,6392,6394,6396,6398,6400,6402,6404,6406,6408],{"class":237,"line":657},[235,6389,645],{"class":241},[235,6391,611],{"class":248},[235,6393,6288],{"class":265},[235,6395,511],{"class":248},[235,6397,432],{"class":252},[235,6399,485],{"class":248},[235,6401,984],{"class":252},[235,6403,256],{"class":248},[235,6405,989],{"class":265},[235,6407,505],{"class":248},[235,6409,272],{"class":248},[235,6411,6412],{"class":237,"line":663},[235,6413,660],{"class":248},[235,6415,6416],{"class":237,"line":681},[235,6417,1636],{"class":248},[4560,6419,6421],{"id":6420},"reusable-error-maps","Reusable Error Maps",[201,6423,6424],{},"You can compose error maps by reusing existing maps in nested structures:",[226,6426,6428],{"className":228,"code":6427,"language":230,"meta":231,"style":231},"\u002F**\n * Example 8: Reusable error map for User type\n * This can be used in multiple places where User validation is needed\n *\u002F\nexport const simpleUserErrors: FriendlyErrors\u003CUser> = {\n    name: (failed) => {\n        if (failed.minLength) return `Name must be at least ${failed.minLength.val} characters`;\n        return 'Name is required';\n    },\n    email: (failed) => {\n        return 'Email must be a valid email address';\n    },\n    age: (failed) => {\n        if (failed.min) return `Age must be at least ${failed.min.val}`;\n        if (failed.max) return `Age must be at most ${failed.max.val}`;\n        return 'Age must be a valid number';\n    },\n};\n\n\u002F\u002F ============================================================================\n\u002F\u002F Complex Nested Example with Reusable Maps\n\u002F\u002F ============================================================================\n\n\u002F** Type with deeply nested collections *\u002F\ninterface Organization {\n    name: string;\n    \u002F** Map of department name to list of users *\u002F\n    departments: Map\u003Cstring, User[]>;\n    \u002F** Set of admin user IDs *\u002F\n    adminIds: Set\u003Cstring>;\n}\n\n\u002F**\n * Example 9: Complex nested structure with Map containing arrays of complex objects\n * Demonstrates reusing an existing error map (simpleUserErrors) inside another map\n *\u002F\nexport const organizationErrors: FriendlyErrors\u003COrganization> = {\n    name: (failed) => {\n        if (failed.minLength) return `Organization name must be at least ${failed.minLength.val} characters`;\n        return 'Organization name is required';\n    },\n\n    departments: {\n        $key: (failed) => {\n            return `Department name at position ${failed.index} is invalid`;\n        },\n        \u002F\u002F $value is an array of Users (User[]), so we reuse the simpleUserErrors map\n        \u002F\u002F This demonstrates composing error maps - the nested User properties get their own handlers\n        $value: simpleUserErrors,\n    },\n\n    adminIds: {\n        $item: (failed) => {\n            if (failed.minLength) {\n                return `Admin ID at position ${failed.index} must be at least ${failed.minLength.val} characters`;\n            }\n            return `Admin ID at position ${failed.index} is invalid`;\n        },\n    },\n};\n",[205,6429,6430,6434,6439,6444,6448,6471,6487,6527,6539,6543,6559,6571,6575,6591,6627,6663,6675,6679,6683,6687,6692,6697,6701,6705,6710,6720,6730,6735,6756,6761,6776,6780,6784,6788,6793,6798,6802,6826,6842,6883,6896,6900,6904,6912,6929,6954,6958,6963,6968,6979,6983,6987,6995,7012,7028,7070,7075,7099,7104,7109],{"__ignoreMap":231},[235,6431,6432],{"class":237,"line":238},[235,6433,5134],{"class":415},[235,6435,6436],{"class":237,"line":275},[235,6437,6438],{"class":415}," * Example 8: Reusable error map for User type\n",[235,6440,6441],{"class":237,"line":298},[235,6442,6443],{"class":415}," * This can be used in multiple places where User validation is needed\n",[235,6445,6446],{"class":237,"line":305},[235,6447,5149],{"class":415},[235,6449,6450,6452,6454,6457,6459,6461,6463,6465,6467,6469],{"class":237,"line":330},[235,6451,333],{"class":241},[235,6453,387],{"class":336},[235,6455,6456],{"class":252}," simpleUserErrors",[235,6458,393],{"class":248},[235,6460,396],{"class":339},[235,6462,349],{"class":248},[235,6464,401],{"class":339},[235,6466,404],{"class":248},[235,6468,343],{"class":248},[235,6470,409],{"class":248},[235,6472,6473,6475,6477,6479,6481,6483,6485],{"class":237,"line":377},[235,6474,423],{"class":422},[235,6476,393],{"class":248},[235,6478,428],{"class":248},[235,6480,432],{"class":431},[235,6482,435],{"class":248},[235,6484,438],{"class":336},[235,6486,409],{"class":248},[235,6488,6489,6491,6493,6495,6497,6499,6501,6503,6505,6507,6509,6511,6513,6515,6517,6519,6521,6523,6525],{"class":237,"line":382},[235,6490,478],{"class":241},[235,6492,428],{"class":463},[235,6494,432],{"class":252},[235,6496,485],{"class":248},[235,6498,488],{"class":252},[235,6500,491],{"class":463},[235,6502,608],{"class":241},[235,6504,611],{"class":248},[235,6506,5526],{"class":265},[235,6508,511],{"class":248},[235,6510,432],{"class":252},[235,6512,485],{"class":248},[235,6514,488],{"class":252},[235,6516,485],{"class":248},[235,6518,522],{"class":252},[235,6520,256],{"class":248},[235,6522,527],{"class":265},[235,6524,505],{"class":248},[235,6526,272],{"class":248},[235,6528,6529,6531,6533,6535,6537],{"class":237,"line":412},[235,6530,645],{"class":241},[235,6532,262],{"class":248},[235,6534,5555],{"class":265},[235,6536,269],{"class":248},[235,6538,272],{"class":248},[235,6540,6541],{"class":237,"line":419},[235,6542,660],{"class":248},[235,6544,6545,6547,6549,6551,6553,6555,6557],{"class":237,"line":443},[235,6546,4010],{"class":422},[235,6548,393],{"class":248},[235,6550,428],{"class":248},[235,6552,432],{"class":431},[235,6554,435],{"class":248},[235,6556,438],{"class":336},[235,6558,409],{"class":248},[235,6560,6561,6563,6565,6567,6569],{"class":237,"line":449},[235,6562,645],{"class":241},[235,6564,262],{"class":248},[235,6566,5588],{"class":265},[235,6568,269],{"class":248},[235,6570,272],{"class":248},[235,6572,6573],{"class":237,"line":475},[235,6574,660],{"class":248},[235,6576,6577,6579,6581,6583,6585,6587,6589],{"class":237,"line":536},[235,6578,666],{"class":422},[235,6580,393],{"class":248},[235,6582,428],{"class":248},[235,6584,432],{"class":431},[235,6586,435],{"class":248},[235,6588,438],{"class":336},[235,6590,409],{"class":248},[235,6592,6593,6595,6597,6599,6601,6603,6605,6607,6609,6611,6613,6615,6617,6619,6621,6623,6625],{"class":237,"line":587},[235,6594,478],{"class":241},[235,6596,428],{"class":463},[235,6598,432],{"class":252},[235,6600,485],{"class":248},[235,6602,711],{"class":252},[235,6604,491],{"class":463},[235,6606,608],{"class":241},[235,6608,611],{"class":248},[235,6610,5633],{"class":265},[235,6612,511],{"class":248},[235,6614,432],{"class":252},[235,6616,485],{"class":248},[235,6618,711],{"class":252},[235,6620,485],{"class":248},[235,6622,522],{"class":252},[235,6624,637],{"class":248},[235,6626,272],{"class":248},[235,6628,6629,6631,6633,6635,6637,6639,6641,6643,6645,6647,6649,6651,6653,6655,6657,6659,6661],{"class":237,"line":642},[235,6630,478],{"class":241},[235,6632,428],{"class":463},[235,6634,432],{"class":252},[235,6636,485],{"class":248},[235,6638,757],{"class":252},[235,6640,491],{"class":463},[235,6642,608],{"class":241},[235,6644,611],{"class":248},[235,6646,5670],{"class":265},[235,6648,511],{"class":248},[235,6650,432],{"class":252},[235,6652,485],{"class":248},[235,6654,757],{"class":252},[235,6656,485],{"class":248},[235,6658,522],{"class":252},[235,6660,637],{"class":248},[235,6662,272],{"class":248},[235,6664,6665,6667,6669,6671,6673],{"class":237,"line":657},[235,6666,645],{"class":241},[235,6668,262],{"class":248},[235,6670,852],{"class":265},[235,6672,269],{"class":248},[235,6674,272],{"class":248},[235,6676,6677],{"class":237,"line":663},[235,6678,660],{"class":248},[235,6680,6681],{"class":237,"line":681},[235,6682,1636],{"class":248},[235,6684,6685],{"class":237,"line":700},[235,6686,302],{"emptyLinePlaceholder":301},[235,6688,6689],{"class":237,"line":746},[235,6690,6691],{"class":415},"\u002F\u002F ============================================================================\n",[235,6693,6694],{"class":237,"line":792},[235,6695,6696],{"class":415},"\u002F\u002F Complex Nested Example with Reusable Maps\n",[235,6698,6699],{"class":237,"line":845},[235,6700,6691],{"class":415},[235,6702,6703],{"class":237,"line":859},[235,6704,302],{"emptyLinePlaceholder":301},[235,6706,6707],{"class":237,"line":864},[235,6708,6709],{"class":415},"\u002F** Type with deeply nested collections *\u002F\n",[235,6711,6712,6715,6718],{"class":237,"line":882},[235,6713,6714],{"class":336},"interface",[235,6716,6717],{"class":339}," Organization",[235,6719,409],{"class":248},[235,6721,6722,6724,6726,6728],{"class":237,"line":908},[235,6723,423],{"class":463},[235,6725,393],{"class":248},[235,6727,460],{"class":339},[235,6729,272],{"class":248},[235,6731,6732],{"class":237,"line":922},[235,6733,6734],{"class":415},"    \u002F** Map of department name to list of users *\u002F\n",[235,6736,6737,6740,6742,6744,6746,6748,6750,6752,6754],{"class":237,"line":927},[235,6738,6739],{"class":463},"    departments",[235,6741,393],{"class":248},[235,6743,5764],{"class":339},[235,6745,349],{"class":248},[235,6747,1652],{"class":339},[235,6749,367],{"class":248},[235,6751,340],{"class":339},[235,6753,1955],{"class":252},[235,6755,374],{"class":248},[235,6757,6758],{"class":237,"line":950},[235,6759,6760],{"class":415},"    \u002F** Set of admin user IDs *\u002F\n",[235,6762,6763,6766,6768,6770,6772,6774],{"class":237,"line":968},[235,6764,6765],{"class":463},"    adminIds",[235,6767,393],{"class":248},[235,6769,6207],{"class":339},[235,6771,349],{"class":248},[235,6773,1652],{"class":339},[235,6775,374],{"class":248},[235,6777,6778],{"class":237,"line":996},[235,6779,2220],{"class":248},[235,6781,6782],{"class":237,"line":1001},[235,6783,302],{"emptyLinePlaceholder":301},[235,6785,6786],{"class":237,"line":1019},[235,6787,5134],{"class":415},[235,6789,6790],{"class":237,"line":1038},[235,6791,6792],{"class":415}," * Example 9: Complex nested structure with Map containing arrays of complex objects\n",[235,6794,6795],{"class":237,"line":1073},[235,6796,6797],{"class":415}," * Demonstrates reusing an existing error map (simpleUserErrors) inside another map\n",[235,6799,6800],{"class":237,"line":1108},[235,6801,5149],{"class":415},[235,6803,6804,6806,6808,6811,6813,6815,6817,6820,6822,6824],{"class":237,"line":1143},[235,6805,333],{"class":241},[235,6807,387],{"class":336},[235,6809,6810],{"class":252}," organizationErrors",[235,6812,393],{"class":248},[235,6814,396],{"class":339},[235,6816,349],{"class":248},[235,6818,6819],{"class":339},"Organization",[235,6821,404],{"class":248},[235,6823,343],{"class":248},[235,6825,409],{"class":248},[235,6827,6828,6830,6832,6834,6836,6838,6840],{"class":237,"line":1192},[235,6829,423],{"class":422},[235,6831,393],{"class":248},[235,6833,428],{"class":248},[235,6835,432],{"class":431},[235,6837,435],{"class":248},[235,6839,438],{"class":336},[235,6841,409],{"class":248},[235,6843,6844,6846,6848,6850,6852,6854,6856,6858,6860,6863,6865,6867,6869,6871,6873,6875,6877,6879,6881],{"class":237,"line":1206},[235,6845,478],{"class":241},[235,6847,428],{"class":463},[235,6849,432],{"class":252},[235,6851,485],{"class":248},[235,6853,488],{"class":252},[235,6855,491],{"class":463},[235,6857,608],{"class":241},[235,6859,611],{"class":248},[235,6861,6862],{"class":265},"Organization name must be at least ",[235,6864,511],{"class":248},[235,6866,432],{"class":252},[235,6868,485],{"class":248},[235,6870,488],{"class":252},[235,6872,485],{"class":248},[235,6874,522],{"class":252},[235,6876,256],{"class":248},[235,6878,527],{"class":265},[235,6880,505],{"class":248},[235,6882,272],{"class":248},[235,6884,6885,6887,6889,6892,6894],{"class":237,"line":1211},[235,6886,645],{"class":241},[235,6888,262],{"class":248},[235,6890,6891],{"class":265},"Organization name is required",[235,6893,269],{"class":248},[235,6895,272],{"class":248},[235,6897,6898],{"class":237,"line":1221},[235,6899,660],{"class":248},[235,6901,6902],{"class":237,"line":1239},[235,6903,302],{"emptyLinePlaceholder":301},[235,6905,6906,6908,6910],{"class":237,"line":1259},[235,6907,6739],{"class":463},[235,6909,393],{"class":248},[235,6911,409],{"class":248},[235,6913,6914,6917,6919,6921,6923,6925,6927],{"class":237,"line":1295},[235,6915,6916],{"class":422},"        $key",[235,6918,393],{"class":248},[235,6920,428],{"class":248},[235,6922,432],{"class":431},[235,6924,435],{"class":248},[235,6926,438],{"class":336},[235,6928,409],{"class":248},[235,6930,6931,6933,6935,6938,6940,6942,6944,6946,6948,6950,6952],{"class":237,"line":1330},[235,6932,1416],{"class":241},[235,6934,611],{"class":248},[235,6936,6937],{"class":265},"Department name at position ",[235,6939,511],{"class":248},[235,6941,432],{"class":252},[235,6943,485],{"class":248},[235,6945,984],{"class":252},[235,6947,256],{"class":248},[235,6949,5913],{"class":265},[235,6951,505],{"class":248},[235,6953,272],{"class":248},[235,6955,6956],{"class":237,"line":1365},[235,6957,1431],{"class":248},[235,6959,6960],{"class":237,"line":1413},[235,6961,6962],{"class":415},"        \u002F\u002F $value is an array of Users (User[]), so we reuse the simpleUserErrors map\n",[235,6964,6965],{"class":237,"line":1428},[235,6966,6967],{"class":415},"        \u002F\u002F This demonstrates composing error maps - the nested User properties get their own handlers\n",[235,6969,6970,6973,6975,6977],{"class":237,"line":1434},[235,6971,6972],{"class":463},"        $value",[235,6974,393],{"class":248},[235,6976,6456],{"class":252},[235,6978,947],{"class":248},[235,6980,6981],{"class":237,"line":1452},[235,6982,660],{"class":248},[235,6984,6985],{"class":237,"line":1471},[235,6986,302],{"emptyLinePlaceholder":301},[235,6988,6989,6991,6993],{"class":237,"line":1516},[235,6990,6765],{"class":463},[235,6992,393],{"class":248},[235,6994,409],{"class":248},[235,6996,6997,7000,7002,7004,7006,7008,7010],{"class":237,"line":1561},[235,6998,6999],{"class":422},"        $item",[235,7001,393],{"class":248},[235,7003,428],{"class":248},[235,7005,432],{"class":431},[235,7007,435],{"class":248},[235,7009,438],{"class":336},[235,7011,409],{"class":248},[235,7013,7014,7016,7018,7020,7022,7024,7026],{"class":237,"line":1609},[235,7015,1262],{"class":241},[235,7017,428],{"class":463},[235,7019,432],{"class":252},[235,7021,485],{"class":248},[235,7023,488],{"class":252},[235,7025,491],{"class":463},[235,7027,2098],{"class":248},[235,7029,7030,7033,7035,7038,7040,7042,7044,7046,7048,7050,7052,7054,7056,7058,7060,7062,7064,7066,7068],{"class":237,"line":1623},[235,7031,7032],{"class":241},"                return",[235,7034,611],{"class":248},[235,7036,7037],{"class":265},"Admin ID at position ",[235,7039,511],{"class":248},[235,7041,432],{"class":252},[235,7043,485],{"class":248},[235,7045,984],{"class":252},[235,7047,256],{"class":248},[235,7049,5867],{"class":265},[235,7051,511],{"class":248},[235,7053,432],{"class":252},[235,7055,485],{"class":248},[235,7057,488],{"class":252},[235,7059,485],{"class":248},[235,7061,522],{"class":252},[235,7063,256],{"class":248},[235,7065,527],{"class":265},[235,7067,505],{"class":248},[235,7069,272],{"class":248},[235,7071,7072],{"class":237,"line":1628},[235,7073,7074],{"class":248},"            }\n",[235,7076,7077,7079,7081,7083,7085,7087,7089,7091,7093,7095,7097],{"class":237,"line":1633},[235,7078,1416],{"class":241},[235,7080,611],{"class":248},[235,7082,7037],{"class":265},[235,7084,511],{"class":248},[235,7086,432],{"class":252},[235,7088,485],{"class":248},[235,7090,984],{"class":252},[235,7092,256],{"class":248},[235,7094,5913],{"class":265},[235,7096,505],{"class":248},[235,7098,272],{"class":248},[235,7100,7102],{"class":237,"line":7101},58,[235,7103,1431],{"class":248},[235,7105,7107],{"class":237,"line":7106},59,[235,7108,660],{"class":248},[235,7110,7112],{"class":237,"line":7111},60,[235,7113,1636],{"class":248},[7115,7116,7117],"note",{},"mion's approach provides the most type-safe and flexible solution for transforming validation errors into user-friendly messages, with full support for complex nested types and format-specific error parameters.",[214,7119,7121],{"id":7120},"client-side-validation","Client-Side Validation",[201,7123,7124],{},"The mion client can validate parameters locally before sending requests:",[226,7126,7128],{"className":228,"code":7127,"language":230,"meta":231,"style":231},"import {initClient} from '@mionjs\u002Fclient';\n\n\u002F\u002F importing type only from server\nimport type {MyApi} from '.\u002Fserver.routes.ts';\nimport {isRpcError} from '@mionjs\u002Fcore';\n\nconst {routes, middleFns} = initClient\u003CMyApi>({baseURL: 'http:\u002F\u002Flocalhost:3000'});\n\n\u002F\u002F ========== Result pattern (never throws) ==========\n\u002F\u002F call() always returns a 4-tuple, never throws\n\u002F\u002F [routeResult, routeError, middleFnsResults, middleFnsErrors]\n\n\u002F\u002F calls sayHello route in the server\nconst [sayHello, error] = await routes.users.sayHello({id: '123', name: 'John', surname: 'Doe'}).call();\n\nif (error) {\n    \u002F\u002F in this case the request has failed because the authorization middleFn is missing\n    console.log(error); \u002F\u002F { type: 'validation-error', message: `Invalid params for Route or MiddleFn 'auth'.`}\n\n    if (isRpcError(error)) {\n        \u002F\u002F ... handle the error as required\n    }\n} else {\n    console.log(sayHello); \u002F\u002F Hello John Doe\n}\n\n\u002F\u002F ========== Full 4-tuple with middleFns ==========\n\u002F\u002F call({middleFns: {...}}) returns [routeResult, routeError, middleFnsResults, middleFnsErrors]\nconst [greeting, routeError, middleFnResults, middleFnErrors] = await routes.users\n    .sayHello({id: '123', name: 'John', surname: 'Doe'})\n    .call({\n        middleFns: {\n            auth: middleFns.auth({headers: {Authorization: 'Bearer token'}}),\n        },\n    });\n\nif (routeError) {\n    console.log('Route failed:', routeError.type);\n} else {\n    console.log(greeting); \u002F\u002F Hello John Doe\n}\n\n\u002F\u002F Check middleFn errors\nif (middleFnErrors?.auth) {\n    console.log('Auth middleFn failed:', middleFnErrors.auth.type);\n}\n\n\u002F\u002F Access middleFn results\nconsole.log('MiddleFn results:', middleFnResults);\n\n\u002F\u002F ========== Validation throws errors ==========\n\u002F\u002F Note: typeErrors() is the only method that can throw\n\ntry {\n    \u002F\u002F Validation throws an error when validation fails\n    const errors = await routes.users.sayHello(null as any).typeErrors();\n    console.log(errors); \u002F\u002F [] (empty array if no errors)\n} catch (validationError: any) {\n    console.log(validationError); \u002F\u002F { type: 'validation-error', message: `Invalid params ...`, errorData : {...}}\n}\n",[205,7129,7130,7151,7155,7160,7183,7204,7208,7253,7257,7262,7267,7272,7276,7281,7367,7371,7380,7385,7405,7409,7426,7431,7435,7444,7463,7467,7471,7476,7481,7518,7568,7578,7587,7631,7635,7643,7647,7656,7685,7693,7711,7715,7719,7724,7738,7771,7775,7779,7784,7808,7812,7817,7822,7826,7833,7838,7879,7899,7919,7938],{"__ignoreMap":231},[235,7131,7132,7134,7136,7139,7141,7143,7145,7147,7149],{"class":237,"line":238},[235,7133,242],{"class":241},[235,7135,249],{"class":248},[235,7137,7138],{"class":252},"initClient",[235,7140,256],{"class":248},[235,7142,259],{"class":241},[235,7144,262],{"class":248},[235,7146,291],{"class":265},[235,7148,269],{"class":248},[235,7150,272],{"class":248},[235,7152,7153],{"class":237,"line":275},[235,7154,302],{"emptyLinePlaceholder":301},[235,7156,7157],{"class":237,"line":298},[235,7158,7159],{"class":415},"\u002F\u002F importing type only from server\n",[235,7161,7162,7164,7166,7168,7170,7172,7174,7176,7179,7181],{"class":237,"line":305},[235,7163,242],{"class":241},[235,7165,245],{"class":241},[235,7167,249],{"class":248},[235,7169,314],{"class":252},[235,7171,256],{"class":248},[235,7173,259],{"class":241},[235,7175,262],{"class":248},[235,7177,7178],{"class":265},".\u002Fserver.routes.ts",[235,7180,269],{"class":248},[235,7182,272],{"class":248},[235,7184,7185,7187,7189,7192,7194,7196,7198,7200,7202],{"class":237,"line":330},[235,7186,242],{"class":241},[235,7188,249],{"class":248},[235,7190,7191],{"class":252},"isRpcError",[235,7193,256],{"class":248},[235,7195,259],{"class":241},[235,7197,262],{"class":248},[235,7199,266],{"class":265},[235,7201,269],{"class":248},[235,7203,272],{"class":248},[235,7205,7206],{"class":237,"line":377},[235,7207,302],{"emptyLinePlaceholder":301},[235,7209,7210,7212,7214,7216,7218,7221,7223,7225,7227,7229,7231,7233,7235,7237,7239,7241,7243,7245,7247,7249,7251],{"class":237,"line":382},[235,7211,1764],{"class":336},[235,7213,249],{"class":248},[235,7215,1769],{"class":252},[235,7217,367],{"class":248},[235,7219,7220],{"class":252}," middleFns",[235,7222,256],{"class":248},[235,7224,343],{"class":248},[235,7226,1699],{"class":422},[235,7228,349],{"class":248},[235,7230,314],{"class":339},[235,7232,404],{"class":248},[235,7234,502],{"class":252},[235,7236,1786],{"class":248},[235,7238,1789],{"class":463},[235,7240,393],{"class":248},[235,7242,262],{"class":248},[235,7244,1796],{"class":265},[235,7246,269],{"class":248},[235,7248,256],{"class":248},[235,7250,435],{"class":252},[235,7252,272],{"class":248},[235,7254,7255],{"class":237,"line":412},[235,7256,302],{"emptyLinePlaceholder":301},[235,7258,7259],{"class":237,"line":419},[235,7260,7261],{"class":415},"\u002F\u002F ========== Result pattern (never throws) ==========\n",[235,7263,7264],{"class":237,"line":443},[235,7265,7266],{"class":415},"\u002F\u002F call() always returns a 4-tuple, never throws\n",[235,7268,7269],{"class":237,"line":449},[235,7270,7271],{"class":415},"\u002F\u002F [routeResult, routeError, middleFnsResults, middleFnsErrors]\n",[235,7273,7274],{"class":237,"line":475},[235,7275,302],{"emptyLinePlaceholder":301},[235,7277,7278],{"class":237,"line":536},[235,7279,7280],{"class":415},"\u002F\u002F calls sayHello route in the server\n",[235,7282,7283,7285,7287,7290,7292,7294,7296,7298,7300,7302,7304,7307,7309,7311,7313,7315,7318,7320,7322,7325,7327,7329,7332,7334,7336,7339,7341,7343,7346,7348,7350,7353,7355,7357,7359,7361,7363,7365],{"class":237,"line":587},[235,7284,1764],{"class":336},[235,7286,2027],{"class":248},[235,7288,7289],{"class":252},"sayHello",[235,7291,367],{"class":248},[235,7293,2035],{"class":252},[235,7295,364],{"class":248},[235,7297,343],{"class":248},[235,7299,2042],{"class":241},[235,7301,2045],{"class":252},[235,7303,485],{"class":248},[235,7305,7306],{"class":252},"users",[235,7308,485],{"class":248},[235,7310,7289],{"class":422},[235,7312,502],{"class":252},[235,7314,1786],{"class":248},[235,7316,7317],{"class":463},"id",[235,7319,393],{"class":248},[235,7321,262],{"class":248},[235,7323,7324],{"class":265},"123",[235,7326,269],{"class":248},[235,7328,367],{"class":248},[235,7330,7331],{"class":463}," name",[235,7333,393],{"class":248},[235,7335,262],{"class":248},[235,7337,7338],{"class":265},"John",[235,7340,269],{"class":248},[235,7342,367],{"class":248},[235,7344,7345],{"class":463}," surname",[235,7347,393],{"class":248},[235,7349,262],{"class":248},[235,7351,7352],{"class":265},"Doe",[235,7354,269],{"class":248},[235,7356,256],{"class":248},[235,7358,435],{"class":252},[235,7360,485],{"class":248},[235,7362,2064],{"class":422},[235,7364,2067],{"class":252},[235,7366,272],{"class":248},[235,7368,7369],{"class":237,"line":642},[235,7370,302],{"emptyLinePlaceholder":301},[235,7372,7373,7375,7378],{"class":237,"line":657},[235,7374,2074],{"class":241},[235,7376,7377],{"class":252}," (error) ",[235,7379,2098],{"class":248},[235,7381,7382],{"class":237,"line":663},[235,7383,7384],{"class":415},"    \u002F\u002F in this case the request has failed because the authorization middleFn is missing\n",[235,7386,7387,7389,7391,7393,7395,7398,7400,7402],{"class":237,"line":681},[235,7388,2168],{"class":252},[235,7390,485],{"class":248},[235,7392,2173],{"class":422},[235,7394,502],{"class":463},[235,7396,7397],{"class":252},"error",[235,7399,435],{"class":463},[235,7401,2188],{"class":248},[235,7403,7404],{"class":415}," \u002F\u002F { type: 'validation-error', message: `Invalid params for Route or MiddleFn 'auth'.`}\n",[235,7406,7407],{"class":237,"line":700},[235,7408,302],{"emptyLinePlaceholder":301},[235,7410,7411,7413,7415,7417,7419,7421,7424],{"class":237,"line":746},[235,7412,4870],{"class":241},[235,7414,428],{"class":463},[235,7416,7191],{"class":422},[235,7418,502],{"class":463},[235,7420,7397],{"class":252},[235,7422,7423],{"class":463},")) ",[235,7425,2098],{"class":248},[235,7427,7428],{"class":237,"line":792},[235,7429,7430],{"class":415},"        \u002F\u002F ... handle the error as required\n",[235,7432,7433],{"class":237,"line":845},[235,7434,4934],{"class":248},[235,7436,7437,7439,7442],{"class":237,"line":859},[235,7438,256],{"class":248},[235,7440,7441],{"class":241}," else",[235,7443,409],{"class":248},[235,7445,7446,7448,7450,7452,7454,7456,7458,7460],{"class":237,"line":864},[235,7447,2168],{"class":252},[235,7449,485],{"class":248},[235,7451,2173],{"class":422},[235,7453,502],{"class":463},[235,7455,7289],{"class":252},[235,7457,435],{"class":463},[235,7459,2188],{"class":248},[235,7461,7462],{"class":415}," \u002F\u002F Hello John Doe\n",[235,7464,7465],{"class":237,"line":882},[235,7466,2220],{"class":248},[235,7468,7469],{"class":237,"line":908},[235,7470,302],{"emptyLinePlaceholder":301},[235,7472,7473],{"class":237,"line":922},[235,7474,7475],{"class":415},"\u002F\u002F ========== Full 4-tuple with middleFns ==========\n",[235,7477,7478],{"class":237,"line":927},[235,7479,7480],{"class":415},"\u002F\u002F call({middleFns: {...}}) returns [routeResult, routeError, middleFnsResults, middleFnsErrors]\n",[235,7482,7483,7485,7487,7490,7492,7495,7497,7500,7502,7505,7507,7509,7511,7513,7515],{"class":237,"line":950},[235,7484,1764],{"class":336},[235,7486,2027],{"class":248},[235,7488,7489],{"class":252},"greeting",[235,7491,367],{"class":248},[235,7493,7494],{"class":252}," routeError",[235,7496,367],{"class":248},[235,7498,7499],{"class":252}," middleFnResults",[235,7501,367],{"class":248},[235,7503,7504],{"class":252}," middleFnErrors",[235,7506,364],{"class":248},[235,7508,343],{"class":248},[235,7510,2042],{"class":241},[235,7512,2045],{"class":252},[235,7514,485],{"class":248},[235,7516,7517],{"class":252},"users\n",[235,7519,7520,7523,7525,7527,7529,7531,7533,7535,7537,7539,7541,7543,7545,7547,7549,7551,7553,7555,7557,7559,7561,7563,7565],{"class":237,"line":968},[235,7521,7522],{"class":248},"    .",[235,7524,7289],{"class":422},[235,7526,502],{"class":252},[235,7528,1786],{"class":248},[235,7530,7317],{"class":463},[235,7532,393],{"class":248},[235,7534,262],{"class":248},[235,7536,7324],{"class":265},[235,7538,269],{"class":248},[235,7540,367],{"class":248},[235,7542,7331],{"class":463},[235,7544,393],{"class":248},[235,7546,262],{"class":248},[235,7548,7338],{"class":265},[235,7550,269],{"class":248},[235,7552,367],{"class":248},[235,7554,7345],{"class":463},[235,7556,393],{"class":248},[235,7558,262],{"class":248},[235,7560,7352],{"class":265},[235,7562,269],{"class":248},[235,7564,256],{"class":248},[235,7566,7567],{"class":252},")\n",[235,7569,7570,7572,7574,7576],{"class":237,"line":996},[235,7571,7522],{"class":248},[235,7573,2064],{"class":422},[235,7575,502],{"class":252},[235,7577,2098],{"class":248},[235,7579,7580,7583,7585],{"class":237,"line":1001},[235,7581,7582],{"class":463},"        middleFns",[235,7584,393],{"class":248},[235,7586,409],{"class":248},[235,7588,7589,7592,7594,7596,7598,7601,7603,7605,7608,7610,7612,7615,7617,7619,7622,7624,7627,7629],{"class":237,"line":1019},[235,7590,7591],{"class":463},"            auth",[235,7593,393],{"class":248},[235,7595,7220],{"class":252},[235,7597,485],{"class":248},[235,7599,7600],{"class":422},"auth",[235,7602,502],{"class":252},[235,7604,1786],{"class":248},[235,7606,7607],{"class":463},"headers",[235,7609,393],{"class":248},[235,7611,249],{"class":248},[235,7613,7614],{"class":463},"Authorization",[235,7616,393],{"class":248},[235,7618,262],{"class":248},[235,7620,7621],{"class":265},"Bearer token",[235,7623,269],{"class":248},[235,7625,7626],{"class":248},"}}",[235,7628,435],{"class":252},[235,7630,947],{"class":248},[235,7632,7633],{"class":237,"line":1038},[235,7634,1431],{"class":248},[235,7636,7637,7639,7641],{"class":237,"line":1073},[235,7638,3904],{"class":248},[235,7640,435],{"class":252},[235,7642,272],{"class":248},[235,7644,7645],{"class":237,"line":1108},[235,7646,302],{"emptyLinePlaceholder":301},[235,7648,7649,7651,7654],{"class":237,"line":1143},[235,7650,2074],{"class":241},[235,7652,7653],{"class":252}," (routeError) ",[235,7655,2098],{"class":248},[235,7657,7658,7660,7662,7664,7666,7668,7671,7673,7675,7677,7679,7681,7683],{"class":237,"line":1192},[235,7659,2168],{"class":252},[235,7661,485],{"class":248},[235,7663,2173],{"class":422},[235,7665,502],{"class":463},[235,7667,269],{"class":248},[235,7669,7670],{"class":265},"Route failed:",[235,7672,269],{"class":248},[235,7674,367],{"class":248},[235,7676,7494],{"class":252},[235,7678,485],{"class":248},[235,7680,1809],{"class":252},[235,7682,435],{"class":463},[235,7684,272],{"class":248},[235,7686,7687,7689,7691],{"class":237,"line":1206},[235,7688,256],{"class":248},[235,7690,7441],{"class":241},[235,7692,409],{"class":248},[235,7694,7695,7697,7699,7701,7703,7705,7707,7709],{"class":237,"line":1211},[235,7696,2168],{"class":252},[235,7698,485],{"class":248},[235,7700,2173],{"class":422},[235,7702,502],{"class":463},[235,7704,7489],{"class":252},[235,7706,435],{"class":463},[235,7708,2188],{"class":248},[235,7710,7462],{"class":415},[235,7712,7713],{"class":237,"line":1221},[235,7714,2220],{"class":248},[235,7716,7717],{"class":237,"line":1239},[235,7718,302],{"emptyLinePlaceholder":301},[235,7720,7721],{"class":237,"line":1259},[235,7722,7723],{"class":415},"\u002F\u002F Check middleFn errors\n",[235,7725,7726,7728,7731,7733,7736],{"class":237,"line":1295},[235,7727,2074],{"class":241},[235,7729,7730],{"class":252}," (middleFnErrors",[235,7732,2080],{"class":248},[235,7734,7735],{"class":252},"auth) ",[235,7737,2098],{"class":248},[235,7739,7740,7742,7744,7746,7748,7750,7753,7755,7757,7759,7761,7763,7765,7767,7769],{"class":237,"line":1330},[235,7741,2168],{"class":252},[235,7743,485],{"class":248},[235,7745,2173],{"class":422},[235,7747,502],{"class":463},[235,7749,269],{"class":248},[235,7751,7752],{"class":265},"Auth middleFn failed:",[235,7754,269],{"class":248},[235,7756,367],{"class":248},[235,7758,7504],{"class":252},[235,7760,485],{"class":248},[235,7762,7600],{"class":252},[235,7764,485],{"class":248},[235,7766,1809],{"class":252},[235,7768,435],{"class":463},[235,7770,272],{"class":248},[235,7772,7773],{"class":237,"line":1365},[235,7774,2220],{"class":248},[235,7776,7777],{"class":237,"line":1413},[235,7778,302],{"emptyLinePlaceholder":301},[235,7780,7781],{"class":237,"line":1428},[235,7782,7783],{"class":415},"\u002F\u002F Access middleFn results\n",[235,7785,7786,7788,7790,7792,7794,7796,7799,7801,7803,7806],{"class":237,"line":1434},[235,7787,2273],{"class":252},[235,7789,485],{"class":248},[235,7791,2173],{"class":422},[235,7793,502],{"class":252},[235,7795,269],{"class":248},[235,7797,7798],{"class":265},"MiddleFn results:",[235,7800,269],{"class":248},[235,7802,367],{"class":248},[235,7804,7805],{"class":252}," middleFnResults)",[235,7807,272],{"class":248},[235,7809,7810],{"class":237,"line":1452},[235,7811,302],{"emptyLinePlaceholder":301},[235,7813,7814],{"class":237,"line":1471},[235,7815,7816],{"class":415},"\u002F\u002F ========== Validation throws errors ==========\n",[235,7818,7819],{"class":237,"line":1516},[235,7820,7821],{"class":415},"\u002F\u002F Note: typeErrors() is the only method that can throw\n",[235,7823,7824],{"class":237,"line":1561},[235,7825,302],{"emptyLinePlaceholder":301},[235,7827,7828,7831],{"class":237,"line":1609},[235,7829,7830],{"class":241},"try",[235,7832,409],{"class":248},[235,7834,7835],{"class":237,"line":1623},[235,7836,7837],{"class":415},"    \u002F\u002F Validation throws an error when validation fails\n",[235,7839,7840,7842,7845,7847,7849,7851,7853,7855,7857,7859,7861,7864,7866,7869,7871,7873,7875,7877],{"class":237,"line":1628},[235,7841,2103],{"class":336},[235,7843,7844],{"class":252}," errors",[235,7846,343],{"class":248},[235,7848,2042],{"class":241},[235,7850,2045],{"class":252},[235,7852,485],{"class":248},[235,7854,7306],{"class":252},[235,7856,485],{"class":248},[235,7858,7289],{"class":422},[235,7860,502],{"class":463},[235,7862,7863],{"class":248},"null",[235,7865,1918],{"class":241},[235,7867,7868],{"class":339}," any",[235,7870,435],{"class":463},[235,7872,485],{"class":248},[235,7874,2120],{"class":422},[235,7876,2067],{"class":463},[235,7878,272],{"class":248},[235,7880,7881,7883,7885,7887,7889,7892,7894,7896],{"class":237,"line":1633},[235,7882,2168],{"class":252},[235,7884,485],{"class":248},[235,7886,2173],{"class":422},[235,7888,502],{"class":463},[235,7890,7891],{"class":252},"errors",[235,7893,435],{"class":463},[235,7895,2188],{"class":248},[235,7897,7898],{"class":415}," \u002F\u002F [] (empty array if no errors)\n",[235,7900,7901,7903,7906,7908,7911,7913,7915,7917],{"class":237,"line":7101},[235,7902,256],{"class":248},[235,7904,7905],{"class":241}," catch",[235,7907,428],{"class":248},[235,7909,7910],{"class":431},"validationError",[235,7912,393],{"class":248},[235,7914,7868],{"class":339},[235,7916,435],{"class":248},[235,7918,409],{"class":248},[235,7920,7921,7923,7925,7927,7929,7931,7933,7935],{"class":237,"line":7106},[235,7922,2168],{"class":252},[235,7924,485],{"class":248},[235,7926,2173],{"class":422},[235,7928,502],{"class":463},[235,7930,7910],{"class":252},[235,7932,435],{"class":463},[235,7934,2188],{"class":248},[235,7936,7937],{"class":415}," \u002F\u002F { type: 'validation-error', message: `Invalid params ...`, errorData : {...}}\n",[235,7939,7940],{"class":237,"line":7111},[235,7941,2220],{"class":248},[201,7943,7944],{},"This allows you to catch validation errors before making network requests, improving user experience and reducing server load.",[7946,7947,7948],"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 .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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);}",{"title":231,"searchDepth":275,"depth":275,"links":7950},[7951,7952,7953,7956,7962,7968],{"id":216,"depth":275,"text":217},{"id":1643,"depth":275,"text":1644},{"id":3938,"depth":275,"text":3939,"children":7954},[7955],{"id":4562,"depth":298,"text":4563},{"id":4760,"depth":275,"text":4761,"children":7957},[7958,7959,7960,7961],{"id":4764,"depth":298,"text":4765},{"id":4805,"depth":298,"text":4806},{"id":4955,"depth":298,"text":4956},{"id":4976,"depth":298,"text":4977},{"id":5104,"depth":275,"text":5105,"children":7963},[7964,7965,7966,7967],{"id":5113,"depth":298,"text":5114},{"id":5709,"depth":298,"text":5710},{"id":6161,"depth":298,"text":6162},{"id":6420,"depth":298,"text":6421},{"id":7120,"depth":275,"text":7121},"Transform validation errors into user-friendly messages for frontend applications.","md",null,{},{"title":89,"description":7969},"8oQCTVWniHpWdmzFdldtUL5mSyDSlOmbD-u3Rif9GwU",[7976,7978],{"title":50,"path":86,"stem":87,"description":7977,"children":-1},"Learn how to handle errors in the mion client using the Result pattern.",{"title":93,"path":94,"stem":95,"description":7979,"children":-1},"Client-orchestrated queries that batch and compose API calls in a single request — a type-safe, deterministic alternative to GraphQL.",1778674528181]