[{"data":1,"prerenderedAt":2533},["ShallowReactive",2],{"navLinks":3,"sidebar_docs_navigation_\u002Fdocs\u002Futils":64,"navigation":263,"navLinks_footer":835,"\u002Fdocs\u002Futils\u002Fshared\u002Fconfigurationdefiner_page":848,"\u002Fdocs\u002Futils\u002Fshared\u002Fconfigurationdefiner_surround":1812,"\u002Fdocs\u002Futils\u002Fshared\u002Fconfigurationdefiner":1815},{"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":146,"body":850,"description":1804,"extension":1805,"icon":1806,"meta":1807,"module":1808,"navigation":8,"path":147,"rawbody":1809,"seo":1810,"stem":148,"__hash__":1811},"docs\u002Fdocs\u002Futils\u002Fshared\u002FconfigurationDefiner.md",{"type":851,"value":852,"toc":1795},"minimark",[853,860,863,868,975,979,1043,1047,1052,1059,1151,1167,1179,1205,1211,1217,1221,1461,1629,1758,1776,1791],[854,855,856,859],"p",{},[857,858,146],"code",{}," manages global configuration state for a project. It validates raw input against a Zod schema at startup, runs async initialization tasks, then deep-freezes the result so it cannot be mutated at runtime.",[854,861,862],{},"When validation fails, the function throws a detailed, pretty-printed error listing every failing field, making misconfigured environments fail immediately at boot rather than silently at runtime.",[864,865,867],"h2",{"id":866},"definition","Definition",[869,870,876],"pre",{"className":871,"code":872,"filename":873,"language":874,"meta":875,"style":875},"language-ts shiki shiki-themes light-plus light-plus dracula","import { type ZodType } from \"zod\"\n\nexport function createConfigManager\u003CT>(schema: ZodType\u003CT>, projectName?: string)\n","configurationDefiner.ts","ts","",[857,877,878,915,921],{"__ignoreMap":875},[879,880,883,887,891,894,898,901,904,908,912],"span",{"class":881,"line":882},"line",1,[879,884,886],{"class":885},"sZ328","import",[879,888,890],{"class":889},"sDd4n"," { ",[879,892,893],{"class":885},"type",[879,895,897],{"class":896},"sjsA6"," ZodType",[879,899,900],{"class":889}," } ",[879,902,903],{"class":885},"from",[879,905,907],{"class":906},"sFkSl"," \"",[879,909,911],{"class":910},"sFB1V","zod",[879,913,914],{"class":906},"\"\n",[879,916,918],{"class":881,"line":917},2,[879,919,920],{"emptyLinePlaceholder":8},"\n",[879,922,924,927,931,935,938,942,945,949,953,956,958,960,963,966,969,972],{"class":881,"line":923},3,[879,925,926],{"class":885},"export",[879,928,930],{"class":929},"sl46w"," function",[879,932,934],{"class":933},"sHOzp"," createConfigManager",[879,936,937],{"class":889},"\u003C",[879,939,941],{"class":940},"sW-rI","T",[879,943,944],{"class":889},">(",[879,946,948],{"class":947},"sygFZ","schema",[879,950,952],{"class":951},"saOXh",":",[879,954,897],{"class":955},"sFs1U",[879,957,937],{"class":889},[879,959,941],{"class":940},[879,961,962],{"class":889},">, ",[879,964,965],{"class":947},"projectName",[879,967,968],{"class":951},"?:",[879,970,971],{"class":955}," string",[879,973,974],{"class":889},")\n",[864,976,978],{"id":977},"parameters","Parameters",[980,981,982,1001],"table",{},[983,984,985],"thead",{},[986,987,988,992,995,998],"tr",{},[989,990,991],"th",{},"Parameter",[989,993,994],{},"Type",[989,996,997],{},"Required",[989,999,1000],{},"Description",[1002,1003,1004,1022],"tbody",{},[986,1005,1006,1011,1016,1019],{},[1007,1008,1009],"td",{},[857,1010,948],{},[1007,1012,1013],{},[857,1014,1015],{},"ZodType\u003CT>",[1007,1017,1018],{},"Yes",[1007,1020,1021],{},"Zod schema used to parse and validate the incoming configuration data.",[986,1023,1024,1028,1033,1036],{},[1007,1025,1026],{},[857,1027,965],{},[1007,1029,1030],{},[857,1031,1032],{},"string",[1007,1034,1035],{},"No",[1007,1037,1038,1039,1042],{},"Label prefixed to error messages for debugging. Defaults to ",[857,1040,1041],{},"\"App\"",".",[864,1044,1046],{"id":1045},"returns","Returns",[854,1048,1049,1051],{},[857,1050,146],{}," returns an object with two functions bound to the provided schema:",[1053,1054,1056],"h3",{"id":1055},"defineconfigurationconfig-initializations-promisevoid",[857,1057,1058],{},"defineConfiguration(config, initializations?): Promise\u003Cvoid>",[869,1060,1062],{"className":871,"code":1061,"language":874,"meta":875,"style":875},"async function defineConfiguration(\n  config: unknown,\n  initializations?: ((config: T) => Promise\u003Cvoid> | void)[]\n): Promise\u003Cvoid>\n",[857,1063,1064,1077,1090,1134],{"__ignoreMap":875},[879,1065,1066,1069,1071,1074],{"class":881,"line":882},[879,1067,1068],{"class":929},"async",[879,1070,930],{"class":929},[879,1072,1073],{"class":933}," defineConfiguration",[879,1075,1076],{"class":889},"(\n",[879,1078,1079,1082,1084,1087],{"class":881,"line":917},[879,1080,1081],{"class":947},"  config",[879,1083,952],{"class":951},[879,1085,1086],{"class":955}," unknown",[879,1088,1089],{"class":889},",\n",[879,1091,1092,1095,1097,1100,1103,1105,1108,1111,1114,1117,1119,1122,1125,1128,1131],{"class":881,"line":923},[879,1093,1094],{"class":947},"  initializations",[879,1096,968],{"class":951},[879,1098,1099],{"class":889}," ((",[879,1101,1102],{"class":947},"config",[879,1104,952],{"class":951},[879,1106,1107],{"class":955}," T",[879,1109,1110],{"class":889},") ",[879,1112,1113],{"class":929},"=>",[879,1115,1116],{"class":955}," Promise",[879,1118,937],{"class":889},[879,1120,1121],{"class":955},"void",[879,1123,1124],{"class":889},"> ",[879,1126,1127],{"class":951},"|",[879,1129,1130],{"class":955}," void",[879,1132,1133],{"class":889},")[]\n",[879,1135,1137,1140,1142,1144,1146,1148],{"class":881,"line":1136},4,[879,1138,1139],{"class":889},")",[879,1141,952],{"class":951},[879,1143,1116],{"class":955},[879,1145,937],{"class":889},[879,1147,1121],{"class":955},[879,1149,1150],{"class":889},">\n",[854,1152,1153,1156,1157,1159,1160,1163,1164,1042],{},[857,1154,1155],{},"defineConfiguration"," validates ",[857,1158,1102],{},", runs all ",[857,1161,1162],{},"initializations"," tasks concurrently, then freezes and stores the result. Call this once during application startup, before any module calls ",[857,1165,1166],{},"getConfiguration",[854,1168,1169,1174,1175,1178],{},[1170,1171,1172],"strong",{},[857,1173,1162],{}," is an optional array of async setup functions that receive the validated config object. Use it for side effects that depend on config values and must complete before the app starts, for example, opening a database connection or warming a cache. All tasks run via ",[857,1176,1177],{},"Promise.all",". If any task throws, the error propagates and the config is never stored.",[854,1180,1181,1187,1188,1190,1191,1194,1195,1197,1198,1200,1201,1204],{},[1170,1182,1183,1186],{},[857,1184,1185],{},"await"," is required."," ",[857,1189,1155],{}," returns a ",[857,1192,1193],{},"Promise"," because ",[857,1196,1162],{}," tasks are async. Omitting ",[857,1199,1185],{}," means the config will not be stored before the rest of the module initializes, and any call to ",[857,1202,1203],{},"getConfiguration()"," will throw a premature-access error.",[1053,1206,1208],{"id":1207},"getconfiguration-t",[857,1209,1210],{},"getConfiguration(): T",[854,1212,1213,1214,1216],{},"Returns the validated, frozen configuration object. Throws with a stack trace if called before ",[857,1215,1155],{}," resolves successfully.",[864,1218,1220],{"id":1219},"example-usage","Example Usage",[869,1222,1227],{"className":1223,"code":1224,"filename":1225,"language":1226,"meta":875,"style":875},"language-typescript shiki shiki-themes light-plus light-plus dracula","import { z } from 'zod'\nimport { createConfigManager } from '@riavzon\u002Futils'\n\nconst AppSchema = z.object({\n  apiKey: z.string().min(10, 'API Key is too short'),\n  environment: z.enum(['development', 'production', 'testing']),\n  port: z.number().default(3000),\n})\n\nexport const { defineConfiguration, getConfiguration } = createConfigManager(AppSchema, 'CoreApp')\n","config.ts","typescript",[857,1228,1229,1250,1269,1273,1296,1338,1384,1411,1417,1422],{"__ignoreMap":875},[879,1230,1231,1233,1235,1238,1240,1242,1245,1247],{"class":881,"line":882},[879,1232,886],{"class":885},[879,1234,890],{"class":889},[879,1236,1237],{"class":896},"z",[879,1239,900],{"class":889},[879,1241,903],{"class":885},[879,1243,1244],{"class":906}," '",[879,1246,911],{"class":910},[879,1248,1249],{"class":906},"'\n",[879,1251,1252,1254,1256,1258,1260,1262,1264,1267],{"class":881,"line":917},[879,1253,886],{"class":885},[879,1255,890],{"class":889},[879,1257,146],{"class":896},[879,1259,900],{"class":889},[879,1261,903],{"class":885},[879,1263,1244],{"class":906},[879,1265,1266],{"class":910},"@riavzon\u002Futils",[879,1268,1249],{"class":906},[879,1270,1271],{"class":881,"line":923},[879,1272,920],{"emptyLinePlaceholder":8},[879,1274,1275,1278,1282,1285,1288,1290,1293],{"class":881,"line":1136},[879,1276,1277],{"class":929},"const",[879,1279,1281],{"class":1280},"s3JHE"," AppSchema",[879,1283,1284],{"class":951}," =",[879,1286,1287],{"class":896}," z",[879,1289,1042],{"class":889},[879,1291,1292],{"class":933},"object",[879,1294,1295],{"class":889},"({\n",[879,1297,1299,1302,1305,1307,1309,1311,1314,1317,1320,1324,1327,1330,1333,1335],{"class":881,"line":1298},5,[879,1300,1301],{"class":896},"  apiKey",[879,1303,952],{"class":1304},"s34zl",[879,1306,1287],{"class":896},[879,1308,1042],{"class":889},[879,1310,1032],{"class":933},[879,1312,1313],{"class":889},"().",[879,1315,1316],{"class":933},"min",[879,1318,1319],{"class":889},"(",[879,1321,1323],{"class":1322},"spgvN","10",[879,1325,1326],{"class":889},", ",[879,1328,1329],{"class":906},"'",[879,1331,1332],{"class":910},"API Key is too short",[879,1334,1329],{"class":906},[879,1336,1337],{"class":889},"),\n",[879,1339,1341,1344,1346,1348,1350,1353,1356,1358,1361,1363,1365,1367,1370,1372,1374,1376,1379,1381],{"class":881,"line":1340},6,[879,1342,1343],{"class":896},"  environment",[879,1345,952],{"class":1304},[879,1347,1287],{"class":896},[879,1349,1042],{"class":889},[879,1351,1352],{"class":933},"enum",[879,1354,1355],{"class":889},"([",[879,1357,1329],{"class":906},[879,1359,1360],{"class":910},"development",[879,1362,1329],{"class":906},[879,1364,1326],{"class":889},[879,1366,1329],{"class":906},[879,1368,1369],{"class":910},"production",[879,1371,1329],{"class":906},[879,1373,1326],{"class":889},[879,1375,1329],{"class":906},[879,1377,1378],{"class":910},"testing",[879,1380,1329],{"class":906},[879,1382,1383],{"class":889},"]),\n",[879,1385,1387,1390,1392,1394,1396,1399,1401,1404,1406,1409],{"class":881,"line":1386},7,[879,1388,1389],{"class":896},"  port",[879,1391,952],{"class":1304},[879,1393,1287],{"class":896},[879,1395,1042],{"class":889},[879,1397,1398],{"class":933},"number",[879,1400,1313],{"class":889},[879,1402,1403],{"class":933},"default",[879,1405,1319],{"class":889},[879,1407,1408],{"class":1322},"3000",[879,1410,1337],{"class":889},[879,1412,1414],{"class":881,"line":1413},8,[879,1415,1416],{"class":889},"})\n",[879,1418,1420],{"class":881,"line":1419},9,[879,1421,920],{"emptyLinePlaceholder":8},[879,1423,1425,1427,1430,1432,1434,1436,1438,1440,1443,1445,1447,1450,1452,1454,1457,1459],{"class":881,"line":1424},10,[879,1426,926],{"class":885},[879,1428,1429],{"class":929}," const",[879,1431,890],{"class":889},[879,1433,1155],{"class":1280},[879,1435,1326],{"class":889},[879,1437,1166],{"class":1280},[879,1439,900],{"class":889},[879,1441,1442],{"class":951},"=",[879,1444,934],{"class":933},[879,1446,1319],{"class":889},[879,1448,1449],{"class":896},"AppSchema",[879,1451,1326],{"class":889},[879,1453,1329],{"class":906},[879,1455,1456],{"class":910},"CoreApp",[879,1458,1329],{"class":906},[879,1460,974],{"class":889},[869,1462,1465],{"className":1223,"code":1463,"filename":1464,"language":1226,"meta":875,"style":875},"import { defineConfiguration } from '.\u002Fconfig'\nimport { connectDB } from '.\u002Fdatabase'\nimport { warmCache } from '.\u002Fcache'\n\n\u002F\u002F connectDB and warmCache both receive the parsed config and run concurrently.\n\u002F\u002F The process only continues once both resolve.\n\u002F\u002F If the API key is missing or too short, the app refuses to boot.\nawait defineConfiguration(\n  {\n    apiKey: process.env.SECRET_API_KEY,\n    environment: process.env.NODE_ENV,\n  },\n  [connectDB, warmCache]\n)\n","index.ts",[857,1466,1467,1486,1506,1526,1530,1536,1541,1546,1554,1559,1582,1603,1609,1624],{"__ignoreMap":875},[879,1468,1469,1471,1473,1475,1477,1479,1481,1484],{"class":881,"line":882},[879,1470,886],{"class":885},[879,1472,890],{"class":889},[879,1474,1155],{"class":896},[879,1476,900],{"class":889},[879,1478,903],{"class":885},[879,1480,1244],{"class":906},[879,1482,1483],{"class":910},".\u002Fconfig",[879,1485,1249],{"class":906},[879,1487,1488,1490,1492,1495,1497,1499,1501,1504],{"class":881,"line":917},[879,1489,886],{"class":885},[879,1491,890],{"class":889},[879,1493,1494],{"class":896},"connectDB",[879,1496,900],{"class":889},[879,1498,903],{"class":885},[879,1500,1244],{"class":906},[879,1502,1503],{"class":910},".\u002Fdatabase",[879,1505,1249],{"class":906},[879,1507,1508,1510,1512,1515,1517,1519,1521,1524],{"class":881,"line":923},[879,1509,886],{"class":885},[879,1511,890],{"class":889},[879,1513,1514],{"class":896},"warmCache",[879,1516,900],{"class":889},[879,1518,903],{"class":885},[879,1520,1244],{"class":906},[879,1522,1523],{"class":910},".\u002Fcache",[879,1525,1249],{"class":906},[879,1527,1528],{"class":881,"line":1136},[879,1529,920],{"emptyLinePlaceholder":8},[879,1531,1532],{"class":881,"line":1298},[879,1533,1535],{"class":1534},"sghk6","\u002F\u002F connectDB and warmCache both receive the parsed config and run concurrently.\n",[879,1537,1538],{"class":881,"line":1340},[879,1539,1540],{"class":1534},"\u002F\u002F The process only continues once both resolve.\n",[879,1542,1543],{"class":881,"line":1386},[879,1544,1545],{"class":1534},"\u002F\u002F If the API key is missing or too short, the app refuses to boot.\n",[879,1547,1548,1550,1552],{"class":881,"line":1413},[879,1549,1185],{"class":885},[879,1551,1073],{"class":933},[879,1553,1076],{"class":889},[879,1555,1556],{"class":881,"line":1419},[879,1557,1558],{"class":889},"  {\n",[879,1560,1561,1564,1566,1569,1571,1574,1576,1580],{"class":881,"line":1424},[879,1562,1563],{"class":896},"    apiKey",[879,1565,952],{"class":1304},[879,1567,1568],{"class":896}," process",[879,1570,1042],{"class":889},[879,1572,1573],{"class":896},"env",[879,1575,1042],{"class":889},[879,1577,1579],{"class":1578},"sPzPf","SECRET_API_KEY",[879,1581,1089],{"class":889},[879,1583,1585,1588,1590,1592,1594,1596,1598,1601],{"class":881,"line":1584},11,[879,1586,1587],{"class":896},"    environment",[879,1589,952],{"class":1304},[879,1591,1568],{"class":896},[879,1593,1042],{"class":889},[879,1595,1573],{"class":896},[879,1597,1042],{"class":889},[879,1599,1600],{"class":1578},"NODE_ENV",[879,1602,1089],{"class":889},[879,1604,1606],{"class":881,"line":1605},12,[879,1607,1608],{"class":889},"  },\n",[879,1610,1612,1615,1617,1619,1621],{"class":881,"line":1611},13,[879,1613,1614],{"class":889},"  [",[879,1616,1494],{"class":896},[879,1618,1326],{"class":889},[879,1620,1514],{"class":896},[879,1622,1623],{"class":889},"]\n",[879,1625,1627],{"class":881,"line":1626},14,[879,1628,974],{"class":889},[869,1630,1633],{"className":1223,"code":1631,"filename":1632,"language":1226,"meta":875,"style":875},"import { getConfiguration } from '.\u002Fconfig'\n\nexport function connectDB() {\n  const { environment, port } = getConfiguration()\n\n  if (environment === 'production') {\n    console.log(`Starting PROD database on port ${port}...`)\n  }\n}\n","database.ts",[857,1634,1635,1653,1657,1669,1694,1698,1720,1748,1753],{"__ignoreMap":875},[879,1636,1637,1639,1641,1643,1645,1647,1649,1651],{"class":881,"line":882},[879,1638,886],{"class":885},[879,1640,890],{"class":889},[879,1642,1166],{"class":896},[879,1644,900],{"class":889},[879,1646,903],{"class":885},[879,1648,1244],{"class":906},[879,1650,1483],{"class":910},[879,1652,1249],{"class":906},[879,1654,1655],{"class":881,"line":917},[879,1656,920],{"emptyLinePlaceholder":8},[879,1658,1659,1661,1663,1666],{"class":881,"line":923},[879,1660,926],{"class":885},[879,1662,930],{"class":929},[879,1664,1665],{"class":933}," connectDB",[879,1667,1668],{"class":889},"() {\n",[879,1670,1671,1674,1676,1679,1681,1684,1686,1688,1691],{"class":881,"line":1136},[879,1672,1673],{"class":929},"  const",[879,1675,890],{"class":889},[879,1677,1678],{"class":1280},"environment",[879,1680,1326],{"class":889},[879,1682,1683],{"class":1280},"port",[879,1685,900],{"class":889},[879,1687,1442],{"class":951},[879,1689,1690],{"class":933}," getConfiguration",[879,1692,1693],{"class":889},"()\n",[879,1695,1696],{"class":881,"line":1298},[879,1697,920],{"emptyLinePlaceholder":8},[879,1699,1700,1703,1706,1708,1711,1713,1715,1717],{"class":881,"line":1340},[879,1701,1702],{"class":885},"  if",[879,1704,1705],{"class":889}," (",[879,1707,1678],{"class":896},[879,1709,1710],{"class":951}," ===",[879,1712,1244],{"class":906},[879,1714,1369],{"class":910},[879,1716,1329],{"class":906},[879,1718,1719],{"class":889},") {\n",[879,1721,1722,1725,1727,1730,1732,1735,1738,1740,1743,1746],{"class":881,"line":1386},[879,1723,1724],{"class":896},"    console",[879,1726,1042],{"class":889},[879,1728,1729],{"class":933},"log",[879,1731,1319],{"class":889},[879,1733,1734],{"class":910},"`Starting PROD database on port ",[879,1736,1737],{"class":929},"${",[879,1739,1683],{"class":896},[879,1741,1742],{"class":929},"}",[879,1744,1745],{"class":910},"...`",[879,1747,974],{"class":889},[879,1749,1750],{"class":881,"line":1413},[879,1751,1752],{"class":889},"  }\n",[879,1754,1755],{"class":881,"line":1419},[879,1756,1757],{"class":889},"}\n",[1759,1760,1763],"callout",{"color":1761,"icon":1762},"warning","i-lucide-alert-triangle",[854,1764,1765,1766,1769,1770,1772,1773,1775],{},"Always ",[857,1767,1768],{},"await defineConfiguration(...)",". Omitting ",[857,1771,1185],{}," means the Promise resolves in the background, ",[857,1774,1203],{}," will throw a premature-access error for any code that runs before it settles.",[1759,1777,1780],{"color":1778,"icon":1779},"info","i-lucide-info",[854,1781,1782,1783,1786,1787,1790],{},"The validated config is frozen with ",[857,1784,1785],{},"Object.freeze"," after all initialization tasks complete. Any attempt to mutate the returned object is silently ignored in sloppy mode and throws a ",[857,1788,1789],{},"TypeError"," in strict mode.",[1792,1793,1794],"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 .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 pre.shiki code .saOXh, html code.shiki .saOXh{--shiki-light:#000000;--shiki-default:#000000;--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 .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}html pre.shiki code .sPzPf, html code.shiki .sPzPf{--shiki-light:#0070C1;--shiki-default:#0070C1;--shiki-dark:#BD93F9}",{"title":875,"searchDepth":917,"depth":917,"links":1796},[1797,1798,1799,1803],{"id":866,"depth":917,"text":867},{"id":977,"depth":917,"text":978},{"id":1045,"depth":917,"text":1046,"children":1800},[1801,1802],{"id":1055,"depth":923,"text":1058},{"id":1207,"depth":923,"text":1210},{"id":1219,"depth":917,"text":1220},"Creates a type-safe configuration manager for a project with runtime validation.","md","i-lucide-settings",{},null,"---\ntitle: createConfigManager\ndescription: Creates a type-safe configuration manager for a project with runtime validation.\nicon: i-lucide-settings\n---\n\n`createConfigManager` manages global configuration state for a project. It validates raw input against a Zod schema at startup, runs async initialization tasks, then deep-freezes the result so it cannot be mutated at runtime.\n\nWhen validation fails, the function throws a detailed, pretty-printed error listing every failing field, making misconfigured environments fail immediately at boot rather than silently at runtime.\n\n## Definition\n\n```ts [configurationDefiner.ts]\nimport { type ZodType } from \"zod\"\n\nexport function createConfigManager\u003CT>(schema: ZodType\u003CT>, projectName?: string)\n```\n \n## Parameters\n\n| Parameter | Type | Required | Description |\n| --- | --- | --- | --- |\n| `schema` | `ZodType\u003CT>` | Yes | Zod schema used to parse and validate the incoming configuration data. |\n| `projectName` | `string` | No | Label prefixed to error messages for debugging. Defaults to `\"App\"`. |\n\n## Returns\n\n`createConfigManager` returns an object with two functions bound to the provided schema:\n\n### `defineConfiguration(config, initializations?): Promise\u003Cvoid>`\n\n```ts\nasync function defineConfiguration(\n  config: unknown,\n  initializations?: ((config: T) => Promise\u003Cvoid> | void)[]\n): Promise\u003Cvoid>\n```\n\n`defineConfiguration` validates `config`, runs all `initializations` tasks concurrently, then freezes and stores the result. Call this once during application startup, before any module calls `getConfiguration`.\n\n**`initializations`** is an optional array of async setup functions that receive the validated config object. Use it for side effects that depend on config values and must complete before the app starts, for example, opening a database connection or warming a cache. All tasks run via `Promise.all`. If any task throws, the error propagates and the config is never stored.\n\n**`await` is required.** `defineConfiguration` returns a `Promise` because `initializations` tasks are async. Omitting `await` means the config will not be stored before the rest of the module initializes, and any call to `getConfiguration()` will throw a premature-access error.\n\n### `getConfiguration(): T`\n\nReturns the validated, frozen configuration object. Throws with a stack trace if called before `defineConfiguration` resolves successfully.\n\n## Example Usage\n\n```typescript [config.ts]\nimport { z } from 'zod'\nimport { createConfigManager } from '@riavzon\u002Futils'\n\nconst AppSchema = z.object({\n  apiKey: z.string().min(10, 'API Key is too short'),\n  environment: z.enum(['development', 'production', 'testing']),\n  port: z.number().default(3000),\n})\n\nexport const { defineConfiguration, getConfiguration } = createConfigManager(AppSchema, 'CoreApp')\n```\n\n```typescript [index.ts]\nimport { defineConfiguration } from '.\u002Fconfig'\nimport { connectDB } from '.\u002Fdatabase'\nimport { warmCache } from '.\u002Fcache'\n\n\u002F\u002F connectDB and warmCache both receive the parsed config and run concurrently.\n\u002F\u002F The process only continues once both resolve.\n\u002F\u002F If the API key is missing or too short, the app refuses to boot.\nawait defineConfiguration(\n  {\n    apiKey: process.env.SECRET_API_KEY,\n    environment: process.env.NODE_ENV,\n  },\n  [connectDB, warmCache]\n)\n```\n\n```typescript [database.ts]\nimport { getConfiguration } from '.\u002Fconfig'\n\nexport function connectDB() {\n  const { environment, port } = getConfiguration()\n\n  if (environment === 'production') {\n    console.log(`Starting PROD database on port ${port}...`)\n  }\n}\n```\n\n::callout{icon=\"i-lucide-alert-triangle\" color=\"warning\"}\nAlways `await defineConfiguration(...)`. Omitting `await` means the Promise resolves in the background, `getConfiguration()` will throw a premature-access error for any code that runs before it settles.\n::\n\n::callout{icon=\"i-lucide-info\" color=\"info\"}\nThe validated config is frozen with `Object.freeze` after all initialization tasks complete. Any attempt to mutate the returned object is silently ignored in sloppy mode and throws a `TypeError` in strict mode.\n::\n",{"title":146,"description":1804},"xi9AOhnrARTTPR-EACgEZdONU1OpupZj-lpEwHnHKFA",[1813,1814],{"title":142,"path":143,"stem":144,"children":-1},{"title":150,"path":151,"stem":152,"children":-1},{"id":849,"title":146,"body":1816,"description":1804,"extension":1805,"icon":1806,"meta":2531,"module":1808,"navigation":8,"path":147,"rawbody":1809,"seo":2532,"stem":148,"__hash__":1811},{"type":851,"value":1817,"toc":2522},[1818,1822,1824,1826,1888,1890,1936,1938,1942,1946,2016,2026,2034,2050,2054,2058,2060,2252,2394,2502,2512,2520],[854,1819,1820,859],{},[857,1821,146],{},[854,1823,862],{},[864,1825,867],{"id":866},[869,1827,1828],{"className":871,"code":872,"filename":873,"language":874,"meta":875,"style":875},[857,1829,1830,1850,1854],{"__ignoreMap":875},[879,1831,1832,1834,1836,1838,1840,1842,1844,1846,1848],{"class":881,"line":882},[879,1833,886],{"class":885},[879,1835,890],{"class":889},[879,1837,893],{"class":885},[879,1839,897],{"class":896},[879,1841,900],{"class":889},[879,1843,903],{"class":885},[879,1845,907],{"class":906},[879,1847,911],{"class":910},[879,1849,914],{"class":906},[879,1851,1852],{"class":881,"line":917},[879,1853,920],{"emptyLinePlaceholder":8},[879,1855,1856,1858,1860,1862,1864,1866,1868,1870,1872,1874,1876,1878,1880,1882,1884,1886],{"class":881,"line":923},[879,1857,926],{"class":885},[879,1859,930],{"class":929},[879,1861,934],{"class":933},[879,1863,937],{"class":889},[879,1865,941],{"class":940},[879,1867,944],{"class":889},[879,1869,948],{"class":947},[879,1871,952],{"class":951},[879,1873,897],{"class":955},[879,1875,937],{"class":889},[879,1877,941],{"class":940},[879,1879,962],{"class":889},[879,1881,965],{"class":947},[879,1883,968],{"class":951},[879,1885,971],{"class":955},[879,1887,974],{"class":889},[864,1889,978],{"id":977},[980,1891,1892,1904],{},[983,1893,1894],{},[986,1895,1896,1898,1900,1902],{},[989,1897,991],{},[989,1899,994],{},[989,1901,997],{},[989,1903,1000],{},[1002,1905,1906,1920],{},[986,1907,1908,1912,1916,1918],{},[1007,1909,1910],{},[857,1911,948],{},[1007,1913,1914],{},[857,1915,1015],{},[1007,1917,1018],{},[1007,1919,1021],{},[986,1921,1922,1926,1930,1932],{},[1007,1923,1924],{},[857,1925,965],{},[1007,1927,1928],{},[857,1929,1032],{},[1007,1931,1035],{},[1007,1933,1038,1934,1042],{},[857,1935,1041],{},[864,1937,1046],{"id":1045},[854,1939,1940,1051],{},[857,1941,146],{},[1053,1943,1944],{"id":1055},[857,1945,1058],{},[869,1947,1948],{"className":871,"code":1061,"language":874,"meta":875,"style":875},[857,1949,1950,1960,1970,2002],{"__ignoreMap":875},[879,1951,1952,1954,1956,1958],{"class":881,"line":882},[879,1953,1068],{"class":929},[879,1955,930],{"class":929},[879,1957,1073],{"class":933},[879,1959,1076],{"class":889},[879,1961,1962,1964,1966,1968],{"class":881,"line":917},[879,1963,1081],{"class":947},[879,1965,952],{"class":951},[879,1967,1086],{"class":955},[879,1969,1089],{"class":889},[879,1971,1972,1974,1976,1978,1980,1982,1984,1986,1988,1990,1992,1994,1996,1998,2000],{"class":881,"line":923},[879,1973,1094],{"class":947},[879,1975,968],{"class":951},[879,1977,1099],{"class":889},[879,1979,1102],{"class":947},[879,1981,952],{"class":951},[879,1983,1107],{"class":955},[879,1985,1110],{"class":889},[879,1987,1113],{"class":929},[879,1989,1116],{"class":955},[879,1991,937],{"class":889},[879,1993,1121],{"class":955},[879,1995,1124],{"class":889},[879,1997,1127],{"class":951},[879,1999,1130],{"class":955},[879,2001,1133],{"class":889},[879,2003,2004,2006,2008,2010,2012,2014],{"class":881,"line":1136},[879,2005,1139],{"class":889},[879,2007,952],{"class":951},[879,2009,1116],{"class":955},[879,2011,937],{"class":889},[879,2013,1121],{"class":955},[879,2015,1150],{"class":889},[854,2017,2018,1156,2020,1159,2022,1163,2024,1042],{},[857,2019,1155],{},[857,2021,1102],{},[857,2023,1162],{},[857,2025,1166],{},[854,2027,2028,1174,2032,1178],{},[1170,2029,2030],{},[857,2031,1162],{},[857,2033,1177],{},[854,2035,2036,1187,2040,1190,2042,1194,2044,1197,2046,1200,2048,1204],{},[1170,2037,2038,1186],{},[857,2039,1185],{},[857,2041,1155],{},[857,2043,1193],{},[857,2045,1162],{},[857,2047,1185],{},[857,2049,1203],{},[1053,2051,2052],{"id":1207},[857,2053,1210],{},[854,2055,1213,2056,1216],{},[857,2057,1155],{},[864,2059,1220],{"id":1219},[869,2061,2062],{"className":1223,"code":1224,"filename":1225,"language":1226,"meta":875,"style":875},[857,2063,2064,2082,2100,2104,2120,2150,2188,2210,2214,2218],{"__ignoreMap":875},[879,2065,2066,2068,2070,2072,2074,2076,2078,2080],{"class":881,"line":882},[879,2067,886],{"class":885},[879,2069,890],{"class":889},[879,2071,1237],{"class":896},[879,2073,900],{"class":889},[879,2075,903],{"class":885},[879,2077,1244],{"class":906},[879,2079,911],{"class":910},[879,2081,1249],{"class":906},[879,2083,2084,2086,2088,2090,2092,2094,2096,2098],{"class":881,"line":917},[879,2085,886],{"class":885},[879,2087,890],{"class":889},[879,2089,146],{"class":896},[879,2091,900],{"class":889},[879,2093,903],{"class":885},[879,2095,1244],{"class":906},[879,2097,1266],{"class":910},[879,2099,1249],{"class":906},[879,2101,2102],{"class":881,"line":923},[879,2103,920],{"emptyLinePlaceholder":8},[879,2105,2106,2108,2110,2112,2114,2116,2118],{"class":881,"line":1136},[879,2107,1277],{"class":929},[879,2109,1281],{"class":1280},[879,2111,1284],{"class":951},[879,2113,1287],{"class":896},[879,2115,1042],{"class":889},[879,2117,1292],{"class":933},[879,2119,1295],{"class":889},[879,2121,2122,2124,2126,2128,2130,2132,2134,2136,2138,2140,2142,2144,2146,2148],{"class":881,"line":1298},[879,2123,1301],{"class":896},[879,2125,952],{"class":1304},[879,2127,1287],{"class":896},[879,2129,1042],{"class":889},[879,2131,1032],{"class":933},[879,2133,1313],{"class":889},[879,2135,1316],{"class":933},[879,2137,1319],{"class":889},[879,2139,1323],{"class":1322},[879,2141,1326],{"class":889},[879,2143,1329],{"class":906},[879,2145,1332],{"class":910},[879,2147,1329],{"class":906},[879,2149,1337],{"class":889},[879,2151,2152,2154,2156,2158,2160,2162,2164,2166,2168,2170,2172,2174,2176,2178,2180,2182,2184,2186],{"class":881,"line":1340},[879,2153,1343],{"class":896},[879,2155,952],{"class":1304},[879,2157,1287],{"class":896},[879,2159,1042],{"class":889},[879,2161,1352],{"class":933},[879,2163,1355],{"class":889},[879,2165,1329],{"class":906},[879,2167,1360],{"class":910},[879,2169,1329],{"class":906},[879,2171,1326],{"class":889},[879,2173,1329],{"class":906},[879,2175,1369],{"class":910},[879,2177,1329],{"class":906},[879,2179,1326],{"class":889},[879,2181,1329],{"class":906},[879,2183,1378],{"class":910},[879,2185,1329],{"class":906},[879,2187,1383],{"class":889},[879,2189,2190,2192,2194,2196,2198,2200,2202,2204,2206,2208],{"class":881,"line":1386},[879,2191,1389],{"class":896},[879,2193,952],{"class":1304},[879,2195,1287],{"class":896},[879,2197,1042],{"class":889},[879,2199,1398],{"class":933},[879,2201,1313],{"class":889},[879,2203,1403],{"class":933},[879,2205,1319],{"class":889},[879,2207,1408],{"class":1322},[879,2209,1337],{"class":889},[879,2211,2212],{"class":881,"line":1413},[879,2213,1416],{"class":889},[879,2215,2216],{"class":881,"line":1419},[879,2217,920],{"emptyLinePlaceholder":8},[879,2219,2220,2222,2224,2226,2228,2230,2232,2234,2236,2238,2240,2242,2244,2246,2248,2250],{"class":881,"line":1424},[879,2221,926],{"class":885},[879,2223,1429],{"class":929},[879,2225,890],{"class":889},[879,2227,1155],{"class":1280},[879,2229,1326],{"class":889},[879,2231,1166],{"class":1280},[879,2233,900],{"class":889},[879,2235,1442],{"class":951},[879,2237,934],{"class":933},[879,2239,1319],{"class":889},[879,2241,1449],{"class":896},[879,2243,1326],{"class":889},[879,2245,1329],{"class":906},[879,2247,1456],{"class":910},[879,2249,1329],{"class":906},[879,2251,974],{"class":889},[869,2253,2254],{"className":1223,"code":1463,"filename":1464,"language":1226,"meta":875,"style":875},[857,2255,2256,2274,2292,2310,2314,2318,2322,2326,2334,2338,2356,2374,2378,2390],{"__ignoreMap":875},[879,2257,2258,2260,2262,2264,2266,2268,2270,2272],{"class":881,"line":882},[879,2259,886],{"class":885},[879,2261,890],{"class":889},[879,2263,1155],{"class":896},[879,2265,900],{"class":889},[879,2267,903],{"class":885},[879,2269,1244],{"class":906},[879,2271,1483],{"class":910},[879,2273,1249],{"class":906},[879,2275,2276,2278,2280,2282,2284,2286,2288,2290],{"class":881,"line":917},[879,2277,886],{"class":885},[879,2279,890],{"class":889},[879,2281,1494],{"class":896},[879,2283,900],{"class":889},[879,2285,903],{"class":885},[879,2287,1244],{"class":906},[879,2289,1503],{"class":910},[879,2291,1249],{"class":906},[879,2293,2294,2296,2298,2300,2302,2304,2306,2308],{"class":881,"line":923},[879,2295,886],{"class":885},[879,2297,890],{"class":889},[879,2299,1514],{"class":896},[879,2301,900],{"class":889},[879,2303,903],{"class":885},[879,2305,1244],{"class":906},[879,2307,1523],{"class":910},[879,2309,1249],{"class":906},[879,2311,2312],{"class":881,"line":1136},[879,2313,920],{"emptyLinePlaceholder":8},[879,2315,2316],{"class":881,"line":1298},[879,2317,1535],{"class":1534},[879,2319,2320],{"class":881,"line":1340},[879,2321,1540],{"class":1534},[879,2323,2324],{"class":881,"line":1386},[879,2325,1545],{"class":1534},[879,2327,2328,2330,2332],{"class":881,"line":1413},[879,2329,1185],{"class":885},[879,2331,1073],{"class":933},[879,2333,1076],{"class":889},[879,2335,2336],{"class":881,"line":1419},[879,2337,1558],{"class":889},[879,2339,2340,2342,2344,2346,2348,2350,2352,2354],{"class":881,"line":1424},[879,2341,1563],{"class":896},[879,2343,952],{"class":1304},[879,2345,1568],{"class":896},[879,2347,1042],{"class":889},[879,2349,1573],{"class":896},[879,2351,1042],{"class":889},[879,2353,1579],{"class":1578},[879,2355,1089],{"class":889},[879,2357,2358,2360,2362,2364,2366,2368,2370,2372],{"class":881,"line":1584},[879,2359,1587],{"class":896},[879,2361,952],{"class":1304},[879,2363,1568],{"class":896},[879,2365,1042],{"class":889},[879,2367,1573],{"class":896},[879,2369,1042],{"class":889},[879,2371,1600],{"class":1578},[879,2373,1089],{"class":889},[879,2375,2376],{"class":881,"line":1605},[879,2377,1608],{"class":889},[879,2379,2380,2382,2384,2386,2388],{"class":881,"line":1611},[879,2381,1614],{"class":889},[879,2383,1494],{"class":896},[879,2385,1326],{"class":889},[879,2387,1514],{"class":896},[879,2389,1623],{"class":889},[879,2391,2392],{"class":881,"line":1626},[879,2393,974],{"class":889},[869,2395,2396],{"className":1223,"code":1631,"filename":1632,"language":1226,"meta":875,"style":875},[857,2397,2398,2416,2420,2430,2450,2454,2472,2494,2498],{"__ignoreMap":875},[879,2399,2400,2402,2404,2406,2408,2410,2412,2414],{"class":881,"line":882},[879,2401,886],{"class":885},[879,2403,890],{"class":889},[879,2405,1166],{"class":896},[879,2407,900],{"class":889},[879,2409,903],{"class":885},[879,2411,1244],{"class":906},[879,2413,1483],{"class":910},[879,2415,1249],{"class":906},[879,2417,2418],{"class":881,"line":917},[879,2419,920],{"emptyLinePlaceholder":8},[879,2421,2422,2424,2426,2428],{"class":881,"line":923},[879,2423,926],{"class":885},[879,2425,930],{"class":929},[879,2427,1665],{"class":933},[879,2429,1668],{"class":889},[879,2431,2432,2434,2436,2438,2440,2442,2444,2446,2448],{"class":881,"line":1136},[879,2433,1673],{"class":929},[879,2435,890],{"class":889},[879,2437,1678],{"class":1280},[879,2439,1326],{"class":889},[879,2441,1683],{"class":1280},[879,2443,900],{"class":889},[879,2445,1442],{"class":951},[879,2447,1690],{"class":933},[879,2449,1693],{"class":889},[879,2451,2452],{"class":881,"line":1298},[879,2453,920],{"emptyLinePlaceholder":8},[879,2455,2456,2458,2460,2462,2464,2466,2468,2470],{"class":881,"line":1340},[879,2457,1702],{"class":885},[879,2459,1705],{"class":889},[879,2461,1678],{"class":896},[879,2463,1710],{"class":951},[879,2465,1244],{"class":906},[879,2467,1369],{"class":910},[879,2469,1329],{"class":906},[879,2471,1719],{"class":889},[879,2473,2474,2476,2478,2480,2482,2484,2486,2488,2490,2492],{"class":881,"line":1386},[879,2475,1724],{"class":896},[879,2477,1042],{"class":889},[879,2479,1729],{"class":933},[879,2481,1319],{"class":889},[879,2483,1734],{"class":910},[879,2485,1737],{"class":929},[879,2487,1683],{"class":896},[879,2489,1742],{"class":929},[879,2491,1745],{"class":910},[879,2493,974],{"class":889},[879,2495,2496],{"class":881,"line":1413},[879,2497,1752],{"class":889},[879,2499,2500],{"class":881,"line":1419},[879,2501,1757],{"class":889},[1759,2503,2504],{"color":1761,"icon":1762},[854,2505,1765,2506,1769,2508,1772,2510,1775],{},[857,2507,1768],{},[857,2509,1185],{},[857,2511,1203],{},[1759,2513,2514],{"color":1778,"icon":1779},[854,2515,1782,2516,1786,2518,1790],{},[857,2517,1785],{},[857,2519,1789],{},[1792,2521,1794],{},{"title":875,"searchDepth":917,"depth":917,"links":2523},[2524,2525,2526,2530],{"id":866,"depth":917,"text":867},{"id":977,"depth":917,"text":978},{"id":1045,"depth":917,"text":1046,"children":2527},[2528,2529],{"id":1055,"depth":923,"text":1058},{"id":1207,"depth":923,"text":1210},{"id":1219,"depth":917,"text":1220},{},{"title":146,"description":1804},1780436296531]