[{"data":1,"prerenderedAt":2270},["ShallowReactive",2],{"navLinks":3,"sidebar_docs_navigation_\u002Fdocs\u002Futils":64,"navigation":263,"navLinks_footer":835,"\u002Fdocs\u002Futils\u002Fshared\u002Fvalidatezodschema_page":848,"\u002Fdocs\u002Futils\u002Fshared\u002Fvalidatezodschema_surround":1669,"\u002Fdocs\u002Futils\u002Fshared\u002Fvalidatezodschema":1672},{"id":4,"extension":5,"links":6,"meta":61,"stem":62,"__hash__":63},"navigationMenu\u002Fnavigation.json","json",[7,52,57],{"nested":8,"label":9,"icon":10,"to":11,"children":12},true,"Docs","i-lucide-book-open","\u002Fdocs\u002Fgetting-started",[13,19,26,32,39,45],{"label":14,"icon":15,"to":11,"description":16,"github":17,"badge":18},"Getting Started","i-lucide-rocket","An introduction to help you understand the core components.","https:\u002F\u002Fgithub.com\u002FSergo706\u002Fdocshub","Start Here",{"label":20,"icon":21,"to":22,"description":23,"github":24,"badge":25},"Auth H3 Client","i-lucide-key-round","\u002Fdocs\u002Fauth-h3client","Seamlessly enforce OAuth 2.0 authentication and session management integrated directly as the client of the IAM module.","https:\u002F\u002Fgithub.com\u002FSergo706\u002Fauth-h3client","Core",{"label":27,"icon":28,"to":29,"description":30,"github":31,"badge":25},"IAM","i-lucide-shield-check","\u002Fdocs\u002Fiam","Identity and Access Management featuring granular roles, permissions, and security policies.","https:\u002F\u002Fgithub.com\u002FSergo706\u002Fauth",{"label":33,"icon":34,"to":35,"description":36,"github":37,"badge":38},"Bot Detection","i-lucide-cpu","\u002Fdocs\u002Fbot-detection","Advanced behavioral analysis and request fingerprinting to stop malicious automated traffic.","https:\u002F\u002Fgithub.com\u002FSergo706\u002Fbot-detector","Security",{"label":40,"icon":41,"to":42,"description":43,"github":44,"badge":38},"Shield Base","i-lucide-database-zap","\u002Fdocs\u002Fshield-base","CLI and programmatic toolkit for compiling offline-ready IP intelligence databases from BGP, GeoIP, Tor, FireHOL, and other public threat feeds.","https:\u002F\u002Fgithub.com\u002FSergo706\u002Fshield-base-cli",{"label":46,"icon":47,"to":48,"description":49,"github":50,"badge":51},"Utils","i-lucide-wrench","\u002Fdocs\u002Futils","A standard library of highly optimized helpers for formatting, validation, and core logic.","https:\u002F\u002Fgithub.com\u002FSergo706\u002Futils","Library",{"nested":53,"label":54,"icon":55,"to":56},false,"Blog","i-lucide-pen-line","\u002Fblog",{"nested":53,"label":58,"icon":59,"to":60},"Website","lucide:app-window-mac","https:\u002F\u002Friavzon.com",{},"navigation","gkaQ0xRGxSLrLyM3kttLe0oBwkrR1EBjlepF8LSbwF8",[65],{"title":9,"path":66,"stem":67,"children":68,"page":53},"\u002Fdocs","docs",[69],{"title":70,"path":48,"stem":71,"children":72},"Utilities","docs\u002Futils\u002Findex",[73,74,91,124,221],{"title":70,"path":48,"stem":71},{"title":75,"path":76,"stem":77,"children":78,"page":53},"Eslint","\u002Fdocs\u002Futils\u002Feslint","docs\u002Futils\u002Feslint",[79,83,87],{"title":80,"path":81,"stem":82},"React Config","\u002Fdocs\u002Futils\u002Feslint\u002Freact","docs\u002Futils\u002Feslint\u002Freact",{"title":84,"path":85,"stem":86},"TypeScript Config","\u002Fdocs\u002Futils\u002Feslint\u002Ftypescript","docs\u002Futils\u002Feslint\u002Ftypescript",{"title":88,"path":89,"stem":90},"Vue Config","\u002Fdocs\u002Futils\u002Feslint\u002Fvue","docs\u002Futils\u002Feslint\u002Fvue",{"title":92,"path":93,"stem":94,"children":95,"page":53},"Server","\u002Fdocs\u002Futils\u002Fserver","docs\u002Futils\u002Fserver",[96,100,104,108,112,116,120],{"title":97,"path":98,"stem":99},"Encryption","\u002Fdocs\u002Futils\u002Fserver\u002Fencryption","docs\u002Futils\u002Fserver\u002Fencryption",{"title":101,"path":102,"stem":103},"Path Resolver","\u002Fdocs\u002Futils\u002Fserver\u002Fpathresolver","docs\u002Futils\u002Fserver\u002FpathResolver",{"title":105,"path":106,"stem":107},"File Replacements","\u002Fdocs\u002Futils\u002Fserver\u002Freplace","docs\u002Futils\u002Fserver\u002Freplace",{"title":109,"path":110,"stem":111},"run","\u002Fdocs\u002Futils\u002Fserver\u002Frun","docs\u002Futils\u002Fserver\u002Frun",{"title":113,"path":114,"stem":115},"scheduleTask","\u002Fdocs\u002Futils\u002Fserver\u002Fscheduletask","docs\u002Futils\u002Fserver\u002FscheduleTask",{"title":117,"path":118,"stem":119},"spawnRun","\u002Fdocs\u002Futils\u002Fserver\u002Fspawnrun","docs\u002Futils\u002Fserver\u002FspawnRun",{"title":121,"path":122,"stem":123},"uploadCsv","\u002Fdocs\u002Futils\u002Fserver\u002Fuploadcsv","docs\u002Futils\u002Fserver\u002FuploadCsv",{"title":125,"path":126,"stem":127,"children":128,"page":53},"Shared","\u002Fdocs\u002Futils\u002Fshared","docs\u002Futils\u002Fshared",[129,133,137,141,145,149,153,157,161,165,169,173,177,181,185,189,193,197,201,205,209,213,217],{"title":130,"path":131,"stem":132},"BatchQueue","\u002Fdocs\u002Futils\u002Fshared\u002Fbatchqueue","docs\u002Futils\u002Fshared\u002FbatchQueue",{"title":134,"path":135,"stem":136},"capitalize","\u002Fdocs\u002Futils\u002Fshared\u002Fcapitalize","docs\u002Futils\u002Fshared\u002Fcapitalize",{"title":138,"path":139,"stem":140},"chunkProcess","\u002Fdocs\u002Futils\u002Fshared\u002Fchunkprocess","docs\u002Futils\u002Fshared\u002FchunkProcess",{"title":142,"path":143,"stem":144},"cleanObject","\u002Fdocs\u002Futils\u002Fshared\u002Fcleanobject","docs\u002Futils\u002Fshared\u002FcleanObject",{"title":146,"path":147,"stem":148},"createConfigManager","\u002Fdocs\u002Futils\u002Fshared\u002Fconfigurationdefiner","docs\u002Futils\u002Fshared\u002FconfigurationDefiner",{"title":150,"path":151,"stem":152},"debounce","\u002Fdocs\u002Futils\u002Fshared\u002Fdebounce","docs\u002Futils\u002Fshared\u002Fdebounce",{"title":154,"path":155,"stem":156},"ensureArray","\u002Fdocs\u002Futils\u002Fshared\u002Fensurearray","docs\u002Futils\u002Fshared\u002FensureArray",{"title":158,"path":159,"stem":160},"fetchWithRetry","\u002Fdocs\u002Futils\u002Fshared\u002Ffetchwithretry","docs\u002Futils\u002Fshared\u002FfetchWithRetry",{"title":162,"path":163,"stem":164},"filterEmptyValues","\u002Fdocs\u002Futils\u002Fshared\u002Ffilteremptyvalues","docs\u002Futils\u002Fshared\u002FfilterEmptyValues",{"title":166,"path":167,"stem":168},"findStringsInObject","\u002Fdocs\u002Futils\u002Fshared\u002Ffindobjectvalues","docs\u002Futils\u002Fshared\u002FfindObjectValues",{"title":170,"path":171,"stem":172},"fisherYatesShuffle","\u002Fdocs\u002Futils\u002Fshared\u002Ffisheryatesshuffle","docs\u002Futils\u002Fshared\u002FfisherYatesShuffle",{"title":174,"path":175,"stem":176},"getRandomImage","\u002Fdocs\u002Futils\u002Fshared\u002Fgetrandomimage","docs\u002Futils\u002Fshared\u002FgetRandomImage",{"title":178,"path":179,"stem":180},"isObjectHasValues","\u002Fdocs\u002Futils\u002Fshared\u002Fisobjecthasvalues","docs\u002Futils\u002Fshared\u002FisObjectHasValues",{"title":182,"path":183,"stem":184},"isAsyncOrPromise","\u002Fdocs\u002Futils\u002Fshared\u002Fispromise","docs\u002Futils\u002Fshared\u002FisPromise",{"title":186,"path":187,"stem":188},"MiniCache","\u002Fdocs\u002Futils\u002Fshared\u002Fminicache","docs\u002Futils\u002Fshared\u002FminiCache",{"title":190,"path":191,"stem":192},"parseCookies","\u002Fdocs\u002Futils\u002Fshared\u002Fparserawcookies","docs\u002Futils\u002Fshared\u002FparseRawCookies",{"title":194,"path":195,"stem":196},"safeAction","\u002Fdocs\u002Futils\u002Fshared\u002Fpromiselocker","docs\u002Futils\u002Fshared\u002FpromiseLocker",{"title":198,"path":199,"stem":200},"Random","\u002Fdocs\u002Futils\u002Fshared\u002Frandom","docs\u002Futils\u002Fshared\u002Frandom",{"title":202,"path":203,"stem":204},"range","\u002Fdocs\u002Futils\u002Fshared\u002Frange","docs\u002Futils\u002Fshared\u002Frange",{"title":206,"path":207,"stem":208},"rateLimiters","\u002Fdocs\u002Futils\u002Fshared\u002Fratelimiters","docs\u002Futils\u002Fshared\u002FrateLimiters",{"title":210,"path":211,"stem":212},"safeObjectMerge","\u002Fdocs\u002Futils\u002Fshared\u002Fsafemerge","docs\u002Futils\u002Fshared\u002FsafeMerge",{"title":214,"path":215,"stem":216},"textTruncation","\u002Fdocs\u002Futils\u002Fshared\u002Ftexttruncation","docs\u002Futils\u002Fshared\u002FtextTruncation",{"title":218,"path":219,"stem":220},"validateZodSchema","\u002Fdocs\u002Futils\u002Fshared\u002Fvalidatezodschema","docs\u002Futils\u002Fshared\u002FvalidateZodSchema",{"title":222,"path":223,"stem":224,"children":225},"Utility Types","\u002Fdocs\u002Futils\u002Ftypes","docs\u002Futils\u002Ftypes\u002Findex",[226,227,231,235,239,243,247,251,255,259],{"title":222,"path":223,"stem":224},{"title":228,"path":229,"stem":230},"Brand","\u002Fdocs\u002Futils\u002Ftypes\u002Fbrand","docs\u002Futils\u002Ftypes\u002FBrand",{"title":232,"path":233,"stem":234},"DeepPartial","\u002Fdocs\u002Futils\u002Ftypes\u002Fdeeppartial","docs\u002Futils\u002Ftypes\u002FDeepPartial",{"title":236,"path":237,"stem":238},"Merge","\u002Fdocs\u002Futils\u002Ftypes\u002Fmerge","docs\u002Futils\u002Ftypes\u002FMerge",{"title":240,"path":241,"stem":242},"NonNullable","\u002Fdocs\u002Futils\u002Ftypes\u002Fnonnullable","docs\u002Futils\u002Ftypes\u002FNonNullable",{"title":244,"path":245,"stem":246},"Prettify","\u002Fdocs\u002Futils\u002Ftypes\u002Fprettify","docs\u002Futils\u002Ftypes\u002FPrettify",{"title":248,"path":249,"stem":250},"PromiseType","\u002Fdocs\u002Futils\u002Ftypes\u002Fpromisetype","docs\u002Futils\u002Ftypes\u002FPromiseType",{"title":252,"path":253,"stem":254},"RequireKeys","\u002Fdocs\u002Futils\u002Ftypes\u002Frequirekeys","docs\u002Futils\u002Ftypes\u002FRequireKeys",{"title":256,"path":257,"stem":258},"StandardResponse","\u002Fdocs\u002Futils\u002Ftypes\u002Fstandardresponse","docs\u002Futils\u002Ftypes\u002FStandardResponse",{"title":260,"path":261,"stem":262},"ValueOf","\u002Fdocs\u002Futils\u002Ftypes\u002Fvalueof","docs\u002Futils\u002Ftypes\u002FValueOf",[264],{"title":9,"path":66,"stem":67,"children":265,"page":53},[266,413,531,536,714,781],{"title":20,"path":22,"stem":267,"children":268},"docs\u002Fauth-h3client\u002Findex",[269,270,279,316,342,364,367,388,392],{"title":20,"path":22,"stem":267},{"title":14,"path":271,"stem":272,"children":273},"\u002Fdocs\u002Fauth-h3client\u002Fgetting-started","docs\u002Fauth-h3client\u002F00.getting-started\u002Findex",[274,275],{"title":14,"path":271,"stem":272},{"title":276,"path":277,"stem":278},"Nuxt Module","\u002Fdocs\u002Fauth-h3client\u002Fgetting-started\u002Fnuxt","docs\u002Fauth-h3client\u002F00.getting-started\u002F00.nuxt",{"title":280,"path":281,"stem":282,"children":283},"Essentials","\u002Fdocs\u002Fauth-h3client\u002Fessentials","docs\u002Fauth-h3client\u002F01.essentials\u002Findex",[284,285,289,293,297,301,305,308,312],{"title":280,"path":281,"stem":282},{"title":286,"path":287,"stem":288},"Session Management","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fsession","docs\u002Fauth-h3client\u002F01.essentials\u002F00.session",{"title":290,"path":291,"stem":292},"Route Protection","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Froute-protection","docs\u002Fauth-h3client\u002F01.essentials\u002F01.route-protection",{"title":294,"path":295,"stem":296},"CSRF Protection","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fcsrf","docs\u002Fauth-h3client\u002F01.essentials\u002F02.csrf",{"title":298,"path":299,"stem":300},"Auth Flows","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fauth-flows","docs\u002Fauth-h3client\u002F01.essentials\u002F03.auth-flows",{"title":302,"path":303,"stem":304},"OAuth and OIDC","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Foauth","docs\u002Fauth-h3client\u002F01.essentials\u002F04.oauth",{"title":33,"path":306,"stem":307},"\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fbot-detection","docs\u002Fauth-h3client\u002F01.essentials\u002F05.bot-detection",{"title":309,"path":310,"stem":311},"Cookies","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fcookies","docs\u002Fauth-h3client\u002F01.essentials\u002F06.cookies",{"title":313,"path":314,"stem":315},"Logging","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Flogging","docs\u002Fauth-h3client\u002F01.essentials\u002F07.logging",{"title":317,"path":318,"stem":319,"children":320},"MFA","\u002Fdocs\u002Fauth-h3client\u002Fmfa","docs\u002Fauth-h3client\u002F02.mfa\u002Findex",[321,322,326,330,334,338],{"title":317,"path":318,"stem":319},{"title":323,"path":324,"stem":325},"Built-in MFA","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fbuilt-in-flow","docs\u002Fauth-h3client\u002F02.mfa\u002F01.built-in-flow",{"title":327,"path":328,"stem":329},"Password Reset","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fpassword-reset","docs\u002Fauth-h3client\u002F02.mfa\u002F02.password-reset",{"title":331,"path":332,"stem":333},"Email Change","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Femail-change","docs\u002Fauth-h3client\u002F02.mfa\u002F03.email-change",{"title":335,"path":336,"stem":337},"Custom MFA Flow","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fcustom-flow","docs\u002Fauth-h3client\u002F02.mfa\u002F04.custom-flow",{"title":339,"path":340,"stem":341},"Client-Side MFA","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fclient-side","docs\u002Fauth-h3client\u002F02.mfa\u002F05.client-side",{"title":343,"path":344,"stem":345,"children":346},"Client-side","\u002Fdocs\u002Fauth-h3client\u002Fclient","docs\u002Fauth-h3client\u002F03.client\u002Findex",[347,348,352,356,360],{"title":343,"path":344,"stem":345},{"title":349,"path":350,"stem":351},"useAuthData","\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fuse-auth-data","docs\u002Fauth-h3client\u002F03.client\u002F00.use-auth-data",{"title":353,"path":354,"stem":355},"useMagicLink","\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fuse-magic-link","docs\u002Fauth-h3client\u002F03.client\u002F01.use-magic-link",{"title":357,"path":358,"stem":359},"executeRequest","\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fexecute-request","docs\u002Fauth-h3client\u002F03.client\u002F02.execute-request",{"title":361,"path":362,"stem":363},"getCsrfToken","\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fget-csrf-token","docs\u002Fauth-h3client\u002F03.client\u002F03.get-csrf-token",{"title":38,"path":365,"stem":366},"\u002Fdocs\u002Fauth-h3client\u002Fsecurity","docs\u002Fauth-h3client\u002F04.security",{"title":368,"path":369,"stem":370,"children":371,"page":53},"Guides","\u002Fdocs\u002Fauth-h3client\u002Fguides","docs\u002Fauth-h3client\u002F05.guides",[372,376,380,384],{"title":373,"path":374,"stem":375},"H3 and Nitro Setup","\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fh3-nitro","docs\u002Fauth-h3client\u002F05.guides\u002F00.h3-nitro",{"title":377,"path":378,"stem":379},"HMAC Inter-service Auth","\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fhmac","docs\u002Fauth-h3client\u002F05.guides\u002Fhmac",{"title":381,"path":382,"stem":383},"Image Upload","\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fimage-upload","docs\u002Fauth-h3client\u002F05.guides\u002Fimage-upload",{"title":385,"path":386,"stem":387},"mTLS Configuration","\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fmtls","docs\u002Fauth-h3client\u002F05.guides\u002Fmtls",{"title":389,"path":390,"stem":391},"Configuration","\u002Fdocs\u002Fauth-h3client\u002Fconfiguration","docs\u002Fauth-h3client\u002F06.configuration",{"title":393,"path":394,"stem":395,"children":396},"API Reference","\u002Fdocs\u002Fauth-h3client\u002Fapi","docs\u002Fauth-h3client\u002F07.api\u002Findex",[397,398,402,406,410],{"title":393,"path":394,"stem":395},{"title":399,"path":400,"stem":401},"Routes Reference","\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Fcontrollers","docs\u002Fauth-h3client\u002F07.api\u002F00.controllers",{"title":403,"path":404,"stem":405},"Middleware Reference","\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Fmiddleware","docs\u002Fauth-h3client\u002F07.api\u002F01.middleware",{"title":407,"path":408,"stem":409},"Client-side Reference","\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Fcomposables","docs\u002Fauth-h3client\u002F07.api\u002F02.composables",{"title":70,"path":411,"stem":412},"\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Futilities","docs\u002Fauth-h3client\u002F07.api\u002F03.utilities",{"title":414,"path":35,"stem":415,"children":416},"Bot Detector","docs\u002Fbot-detection\u002Findex",[417,418,421,425,429,448,522,525,528],{"title":414,"path":35,"stem":415},{"title":14,"path":419,"stem":420},"\u002Fdocs\u002Fbot-detection\u002Fgetting-started","docs\u002Fbot-detection\u002F00.getting-started",{"title":422,"path":423,"stem":424},"CLI","\u002Fdocs\u002Fbot-detection\u002Fcli","docs\u002Fbot-detection\u002F01.cli",{"title":426,"path":427,"stem":428},"Data Sources","\u002Fdocs\u002Fbot-detection\u002Fdata-sources","docs\u002Fbot-detection\u002F02.data-sources",{"title":368,"path":430,"stem":431,"children":432,"page":53},"\u002Fdocs\u002Fbot-detection\u002Fguides","docs\u002Fbot-detection\u002F03.guides",[433,437,441,444],{"title":434,"path":435,"stem":436},"Custom Checkers","\u002Fdocs\u002Fbot-detection\u002Fguides\u002Fcustom","docs\u002Fbot-detection\u002F03.guides\u002FCUSTOM",{"title":438,"path":439,"stem":440},"Scheduling Database Generation","\u002Fdocs\u002Fbot-detection\u002Fguides\u002Fgenerate","docs\u002Fbot-detection\u002F03.guides\u002FGENERATE",{"title":313,"path":442,"stem":443},"\u002Fdocs\u002Fbot-detection\u002Fguides\u002Flogging","docs\u002Fbot-detection\u002F03.guides\u002FLOGGING",{"title":445,"path":446,"stem":447},"Score Modes and Reputation Healing","\u002Fdocs\u002Fbot-detection\u002Fguides\u002Fscore","docs\u002Fbot-detection\u002F03.guides\u002FSCORE",{"title":449,"path":450,"stem":451,"children":452},"Checkers","\u002Fdocs\u002Fbot-detection\u002Fcheckers","docs\u002Fbot-detection\u002F04.checkers\u002Findex",[453,454,458,462,466,470,474,478,482,486,490,494,498,502,506,510,514,518],{"title":449,"path":450,"stem":451},{"title":455,"path":456,"stem":457},"IP Validation","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fip-validation","docs\u002Fbot-detection\u002F04.checkers\u002F01.ip-validation",{"title":459,"path":460,"stem":461},"Good \u002F Bad Bot Verification","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fgood-bots","docs\u002Fbot-detection\u002F04.checkers\u002F02.good-bots",{"title":463,"path":464,"stem":465},"Browser & Device Fingerprint","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fbrowser-device","docs\u002Fbot-detection\u002F04.checkers\u002F03.browser-device",{"title":467,"path":468,"stem":469},"Locale Map","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Flocale-map","docs\u002Fbot-detection\u002F04.checkers\u002F04.locale-map",{"title":471,"path":472,"stem":473},"Known Threats","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fknown-threats","docs\u002Fbot-detection\u002F04.checkers\u002F05.known-threats",{"title":475,"path":476,"stem":477},"ASN Classification","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fasn-classification","docs\u002Fbot-detection\u002F04.checkers\u002F06.asn-classification",{"title":479,"path":480,"stem":481},"Tor Analysis","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Ftor-analysis","docs\u002Fbot-detection\u002F04.checkers\u002F07.tor-analysis",{"title":483,"path":484,"stem":485},"Timezone Consistency","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Ftimezone-consistency","docs\u002Fbot-detection\u002F04.checkers\u002F08.timezone-consistency",{"title":487,"path":488,"stem":489},"Honeypot","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fhoneypot","docs\u002Fbot-detection\u002F04.checkers\u002F09.honeypot",{"title":491,"path":492,"stem":493},"Known Bad IPs","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fknown-bad-ips","docs\u002Fbot-detection\u002F04.checkers\u002F10.known-bad-ips",{"title":495,"path":496,"stem":497},"Behavior Rate","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fbehavior-rate","docs\u002Fbot-detection\u002F04.checkers\u002F11.behavior-rate",{"title":499,"path":500,"stem":501},"Proxy \u002F ISP \u002F Cookie","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fproxy-isp-cookies","docs\u002Fbot-detection\u002F04.checkers\u002F12.proxy-isp-cookies",{"title":503,"path":504,"stem":505},"Session Coherence","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fsession-coherence","docs\u002Fbot-detection\u002F04.checkers\u002F13.session-coherence",{"title":507,"path":508,"stem":509},"Velocity Fingerprint","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fvelocity-fingerprint","docs\u002Fbot-detection\u002F04.checkers\u002F14.velocity-fingerprint",{"title":511,"path":512,"stem":513},"UA & Header Analysis","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fua-header","docs\u002Fbot-detection\u002F04.checkers\u002F15.ua-header",{"title":515,"path":516,"stem":517},"Geolocation","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fgeolocation","docs\u002Fbot-detection\u002F04.checkers\u002F16.geolocation",{"title":519,"path":520,"stem":521},"Known Bad User-Agents","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fknown-bad-ua","docs\u002Fbot-detection\u002F04.checkers\u002F17.known-bad-ua",{"title":38,"path":523,"stem":524},"\u002Fdocs\u002Fbot-detection\u002Fsecurity","docs\u002Fbot-detection\u002F04.security",{"title":393,"path":526,"stem":527},"\u002Fdocs\u002Fbot-detection\u002Fapi","docs\u002Fbot-detection\u002F05.api",{"title":389,"path":529,"stem":530},"\u002Fdocs\u002Fbot-detection\u002Fconfiguration","docs\u002Fbot-detection\u002F06.configuration",{"title":532,"path":11,"stem":533,"children":534},"Introduction","docs\u002Fgetting-started\u002Findex",[535],{"title":532,"path":11,"stem":533},{"title":27,"path":29,"stem":537,"children":538},"docs\u002Fiam\u002Findex",[539,540,543,678,681,697,700],{"title":27,"path":29,"stem":537},{"title":14,"path":541,"stem":542},"\u002Fdocs\u002Fiam\u002Fgetting-started","docs\u002Fiam\u002F00.getting-started",{"title":280,"path":544,"stem":545,"children":546},"\u002Fdocs\u002Fiam\u002Fessentials","docs\u002Fiam\u002F01.essentials\u002Findex",[547,548,552,556,560,564,568,572,576,580,584,588,591,595,599,603,607,610,614,618,621,625,628],{"title":280,"path":544,"stem":545},{"title":549,"path":550,"stem":551},"Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Ftokens","docs\u002Fiam\u002F01.essentials\u002F00.tokens",{"title":553,"path":554,"stem":555},"Access Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Faccess-tokens","docs\u002Fiam\u002F01.essentials\u002F01.access-tokens",{"title":557,"path":558,"stem":559},"Refresh Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Frefresh-tokens","docs\u002Fiam\u002F01.essentials\u002F02.refresh-tokens",{"title":561,"path":562,"stem":563},"Anomaly Detection","\u002Fdocs\u002Fiam\u002Fessentials\u002Fanomalies","docs\u002Fiam\u002F01.essentials\u002F03.anomalies",{"title":565,"path":566,"stem":567},"Signup","\u002Fdocs\u002Fiam\u002Fessentials\u002Fsignup","docs\u002Fiam\u002F01.essentials\u002F04.signup",{"title":569,"path":570,"stem":571},"Login","\u002Fdocs\u002Fiam\u002Fessentials\u002Flogin","docs\u002Fiam\u002F01.essentials\u002F05.login",{"title":573,"path":574,"stem":575},"Logout","\u002Fdocs\u002Fiam\u002Fessentials\u002Flogout","docs\u002Fiam\u002F01.essentials\u002F06.logout",{"title":577,"path":578,"stem":579},"OAuth","\u002Fdocs\u002Fiam\u002Fessentials\u002Foauth","docs\u002Fiam\u002F01.essentials\u002F07.oauth",{"title":581,"path":582,"stem":583},"Magic Links","\u002Fdocs\u002Fiam\u002Fessentials\u002Fmagic-links","docs\u002Fiam\u002F01.essentials\u002F08.magic-links",{"title":585,"path":586,"stem":587},"Emails","\u002Fdocs\u002Fiam\u002Fessentials\u002Femails","docs\u002Fiam\u002F01.essentials\u002F09.emails",{"title":317,"path":589,"stem":590},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fmfa","docs\u002Fiam\u002F01.essentials\u002F10.mfa",{"title":592,"path":593,"stem":594},"Fingerprinting","\u002Fdocs\u002Fiam\u002Fessentials\u002Ffingerprinting","docs\u002Fiam\u002F01.essentials\u002F11.fingerprinting",{"title":596,"path":597,"stem":598},"Backend for Frontend","\u002Fdocs\u002Fiam\u002Fessentials\u002Fbff","docs\u002Fiam\u002F01.essentials\u002F12.bff",{"title":600,"path":601,"stem":602},"HMAC Authentication","\u002Fdocs\u002Fiam\u002Fessentials\u002Fhmac","docs\u002Fiam\u002F01.essentials\u002F13.hmac",{"title":604,"path":605,"stem":606},"XSS Protection","\u002Fdocs\u002Fiam\u002Fessentials\u002Fxss","docs\u002Fiam\u002F01.essentials\u002F14.xss",{"title":313,"path":608,"stem":609},"\u002Fdocs\u002Fiam\u002Fessentials\u002Flogging","docs\u002Fiam\u002F01.essentials\u002F15.logging",{"title":611,"path":612,"stem":613},"Rate Limiting","\u002Fdocs\u002Fiam\u002Fessentials\u002Frate-limiting","docs\u002Fiam\u002F01.essentials\u002F16.rate-limiting",{"title":615,"path":616,"stem":617},"Database","\u002Fdocs\u002Fiam\u002Fessentials\u002Fdatabase","docs\u002Fiam\u002F01.essentials\u002F17.database",{"title":309,"path":619,"stem":620},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fcookies","docs\u002Fiam\u002F01.essentials\u002F18.cookies",{"title":622,"path":623,"stem":624},"Service Startup","\u002Fdocs\u002Fiam\u002Fessentials\u002Fservice","docs\u002Fiam\u002F01.essentials\u002F19.service",{"title":327,"path":626,"stem":627},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fpassword-reset","docs\u002Fiam\u002F01.essentials\u002F20.password-reset",{"title":629,"path":630,"stem":631,"children":632},"API Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi","docs\u002Fiam\u002F01.essentials\u002F21.api\u002Findex",[633,634,638,642,672,675],{"title":629,"path":630,"stem":631},{"title":635,"path":636,"stem":637},"Creating Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fcreation","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F00.creation",{"title":639,"path":640,"stem":641},"Verifying Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fverification","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F01.verification",{"title":643,"path":644,"stem":645,"children":646},"Manage Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002Findex",[647,648,652,656,660,664,668],{"title":643,"path":644,"stem":645},{"title":649,"path":650,"stem":651},"Privileges","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Fprivilege","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F00.privilege",{"title":653,"path":654,"stem":655},"Revocation","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Frevocation","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F01.revocation",{"title":657,"path":658,"stem":659},"Rotation","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Frotation","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F02.rotation",{"title":661,"path":662,"stem":663},"IP Restriction","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Fip-updates","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F03.ip-updates",{"title":665,"path":666,"stem":667},"Metadata","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Fmetadata","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F04.metadata",{"title":669,"path":670,"stem":671},"Token Listing","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Flist","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F05.list",{"title":611,"path":673,"stem":674},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Frate-limiting","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F03.rate-limiting",{"title":38,"path":676,"stem":677},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fsecurity","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F04.security",{"title":38,"path":679,"stem":680},"\u002Fdocs\u002Fiam\u002Fsecurity","docs\u002Fiam\u002F02.security",{"title":368,"path":682,"stem":683,"children":684,"page":53},"\u002Fdocs\u002Fiam\u002Fguides","docs\u002Fiam\u002F03.guides",[685,689,693],{"title":686,"path":687,"stem":688},"Deployment","\u002Fdocs\u002Fiam\u002Fguides\u002Fdeployment","docs\u002Fiam\u002F03.guides\u002Fdeployment",{"title":690,"path":691,"stem":692},"Operation Scripts","\u002Fdocs\u002Fiam\u002Fguides\u002Foperation-scripts","docs\u002Fiam\u002F03.guides\u002Foperation-scripts",{"title":694,"path":695,"stem":696},"Role-Based Access Control","\u002Fdocs\u002Fiam\u002Fguides\u002Frbac","docs\u002Fiam\u002F03.guides\u002Frbac",{"title":389,"path":698,"stem":699},"\u002Fdocs\u002Fiam\u002Fconfiguration","docs\u002Fiam\u002F04.configuration",{"title":701,"path":702,"stem":703,"children":704,"page":53},"Api","\u002Fdocs\u002Fiam\u002Fapi","docs\u002Fiam\u002F05.API",[705,708,711],{"title":393,"path":706,"stem":707},"\u002Fdocs\u002Fiam\u002Fapi\u002Fapi","docs\u002Fiam\u002F05.API\u002F00.api",{"title":403,"path":709,"stem":710},"\u002Fdocs\u002Fiam\u002Fapi\u002Fmiddlewares","docs\u002Fiam\u002F05.API\u002F02.middlewares",{"title":399,"path":712,"stem":713},"\u002Fdocs\u002Fiam\u002Fapi\u002Froutes","docs\u002Fiam\u002F05.API\u002F03.routes",{"title":40,"path":42,"stem":715,"children":716},"docs\u002Fshield-base\u002Findex",[717,718,721,725,766,770,774,778],{"title":40,"path":42,"stem":715},{"title":14,"path":719,"stem":720},"\u002Fdocs\u002Fshield-base\u002Fgetting-started","docs\u002Fshield-base\u002F00.getting-started",{"title":722,"path":723,"stem":724},"CLI Reference","\u002Fdocs\u002Fshield-base\u002Fcli","docs\u002Fshield-base\u002F01.cli",{"title":426,"path":726,"stem":727,"children":728},"\u002Fdocs\u002Fshield-base\u002Fdata-sources","docs\u002Fshield-base\u002F02.data-sources\u002Findex",[729,730,734,738,742,746,750,754,758,762],{"title":426,"path":726,"stem":727},{"title":731,"path":732,"stem":733},"BGP \u002F ASN","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fbgp","docs\u002Fshield-base\u002F02.data-sources\u002Fbgp",{"title":735,"path":736,"stem":737},"City Geolocation","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fcity","docs\u002Fshield-base\u002F02.data-sources\u002Fcity",{"title":739,"path":740,"stem":741},"Country Geolocation","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fcountry","docs\u002Fshield-base\u002F02.data-sources\u002Fcountry",{"title":743,"path":744,"stem":745},"Verified Crawlers","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fcrawlers","docs\u002Fshield-base\u002F02.data-sources\u002Fcrawlers",{"title":747,"path":748,"stem":749},"Disposable Emails","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Femail","docs\u002Fshield-base\u002F02.data-sources\u002Femail",{"title":751,"path":752,"stem":753},"FireHOL Threat Intelligence","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Ffirehol","docs\u002Fshield-base\u002F02.data-sources\u002Ffirehol",{"title":755,"path":756,"stem":757},"Proxy Detection","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fproxy","docs\u002Fshield-base\u002F02.data-sources\u002Fproxy",{"title":759,"path":760,"stem":761},"Tor Nodes","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Ftor","docs\u002Fshield-base\u002F02.data-sources\u002Ftor",{"title":763,"path":764,"stem":765},"Suspicious User-Agents","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fuseragent","docs\u002Fshield-base\u002F02.data-sources\u002Fuseragent",{"title":767,"path":768,"stem":769},"Programmatic Usage","\u002Fdocs\u002Fshield-base\u002Fusage","docs\u002Fshield-base\u002F03.usage",{"title":771,"path":772,"stem":773},"Custom Data Sources","\u002Fdocs\u002Fshield-base\u002Fcustom-data-sources","docs\u002Fshield-base\u002F04.custom-data-sources",{"title":775,"path":776,"stem":777},"TypeScript Types","\u002Fdocs\u002Fshield-base\u002Ftypes","docs\u002Fshield-base\u002F05.types",{"title":393,"path":779,"stem":780},"\u002Fdocs\u002Fshield-base\u002Fapi","docs\u002Fshield-base\u002F06.api",{"title":70,"path":48,"stem":71,"children":782},[783,784,789,798,823],{"title":70,"path":48,"stem":71},{"title":75,"path":76,"stem":77,"children":785,"page":53},[786,787,788],{"title":80,"path":81,"stem":82},{"title":84,"path":85,"stem":86},{"title":88,"path":89,"stem":90},{"title":92,"path":93,"stem":94,"children":790,"page":53},[791,792,793,794,795,796,797],{"title":97,"path":98,"stem":99},{"title":101,"path":102,"stem":103},{"title":105,"path":106,"stem":107},{"title":109,"path":110,"stem":111},{"title":113,"path":114,"stem":115},{"title":117,"path":118,"stem":119},{"title":121,"path":122,"stem":123},{"title":125,"path":126,"stem":127,"children":799,"page":53},[800,801,802,803,804,805,806,807,808,809,810,811,812,813,814,815,816,817,818,819,820,821,822],{"title":130,"path":131,"stem":132},{"title":134,"path":135,"stem":136},{"title":138,"path":139,"stem":140},{"title":142,"path":143,"stem":144},{"title":146,"path":147,"stem":148},{"title":150,"path":151,"stem":152},{"title":154,"path":155,"stem":156},{"title":158,"path":159,"stem":160},{"title":162,"path":163,"stem":164},{"title":166,"path":167,"stem":168},{"title":170,"path":171,"stem":172},{"title":174,"path":175,"stem":176},{"title":178,"path":179,"stem":180},{"title":182,"path":183,"stem":184},{"title":186,"path":187,"stem":188},{"title":190,"path":191,"stem":192},{"title":194,"path":195,"stem":196},{"title":198,"path":199,"stem":200},{"title":202,"path":203,"stem":204},{"title":206,"path":207,"stem":208},{"title":210,"path":211,"stem":212},{"title":214,"path":215,"stem":216},{"title":218,"path":219,"stem":220},{"title":222,"path":223,"stem":224,"children":824},[825,826,827,828,829,830,831,832,833,834],{"title":222,"path":223,"stem":224},{"title":228,"path":229,"stem":230},{"title":232,"path":233,"stem":234},{"title":236,"path":237,"stem":238},{"title":240,"path":241,"stem":242},{"title":244,"path":245,"stem":246},{"title":248,"path":249,"stem":250},{"title":252,"path":253,"stem":254},{"title":256,"path":257,"stem":258},{"title":260,"path":261,"stem":262},{"id":4,"extension":5,"links":836,"meta":847,"stem":62,"__hash__":63},[837,845,846],{"nested":8,"label":9,"icon":10,"to":11,"children":838},[839,840,841,842,843,844],{"label":14,"icon":15,"to":11,"description":16,"github":17,"badge":18},{"label":20,"icon":21,"to":22,"description":23,"github":24,"badge":25},{"label":27,"icon":28,"to":29,"description":30,"github":31,"badge":25},{"label":33,"icon":34,"to":35,"description":36,"github":37,"badge":38},{"label":40,"icon":41,"to":42,"description":43,"github":44,"badge":38},{"label":46,"icon":47,"to":48,"description":49,"github":50,"badge":51},{"nested":53,"label":54,"icon":55,"to":56},{"nested":53,"label":58,"icon":59,"to":60},{},{"id":849,"title":218,"body":850,"description":1662,"extension":1663,"icon":28,"meta":1664,"module":1665,"navigation":8,"path":219,"rawbody":1666,"seo":1667,"stem":220,"__hash__":1668},"docs\u002Fdocs\u002Futils\u002Fshared\u002FvalidateZodSchema.md",{"type":851,"value":852,"toc":1656},"minimark",[853,879,886,891,1138,1142,1222,1226,1229,1276,1280,1652],[854,855,856,857,860,861,868,869,872,873,878],"p",{},"The ",[858,859,218],"code",{}," utility is a wrapper around ",[862,863,867],"a",{"href":864,"rel":865},"https:\u002F\u002Fzod.dev\u002F",[866],"nofollow","Zod","'s ",[858,870,871],{},"safeParse"," method, integrated with ",[862,874,877],{"href":875,"rel":876},"https:\u002F\u002Fgetpino.io\u002F",[866],"Pino"," for logging.",[854,880,881,882,885],{},"It simplifies the validation flow by automatically logging errors and transforming complex Zod issue arrays into a flat, friendly ",[858,883,884],{},"errors"," object. This makes it ideal for API request validation where you need to return clear error messages to the frontend while keeping detailed logs on the server.",[887,888,890],"h2",{"id":889},"definition","Definition",[892,893,899],"pre",{"className":894,"code":895,"filename":896,"language":897,"meta":898,"style":898},"language-ts shiki shiki-themes light-plus light-plus dracula","import { ZodType, ZodSafeParseSuccess } from 'zod';\nimport pino from 'pino';\n\ninterface CustomValidationError {\n    valid: false;\n    errors: Record\u003Cstring, string>\n}\n\nexport function validateZodSchema\u003CT, Input>(\n    schema: ZodType\u003CT, Input>,\n    data: Input,\n    log: pino.Logger\n): ZodSafeParseSuccess\u003CT> | CustomValidationError\n","validateZodSchema.ts","ts","",[858,900,901,944,964,970,984,999,1023,1029,1034,1061,1084,1098,1114],{"__ignoreMap":898},[902,903,906,910,914,918,921,924,927,930,934,938,941],"span",{"class":904,"line":905},"line",1,[902,907,909],{"class":908},"sZ328","import",[902,911,913],{"class":912},"sDd4n"," { ",[902,915,917],{"class":916},"sjsA6","ZodType",[902,919,920],{"class":912},", ",[902,922,923],{"class":916},"ZodSafeParseSuccess",[902,925,926],{"class":912}," } ",[902,928,929],{"class":908},"from",[902,931,933],{"class":932},"sFkSl"," '",[902,935,937],{"class":936},"sFB1V","zod",[902,939,940],{"class":932},"'",[902,942,943],{"class":912},";\n",[902,945,947,949,952,955,957,960,962],{"class":904,"line":946},2,[902,948,909],{"class":908},[902,950,951],{"class":916}," pino",[902,953,954],{"class":908}," from",[902,956,933],{"class":932},[902,958,959],{"class":936},"pino",[902,961,940],{"class":932},[902,963,943],{"class":912},[902,965,967],{"class":904,"line":966},3,[902,968,969],{"emptyLinePlaceholder":8},"\n",[902,971,973,977,981],{"class":904,"line":972},4,[902,974,976],{"class":975},"sl46w","interface",[902,978,980],{"class":979},"sFs1U"," CustomValidationError",[902,982,983],{"class":912}," {\n",[902,985,987,990,994,997],{"class":904,"line":986},5,[902,988,989],{"class":916},"    valid",[902,991,993],{"class":992},"saOXh",":",[902,995,996],{"class":979}," false",[902,998,943],{"class":912},[902,1000,1002,1005,1007,1010,1013,1016,1018,1020],{"class":904,"line":1001},6,[902,1003,1004],{"class":916},"    errors",[902,1006,993],{"class":992},[902,1008,1009],{"class":979}," Record",[902,1011,1012],{"class":912},"\u003C",[902,1014,1015],{"class":979},"string",[902,1017,920],{"class":912},[902,1019,1015],{"class":979},[902,1021,1022],{"class":912},">\n",[902,1024,1026],{"class":904,"line":1025},7,[902,1027,1028],{"class":912},"}\n",[902,1030,1032],{"class":904,"line":1031},8,[902,1033,969],{"emptyLinePlaceholder":8},[902,1035,1037,1040,1043,1047,1049,1053,1055,1058],{"class":904,"line":1036},9,[902,1038,1039],{"class":908},"export",[902,1041,1042],{"class":975}," function",[902,1044,1046],{"class":1045},"sHOzp"," validateZodSchema",[902,1048,1012],{"class":912},[902,1050,1052],{"class":1051},"sW-rI","T",[902,1054,920],{"class":912},[902,1056,1057],{"class":1051},"Input",[902,1059,1060],{"class":912},">(\n",[902,1062,1064,1068,1070,1073,1075,1077,1079,1081],{"class":904,"line":1063},10,[902,1065,1067],{"class":1066},"sygFZ","    schema",[902,1069,993],{"class":992},[902,1071,1072],{"class":979}," ZodType",[902,1074,1012],{"class":912},[902,1076,1052],{"class":1051},[902,1078,920],{"class":912},[902,1080,1057],{"class":1051},[902,1082,1083],{"class":912},">,\n",[902,1085,1087,1090,1092,1095],{"class":904,"line":1086},11,[902,1088,1089],{"class":1066},"    data",[902,1091,993],{"class":992},[902,1093,1094],{"class":979}," Input",[902,1096,1097],{"class":912},",\n",[902,1099,1101,1104,1106,1108,1111],{"class":904,"line":1100},12,[902,1102,1103],{"class":1066},"    log",[902,1105,993],{"class":992},[902,1107,951],{"class":979},[902,1109,1110],{"class":912},".",[902,1112,1113],{"class":979},"Logger\n",[902,1115,1117,1120,1122,1125,1127,1129,1132,1135],{"class":904,"line":1116},13,[902,1118,1119],{"class":912},")",[902,1121,993],{"class":992},[902,1123,1124],{"class":979}," ZodSafeParseSuccess",[902,1126,1012],{"class":912},[902,1128,1052],{"class":1051},[902,1130,1131],{"class":912},"> ",[902,1133,1134],{"class":992},"|",[902,1136,1137],{"class":979}," CustomValidationError\n",[887,1139,1141],{"id":1140},"parameters","Parameters",[1143,1144,1145,1164],"table",{},[1146,1147,1148],"thead",{},[1149,1150,1151,1155,1158,1161],"tr",{},[1152,1153,1154],"th",{},"Parameter",[1152,1156,1157],{},"Type",[1152,1159,1160],{},"Default",[1152,1162,1163],{},"Description",[1165,1166,1167,1189,1205],"tbody",{},[1149,1168,1169,1175,1183,1186],{},[1170,1171,1172],"td",{},[858,1173,1174],{},"schema",[1170,1176,1177],{},[862,1178,1181],{"href":1179,"rel":1180},"https:\u002F\u002Fzod.dev\u002Fdocs\u002Fintroduction",[866],[858,1182,917],{},[1170,1184,1185],{},"-",[1170,1187,1188],{},"The Zod schema to validate the input against.",[1149,1190,1191,1196,1200,1202],{},[1170,1192,1193],{},[858,1194,1195],{},"data",[1170,1197,1198],{},[858,1199,1057],{},[1170,1201,1185],{},[1170,1203,1204],{},"The raw data object you want to validate.",[1149,1206,1207,1212,1217,1219],{},[1170,1208,1209],{},[858,1210,1211],{},"log",[1170,1213,1214],{},[858,1215,1216],{},"pino.Logger",[1170,1218,1185],{},[1170,1220,1221],{},"A Pino logger instance for auditing the validation process.",[887,1223,1225],{"id":1224},"return-structure","Return Structure",[854,1227,1228],{},"The utility returns one of two structures depending on the result:",[1230,1231,1232,1246],"ul",{},[1233,1234,1235,1239,1240,1242,1243,1110],"li",{},[1236,1237,1238],"strong",{},"Success",": Returns a standard ",[858,1241,923],{}," object. You can access the validated data via ",[858,1244,1245],{},".data",[1233,1247,1248,1251,1252,1255,1256],{},[1236,1249,1250],{},"Failure",": Returns a ",[858,1253,1254],{},"CustomValidationError",".\n",[1230,1257,1258,1267],{},[1233,1259,1260,1263,1264,1110],{},[858,1261,1262],{},"valid",": Always ",[858,1265,1266],{},"false",[1233,1268,1269,1271,1272,1275],{},[858,1270,884],{},": A flat ",[858,1273,1274],{},"Record\u003Cstring, string>"," where keys are the field names (appended with \" Error\") and values are the human-readable error messages.",[887,1277,1279],{"id":1278},"example-usage","Example Usage",[892,1281,1286],{"className":1282,"code":1283,"filename":1284,"language":1285,"meta":898,"style":898},"language-typescript shiki shiki-themes light-plus light-plus dracula","import { z } from 'zod'\nimport pino from 'pino'\nimport { validateZodSchema } from '@riavzon\u002Futils'\n\nconst logger = pino();\n\nconst UserSchema = z.object({\n  username: z.string().min(3),\n  age: z.number().positive()\n});\n\nconst result = validateZodSchema(UserSchema, { username: \"lo\", age: -5 }, logger);\n\nif ('valid' in result && !result.valid) {\n  \u002F\u002F result.errors will contain:\n  \u002F\u002F {\n  \u002F\u002F   \"username Error\": \"String must contain at least 3 character(s)\",\n  \u002F\u002F   \"age Error\": \"Number must be greater than 0\"\n  \u002F\u002F }\n  console.log('Validation failed:', result.errors);\n} else {\n  \u002F\u002F result is ZodSafeParseSuccess\u003CT>\n  console.log('Success!', result.data);\n}\n","example.ts","typescript",[858,1287,1288,1308,1322,1341,1345,1362,1366,1386,1416,1438,1443,1447,1502,1506,1542,1549,1555,1561,1567,1573,1602,1613,1619,1647],{"__ignoreMap":898},[902,1289,1290,1292,1294,1297,1299,1301,1303,1305],{"class":904,"line":905},[902,1291,909],{"class":908},[902,1293,913],{"class":912},[902,1295,1296],{"class":916},"z",[902,1298,926],{"class":912},[902,1300,929],{"class":908},[902,1302,933],{"class":932},[902,1304,937],{"class":936},[902,1306,1307],{"class":932},"'\n",[902,1309,1310,1312,1314,1316,1318,1320],{"class":904,"line":946},[902,1311,909],{"class":908},[902,1313,951],{"class":916},[902,1315,954],{"class":908},[902,1317,933],{"class":932},[902,1319,959],{"class":936},[902,1321,1307],{"class":932},[902,1323,1324,1326,1328,1330,1332,1334,1336,1339],{"class":904,"line":966},[902,1325,909],{"class":908},[902,1327,913],{"class":912},[902,1329,218],{"class":916},[902,1331,926],{"class":912},[902,1333,929],{"class":908},[902,1335,933],{"class":932},[902,1337,1338],{"class":936},"@riavzon\u002Futils",[902,1340,1307],{"class":932},[902,1342,1343],{"class":904,"line":972},[902,1344,969],{"emptyLinePlaceholder":8},[902,1346,1347,1350,1354,1357,1359],{"class":904,"line":986},[902,1348,1349],{"class":975},"const",[902,1351,1353],{"class":1352},"s3JHE"," logger",[902,1355,1356],{"class":992}," =",[902,1358,951],{"class":1045},[902,1360,1361],{"class":912},"();\n",[902,1363,1364],{"class":904,"line":1001},[902,1365,969],{"emptyLinePlaceholder":8},[902,1367,1368,1370,1373,1375,1378,1380,1383],{"class":904,"line":1025},[902,1369,1349],{"class":975},[902,1371,1372],{"class":1352}," UserSchema",[902,1374,1356],{"class":992},[902,1376,1377],{"class":916}," z",[902,1379,1110],{"class":912},[902,1381,1382],{"class":1045},"object",[902,1384,1385],{"class":912},"({\n",[902,1387,1388,1391,1394,1396,1398,1400,1403,1406,1409,1413],{"class":904,"line":1031},[902,1389,1390],{"class":916},"  username",[902,1392,993],{"class":1393},"s34zl",[902,1395,1377],{"class":916},[902,1397,1110],{"class":912},[902,1399,1015],{"class":1045},[902,1401,1402],{"class":912},"().",[902,1404,1405],{"class":1045},"min",[902,1407,1408],{"class":912},"(",[902,1410,1412],{"class":1411},"spgvN","3",[902,1414,1415],{"class":912},"),\n",[902,1417,1418,1421,1423,1425,1427,1430,1432,1435],{"class":904,"line":1036},[902,1419,1420],{"class":916},"  age",[902,1422,993],{"class":1393},[902,1424,1377],{"class":916},[902,1426,1110],{"class":912},[902,1428,1429],{"class":1045},"number",[902,1431,1402],{"class":912},[902,1433,1434],{"class":1045},"positive",[902,1436,1437],{"class":912},"()\n",[902,1439,1440],{"class":904,"line":1063},[902,1441,1442],{"class":912},"});\n",[902,1444,1445],{"class":904,"line":1086},[902,1446,969],{"emptyLinePlaceholder":8},[902,1448,1449,1451,1454,1456,1458,1460,1463,1466,1469,1471,1474,1477,1480,1482,1485,1487,1490,1493,1496,1499],{"class":904,"line":1100},[902,1450,1349],{"class":975},[902,1452,1453],{"class":1352}," result",[902,1455,1356],{"class":992},[902,1457,1046],{"class":1045},[902,1459,1408],{"class":912},[902,1461,1462],{"class":916},"UserSchema",[902,1464,1465],{"class":912},", { ",[902,1467,1468],{"class":916},"username",[902,1470,993],{"class":1393},[902,1472,1473],{"class":932}," \"",[902,1475,1476],{"class":936},"lo",[902,1478,1479],{"class":932},"\"",[902,1481,920],{"class":912},[902,1483,1484],{"class":916},"age",[902,1486,993],{"class":1393},[902,1488,1489],{"class":992}," -",[902,1491,1492],{"class":1411},"5",[902,1494,1495],{"class":912}," }, ",[902,1497,1498],{"class":916},"logger",[902,1500,1501],{"class":912},");\n",[902,1503,1504],{"class":904,"line":1116},[902,1505,969],{"emptyLinePlaceholder":8},[902,1507,1509,1512,1515,1517,1519,1521,1524,1526,1529,1532,1535,1537,1539],{"class":904,"line":1508},14,[902,1510,1511],{"class":908},"if",[902,1513,1514],{"class":912}," (",[902,1516,940],{"class":932},[902,1518,1262],{"class":936},[902,1520,940],{"class":932},[902,1522,1523],{"class":975}," in",[902,1525,1453],{"class":916},[902,1527,1528],{"class":992}," &&",[902,1530,1531],{"class":992}," !",[902,1533,1534],{"class":916},"result",[902,1536,1110],{"class":912},[902,1538,1262],{"class":916},[902,1540,1541],{"class":912},") {\n",[902,1543,1545],{"class":904,"line":1544},15,[902,1546,1548],{"class":1547},"sghk6","  \u002F\u002F result.errors will contain:\n",[902,1550,1552],{"class":904,"line":1551},16,[902,1553,1554],{"class":1547},"  \u002F\u002F {\n",[902,1556,1558],{"class":904,"line":1557},17,[902,1559,1560],{"class":1547},"  \u002F\u002F   \"username Error\": \"String must contain at least 3 character(s)\",\n",[902,1562,1564],{"class":904,"line":1563},18,[902,1565,1566],{"class":1547},"  \u002F\u002F   \"age Error\": \"Number must be greater than 0\"\n",[902,1568,1570],{"class":904,"line":1569},19,[902,1571,1572],{"class":1547},"  \u002F\u002F }\n",[902,1574,1576,1579,1581,1583,1585,1587,1590,1592,1594,1596,1598,1600],{"class":904,"line":1575},20,[902,1577,1578],{"class":916},"  console",[902,1580,1110],{"class":912},[902,1582,1211],{"class":1045},[902,1584,1408],{"class":912},[902,1586,940],{"class":932},[902,1588,1589],{"class":936},"Validation failed:",[902,1591,940],{"class":932},[902,1593,920],{"class":912},[902,1595,1534],{"class":916},[902,1597,1110],{"class":912},[902,1599,884],{"class":916},[902,1601,1501],{"class":912},[902,1603,1605,1608,1611],{"class":904,"line":1604},21,[902,1606,1607],{"class":912},"} ",[902,1609,1610],{"class":908},"else",[902,1612,983],{"class":912},[902,1614,1616],{"class":904,"line":1615},22,[902,1617,1618],{"class":1547},"  \u002F\u002F result is ZodSafeParseSuccess\u003CT>\n",[902,1620,1622,1624,1626,1628,1630,1632,1635,1637,1639,1641,1643,1645],{"class":904,"line":1621},23,[902,1623,1578],{"class":916},[902,1625,1110],{"class":912},[902,1627,1211],{"class":1045},[902,1629,1408],{"class":912},[902,1631,940],{"class":932},[902,1633,1634],{"class":936},"Success!",[902,1636,940],{"class":932},[902,1638,920],{"class":912},[902,1640,1534],{"class":916},[902,1642,1110],{"class":912},[902,1644,1195],{"class":916},[902,1646,1501],{"class":912},[902,1648,1650],{"class":904,"line":1649},24,[902,1651,1028],{"class":912},[1653,1654,1655],"style",{},"html pre.shiki code .sZ328, html code.shiki .sZ328{--shiki-light:#AF00DB;--shiki-default:#AF00DB;--shiki-dark:#FF79C6}html pre.shiki code .sDd4n, html code.shiki .sDd4n{--shiki-light:#000000;--shiki-default:#000000;--shiki-dark:#F8F8F2}html pre.shiki code .sjsA6, html code.shiki .sjsA6{--shiki-light:#001080;--shiki-default:#001080;--shiki-dark:#F8F8F2}html pre.shiki code .sFkSl, html code.shiki .sFkSl{--shiki-light:#A31515;--shiki-default:#A31515;--shiki-dark:#E9F284}html pre.shiki code .sFB1V, html code.shiki .sFB1V{--shiki-light:#A31515;--shiki-default:#A31515;--shiki-dark:#F1FA8C}html pre.shiki code .sl46w, html code.shiki .sl46w{--shiki-light:#0000FF;--shiki-default:#0000FF;--shiki-dark:#FF79C6}html pre.shiki code .sFs1U, html code.shiki .sFs1U{--shiki-light:#267F99;--shiki-light-font-style:inherit;--shiki-default:#267F99;--shiki-default-font-style:inherit;--shiki-dark:#8BE9FD;--shiki-dark-font-style:italic}html pre.shiki code .saOXh, html code.shiki .saOXh{--shiki-light:#000000;--shiki-default:#000000;--shiki-dark:#FF79C6}html pre.shiki code .sHOzp, html code.shiki .sHOzp{--shiki-light:#795E26;--shiki-default:#795E26;--shiki-dark:#50FA7B}html pre.shiki code .sW-rI, html code.shiki .sW-rI{--shiki-light:#267F99;--shiki-light-font-style:inherit;--shiki-default:#267F99;--shiki-default-font-style:inherit;--shiki-dark:#FFB86C;--shiki-dark-font-style:italic}html pre.shiki code .sygFZ, html code.shiki .sygFZ{--shiki-light:#001080;--shiki-light-font-style:inherit;--shiki-default:#001080;--shiki-default-font-style:inherit;--shiki-dark:#FFB86C;--shiki-dark-font-style:italic}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);}html pre.shiki code .s3JHE, html code.shiki .s3JHE{--shiki-light:#0070C1;--shiki-default:#0070C1;--shiki-dark:#F8F8F2}html pre.shiki code .s34zl, html code.shiki .s34zl{--shiki-light:#001080;--shiki-default:#001080;--shiki-dark:#FF79C6}html pre.shiki code .spgvN, html code.shiki .spgvN{--shiki-light:#098658;--shiki-default:#098658;--shiki-dark:#BD93F9}html pre.shiki code .sghk6, html code.shiki .sghk6{--shiki-light:#008000;--shiki-default:#008000;--shiki-dark:#6272A4}",{"title":898,"searchDepth":946,"depth":946,"links":1657},[1658,1659,1660,1661],{"id":889,"depth":946,"text":890},{"id":1140,"depth":946,"text":1141},{"id":1224,"depth":946,"text":1225},{"id":1278,"depth":946,"text":1279},"Validates data against a Zod schema with detailed logging and error reporting.","md",{},null,"---\ntitle: validateZodSchema\ndescription: Validates data against a Zod schema with detailed logging and error reporting.\nicon: i-lucide-shield-check\n---\n\nThe `validateZodSchema` utility is a wrapper around [Zod](https:\u002F\u002Fzod.dev\u002F)'s `safeParse` method, integrated with [Pino](https:\u002F\u002Fgetpino.io\u002F) for logging.\n\nIt simplifies the validation flow by automatically logging errors and transforming complex Zod issue arrays into a flat, friendly `errors` object. This makes it ideal for API request validation where you need to return clear error messages to the frontend while keeping detailed logs on the server.\n\n## Definition\n\n```ts [validateZodSchema.ts]\nimport { ZodType, ZodSafeParseSuccess } from 'zod';\nimport pino from 'pino';\n\ninterface CustomValidationError {\n    valid: false;\n    errors: Record\u003Cstring, string>\n}\n\nexport function validateZodSchema\u003CT, Input>(\n    schema: ZodType\u003CT, Input>,\n    data: Input,\n    log: pino.Logger\n): ZodSafeParseSuccess\u003CT> | CustomValidationError\n```\n\n## Parameters\n| Parameter | Type | Default | Description |\n| --- | --- | --- | --- |\n| `schema` | [`ZodType`](https:\u002F\u002Fzod.dev\u002Fdocs\u002Fintroduction) | - | The Zod schema to validate the input against. |\n| `data` | `Input` | - | The raw data object you want to validate. |\n| `log` | `pino.Logger`| - | A Pino logger instance for auditing the validation process. |\n\n## Return Structure\n\nThe utility returns one of two structures depending on the result:\n\n- **Success**: Returns a standard `ZodSafeParseSuccess` object. You can access the validated data via `.data`.\n- **Failure**: Returns a `CustomValidationError`.\n  - `valid`: Always `false`.\n  - `errors`: A flat `Record\u003Cstring, string>` where keys are the field names (appended with \" Error\") and values are the human-readable error messages.\n\n## Example Usage\n\n```typescript [example.ts]\nimport { z } from 'zod'\nimport pino from 'pino'\nimport { validateZodSchema } from '@riavzon\u002Futils'\n\nconst logger = pino();\n\nconst UserSchema = z.object({\n  username: z.string().min(3),\n  age: z.number().positive()\n});\n\nconst result = validateZodSchema(UserSchema, { username: \"lo\", age: -5 }, logger);\n\nif ('valid' in result && !result.valid) {\n  \u002F\u002F result.errors will contain:\n  \u002F\u002F {\n  \u002F\u002F   \"username Error\": \"String must contain at least 3 character(s)\",\n  \u002F\u002F   \"age Error\": \"Number must be greater than 0\"\n  \u002F\u002F }\n  console.log('Validation failed:', result.errors);\n} else {\n  \u002F\u002F result is ZodSafeParseSuccess\u003CT>\n  console.log('Success!', result.data);\n}\n```\n",{"title":218,"description":1662},"Tzya0bddwjiyNuuhREsYZ8BPLte0z0hlIZWWHYXtzTg",[1670,1671],{"title":214,"path":215,"stem":216,"children":-1},{"title":222,"path":223,"stem":224,"children":-1},{"id":849,"title":218,"body":1673,"description":1662,"extension":1663,"icon":28,"meta":2268,"module":1665,"navigation":8,"path":219,"rawbody":1666,"seo":2269,"stem":220,"__hash__":1668},{"type":851,"value":1674,"toc":2262},[1675,1687,1691,1693,1861,1863,1924,1926,1928,1958,1960,2260],[854,1676,856,1677,860,1679,868,1682,872,1684,878],{},[858,1678,218],{},[862,1680,867],{"href":864,"rel":1681},[866],[858,1683,871],{},[862,1685,877],{"href":875,"rel":1686},[866],[854,1688,881,1689,885],{},[858,1690,884],{},[887,1692,890],{"id":889},[892,1694,1695],{"className":894,"code":895,"filename":896,"language":897,"meta":898,"style":898},[858,1696,1697,1721,1737,1741,1749,1759,1777,1781,1785,1803,1821,1831,1843],{"__ignoreMap":898},[902,1698,1699,1701,1703,1705,1707,1709,1711,1713,1715,1717,1719],{"class":904,"line":905},[902,1700,909],{"class":908},[902,1702,913],{"class":912},[902,1704,917],{"class":916},[902,1706,920],{"class":912},[902,1708,923],{"class":916},[902,1710,926],{"class":912},[902,1712,929],{"class":908},[902,1714,933],{"class":932},[902,1716,937],{"class":936},[902,1718,940],{"class":932},[902,1720,943],{"class":912},[902,1722,1723,1725,1727,1729,1731,1733,1735],{"class":904,"line":946},[902,1724,909],{"class":908},[902,1726,951],{"class":916},[902,1728,954],{"class":908},[902,1730,933],{"class":932},[902,1732,959],{"class":936},[902,1734,940],{"class":932},[902,1736,943],{"class":912},[902,1738,1739],{"class":904,"line":966},[902,1740,969],{"emptyLinePlaceholder":8},[902,1742,1743,1745,1747],{"class":904,"line":972},[902,1744,976],{"class":975},[902,1746,980],{"class":979},[902,1748,983],{"class":912},[902,1750,1751,1753,1755,1757],{"class":904,"line":986},[902,1752,989],{"class":916},[902,1754,993],{"class":992},[902,1756,996],{"class":979},[902,1758,943],{"class":912},[902,1760,1761,1763,1765,1767,1769,1771,1773,1775],{"class":904,"line":1001},[902,1762,1004],{"class":916},[902,1764,993],{"class":992},[902,1766,1009],{"class":979},[902,1768,1012],{"class":912},[902,1770,1015],{"class":979},[902,1772,920],{"class":912},[902,1774,1015],{"class":979},[902,1776,1022],{"class":912},[902,1778,1779],{"class":904,"line":1025},[902,1780,1028],{"class":912},[902,1782,1783],{"class":904,"line":1031},[902,1784,969],{"emptyLinePlaceholder":8},[902,1786,1787,1789,1791,1793,1795,1797,1799,1801],{"class":904,"line":1036},[902,1788,1039],{"class":908},[902,1790,1042],{"class":975},[902,1792,1046],{"class":1045},[902,1794,1012],{"class":912},[902,1796,1052],{"class":1051},[902,1798,920],{"class":912},[902,1800,1057],{"class":1051},[902,1802,1060],{"class":912},[902,1804,1805,1807,1809,1811,1813,1815,1817,1819],{"class":904,"line":1063},[902,1806,1067],{"class":1066},[902,1808,993],{"class":992},[902,1810,1072],{"class":979},[902,1812,1012],{"class":912},[902,1814,1052],{"class":1051},[902,1816,920],{"class":912},[902,1818,1057],{"class":1051},[902,1820,1083],{"class":912},[902,1822,1823,1825,1827,1829],{"class":904,"line":1086},[902,1824,1089],{"class":1066},[902,1826,993],{"class":992},[902,1828,1094],{"class":979},[902,1830,1097],{"class":912},[902,1832,1833,1835,1837,1839,1841],{"class":904,"line":1100},[902,1834,1103],{"class":1066},[902,1836,993],{"class":992},[902,1838,951],{"class":979},[902,1840,1110],{"class":912},[902,1842,1113],{"class":979},[902,1844,1845,1847,1849,1851,1853,1855,1857,1859],{"class":904,"line":1116},[902,1846,1119],{"class":912},[902,1848,993],{"class":992},[902,1850,1124],{"class":979},[902,1852,1012],{"class":912},[902,1854,1052],{"class":1051},[902,1856,1131],{"class":912},[902,1858,1134],{"class":992},[902,1860,1137],{"class":979},[887,1862,1141],{"id":1140},[1143,1864,1865,1877],{},[1146,1866,1867],{},[1149,1868,1869,1871,1873,1875],{},[1152,1870,1154],{},[1152,1872,1157],{},[1152,1874,1160],{},[1152,1876,1163],{},[1165,1878,1879,1896,1910],{},[1149,1880,1881,1885,1892,1894],{},[1170,1882,1883],{},[858,1884,1174],{},[1170,1886,1887],{},[862,1888,1890],{"href":1179,"rel":1889},[866],[858,1891,917],{},[1170,1893,1185],{},[1170,1895,1188],{},[1149,1897,1898,1902,1906,1908],{},[1170,1899,1900],{},[858,1901,1195],{},[1170,1903,1904],{},[858,1905,1057],{},[1170,1907,1185],{},[1170,1909,1204],{},[1149,1911,1912,1916,1920,1922],{},[1170,1913,1914],{},[858,1915,1211],{},[1170,1917,1918],{},[858,1919,1216],{},[1170,1921,1185],{},[1170,1923,1221],{},[887,1925,1225],{"id":1224},[854,1927,1228],{},[1230,1929,1930,1938],{},[1233,1931,1932,1239,1934,1242,1936,1110],{},[1236,1933,1238],{},[858,1935,923],{},[858,1937,1245],{},[1233,1939,1940,1251,1942,1255,1944],{},[1236,1941,1250],{},[858,1943,1254],{},[1230,1945,1946,1952],{},[1233,1947,1948,1263,1950,1110],{},[858,1949,1262],{},[858,1951,1266],{},[1233,1953,1954,1271,1956,1275],{},[858,1955,884],{},[858,1957,1274],{},[887,1959,1279],{"id":1278},[892,1961,1962],{"className":1282,"code":1283,"filename":1284,"language":1285,"meta":898,"style":898},[858,1963,1964,1982,1996,2014,2018,2030,2034,2050,2072,2090,2094,2098,2140,2144,2172,2176,2180,2184,2188,2192,2218,2226,2230,2256],{"__ignoreMap":898},[902,1965,1966,1968,1970,1972,1974,1976,1978,1980],{"class":904,"line":905},[902,1967,909],{"class":908},[902,1969,913],{"class":912},[902,1971,1296],{"class":916},[902,1973,926],{"class":912},[902,1975,929],{"class":908},[902,1977,933],{"class":932},[902,1979,937],{"class":936},[902,1981,1307],{"class":932},[902,1983,1984,1986,1988,1990,1992,1994],{"class":904,"line":946},[902,1985,909],{"class":908},[902,1987,951],{"class":916},[902,1989,954],{"class":908},[902,1991,933],{"class":932},[902,1993,959],{"class":936},[902,1995,1307],{"class":932},[902,1997,1998,2000,2002,2004,2006,2008,2010,2012],{"class":904,"line":966},[902,1999,909],{"class":908},[902,2001,913],{"class":912},[902,2003,218],{"class":916},[902,2005,926],{"class":912},[902,2007,929],{"class":908},[902,2009,933],{"class":932},[902,2011,1338],{"class":936},[902,2013,1307],{"class":932},[902,2015,2016],{"class":904,"line":972},[902,2017,969],{"emptyLinePlaceholder":8},[902,2019,2020,2022,2024,2026,2028],{"class":904,"line":986},[902,2021,1349],{"class":975},[902,2023,1353],{"class":1352},[902,2025,1356],{"class":992},[902,2027,951],{"class":1045},[902,2029,1361],{"class":912},[902,2031,2032],{"class":904,"line":1001},[902,2033,969],{"emptyLinePlaceholder":8},[902,2035,2036,2038,2040,2042,2044,2046,2048],{"class":904,"line":1025},[902,2037,1349],{"class":975},[902,2039,1372],{"class":1352},[902,2041,1356],{"class":992},[902,2043,1377],{"class":916},[902,2045,1110],{"class":912},[902,2047,1382],{"class":1045},[902,2049,1385],{"class":912},[902,2051,2052,2054,2056,2058,2060,2062,2064,2066,2068,2070],{"class":904,"line":1031},[902,2053,1390],{"class":916},[902,2055,993],{"class":1393},[902,2057,1377],{"class":916},[902,2059,1110],{"class":912},[902,2061,1015],{"class":1045},[902,2063,1402],{"class":912},[902,2065,1405],{"class":1045},[902,2067,1408],{"class":912},[902,2069,1412],{"class":1411},[902,2071,1415],{"class":912},[902,2073,2074,2076,2078,2080,2082,2084,2086,2088],{"class":904,"line":1036},[902,2075,1420],{"class":916},[902,2077,993],{"class":1393},[902,2079,1377],{"class":916},[902,2081,1110],{"class":912},[902,2083,1429],{"class":1045},[902,2085,1402],{"class":912},[902,2087,1434],{"class":1045},[902,2089,1437],{"class":912},[902,2091,2092],{"class":904,"line":1063},[902,2093,1442],{"class":912},[902,2095,2096],{"class":904,"line":1086},[902,2097,969],{"emptyLinePlaceholder":8},[902,2099,2100,2102,2104,2106,2108,2110,2112,2114,2116,2118,2120,2122,2124,2126,2128,2130,2132,2134,2136,2138],{"class":904,"line":1100},[902,2101,1349],{"class":975},[902,2103,1453],{"class":1352},[902,2105,1356],{"class":992},[902,2107,1046],{"class":1045},[902,2109,1408],{"class":912},[902,2111,1462],{"class":916},[902,2113,1465],{"class":912},[902,2115,1468],{"class":916},[902,2117,993],{"class":1393},[902,2119,1473],{"class":932},[902,2121,1476],{"class":936},[902,2123,1479],{"class":932},[902,2125,920],{"class":912},[902,2127,1484],{"class":916},[902,2129,993],{"class":1393},[902,2131,1489],{"class":992},[902,2133,1492],{"class":1411},[902,2135,1495],{"class":912},[902,2137,1498],{"class":916},[902,2139,1501],{"class":912},[902,2141,2142],{"class":904,"line":1116},[902,2143,969],{"emptyLinePlaceholder":8},[902,2145,2146,2148,2150,2152,2154,2156,2158,2160,2162,2164,2166,2168,2170],{"class":904,"line":1508},[902,2147,1511],{"class":908},[902,2149,1514],{"class":912},[902,2151,940],{"class":932},[902,2153,1262],{"class":936},[902,2155,940],{"class":932},[902,2157,1523],{"class":975},[902,2159,1453],{"class":916},[902,2161,1528],{"class":992},[902,2163,1531],{"class":992},[902,2165,1534],{"class":916},[902,2167,1110],{"class":912},[902,2169,1262],{"class":916},[902,2171,1541],{"class":912},[902,2173,2174],{"class":904,"line":1544},[902,2175,1548],{"class":1547},[902,2177,2178],{"class":904,"line":1551},[902,2179,1554],{"class":1547},[902,2181,2182],{"class":904,"line":1557},[902,2183,1560],{"class":1547},[902,2185,2186],{"class":904,"line":1563},[902,2187,1566],{"class":1547},[902,2189,2190],{"class":904,"line":1569},[902,2191,1572],{"class":1547},[902,2193,2194,2196,2198,2200,2202,2204,2206,2208,2210,2212,2214,2216],{"class":904,"line":1575},[902,2195,1578],{"class":916},[902,2197,1110],{"class":912},[902,2199,1211],{"class":1045},[902,2201,1408],{"class":912},[902,2203,940],{"class":932},[902,2205,1589],{"class":936},[902,2207,940],{"class":932},[902,2209,920],{"class":912},[902,2211,1534],{"class":916},[902,2213,1110],{"class":912},[902,2215,884],{"class":916},[902,2217,1501],{"class":912},[902,2219,2220,2222,2224],{"class":904,"line":1604},[902,2221,1607],{"class":912},[902,2223,1610],{"class":908},[902,2225,983],{"class":912},[902,2227,2228],{"class":904,"line":1615},[902,2229,1618],{"class":1547},[902,2231,2232,2234,2236,2238,2240,2242,2244,2246,2248,2250,2252,2254],{"class":904,"line":1621},[902,2233,1578],{"class":916},[902,2235,1110],{"class":912},[902,2237,1211],{"class":1045},[902,2239,1408],{"class":912},[902,2241,940],{"class":932},[902,2243,1634],{"class":936},[902,2245,940],{"class":932},[902,2247,920],{"class":912},[902,2249,1534],{"class":916},[902,2251,1110],{"class":912},[902,2253,1195],{"class":916},[902,2255,1501],{"class":912},[902,2257,2258],{"class":904,"line":1649},[902,2259,1028],{"class":912},[1653,2261,1655],{},{"title":898,"searchDepth":946,"depth":946,"links":2263},[2264,2265,2266,2267],{"id":889,"depth":946,"text":890},{"id":1140,"depth":946,"text":1141},{"id":1224,"depth":946,"text":1225},{"id":1278,"depth":946,"text":1279},{},{"title":218,"description":1662},1780436298568]