[{"data":1,"prerenderedAt":4744},["ShallowReactive",2],{"navLinks":3,"sidebar_docs_navigation_\u002Fdocs\u002Futils":64,"navigation":306,"navLinks_footer":879,"\u002Fdocs\u002Futils\u002Fserver\u002Fenv_page":892,"\u002Fdocs\u002Futils\u002Fserver\u002Fenv_surround":2984,"\u002Fdocs\u002Futils\u002Fserver\u002Fenv":2987},{"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,"icon":47},"Utilities","docs\u002Futils\u002Findex",[73,74,95,141,257],{"title":70,"path":48,"stem":71,"icon":47},{"title":75,"icon":76,"path":77,"stem":78,"children":79,"page":53},"Eslint","i-simple-icons-eslint","\u002Fdocs\u002Futils\u002Feslint","docs\u002Futils\u002Feslint",[80,85,90],{"title":81,"path":82,"stem":83,"icon":84},"React Config","\u002Fdocs\u002Futils\u002Feslint\u002Freact","docs\u002Futils\u002Feslint\u002Freact","i-simple-icons-react",{"title":86,"path":87,"stem":88,"icon":89},"TypeScript Config","\u002Fdocs\u002Futils\u002Feslint\u002Ftypescript","docs\u002Futils\u002Feslint\u002Ftypescript","i-simple-icons-typescript",{"title":91,"path":92,"stem":93,"icon":94},"Vue Config","\u002Fdocs\u002Futils\u002Feslint\u002Fvue","docs\u002Futils\u002Feslint\u002Fvue","i-simple-icons-vuedotjs",{"title":96,"icon":97,"path":98,"stem":99,"children":100,"page":53},"Server","i-lucide-server","\u002Fdocs\u002Futils\u002Fserver","docs\u002Futils\u002Fserver",[101,106,111,116,121,126,131,136],{"title":102,"path":103,"stem":104,"icon":105},"Encryption","\u002Fdocs\u002Futils\u002Fserver\u002Fencryption","docs\u002Futils\u002Fserver\u002Fencryption","i-lucide-lock",{"title":107,"path":108,"stem":109,"icon":110},"env","\u002Fdocs\u002Futils\u002Fserver\u002Fenv","docs\u002Futils\u002Fserver\u002Fenv","i-lucide-sliders-horizontal",{"title":112,"path":113,"stem":114,"icon":115},"Path Resolver","\u002Fdocs\u002Futils\u002Fserver\u002Fpathresolver","docs\u002Futils\u002Fserver\u002FpathResolver","i-lucide-folder-search",{"title":117,"path":118,"stem":119,"icon":120},"File Replacements","\u002Fdocs\u002Futils\u002Fserver\u002Freplace","docs\u002Futils\u002Fserver\u002Freplace","i-lucide-file-cog",{"title":122,"path":123,"stem":124,"icon":125},"run","\u002Fdocs\u002Futils\u002Fserver\u002Frun","docs\u002Futils\u002Fserver\u002Frun","i-lucide-terminal",{"title":127,"path":128,"stem":129,"icon":130},"scheduleTask","\u002Fdocs\u002Futils\u002Fserver\u002Fscheduletask","docs\u002Futils\u002Fserver\u002FscheduleTask","i-lucide-clock",{"title":132,"path":133,"stem":134,"icon":135},"spawnRun","\u002Fdocs\u002Futils\u002Fserver\u002Fspawnrun","docs\u002Futils\u002Fserver\u002FspawnRun","i-lucide-terminal-square",{"title":137,"path":138,"stem":139,"icon":140},"uploadCsv","\u002Fdocs\u002Futils\u002Fserver\u002Fuploadcsv","docs\u002Futils\u002Fserver\u002FuploadCsv","i-lucide-database",{"title":142,"icon":143,"path":144,"stem":145,"children":146,"page":53},"Shared","i-lucide-layers","\u002Fdocs\u002Futils\u002Fshared","docs\u002Futils\u002Fshared",[147,151,156,161,166,171,175,180,185,190,195,200,205,210,215,219,224,228,233,238,243,248,253],{"title":148,"path":149,"stem":150,"icon":143},"BatchQueue","\u002Fdocs\u002Futils\u002Fshared\u002Fbatchqueue","docs\u002Futils\u002Fshared\u002FbatchQueue",{"title":152,"path":153,"stem":154,"icon":155},"capitalize","\u002Fdocs\u002Futils\u002Fshared\u002Fcapitalize","docs\u002Futils\u002Fshared\u002Fcapitalize","i-lucide-type",{"title":157,"path":158,"stem":159,"icon":160},"chunkProcess","\u002Fdocs\u002Futils\u002Fshared\u002Fchunkprocess","docs\u002Futils\u002Fshared\u002FchunkProcess","i-lucide-list-tree",{"title":162,"path":163,"stem":164,"icon":165},"cleanObject","\u002Fdocs\u002Futils\u002Fshared\u002Fcleanobject","docs\u002Futils\u002Fshared\u002FcleanObject","i-lucide-eraser",{"title":167,"path":168,"stem":169,"icon":170},"createConfigManager","\u002Fdocs\u002Futils\u002Fshared\u002Fconfigurationdefiner","docs\u002Futils\u002Fshared\u002FconfigurationDefiner","i-lucide-settings",{"title":172,"path":173,"stem":174,"icon":130},"debounce","\u002Fdocs\u002Futils\u002Fshared\u002Fdebounce","docs\u002Futils\u002Fshared\u002Fdebounce",{"title":176,"path":177,"stem":178,"icon":179},"ensureArray","\u002Fdocs\u002Futils\u002Fshared\u002Fensurearray","docs\u002Futils\u002Fshared\u002FensureArray","i-lucide-list-plus",{"title":181,"path":182,"stem":183,"icon":184},"fetchWithRetry","\u002Fdocs\u002Futils\u002Fshared\u002Ffetchwithretry","docs\u002Futils\u002Fshared\u002FfetchWithRetry","i-lucide-repeat",{"title":186,"path":187,"stem":188,"icon":189},"filterEmptyValues","\u002Fdocs\u002Futils\u002Fshared\u002Ffilteremptyvalues","docs\u002Futils\u002Fshared\u002FfilterEmptyValues","i-lucide-filter",{"title":191,"path":192,"stem":193,"icon":194},"findStringsInObject","\u002Fdocs\u002Futils\u002Fshared\u002Ffindobjectvalues","docs\u002Futils\u002Fshared\u002FfindObjectValues","i-lucide-search-code",{"title":196,"path":197,"stem":198,"icon":199},"fisherYatesShuffle","\u002Fdocs\u002Futils\u002Fshared\u002Ffisheryatesshuffle","docs\u002Futils\u002Fshared\u002FfisherYatesShuffle","i-lucide-shuffle",{"title":201,"path":202,"stem":203,"icon":204},"getRandomImage","\u002Fdocs\u002Futils\u002Fshared\u002Fgetrandomimage","docs\u002Futils\u002Fshared\u002FgetRandomImage","i-lucide-image",{"title":206,"path":207,"stem":208,"icon":209},"isObjectHasValues","\u002Fdocs\u002Futils\u002Fshared\u002Fisobjecthasvalues","docs\u002Futils\u002Fshared\u002FisObjectHasValues","i-lucide-check-check",{"title":211,"path":212,"stem":213,"icon":214},"isAsyncOrPromise","\u002Fdocs\u002Futils\u002Fshared\u002Fispromise","docs\u002Futils\u002Fshared\u002FisPromise","i-lucide-zap",{"title":216,"path":217,"stem":218,"icon":140},"MiniCache","\u002Fdocs\u002Futils\u002Fshared\u002Fminicache","docs\u002Futils\u002Fshared\u002FminiCache",{"title":220,"path":221,"stem":222,"icon":223},"parseCookies","\u002Fdocs\u002Futils\u002Fshared\u002Fparserawcookies","docs\u002Futils\u002Fshared\u002FparseRawCookies","i-lucide-cookie",{"title":225,"path":226,"stem":227,"icon":105},"safeAction","\u002Fdocs\u002Futils\u002Fshared\u002Fpromiselocker","docs\u002Futils\u002Fshared\u002FpromiseLocker",{"title":229,"path":230,"stem":231,"icon":232},"Random","\u002Fdocs\u002Futils\u002Fshared\u002Frandom","docs\u002Futils\u002Fshared\u002Frandom","i-lucide-dice-5",{"title":234,"path":235,"stem":236,"icon":237},"range","\u002Fdocs\u002Futils\u002Fshared\u002Frange","docs\u002Futils\u002Fshared\u002Frange","i-lucide-list-ordered",{"title":239,"path":240,"stem":241,"icon":242},"rateLimiters","\u002Fdocs\u002Futils\u002Fshared\u002Fratelimiters","docs\u002Futils\u002Fshared\u002FrateLimiters","i-lucide-timer-reset",{"title":244,"path":245,"stem":246,"icon":247},"safeObjectMerge","\u002Fdocs\u002Futils\u002Fshared\u002Fsafemerge","docs\u002Futils\u002Fshared\u002FsafeMerge","i-lucide-git-merge",{"title":249,"path":250,"stem":251,"icon":252},"textTruncation","\u002Fdocs\u002Futils\u002Fshared\u002Ftexttruncation","docs\u002Futils\u002Fshared\u002FtextTruncation","i-lucide-scissors",{"title":254,"path":255,"stem":256,"icon":28},"validateZodSchema","\u002Fdocs\u002Futils\u002Fshared\u002Fvalidatezodschema","docs\u002Futils\u002Fshared\u002FvalidateZodSchema",{"title":258,"path":259,"stem":260,"children":261,"icon":263},"Utility Types","\u002Fdocs\u002Futils\u002Ftypes","docs\u002Futils\u002Ftypes\u002Findex",[262,264,269,273,278,282,286,291,296,301],{"title":258,"path":259,"stem":260,"icon":263},"i-lucide-code-2",{"title":265,"path":266,"stem":267,"icon":268},"Brand","\u002Fdocs\u002Futils\u002Ftypes\u002Fbrand","docs\u002Futils\u002Ftypes\u002FBrand","i-lucide-tag",{"title":270,"path":271,"stem":272,"icon":143},"DeepPartial","\u002Fdocs\u002Futils\u002Ftypes\u002Fdeeppartial","docs\u002Futils\u002Ftypes\u002FDeepPartial",{"title":274,"path":275,"stem":276,"icon":277},"Merge","\u002Fdocs\u002Futils\u002Ftypes\u002Fmerge","docs\u002Futils\u002Ftypes\u002FMerge","i-lucide-combine",{"title":279,"path":280,"stem":281,"icon":189},"NonNullable","\u002Fdocs\u002Futils\u002Ftypes\u002Fnonnullable","docs\u002Futils\u002Ftypes\u002FNonNullable",{"title":283,"path":284,"stem":285,"icon":263},"Prettify","\u002Fdocs\u002Futils\u002Ftypes\u002Fprettify","docs\u002Futils\u002Ftypes\u002FPrettify",{"title":287,"path":288,"stem":289,"icon":290},"PromiseType","\u002Fdocs\u002Futils\u002Ftypes\u002Fpromisetype","docs\u002Futils\u002Ftypes\u002FPromiseType","i-lucide-arrow-right-circle",{"title":292,"path":293,"stem":294,"icon":295},"RequireKeys","\u002Fdocs\u002Futils\u002Ftypes\u002Frequirekeys","docs\u002Futils\u002Ftypes\u002FRequireKeys","i-lucide-key",{"title":297,"path":298,"stem":299,"icon":300},"StandardResponse","\u002Fdocs\u002Futils\u002Ftypes\u002Fstandardresponse","docs\u002Futils\u002Ftypes\u002FStandardResponse","i-lucide-file-json",{"title":302,"path":303,"stem":304,"icon":305},"ValueOf","\u002Fdocs\u002Futils\u002Ftypes\u002Fvalueof","docs\u002Futils\u002Ftypes\u002FValueOf","i-lucide-braces",[307],{"title":9,"path":66,"stem":67,"children":308,"page":53},[309,456,574,579,757,824],{"title":20,"path":22,"stem":310,"children":311},"docs\u002Fauth-h3client\u002Findex",[312,313,322,359,385,407,410,431,435],{"title":20,"path":22,"stem":310},{"title":14,"path":314,"stem":315,"children":316},"\u002Fdocs\u002Fauth-h3client\u002Fgetting-started","docs\u002Fauth-h3client\u002F00.getting-started\u002Findex",[317,318],{"title":14,"path":314,"stem":315},{"title":319,"path":320,"stem":321},"Nuxt Module","\u002Fdocs\u002Fauth-h3client\u002Fgetting-started\u002Fnuxt","docs\u002Fauth-h3client\u002F00.getting-started\u002F00.nuxt",{"title":323,"path":324,"stem":325,"children":326},"Essentials","\u002Fdocs\u002Fauth-h3client\u002Fessentials","docs\u002Fauth-h3client\u002F01.essentials\u002Findex",[327,328,332,336,340,344,348,351,355],{"title":323,"path":324,"stem":325},{"title":329,"path":330,"stem":331},"Session Management","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fsession","docs\u002Fauth-h3client\u002F01.essentials\u002F00.session",{"title":333,"path":334,"stem":335},"Route Protection","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Froute-protection","docs\u002Fauth-h3client\u002F01.essentials\u002F01.route-protection",{"title":337,"path":338,"stem":339},"CSRF Protection","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fcsrf","docs\u002Fauth-h3client\u002F01.essentials\u002F02.csrf",{"title":341,"path":342,"stem":343},"Auth Flows","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fauth-flows","docs\u002Fauth-h3client\u002F01.essentials\u002F03.auth-flows",{"title":345,"path":346,"stem":347},"OAuth and OIDC","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Foauth","docs\u002Fauth-h3client\u002F01.essentials\u002F04.oauth",{"title":33,"path":349,"stem":350},"\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fbot-detection","docs\u002Fauth-h3client\u002F01.essentials\u002F05.bot-detection",{"title":352,"path":353,"stem":354},"Cookies","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Fcookies","docs\u002Fauth-h3client\u002F01.essentials\u002F06.cookies",{"title":356,"path":357,"stem":358},"Logging","\u002Fdocs\u002Fauth-h3client\u002Fessentials\u002Flogging","docs\u002Fauth-h3client\u002F01.essentials\u002F07.logging",{"title":360,"path":361,"stem":362,"children":363},"MFA","\u002Fdocs\u002Fauth-h3client\u002Fmfa","docs\u002Fauth-h3client\u002F02.mfa\u002Findex",[364,365,369,373,377,381],{"title":360,"path":361,"stem":362},{"title":366,"path":367,"stem":368},"Built-in MFA","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fbuilt-in-flow","docs\u002Fauth-h3client\u002F02.mfa\u002F01.built-in-flow",{"title":370,"path":371,"stem":372},"Password Reset","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fpassword-reset","docs\u002Fauth-h3client\u002F02.mfa\u002F02.password-reset",{"title":374,"path":375,"stem":376},"Email Change","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Femail-change","docs\u002Fauth-h3client\u002F02.mfa\u002F03.email-change",{"title":378,"path":379,"stem":380},"Custom MFA Flow","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fcustom-flow","docs\u002Fauth-h3client\u002F02.mfa\u002F04.custom-flow",{"title":382,"path":383,"stem":384},"Client-Side MFA","\u002Fdocs\u002Fauth-h3client\u002Fmfa\u002Fclient-side","docs\u002Fauth-h3client\u002F02.mfa\u002F05.client-side",{"title":386,"path":387,"stem":388,"children":389},"Client-side","\u002Fdocs\u002Fauth-h3client\u002Fclient","docs\u002Fauth-h3client\u002F03.client\u002Findex",[390,391,395,399,403],{"title":386,"path":387,"stem":388},{"title":392,"path":393,"stem":394},"useAuthData","\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fuse-auth-data","docs\u002Fauth-h3client\u002F03.client\u002F00.use-auth-data",{"title":396,"path":397,"stem":398},"useMagicLink","\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fuse-magic-link","docs\u002Fauth-h3client\u002F03.client\u002F01.use-magic-link",{"title":400,"path":401,"stem":402},"executeRequest","\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fexecute-request","docs\u002Fauth-h3client\u002F03.client\u002F02.execute-request",{"title":404,"path":405,"stem":406},"getCsrfToken","\u002Fdocs\u002Fauth-h3client\u002Fclient\u002Fget-csrf-token","docs\u002Fauth-h3client\u002F03.client\u002F03.get-csrf-token",{"title":38,"path":408,"stem":409},"\u002Fdocs\u002Fauth-h3client\u002Fsecurity","docs\u002Fauth-h3client\u002F04.security",{"title":411,"path":412,"stem":413,"children":414,"page":53},"Guides","\u002Fdocs\u002Fauth-h3client\u002Fguides","docs\u002Fauth-h3client\u002F05.guides",[415,419,423,427],{"title":416,"path":417,"stem":418},"H3 and Nitro Setup","\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fh3-nitro","docs\u002Fauth-h3client\u002F05.guides\u002F00.h3-nitro",{"title":420,"path":421,"stem":422},"HMAC Inter-service Auth","\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fhmac","docs\u002Fauth-h3client\u002F05.guides\u002Fhmac",{"title":424,"path":425,"stem":426},"Image Upload","\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fimage-upload","docs\u002Fauth-h3client\u002F05.guides\u002Fimage-upload",{"title":428,"path":429,"stem":430},"mTLS Configuration","\u002Fdocs\u002Fauth-h3client\u002Fguides\u002Fmtls","docs\u002Fauth-h3client\u002F05.guides\u002Fmtls",{"title":432,"path":433,"stem":434},"Configuration","\u002Fdocs\u002Fauth-h3client\u002Fconfiguration","docs\u002Fauth-h3client\u002F06.configuration",{"title":436,"path":437,"stem":438,"children":439},"API Reference","\u002Fdocs\u002Fauth-h3client\u002Fapi","docs\u002Fauth-h3client\u002F07.api\u002Findex",[440,441,445,449,453],{"title":436,"path":437,"stem":438},{"title":442,"path":443,"stem":444},"Routes Reference","\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Fcontrollers","docs\u002Fauth-h3client\u002F07.api\u002F00.controllers",{"title":446,"path":447,"stem":448},"Middleware Reference","\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Fmiddleware","docs\u002Fauth-h3client\u002F07.api\u002F01.middleware",{"title":450,"path":451,"stem":452},"Client-side Reference","\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Fcomposables","docs\u002Fauth-h3client\u002F07.api\u002F02.composables",{"title":70,"path":454,"stem":455},"\u002Fdocs\u002Fauth-h3client\u002Fapi\u002Futilities","docs\u002Fauth-h3client\u002F07.api\u002F03.utilities",{"title":457,"path":35,"stem":458,"children":459},"Bot Detector","docs\u002Fbot-detection\u002Findex",[460,461,464,468,472,491,565,568,571],{"title":457,"path":35,"stem":458},{"title":14,"path":462,"stem":463},"\u002Fdocs\u002Fbot-detection\u002Fgetting-started","docs\u002Fbot-detection\u002F00.getting-started",{"title":465,"path":466,"stem":467},"CLI","\u002Fdocs\u002Fbot-detection\u002Fcli","docs\u002Fbot-detection\u002F01.cli",{"title":469,"path":470,"stem":471},"Data Sources","\u002Fdocs\u002Fbot-detection\u002Fdata-sources","docs\u002Fbot-detection\u002F02.data-sources",{"title":411,"path":473,"stem":474,"children":475,"page":53},"\u002Fdocs\u002Fbot-detection\u002Fguides","docs\u002Fbot-detection\u002F03.guides",[476,480,484,487],{"title":477,"path":478,"stem":479},"Custom Checkers","\u002Fdocs\u002Fbot-detection\u002Fguides\u002Fcustom","docs\u002Fbot-detection\u002F03.guides\u002FCUSTOM",{"title":481,"path":482,"stem":483},"Scheduling Database Generation","\u002Fdocs\u002Fbot-detection\u002Fguides\u002Fgenerate","docs\u002Fbot-detection\u002F03.guides\u002FGENERATE",{"title":356,"path":485,"stem":486},"\u002Fdocs\u002Fbot-detection\u002Fguides\u002Flogging","docs\u002Fbot-detection\u002F03.guides\u002FLOGGING",{"title":488,"path":489,"stem":490},"Score Modes and Reputation Healing","\u002Fdocs\u002Fbot-detection\u002Fguides\u002Fscore","docs\u002Fbot-detection\u002F03.guides\u002FSCORE",{"title":492,"path":493,"stem":494,"children":495},"Checkers","\u002Fdocs\u002Fbot-detection\u002Fcheckers","docs\u002Fbot-detection\u002F04.checkers\u002Findex",[496,497,501,505,509,513,517,521,525,529,533,537,541,545,549,553,557,561],{"title":492,"path":493,"stem":494},{"title":498,"path":499,"stem":500},"IP Validation","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fip-validation","docs\u002Fbot-detection\u002F04.checkers\u002F01.ip-validation",{"title":502,"path":503,"stem":504},"Good \u002F Bad Bot Verification","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fgood-bots","docs\u002Fbot-detection\u002F04.checkers\u002F02.good-bots",{"title":506,"path":507,"stem":508},"Browser & Device Fingerprint","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fbrowser-device","docs\u002Fbot-detection\u002F04.checkers\u002F03.browser-device",{"title":510,"path":511,"stem":512},"Locale Map","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Flocale-map","docs\u002Fbot-detection\u002F04.checkers\u002F04.locale-map",{"title":514,"path":515,"stem":516},"Known Threats","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fknown-threats","docs\u002Fbot-detection\u002F04.checkers\u002F05.known-threats",{"title":518,"path":519,"stem":520},"ASN Classification","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fasn-classification","docs\u002Fbot-detection\u002F04.checkers\u002F06.asn-classification",{"title":522,"path":523,"stem":524},"Tor Analysis","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Ftor-analysis","docs\u002Fbot-detection\u002F04.checkers\u002F07.tor-analysis",{"title":526,"path":527,"stem":528},"Timezone Consistency","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Ftimezone-consistency","docs\u002Fbot-detection\u002F04.checkers\u002F08.timezone-consistency",{"title":530,"path":531,"stem":532},"Honeypot","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fhoneypot","docs\u002Fbot-detection\u002F04.checkers\u002F09.honeypot",{"title":534,"path":535,"stem":536},"Known Bad IPs","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fknown-bad-ips","docs\u002Fbot-detection\u002F04.checkers\u002F10.known-bad-ips",{"title":538,"path":539,"stem":540},"Behavior Rate","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fbehavior-rate","docs\u002Fbot-detection\u002F04.checkers\u002F11.behavior-rate",{"title":542,"path":543,"stem":544},"Proxy \u002F ISP \u002F Cookie","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fproxy-isp-cookies","docs\u002Fbot-detection\u002F04.checkers\u002F12.proxy-isp-cookies",{"title":546,"path":547,"stem":548},"Session Coherence","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fsession-coherence","docs\u002Fbot-detection\u002F04.checkers\u002F13.session-coherence",{"title":550,"path":551,"stem":552},"Velocity Fingerprint","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fvelocity-fingerprint","docs\u002Fbot-detection\u002F04.checkers\u002F14.velocity-fingerprint",{"title":554,"path":555,"stem":556},"UA & Header Analysis","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fua-header","docs\u002Fbot-detection\u002F04.checkers\u002F15.ua-header",{"title":558,"path":559,"stem":560},"Geolocation","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fgeolocation","docs\u002Fbot-detection\u002F04.checkers\u002F16.geolocation",{"title":562,"path":563,"stem":564},"Known Bad User-Agents","\u002Fdocs\u002Fbot-detection\u002Fcheckers\u002Fknown-bad-ua","docs\u002Fbot-detection\u002F04.checkers\u002F17.known-bad-ua",{"title":38,"path":566,"stem":567},"\u002Fdocs\u002Fbot-detection\u002Fsecurity","docs\u002Fbot-detection\u002F04.security",{"title":436,"path":569,"stem":570},"\u002Fdocs\u002Fbot-detection\u002Fapi","docs\u002Fbot-detection\u002F05.api",{"title":432,"path":572,"stem":573},"\u002Fdocs\u002Fbot-detection\u002Fconfiguration","docs\u002Fbot-detection\u002F06.configuration",{"title":575,"path":11,"stem":576,"children":577},"Introduction","docs\u002Fgetting-started\u002Findex",[578],{"title":575,"path":11,"stem":576},{"title":27,"path":29,"stem":580,"children":581},"docs\u002Fiam\u002Findex",[582,583,586,721,724,740,743],{"title":27,"path":29,"stem":580},{"title":14,"path":584,"stem":585},"\u002Fdocs\u002Fiam\u002Fgetting-started","docs\u002Fiam\u002F00.getting-started",{"title":323,"path":587,"stem":588,"children":589},"\u002Fdocs\u002Fiam\u002Fessentials","docs\u002Fiam\u002F01.essentials\u002Findex",[590,591,595,599,603,607,611,615,619,623,627,631,634,638,642,646,650,653,657,661,664,668,671],{"title":323,"path":587,"stem":588},{"title":592,"path":593,"stem":594},"Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Ftokens","docs\u002Fiam\u002F01.essentials\u002F00.tokens",{"title":596,"path":597,"stem":598},"Access Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Faccess-tokens","docs\u002Fiam\u002F01.essentials\u002F01.access-tokens",{"title":600,"path":601,"stem":602},"Refresh Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Frefresh-tokens","docs\u002Fiam\u002F01.essentials\u002F02.refresh-tokens",{"title":604,"path":605,"stem":606},"Anomaly Detection","\u002Fdocs\u002Fiam\u002Fessentials\u002Fanomalies","docs\u002Fiam\u002F01.essentials\u002F03.anomalies",{"title":608,"path":609,"stem":610},"Signup","\u002Fdocs\u002Fiam\u002Fessentials\u002Fsignup","docs\u002Fiam\u002F01.essentials\u002F04.signup",{"title":612,"path":613,"stem":614},"Login","\u002Fdocs\u002Fiam\u002Fessentials\u002Flogin","docs\u002Fiam\u002F01.essentials\u002F05.login",{"title":616,"path":617,"stem":618},"Logout","\u002Fdocs\u002Fiam\u002Fessentials\u002Flogout","docs\u002Fiam\u002F01.essentials\u002F06.logout",{"title":620,"path":621,"stem":622},"OAuth","\u002Fdocs\u002Fiam\u002Fessentials\u002Foauth","docs\u002Fiam\u002F01.essentials\u002F07.oauth",{"title":624,"path":625,"stem":626},"Magic Links","\u002Fdocs\u002Fiam\u002Fessentials\u002Fmagic-links","docs\u002Fiam\u002F01.essentials\u002F08.magic-links",{"title":628,"path":629,"stem":630},"Emails","\u002Fdocs\u002Fiam\u002Fessentials\u002Femails","docs\u002Fiam\u002F01.essentials\u002F09.emails",{"title":360,"path":632,"stem":633},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fmfa","docs\u002Fiam\u002F01.essentials\u002F10.mfa",{"title":635,"path":636,"stem":637},"Fingerprinting","\u002Fdocs\u002Fiam\u002Fessentials\u002Ffingerprinting","docs\u002Fiam\u002F01.essentials\u002F11.fingerprinting",{"title":639,"path":640,"stem":641},"Backend for Frontend","\u002Fdocs\u002Fiam\u002Fessentials\u002Fbff","docs\u002Fiam\u002F01.essentials\u002F12.bff",{"title":643,"path":644,"stem":645},"HMAC Authentication","\u002Fdocs\u002Fiam\u002Fessentials\u002Fhmac","docs\u002Fiam\u002F01.essentials\u002F13.hmac",{"title":647,"path":648,"stem":649},"XSS Protection","\u002Fdocs\u002Fiam\u002Fessentials\u002Fxss","docs\u002Fiam\u002F01.essentials\u002F14.xss",{"title":356,"path":651,"stem":652},"\u002Fdocs\u002Fiam\u002Fessentials\u002Flogging","docs\u002Fiam\u002F01.essentials\u002F15.logging",{"title":654,"path":655,"stem":656},"Rate Limiting","\u002Fdocs\u002Fiam\u002Fessentials\u002Frate-limiting","docs\u002Fiam\u002F01.essentials\u002F16.rate-limiting",{"title":658,"path":659,"stem":660},"Database","\u002Fdocs\u002Fiam\u002Fessentials\u002Fdatabase","docs\u002Fiam\u002F01.essentials\u002F17.database",{"title":352,"path":662,"stem":663},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fcookies","docs\u002Fiam\u002F01.essentials\u002F18.cookies",{"title":665,"path":666,"stem":667},"Service Startup","\u002Fdocs\u002Fiam\u002Fessentials\u002Fservice","docs\u002Fiam\u002F01.essentials\u002F19.service",{"title":370,"path":669,"stem":670},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fpassword-reset","docs\u002Fiam\u002F01.essentials\u002F20.password-reset",{"title":672,"path":673,"stem":674,"children":675},"API Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi","docs\u002Fiam\u002F01.essentials\u002F21.api\u002Findex",[676,677,681,685,715,718],{"title":672,"path":673,"stem":674},{"title":678,"path":679,"stem":680},"Creating Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fcreation","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F00.creation",{"title":682,"path":683,"stem":684},"Verifying Tokens","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fverification","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F01.verification",{"title":686,"path":687,"stem":688,"children":689},"Management","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002Findex",[690,691,695,699,703,707,711],{"title":686,"path":687,"stem":688},{"title":692,"path":693,"stem":694},"Privilege and Scopes","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Fprivilege","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F00.privilege",{"title":696,"path":697,"stem":698},"Revocation","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Frevocation","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F01.revocation",{"title":700,"path":701,"stem":702},"Rotation","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Frotation","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F02.rotation",{"title":704,"path":705,"stem":706},"IP Restriction","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Fip-updates","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F03.ip-updates",{"title":708,"path":709,"stem":710},"Metadata","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Fmetadata","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F04.metadata",{"title":712,"path":713,"stem":714},"Token Listing","\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fmanagement\u002Flist","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F02.management\u002F05.list",{"title":654,"path":716,"stem":717},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Frate-limiting","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F03.rate-limiting",{"title":38,"path":719,"stem":720},"\u002Fdocs\u002Fiam\u002Fessentials\u002Fapi\u002Fsecurity","docs\u002Fiam\u002F01.essentials\u002F21.api\u002F04.security",{"title":38,"path":722,"stem":723},"\u002Fdocs\u002Fiam\u002Fsecurity","docs\u002Fiam\u002F02.security",{"title":411,"path":725,"stem":726,"children":727,"page":53},"\u002Fdocs\u002Fiam\u002Fguides","docs\u002Fiam\u002F03.guides",[728,732,736],{"title":729,"path":730,"stem":731},"Deployment","\u002Fdocs\u002Fiam\u002Fguides\u002Fdeployment","docs\u002Fiam\u002F03.guides\u002Fdeployment",{"title":733,"path":734,"stem":735},"Operation Scripts","\u002Fdocs\u002Fiam\u002Fguides\u002Foperation-scripts","docs\u002Fiam\u002F03.guides\u002Foperation-scripts",{"title":737,"path":738,"stem":739},"Role-Based Access Control","\u002Fdocs\u002Fiam\u002Fguides\u002Frbac","docs\u002Fiam\u002F03.guides\u002Frbac",{"title":432,"path":741,"stem":742},"\u002Fdocs\u002Fiam\u002Fconfiguration","docs\u002Fiam\u002F04.configuration",{"title":744,"path":745,"stem":746,"children":747,"page":53},"Api","\u002Fdocs\u002Fiam\u002Fapi","docs\u002Fiam\u002F05.API",[748,751,754],{"title":436,"path":749,"stem":750},"\u002Fdocs\u002Fiam\u002Fapi\u002Fapi","docs\u002Fiam\u002F05.API\u002F00.api",{"title":446,"path":752,"stem":753},"\u002Fdocs\u002Fiam\u002Fapi\u002Fmiddlewares","docs\u002Fiam\u002F05.API\u002F02.middlewares",{"title":442,"path":755,"stem":756},"\u002Fdocs\u002Fiam\u002Fapi\u002Froutes","docs\u002Fiam\u002F05.API\u002F03.routes",{"title":40,"path":42,"stem":758,"children":759},"docs\u002Fshield-base\u002Findex",[760,761,764,768,809,813,817,821],{"title":40,"path":42,"stem":758},{"title":14,"path":762,"stem":763},"\u002Fdocs\u002Fshield-base\u002Fgetting-started","docs\u002Fshield-base\u002F00.getting-started",{"title":765,"path":766,"stem":767},"CLI Reference","\u002Fdocs\u002Fshield-base\u002Fcli","docs\u002Fshield-base\u002F01.cli",{"title":469,"path":769,"stem":770,"children":771},"\u002Fdocs\u002Fshield-base\u002Fdata-sources","docs\u002Fshield-base\u002F02.data-sources\u002Findex",[772,773,777,781,785,789,793,797,801,805],{"title":469,"path":769,"stem":770},{"title":774,"path":775,"stem":776},"BGP \u002F ASN","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fbgp","docs\u002Fshield-base\u002F02.data-sources\u002Fbgp",{"title":778,"path":779,"stem":780},"City Geolocation","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fcity","docs\u002Fshield-base\u002F02.data-sources\u002Fcity",{"title":782,"path":783,"stem":784},"Country Geolocation","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fcountry","docs\u002Fshield-base\u002F02.data-sources\u002Fcountry",{"title":786,"path":787,"stem":788},"Verified Crawlers","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fcrawlers","docs\u002Fshield-base\u002F02.data-sources\u002Fcrawlers",{"title":790,"path":791,"stem":792},"Disposable Emails","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Femail","docs\u002Fshield-base\u002F02.data-sources\u002Femail",{"title":794,"path":795,"stem":796},"FireHOL Threat Intelligence","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Ffirehol","docs\u002Fshield-base\u002F02.data-sources\u002Ffirehol",{"title":798,"path":799,"stem":800},"Proxy Detection","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fproxy","docs\u002Fshield-base\u002F02.data-sources\u002Fproxy",{"title":802,"path":803,"stem":804},"Tor Nodes","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Ftor","docs\u002Fshield-base\u002F02.data-sources\u002Ftor",{"title":806,"path":807,"stem":808},"Suspicious User-Agents","\u002Fdocs\u002Fshield-base\u002Fdata-sources\u002Fuseragent","docs\u002Fshield-base\u002F02.data-sources\u002Fuseragent",{"title":810,"path":811,"stem":812},"Programmatic Usage","\u002Fdocs\u002Fshield-base\u002Fusage","docs\u002Fshield-base\u002F03.usage",{"title":814,"path":815,"stem":816},"Custom Data Sources","\u002Fdocs\u002Fshield-base\u002Fcustom-data-sources","docs\u002Fshield-base\u002F04.custom-data-sources",{"title":818,"path":819,"stem":820},"TypeScript Types","\u002Fdocs\u002Fshield-base\u002Ftypes","docs\u002Fshield-base\u002F05.types",{"title":436,"path":822,"stem":823},"\u002Fdocs\u002Fshield-base\u002Fapi","docs\u002Fshield-base\u002F06.api",{"title":70,"path":48,"stem":71,"children":825},[826,827,832,842,867],{"title":70,"path":48,"stem":71},{"title":75,"path":77,"stem":78,"children":828,"page":53},[829,830,831],{"title":81,"path":82,"stem":83},{"title":86,"path":87,"stem":88},{"title":91,"path":92,"stem":93},{"title":96,"path":98,"stem":99,"children":833,"page":53},[834,835,836,837,838,839,840,841],{"title":102,"path":103,"stem":104},{"title":107,"path":108,"stem":109},{"title":112,"path":113,"stem":114},{"title":117,"path":118,"stem":119},{"title":122,"path":123,"stem":124},{"title":127,"path":128,"stem":129},{"title":132,"path":133,"stem":134},{"title":137,"path":138,"stem":139},{"title":142,"path":144,"stem":145,"children":843,"page":53},[844,845,846,847,848,849,850,851,852,853,854,855,856,857,858,859,860,861,862,863,864,865,866],{"title":148,"path":149,"stem":150},{"title":152,"path":153,"stem":154},{"title":157,"path":158,"stem":159},{"title":162,"path":163,"stem":164},{"title":167,"path":168,"stem":169},{"title":172,"path":173,"stem":174},{"title":176,"path":177,"stem":178},{"title":181,"path":182,"stem":183},{"title":186,"path":187,"stem":188},{"title":191,"path":192,"stem":193},{"title":196,"path":197,"stem":198},{"title":201,"path":202,"stem":203},{"title":206,"path":207,"stem":208},{"title":211,"path":212,"stem":213},{"title":216,"path":217,"stem":218},{"title":220,"path":221,"stem":222},{"title":225,"path":226,"stem":227},{"title":229,"path":230,"stem":231},{"title":234,"path":235,"stem":236},{"title":239,"path":240,"stem":241},{"title":244,"path":245,"stem":246},{"title":249,"path":250,"stem":251},{"title":254,"path":255,"stem":256},{"title":258,"path":259,"stem":260,"children":868},[869,870,871,872,873,874,875,876,877,878],{"title":258,"path":259,"stem":260},{"title":265,"path":266,"stem":267},{"title":270,"path":271,"stem":272},{"title":274,"path":275,"stem":276},{"title":279,"path":280,"stem":281},{"title":283,"path":284,"stem":285},{"title":287,"path":288,"stem":289},{"title":292,"path":293,"stem":294},{"title":297,"path":298,"stem":299},{"title":302,"path":303,"stem":304},{"id":4,"extension":5,"links":880,"meta":891,"stem":62,"__hash__":63},[881,889,890],{"nested":8,"label":9,"icon":10,"to":11,"children":882},[883,884,885,886,887,888],{"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":893,"title":107,"body":894,"description":2977,"extension":2978,"icon":110,"meta":2979,"module":2980,"navigation":8,"path":108,"rawbody":2981,"seo":2982,"stem":109,"__hash__":2983},"docs\u002Fdocs\u002Futils\u002Fserver\u002Fenv.md",{"type":895,"value":896,"toc":2963},"minimark",[897,918,925,934,939,1359,1363,1373,1464,1476,1489,1493,1497,1500,1568,1598,1731,1734,1737,1795,1807,1948,1951,1967,2011,2025,2126,2130,2133,2178,2181,2276,2280,2283,2332,2342,2432,2438,2442,2445,2491,2560,2563,2645,2648,2651,2681,2684,2740,2746,2750,2959],[898,899,900,901,904,905,908,909,913,914,917],"p",{},"The ",[902,903,107],"code",{}," module provides small, predictable readers for ",[902,906,907],{},"process.env",". Each getter is ",[910,911,912],"strong",{},"total",": it never throws and never returns a value outside the requested range. A missing, blank, malformed, or out-of-range variable falls back to the caller's default, so a bad ",[902,915,916],{},".env"," degrades a single feature instead of crashing the process at startup.",[898,919,920,921,924],{},"The one deliberate exception is ",[902,922,923],{},"envRequired",", which exists precisely to fail loudly for credentials.",[926,927,928],"note",{},[898,929,930,931,933],{},"Values are read on every call rather than cached at module load. This makes the helpers safe to use in tests where ",[902,932,907],{}," changes between assertions. If you need load-time semantics, read the value once into a constant.",[935,936,938],"h2",{"id":937},"definition","Definition",[940,941,947],"pre",{"className":942,"code":943,"filename":944,"language":945,"meta":946,"style":946},"language-ts shiki shiki-themes light-plus light-plus dracula","export type EnvRangeFallback = \"fallback\" | \"clamp\";\n\nexport interface EnvNumberOptions {\n  min?: number;\n  max?: number;\n  onRangeError?: EnvRangeFallback;\n}\n\nexport function envInt(\n  name: string,\n  fallback: number,\n  options?: EnvNumberOptions,\n): number;\nexport function envFloat(\n  name: string,\n  fallback: number,\n  options?: EnvNumberOptions,\n): number;\nexport function envIntOrInfinity(name: string, fallback: number): number;\nexport function envStr(name: string, fallback: string): string;\nexport function envList(name: string, fallback?: readonly string[]): string[];\nexport function envBool(name: string, fallback: boolean): boolean;\nexport function envRequired(name: string): string;\n","env.ts","ts","",[902,948,949,995,1001,1015,1030,1042,1054,1060,1065,1080,1096,1108,1120,1132,1144,1155,1166,1177,1188,1225,1259,1298,1333],{"__ignoreMap":946},[950,951,954,958,962,966,970,974,978,981,984,986,989,991],"span",{"class":952,"line":953},"line",1,[950,955,957],{"class":956},"sZ328","export",[950,959,961],{"class":960},"sl46w"," type",[950,963,965],{"class":964},"sFs1U"," EnvRangeFallback",[950,967,969],{"class":968},"saOXh"," =",[950,971,973],{"class":972},"sFkSl"," \"",[950,975,977],{"class":976},"sFB1V","fallback",[950,979,980],{"class":972},"\"",[950,982,983],{"class":968}," |",[950,985,973],{"class":972},[950,987,988],{"class":976},"clamp",[950,990,980],{"class":972},[950,992,994],{"class":993},"sDd4n",";\n",[950,996,998],{"class":952,"line":997},2,[950,999,1000],{"emptyLinePlaceholder":8},"\n",[950,1002,1004,1006,1009,1012],{"class":952,"line":1003},3,[950,1005,957],{"class":956},[950,1007,1008],{"class":960}," interface",[950,1010,1011],{"class":964}," EnvNumberOptions",[950,1013,1014],{"class":993}," {\n",[950,1016,1018,1022,1025,1028],{"class":952,"line":1017},4,[950,1019,1021],{"class":1020},"sjsA6","  min",[950,1023,1024],{"class":968},"?:",[950,1026,1027],{"class":964}," number",[950,1029,994],{"class":993},[950,1031,1033,1036,1038,1040],{"class":952,"line":1032},5,[950,1034,1035],{"class":1020},"  max",[950,1037,1024],{"class":968},[950,1039,1027],{"class":964},[950,1041,994],{"class":993},[950,1043,1045,1048,1050,1052],{"class":952,"line":1044},6,[950,1046,1047],{"class":1020},"  onRangeError",[950,1049,1024],{"class":968},[950,1051,965],{"class":964},[950,1053,994],{"class":993},[950,1055,1057],{"class":952,"line":1056},7,[950,1058,1059],{"class":993},"}\n",[950,1061,1063],{"class":952,"line":1062},8,[950,1064,1000],{"emptyLinePlaceholder":8},[950,1066,1068,1070,1073,1077],{"class":952,"line":1067},9,[950,1069,957],{"class":956},[950,1071,1072],{"class":960}," function",[950,1074,1076],{"class":1075},"sHOzp"," envInt",[950,1078,1079],{"class":993},"(\n",[950,1081,1083,1087,1090,1093],{"class":952,"line":1082},10,[950,1084,1086],{"class":1085},"sygFZ","  name",[950,1088,1089],{"class":968},":",[950,1091,1092],{"class":964}," string",[950,1094,1095],{"class":993},",\n",[950,1097,1099,1102,1104,1106],{"class":952,"line":1098},11,[950,1100,1101],{"class":1085},"  fallback",[950,1103,1089],{"class":968},[950,1105,1027],{"class":964},[950,1107,1095],{"class":993},[950,1109,1111,1114,1116,1118],{"class":952,"line":1110},12,[950,1112,1113],{"class":1085},"  options",[950,1115,1024],{"class":968},[950,1117,1011],{"class":964},[950,1119,1095],{"class":993},[950,1121,1123,1126,1128,1130],{"class":952,"line":1122},13,[950,1124,1125],{"class":993},")",[950,1127,1089],{"class":968},[950,1129,1027],{"class":964},[950,1131,994],{"class":993},[950,1133,1135,1137,1139,1142],{"class":952,"line":1134},14,[950,1136,957],{"class":956},[950,1138,1072],{"class":960},[950,1140,1141],{"class":1075}," envFloat",[950,1143,1079],{"class":993},[950,1145,1147,1149,1151,1153],{"class":952,"line":1146},15,[950,1148,1086],{"class":1085},[950,1150,1089],{"class":968},[950,1152,1092],{"class":964},[950,1154,1095],{"class":993},[950,1156,1158,1160,1162,1164],{"class":952,"line":1157},16,[950,1159,1101],{"class":1085},[950,1161,1089],{"class":968},[950,1163,1027],{"class":964},[950,1165,1095],{"class":993},[950,1167,1169,1171,1173,1175],{"class":952,"line":1168},17,[950,1170,1113],{"class":1085},[950,1172,1024],{"class":968},[950,1174,1011],{"class":964},[950,1176,1095],{"class":993},[950,1178,1180,1182,1184,1186],{"class":952,"line":1179},18,[950,1181,1125],{"class":993},[950,1183,1089],{"class":968},[950,1185,1027],{"class":964},[950,1187,994],{"class":993},[950,1189,1191,1193,1195,1198,1201,1204,1206,1208,1211,1213,1215,1217,1219,1221,1223],{"class":952,"line":1190},19,[950,1192,957],{"class":956},[950,1194,1072],{"class":960},[950,1196,1197],{"class":1075}," envIntOrInfinity",[950,1199,1200],{"class":993},"(",[950,1202,1203],{"class":1085},"name",[950,1205,1089],{"class":968},[950,1207,1092],{"class":964},[950,1209,1210],{"class":993},", ",[950,1212,977],{"class":1085},[950,1214,1089],{"class":968},[950,1216,1027],{"class":964},[950,1218,1125],{"class":993},[950,1220,1089],{"class":968},[950,1222,1027],{"class":964},[950,1224,994],{"class":993},[950,1226,1228,1230,1232,1235,1237,1239,1241,1243,1245,1247,1249,1251,1253,1255,1257],{"class":952,"line":1227},20,[950,1229,957],{"class":956},[950,1231,1072],{"class":960},[950,1233,1234],{"class":1075}," envStr",[950,1236,1200],{"class":993},[950,1238,1203],{"class":1085},[950,1240,1089],{"class":968},[950,1242,1092],{"class":964},[950,1244,1210],{"class":993},[950,1246,977],{"class":1085},[950,1248,1089],{"class":968},[950,1250,1092],{"class":964},[950,1252,1125],{"class":993},[950,1254,1089],{"class":968},[950,1256,1092],{"class":964},[950,1258,994],{"class":993},[950,1260,1262,1264,1266,1269,1271,1273,1275,1277,1279,1281,1283,1286,1288,1291,1293,1295],{"class":952,"line":1261},21,[950,1263,957],{"class":956},[950,1265,1072],{"class":960},[950,1267,1268],{"class":1075}," envList",[950,1270,1200],{"class":993},[950,1272,1203],{"class":1085},[950,1274,1089],{"class":968},[950,1276,1092],{"class":964},[950,1278,1210],{"class":993},[950,1280,977],{"class":1085},[950,1282,1024],{"class":968},[950,1284,1285],{"class":960}," readonly",[950,1287,1092],{"class":964},[950,1289,1290],{"class":993},"[])",[950,1292,1089],{"class":968},[950,1294,1092],{"class":964},[950,1296,1297],{"class":993},"[];\n",[950,1299,1301,1303,1305,1308,1310,1312,1314,1316,1318,1320,1322,1325,1327,1329,1331],{"class":952,"line":1300},22,[950,1302,957],{"class":956},[950,1304,1072],{"class":960},[950,1306,1307],{"class":1075}," envBool",[950,1309,1200],{"class":993},[950,1311,1203],{"class":1085},[950,1313,1089],{"class":968},[950,1315,1092],{"class":964},[950,1317,1210],{"class":993},[950,1319,977],{"class":1085},[950,1321,1089],{"class":968},[950,1323,1324],{"class":964}," boolean",[950,1326,1125],{"class":993},[950,1328,1089],{"class":968},[950,1330,1324],{"class":964},[950,1332,994],{"class":993},[950,1334,1336,1338,1340,1343,1345,1347,1349,1351,1353,1355,1357],{"class":952,"line":1335},23,[950,1337,957],{"class":956},[950,1339,1072],{"class":960},[950,1341,1342],{"class":1075}," envRequired",[950,1344,1200],{"class":993},[950,1346,1203],{"class":1085},[950,1348,1089],{"class":968},[950,1350,1092],{"class":964},[950,1352,1125],{"class":993},[950,1354,1089],{"class":968},[950,1356,1092],{"class":964},[950,1358,994],{"class":993},[935,1360,1362],{"id":1361},"range-options","Range options",[898,1364,1365,1368,1369,1372],{},[902,1366,1367],{},"envInt"," and ",[902,1370,1371],{},"envFloat"," accept the same options object.",[1374,1375,1376,1395],"table",{},[1377,1378,1379],"thead",{},[1380,1381,1382,1386,1389,1392],"tr",{},[1383,1384,1385],"th",{},"Property",[1383,1387,1388],{},"Type",[1383,1390,1391],{},"Default",[1383,1393,1394],{},"Description",[1396,1397,1398,1419,1438],"tbody",{},[1380,1399,1400,1406,1411,1416],{},[1401,1402,1403],"td",{},[902,1404,1405],{},"min",[1401,1407,1408],{},[902,1409,1410],{},"number",[1401,1412,1413],{},[902,1414,1415],{},"-Infinity",[1401,1417,1418],{},"Inclusive lower bound.",[1380,1420,1421,1426,1430,1435],{},[1401,1422,1423],{},[902,1424,1425],{},"max",[1401,1427,1428],{},[902,1429,1410],{},[1401,1431,1432],{},[902,1433,1434],{},"Infinity",[1401,1436,1437],{},"Inclusive upper bound.",[1380,1439,1440,1445,1450,1455],{},[1401,1441,1442],{},[902,1443,1444],{},"onRangeError",[1401,1446,1447],{},[902,1448,1449],{},"EnvRangeFallback",[1401,1451,1452],{},[902,1453,1454],{},"'fallback'",[1401,1456,1457,1459,1460,1463],{},[902,1458,1454],{}," returns the caller's default when the parsed value is out of range. ",[902,1461,1462],{},"'clamp'"," returns the nearest bound instead.",[898,1465,1466,1467,1469,1470,1472,1473,1475],{},"When ",[902,1468,1405],{}," is greater than ",[902,1471,1425],{},", the bounds are treated as misconfigured and the fallback is returned regardless of ",[902,1474,1444],{},".",[1477,1478,1479],"tip",{},[898,1480,1481,1482,1485,1486,1488],{},"Use ",[902,1483,1484],{},"onRangeError: 'clamp'"," for tuning knobs such as thresholds or concurrency limits. A typo then lands on the nearest valid value instead of silently disabling the feature. Keep the default ",[902,1487,1454],{}," for values where any substitution would be wrong.",[935,1490,1492],{"id":1491},"functions","Functions",[1494,1495,1367],"h3",{"id":1496},"envint",[898,1498,1499],{},"Integer reader. Falls back when the variable is missing, empty, non-numeric, non-integer, or out of range.",[1374,1501,1502,1516],{},[1377,1503,1504],{},[1380,1505,1506,1509,1511,1514],{},[1383,1507,1508],{},"Parameter",[1383,1510,1388],{},[1383,1512,1513],{},"Required",[1383,1515,1394],{},[1396,1517,1518,1535,1550],{},[1380,1519,1520,1524,1529,1532],{},[1401,1521,1522],{},[902,1523,1203],{},[1401,1525,1526],{},[902,1527,1528],{},"string",[1401,1530,1531],{},"Yes",[1401,1533,1534],{},"The environment variable name.",[1380,1536,1537,1541,1545,1547],{},[1401,1538,1539],{},[902,1540,977],{},[1401,1542,1543],{},[902,1544,1410],{},[1401,1546,1531],{},[1401,1548,1549],{},"Returned when the value is unusable.",[1380,1551,1552,1557,1562,1565],{},[1401,1553,1554],{},[902,1555,1556],{},"options",[1401,1558,1559],{},[902,1560,1561],{},"EnvNumberOptions",[1401,1563,1564],{},"No",[1401,1566,1567],{},"Value range and out-of-range behavior.",[898,1569,1570,1210,1573,1576,1577,1580,1581,1584,1585,1210,1588,1210,1591,1576,1594,1597],{},[902,1571,1572],{},"\" 42 \"",[902,1574,1575],{},"1e3",", and ",[902,1578,1579],{},"0x10"," are accepted because ",[902,1582,1583],{},"Number"," understands them. ",[902,1586,1587],{},"\"12.5\"",[902,1589,1590],{},"\"abc\"",[902,1592,1593],{},"\"\"",[902,1595,1596],{},"\"Infinity\""," are rejected.",[940,1599,1602],{"className":942,"code":1600,"filename":1601,"language":945,"meta":946,"style":946},"import { envInt } from \"@riavzon\u002Futils\u002Fserver\";\n\nconst port = envInt(\"PORT\", 3000, { min: 1, max: 65535 });\nconst retries = envInt(\"RETRIES\", 3, { min: 1, onRangeError: \"clamp\" });\n","example.ts",[902,1603,1604,1629,1633,1684],{"__ignoreMap":946},[950,1605,1606,1609,1612,1614,1617,1620,1622,1625,1627],{"class":952,"line":953},[950,1607,1608],{"class":956},"import",[950,1610,1611],{"class":993}," { ",[950,1613,1367],{"class":1020},[950,1615,1616],{"class":993}," } ",[950,1618,1619],{"class":956},"from",[950,1621,973],{"class":972},[950,1623,1624],{"class":976},"@riavzon\u002Futils\u002Fserver",[950,1626,980],{"class":972},[950,1628,994],{"class":993},[950,1630,1631],{"class":952,"line":997},[950,1632,1000],{"emptyLinePlaceholder":8},[950,1634,1635,1638,1642,1644,1646,1648,1650,1653,1655,1657,1661,1664,1666,1669,1672,1674,1676,1678,1681],{"class":952,"line":1003},[950,1636,1637],{"class":960},"const",[950,1639,1641],{"class":1640},"s3JHE"," port",[950,1643,969],{"class":968},[950,1645,1076],{"class":1075},[950,1647,1200],{"class":993},[950,1649,980],{"class":972},[950,1651,1652],{"class":976},"PORT",[950,1654,980],{"class":972},[950,1656,1210],{"class":993},[950,1658,1660],{"class":1659},"spgvN","3000",[950,1662,1663],{"class":993},", { ",[950,1665,1405],{"class":1020},[950,1667,1089],{"class":1668},"s34zl",[950,1670,1671],{"class":1659}," 1",[950,1673,1210],{"class":993},[950,1675,1425],{"class":1020},[950,1677,1089],{"class":1668},[950,1679,1680],{"class":1659}," 65535",[950,1682,1683],{"class":993}," });\n",[950,1685,1686,1688,1691,1693,1695,1697,1699,1702,1704,1706,1709,1711,1713,1715,1717,1719,1721,1723,1725,1727,1729],{"class":952,"line":1017},[950,1687,1637],{"class":960},[950,1689,1690],{"class":1640}," retries",[950,1692,969],{"class":968},[950,1694,1076],{"class":1075},[950,1696,1200],{"class":993},[950,1698,980],{"class":972},[950,1700,1701],{"class":976},"RETRIES",[950,1703,980],{"class":972},[950,1705,1210],{"class":993},[950,1707,1708],{"class":1659},"3",[950,1710,1663],{"class":993},[950,1712,1405],{"class":1020},[950,1714,1089],{"class":1668},[950,1716,1671],{"class":1659},[950,1718,1210],{"class":993},[950,1720,1444],{"class":1020},[950,1722,1089],{"class":1668},[950,1724,973],{"class":972},[950,1726,988],{"class":976},[950,1728,980],{"class":972},[950,1730,1683],{"class":993},[1494,1732,1371],{"id":1733},"envfloat",[898,1735,1736],{},"Float reader. Falls back when the variable is missing, empty, non-numeric, or out of range.",[1374,1738,1739,1751],{},[1377,1740,1741],{},[1380,1742,1743,1745,1747,1749],{},[1383,1744,1508],{},[1383,1746,1388],{},[1383,1748,1513],{},[1383,1750,1394],{},[1396,1752,1753,1767,1781],{},[1380,1754,1755,1759,1763,1765],{},[1401,1756,1757],{},[902,1758,1203],{},[1401,1760,1761],{},[902,1762,1528],{},[1401,1764,1531],{},[1401,1766,1534],{},[1380,1768,1769,1773,1777,1779],{},[1401,1770,1771],{},[902,1772,977],{},[1401,1774,1775],{},[902,1776,1410],{},[1401,1778,1531],{},[1401,1780,1549],{},[1380,1782,1783,1787,1791,1793],{},[1401,1784,1785],{},[902,1786,1556],{},[1401,1788,1789],{},[902,1790,1561],{},[1401,1792,1564],{},[1401,1794,1567],{},[898,1796,1797,1368,1800,1802,1803,1806],{},[902,1798,1799],{},"NaN",[902,1801,1434],{}," are rejected here. Use ",[902,1804,1805],{},"envIntOrInfinity"," when \"unbounded\" is itself a meaningful setting.",[940,1808,1810],{"className":942,"code":1809,"filename":1601,"language":945,"meta":946,"style":946},"import { envFloat } from \"@riavzon\u002Futils\u002Fserver\";\n\nconst threshold = envFloat(\"SIMILARITY_THRESHOLD\", 0.9, { min: 0, max: 1 });\nconst temperature = envFloat(\"TEMPERATURE\", 0.2, {\n  min: 0,\n  max: 2,\n  onRangeError: \"clamp\",\n});\n",[902,1811,1812,1832,1836,1880,1908,1918,1929,1943],{"__ignoreMap":946},[950,1813,1814,1816,1818,1820,1822,1824,1826,1828,1830],{"class":952,"line":953},[950,1815,1608],{"class":956},[950,1817,1611],{"class":993},[950,1819,1371],{"class":1020},[950,1821,1616],{"class":993},[950,1823,1619],{"class":956},[950,1825,973],{"class":972},[950,1827,1624],{"class":976},[950,1829,980],{"class":972},[950,1831,994],{"class":993},[950,1833,1834],{"class":952,"line":997},[950,1835,1000],{"emptyLinePlaceholder":8},[950,1837,1838,1840,1843,1845,1847,1849,1851,1854,1856,1858,1861,1863,1865,1867,1870,1872,1874,1876,1878],{"class":952,"line":1003},[950,1839,1637],{"class":960},[950,1841,1842],{"class":1640}," threshold",[950,1844,969],{"class":968},[950,1846,1141],{"class":1075},[950,1848,1200],{"class":993},[950,1850,980],{"class":972},[950,1852,1853],{"class":976},"SIMILARITY_THRESHOLD",[950,1855,980],{"class":972},[950,1857,1210],{"class":993},[950,1859,1860],{"class":1659},"0.9",[950,1862,1663],{"class":993},[950,1864,1405],{"class":1020},[950,1866,1089],{"class":1668},[950,1868,1869],{"class":1659}," 0",[950,1871,1210],{"class":993},[950,1873,1425],{"class":1020},[950,1875,1089],{"class":1668},[950,1877,1671],{"class":1659},[950,1879,1683],{"class":993},[950,1881,1882,1884,1887,1889,1891,1893,1895,1898,1900,1902,1905],{"class":952,"line":1017},[950,1883,1637],{"class":960},[950,1885,1886],{"class":1640}," temperature",[950,1888,969],{"class":968},[950,1890,1141],{"class":1075},[950,1892,1200],{"class":993},[950,1894,980],{"class":972},[950,1896,1897],{"class":976},"TEMPERATURE",[950,1899,980],{"class":972},[950,1901,1210],{"class":993},[950,1903,1904],{"class":1659},"0.2",[950,1906,1907],{"class":993},", {\n",[950,1909,1910,1912,1914,1916],{"class":952,"line":1032},[950,1911,1021],{"class":1020},[950,1913,1089],{"class":1668},[950,1915,1869],{"class":1659},[950,1917,1095],{"class":993},[950,1919,1920,1922,1924,1927],{"class":952,"line":1044},[950,1921,1035],{"class":1020},[950,1923,1089],{"class":1668},[950,1925,1926],{"class":1659}," 2",[950,1928,1095],{"class":993},[950,1930,1931,1933,1935,1937,1939,1941],{"class":952,"line":1056},[950,1932,1047],{"class":1020},[950,1934,1089],{"class":1668},[950,1936,973],{"class":972},[950,1938,988],{"class":976},[950,1940,980],{"class":972},[950,1942,1095],{"class":993},[950,1944,1945],{"class":952,"line":1062},[950,1946,1947],{"class":993},"});\n",[1494,1949,1805],{"id":1950},"envintorinfinity",[898,1952,1953,1954,1956,1957,1210,1960,1963,1964,1475],{},"Positive integer, or ",[902,1955,1434],{}," when the variable is explicitly ",[902,1958,1959],{},"infinity",[902,1961,1962],{},"inf",", or ",[902,1965,1966],{},"none",[1374,1968,1969,1981],{},[1377,1970,1971],{},[1380,1972,1973,1975,1977,1979],{},[1383,1974,1508],{},[1383,1976,1388],{},[1383,1978,1513],{},[1383,1980,1394],{},[1396,1982,1983,1997],{},[1380,1984,1985,1989,1993,1995],{},[1401,1986,1987],{},[902,1988,1203],{},[1401,1990,1991],{},[902,1992,1528],{},[1401,1994,1531],{},[1401,1996,1534],{},[1380,1998,1999,2003,2007,2009],{},[1401,2000,2001],{},[902,2002,977],{},[1401,2004,2005],{},[902,2006,1410],{},[1401,2008,1531],{},[1401,2010,1549],{},[898,2012,2013,2014,2016,2017,2020,2021,2024],{},"The sentinels are case-insensitive and surrounding whitespace is ignored. Any other value passes through ",[902,2015,1367],{}," with ",[902,2018,2019],{},"min: 1",", so ",[902,2022,2023],{},"0"," and negative numbers fall back instead of reaching a loop as a zero budget.",[940,2026,2028],{"className":942,"code":2027,"filename":1601,"language":945,"meta":946,"style":946},"import { envIntOrInfinity } from \"@riavzon\u002Futils\u002Fserver\";\n\n\u002F\u002F MAX_ITEMS=none means \"no limit\"\nconst maxItems = envIntOrInfinity(\"MAX_ITEMS\", 100);\nconst budget = Number.isFinite(maxItems) ? maxItems : Number.MAX_SAFE_INTEGER;\n",[902,2029,2030,2050,2054,2060,2088],{"__ignoreMap":946},[950,2031,2032,2034,2036,2038,2040,2042,2044,2046,2048],{"class":952,"line":953},[950,2033,1608],{"class":956},[950,2035,1611],{"class":993},[950,2037,1805],{"class":1020},[950,2039,1616],{"class":993},[950,2041,1619],{"class":956},[950,2043,973],{"class":972},[950,2045,1624],{"class":976},[950,2047,980],{"class":972},[950,2049,994],{"class":993},[950,2051,2052],{"class":952,"line":997},[950,2053,1000],{"emptyLinePlaceholder":8},[950,2055,2056],{"class":952,"line":1003},[950,2057,2059],{"class":2058},"sghk6","\u002F\u002F MAX_ITEMS=none means \"no limit\"\n",[950,2061,2062,2064,2067,2069,2071,2073,2075,2078,2080,2082,2085],{"class":952,"line":1017},[950,2063,1637],{"class":960},[950,2065,2066],{"class":1640}," maxItems",[950,2068,969],{"class":968},[950,2070,1197],{"class":1075},[950,2072,1200],{"class":993},[950,2074,980],{"class":972},[950,2076,2077],{"class":976},"MAX_ITEMS",[950,2079,980],{"class":972},[950,2081,1210],{"class":993},[950,2083,2084],{"class":1659},"100",[950,2086,2087],{"class":993},");\n",[950,2089,2090,2092,2095,2097,2100,2102,2105,2107,2110,2113,2116,2118,2121,2123],{"class":952,"line":1032},[950,2091,1637],{"class":960},[950,2093,2094],{"class":1640}," budget",[950,2096,969],{"class":968},[950,2098,2099],{"class":1020}," Number",[950,2101,1475],{"class":993},[950,2103,2104],{"class":1075},"isFinite",[950,2106,1200],{"class":993},[950,2108,2109],{"class":1020},"maxItems",[950,2111,2112],{"class":993},") ",[950,2114,2115],{"class":968},"?",[950,2117,2066],{"class":1020},[950,2119,2120],{"class":968}," :",[950,2122,2099],{"class":1020},[950,2124,2125],{"class":993},".MAX_SAFE_INTEGER;\n",[1494,2127,2129],{"id":2128},"envstr","envStr",[898,2131,2132],{},"String reader with a fallback for missing and blank values.",[1374,2134,2135,2147],{},[1377,2136,2137],{},[1380,2138,2139,2141,2143,2145],{},[1383,2140,1508],{},[1383,2142,1388],{},[1383,2144,1513],{},[1383,2146,1394],{},[1396,2148,2149,2163],{},[1380,2150,2151,2155,2159,2161],{},[1401,2152,2153],{},[902,2154,1203],{},[1401,2156,2157],{},[902,2158,1528],{},[1401,2160,1531],{},[1401,2162,1534],{},[1380,2164,2165,2169,2173,2175],{},[1401,2166,2167],{},[902,2168,977],{},[1401,2170,2171],{},[902,2172,1528],{},[1401,2174,1531],{},[1401,2176,2177],{},"Returned when the variable is missing or whitespace-only.",[898,2179,2180],{},"The value is trimmed, but inner whitespace and case are preserved.",[940,2182,2184],{"className":942,"code":2183,"filename":1601,"language":945,"meta":946,"style":946},"import { envStr } from \"@riavzon\u002Futils\u002Fserver\";\n\nconst region = envStr(\"AWS_REGION\", \"eu-central-1\");\nconst appName = envStr(\"APP_NAME\", \"My App\"); \u002F\u002F inner spaces kept\n",[902,2185,2186,2206,2210,2241],{"__ignoreMap":946},[950,2187,2188,2190,2192,2194,2196,2198,2200,2202,2204],{"class":952,"line":953},[950,2189,1608],{"class":956},[950,2191,1611],{"class":993},[950,2193,2129],{"class":1020},[950,2195,1616],{"class":993},[950,2197,1619],{"class":956},[950,2199,973],{"class":972},[950,2201,1624],{"class":976},[950,2203,980],{"class":972},[950,2205,994],{"class":993},[950,2207,2208],{"class":952,"line":997},[950,2209,1000],{"emptyLinePlaceholder":8},[950,2211,2212,2214,2217,2219,2221,2223,2225,2228,2230,2232,2234,2237,2239],{"class":952,"line":1003},[950,2213,1637],{"class":960},[950,2215,2216],{"class":1640}," region",[950,2218,969],{"class":968},[950,2220,1234],{"class":1075},[950,2222,1200],{"class":993},[950,2224,980],{"class":972},[950,2226,2227],{"class":976},"AWS_REGION",[950,2229,980],{"class":972},[950,2231,1210],{"class":993},[950,2233,980],{"class":972},[950,2235,2236],{"class":976},"eu-central-1",[950,2238,980],{"class":972},[950,2240,2087],{"class":993},[950,2242,2243,2245,2248,2250,2252,2254,2256,2259,2261,2263,2265,2268,2270,2273],{"class":952,"line":1017},[950,2244,1637],{"class":960},[950,2246,2247],{"class":1640}," appName",[950,2249,969],{"class":968},[950,2251,1234],{"class":1075},[950,2253,1200],{"class":993},[950,2255,980],{"class":972},[950,2257,2258],{"class":976},"APP_NAME",[950,2260,980],{"class":972},[950,2262,1210],{"class":993},[950,2264,980],{"class":972},[950,2266,2267],{"class":976},"My App",[950,2269,980],{"class":972},[950,2271,2272],{"class":993},"); ",[950,2274,2275],{"class":2058},"\u002F\u002F inner spaces kept\n",[1494,2277,2279],{"id":2278},"envlist","envList",[898,2281,2282],{},"Comma-separated list, split, trimmed, and lower-cased, with blanks dropped.",[1374,2284,2285,2297],{},[1377,2286,2287],{},[1380,2288,2289,2291,2293,2295],{},[1383,2290,1508],{},[1383,2292,1388],{},[1383,2294,1513],{},[1383,2296,1394],{},[1396,2298,2299,2313],{},[1380,2300,2301,2305,2309,2311],{},[1401,2302,2303],{},[902,2304,1203],{},[1401,2306,2307],{},[902,2308,1528],{},[1401,2310,1531],{},[1401,2312,1534],{},[1380,2314,2315,2319,2324,2326],{},[1401,2316,2317],{},[902,2318,977],{},[1401,2320,2321],{},[902,2322,2323],{},"readonly string[]",[1401,2325,1564],{},[1401,2327,2328,2329,1475],{},"Returned as a copy when the variable is missing or holds only separators. Defaults to ",[902,2330,2331],{},"[]",[898,2333,2334,2337,2338,2341],{},[902,2335,2336],{},"\"a, B ,,c \""," becomes ",[902,2339,2340],{},"['a', 'b', 'c']",". Duplicates are kept, so the order and multiplicity of the raw value survive.",[940,2343,2345],{"className":942,"code":2344,"filename":1601,"language":945,"meta":946,"style":946},"import { envList } from \"@riavzon\u002Futils\u002Fserver\";\n\nconst allowedHosts = envList(\"ALLOWED_HOSTS\"); \u002F\u002F [] when unset\nconst suffixes = envList(\"TRUSTED_SUFFIXES\", [\"gov\"]); \u002F\u002F fallback is not mutated\n",[902,2346,2347,2367,2371,2396],{"__ignoreMap":946},[950,2348,2349,2351,2353,2355,2357,2359,2361,2363,2365],{"class":952,"line":953},[950,2350,1608],{"class":956},[950,2352,1611],{"class":993},[950,2354,2279],{"class":1020},[950,2356,1616],{"class":993},[950,2358,1619],{"class":956},[950,2360,973],{"class":972},[950,2362,1624],{"class":976},[950,2364,980],{"class":972},[950,2366,994],{"class":993},[950,2368,2369],{"class":952,"line":997},[950,2370,1000],{"emptyLinePlaceholder":8},[950,2372,2373,2375,2378,2380,2382,2384,2386,2389,2391,2393],{"class":952,"line":1003},[950,2374,1637],{"class":960},[950,2376,2377],{"class":1640}," allowedHosts",[950,2379,969],{"class":968},[950,2381,1268],{"class":1075},[950,2383,1200],{"class":993},[950,2385,980],{"class":972},[950,2387,2388],{"class":976},"ALLOWED_HOSTS",[950,2390,980],{"class":972},[950,2392,2272],{"class":993},[950,2394,2395],{"class":2058},"\u002F\u002F [] when unset\n",[950,2397,2398,2400,2403,2405,2407,2409,2411,2414,2416,2419,2421,2424,2426,2429],{"class":952,"line":1017},[950,2399,1637],{"class":960},[950,2401,2402],{"class":1640}," suffixes",[950,2404,969],{"class":968},[950,2406,1268],{"class":1075},[950,2408,1200],{"class":993},[950,2410,980],{"class":972},[950,2412,2413],{"class":976},"TRUSTED_SUFFIXES",[950,2415,980],{"class":972},[950,2417,2418],{"class":993},", [",[950,2420,980],{"class":972},[950,2422,2423],{"class":976},"gov",[950,2425,980],{"class":972},[950,2427,2428],{"class":993},"]); ",[950,2430,2431],{"class":2058},"\u002F\u002F fallback is not mutated\n",[2433,2434,2435],"warning",{},[898,2436,2437],{},"The returned array is always a fresh copy, including when the fallback is used. Mutating the result never affects the array you passed in.",[1494,2439,2441],{"id":2440},"envbool","envBool",[898,2443,2444],{},"Boolean reader with an explicit allow-list.",[1374,2446,2447,2459],{},[1377,2448,2449],{},[1380,2450,2451,2453,2455,2457],{},[1383,2452,1508],{},[1383,2454,1388],{},[1383,2456,1513],{},[1383,2458,1394],{},[1396,2460,2461,2475],{},[1380,2462,2463,2467,2471,2473],{},[1401,2464,2465],{},[902,2466,1203],{},[1401,2468,2469],{},[902,2470,1528],{},[1401,2472,1531],{},[1401,2474,1534],{},[1380,2476,2477,2481,2486,2488],{},[1401,2478,2479],{},[902,2480,977],{},[1401,2482,2483],{},[902,2484,2485],{},"boolean",[1401,2487,1531],{},[1401,2489,2490],{},"Returned for missing, blank, or unrecognized values.",[1374,2492,2493,2503],{},[1377,2494,2495],{},[1380,2496,2497,2500],{},[1383,2498,2499],{},"Value",[1383,2501,2502],{},"Result",[1396,2504,2505,2525,2544],{},[1380,2506,2507,2521],{},[1401,2508,2509,1210,2512,1210,2515,1210,2518],{},[902,2510,2511],{},"true",[902,2513,2514],{},"1",[902,2516,2517],{},"yes",[902,2519,2520],{},"on",[1401,2522,2523],{},[902,2524,2511],{},[1380,2526,2527,2540],{},[1401,2528,2529,1210,2532,1210,2534,1210,2537],{},[902,2530,2531],{},"false",[902,2533,2023],{},[902,2535,2536],{},"no",[902,2538,2539],{},"off",[1401,2541,2542],{},[902,2543,2531],{},[1380,2545,2546,2556],{},[1401,2547,2548,2549,2552,2553],{},"Anything else, including ",[902,2550,2551],{},"ture"," or ",[902,2554,2555],{},"2",[1401,2557,2558],{},[902,2559,977],{},[898,2561,2562],{},"Matching is case-insensitive. A typo falls back rather than guessing, so a mistake cannot silently flip a safety switch.",[940,2564,2566],{"className":942,"code":2565,"filename":1601,"language":945,"meta":946,"style":946},"import { envBool } from \"@riavzon\u002Futils\u002Fserver\";\n\nconst bypassCache = envBool(\"BYPASS_CACHE\", false);\nconst dryRun = envBool(\"DRY_RUN\", true);\n",[902,2567,2568,2588,2592,2619],{"__ignoreMap":946},[950,2569,2570,2572,2574,2576,2578,2580,2582,2584,2586],{"class":952,"line":953},[950,2571,1608],{"class":956},[950,2573,1611],{"class":993},[950,2575,2441],{"class":1020},[950,2577,1616],{"class":993},[950,2579,1619],{"class":956},[950,2581,973],{"class":972},[950,2583,1624],{"class":976},[950,2585,980],{"class":972},[950,2587,994],{"class":993},[950,2589,2590],{"class":952,"line":997},[950,2591,1000],{"emptyLinePlaceholder":8},[950,2593,2594,2596,2599,2601,2603,2605,2607,2610,2612,2614,2617],{"class":952,"line":1003},[950,2595,1637],{"class":960},[950,2597,2598],{"class":1640}," bypassCache",[950,2600,969],{"class":968},[950,2602,1307],{"class":1075},[950,2604,1200],{"class":993},[950,2606,980],{"class":972},[950,2608,2609],{"class":976},"BYPASS_CACHE",[950,2611,980],{"class":972},[950,2613,1210],{"class":993},[950,2615,2531],{"class":2616},"sjR7W",[950,2618,2087],{"class":993},[950,2620,2621,2623,2626,2628,2630,2632,2634,2637,2639,2641,2643],{"class":952,"line":1017},[950,2622,1637],{"class":960},[950,2624,2625],{"class":1640}," dryRun",[950,2627,969],{"class":968},[950,2629,1307],{"class":1075},[950,2631,1200],{"class":993},[950,2633,980],{"class":972},[950,2635,2636],{"class":976},"DRY_RUN",[950,2638,980],{"class":972},[950,2640,1210],{"class":993},[950,2642,2511],{"class":2616},[950,2644,2087],{"class":993},[1494,2646,923],{"id":2647},"envrequired",[898,2649,2650],{},"Reads a variable that must be present and non-blank.",[1374,2652,2653,2665],{},[1377,2654,2655],{},[1380,2656,2657,2659,2661,2663],{},[1383,2658,1508],{},[1383,2660,1388],{},[1383,2662,1513],{},[1383,2664,1394],{},[1396,2666,2667],{},[1380,2668,2669,2673,2677,2679],{},[1401,2670,2671],{},[902,2672,1203],{},[1401,2674,2675],{},[902,2676,1528],{},[1401,2678,1531],{},[1401,2680,1534],{},[898,2682,2683],{},"Returns the trimmed value and throws when the variable is missing, empty, or whitespace-only.",[940,2685,2687],{"className":942,"code":2686,"filename":1601,"language":945,"meta":946,"style":946},"import { envRequired } from \"@riavzon\u002Futils\u002Fserver\";\n\nconst databaseUrl = envRequired(\"DATABASE_URL\");\n\u002F\u002F Throws: Missing required environment variable: DATABASE_URL\n",[902,2688,2689,2709,2713,2735],{"__ignoreMap":946},[950,2690,2691,2693,2695,2697,2699,2701,2703,2705,2707],{"class":952,"line":953},[950,2692,1608],{"class":956},[950,2694,1611],{"class":993},[950,2696,923],{"class":1020},[950,2698,1616],{"class":993},[950,2700,1619],{"class":956},[950,2702,973],{"class":972},[950,2704,1624],{"class":976},[950,2706,980],{"class":972},[950,2708,994],{"class":993},[950,2710,2711],{"class":952,"line":997},[950,2712,1000],{"emptyLinePlaceholder":8},[950,2714,2715,2717,2720,2722,2724,2726,2728,2731,2733],{"class":952,"line":1003},[950,2716,1637],{"class":960},[950,2718,2719],{"class":1640}," databaseUrl",[950,2721,969],{"class":968},[950,2723,1342],{"class":1075},[950,2725,1200],{"class":993},[950,2727,980],{"class":972},[950,2729,2730],{"class":976},"DATABASE_URL",[950,2732,980],{"class":972},[950,2734,2087],{"class":993},[950,2736,2737],{"class":952,"line":1017},[950,2738,2739],{"class":2058},"\u002F\u002F Throws: Missing required environment variable: DATABASE_URL\n",[2741,2742,2743],"caution",{},[898,2744,2745],{},"This is the only throwing getter in the module. Use it for credentials, connection strings, and anything else where a silent fallback would hide the misconfiguration until the first request arrives. Call it at the point of use rather than at module scope so a missing variable fails with a useful stack trace instead of breaking every import.",[935,2747,2749],{"id":2748},"behavior-summary","Behavior summary",[1374,2751,2752,2781],{},[1377,2753,2754],{},[1380,2755,2756,2761,2765,2769,2773,2777],{},[1383,2757,2758,2759],{},"Value in ",[902,2760,907],{},[1383,2762,2763],{},[902,2764,1367],{},[1383,2766,2767],{},[902,2768,1371],{},[1383,2770,2771],{},[902,2772,2129],{},[1383,2774,2775],{},[902,2776,2279],{},[1383,2778,2779],{},[902,2780,2441],{},[1396,2782,2783,2799,2817,2844,2869,2891,2913,2937],{},[1380,2784,2785,2788,2790,2792,2794,2797],{},[1401,2786,2787],{},"Unset",[1401,2789,977],{},[1401,2791,977],{},[1401,2793,977],{},[1401,2795,2796],{},"fallback copy",[1401,2798,977],{},[1380,2800,2801,2807,2809,2811,2813,2815],{},[1401,2802,2803,2806],{},[902,2804,2805],{},"''"," or whitespace",[1401,2808,977],{},[1401,2810,977],{},[1401,2812,977],{},[1401,2814,2796],{},[1401,2816,977],{},[1380,2818,2819,2824,2829,2833,2837,2842],{},[1401,2820,2821],{},[902,2822,2823],{},"'42'",[1401,2825,2826],{},[902,2827,2828],{},"42",[1401,2830,2831],{},[902,2832,2828],{},[1401,2834,2835],{},[902,2836,2823],{},[1401,2838,2839],{},[902,2840,2841],{},"['42']",[1401,2843,977],{},[1380,2845,2846,2851,2853,2858,2862,2867],{},[1401,2847,2848],{},[902,2849,2850],{},"'12.5'",[1401,2852,977],{},[1401,2854,2855],{},[902,2856,2857],{},"12.5",[1401,2859,2860],{},[902,2861,2850],{},[1401,2863,2864],{},[902,2865,2866],{},"['12.5']",[1401,2868,977],{},[1380,2870,2871,2876,2878,2880,2884,2889],{},[1401,2872,2873],{},[902,2874,2875],{},"'abc'",[1401,2877,977],{},[1401,2879,977],{},[1401,2881,2882],{},[902,2883,2875],{},[1401,2885,2886],{},[902,2887,2888],{},"['abc']",[1401,2890,977],{},[1380,2892,2893,2898,2900,2902,2906,2911],{},[1401,2894,2895],{},[902,2896,2897],{},"'Infinity'",[1401,2899,977],{},[1401,2901,977],{},[1401,2903,2904],{},[902,2905,2897],{},[1401,2907,2908],{},[902,2909,2910],{},"['infinity']",[1401,2912,977],{},[1380,2914,2915,2920,2922,2924,2928,2933],{},[1401,2916,2917],{},[902,2918,2919],{},"'yes'",[1401,2921,977],{},[1401,2923,977],{},[1401,2925,2926],{},[902,2927,2919],{},[1401,2929,2930],{},[902,2931,2932],{},"['yes']",[1401,2934,2935],{},[902,2936,2511],{},[1380,2938,2939,2944,2946,2948,2953,2957],{},[1401,2940,2941],{},[902,2942,2943],{},"'a, B ,,c '",[1401,2945,977],{},[1401,2947,977],{},[1401,2949,2950],{},[902,2951,2952],{},"'a, B ,,c'",[1401,2954,2955],{},[902,2956,2340],{},[1401,2958,977],{},[2960,2961,2962],"style",{},"html pre.shiki code .sZ328, html code.shiki .sZ328{--shiki-light:#AF00DB;--shiki-default:#AF00DB;--shiki-dark:#FF79C6}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 .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 .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 .sHOzp, html code.shiki .sHOzp{--shiki-light:#795E26;--shiki-default:#795E26;--shiki-dark:#50FA7B}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 .spgvN, html code.shiki .spgvN{--shiki-light:#098658;--shiki-default:#098658;--shiki-dark:#BD93F9}html pre.shiki code .s34zl, html code.shiki .s34zl{--shiki-light:#001080;--shiki-default:#001080;--shiki-dark:#FF79C6}html pre.shiki code .sghk6, html code.shiki .sghk6{--shiki-light:#008000;--shiki-default:#008000;--shiki-dark:#6272A4}html pre.shiki code .sjR7W, html code.shiki .sjR7W{--shiki-light:#0000FF;--shiki-default:#0000FF;--shiki-dark:#BD93F9}",{"title":946,"searchDepth":997,"depth":997,"links":2964},[2965,2966,2967,2976],{"id":937,"depth":997,"text":938},{"id":1361,"depth":997,"text":1362},{"id":1491,"depth":997,"text":1492,"children":2968},[2969,2970,2971,2972,2973,2974,2975],{"id":1496,"depth":1003,"text":1367},{"id":1733,"depth":1003,"text":1371},{"id":1950,"depth":1003,"text":1805},{"id":2128,"depth":1003,"text":2129},{"id":2278,"depth":1003,"text":2279},{"id":2440,"depth":1003,"text":2441},{"id":2647,"depth":1003,"text":923},{"id":2748,"depth":997,"text":2749},"Total, fallback-safe readers for environment variables that never crash at import time.","md",{},null,"---\ntitle: env\ndescription: Total, fallback-safe readers for environment variables that never crash at import time.\nicon: i-lucide-sliders-horizontal\n---\n\nThe `env` module provides small, predictable readers for `process.env`. Each getter is **total**: it never throws and never returns a value outside the requested range. A missing, blank, malformed, or out-of-range variable falls back to the caller's default, so a bad `.env` degrades a single feature instead of crashing the process at startup.\n\nThe one deliberate exception is `envRequired`, which exists precisely to fail loudly for credentials.\n\n::note\nValues are read on every call rather than cached at module load. This makes the helpers safe to use in tests where `process.env` changes between assertions. If you need load-time semantics, read the value once into a constant.\n::\n\n## Definition\n\n```ts [env.ts]\nexport type EnvRangeFallback = \"fallback\" | \"clamp\";\n\nexport interface EnvNumberOptions {\n  min?: number;\n  max?: number;\n  onRangeError?: EnvRangeFallback;\n}\n\nexport function envInt(\n  name: string,\n  fallback: number,\n  options?: EnvNumberOptions,\n): number;\nexport function envFloat(\n  name: string,\n  fallback: number,\n  options?: EnvNumberOptions,\n): number;\nexport function envIntOrInfinity(name: string, fallback: number): number;\nexport function envStr(name: string, fallback: string): string;\nexport function envList(name: string, fallback?: readonly string[]): string[];\nexport function envBool(name: string, fallback: boolean): boolean;\nexport function envRequired(name: string): string;\n```\n\n## Range options\n\n`envInt` and `envFloat` accept the same options object.\n\n| Property       | Type               | Default      | Description                                                                                                                   |\n| -------------- | ------------------ | ------------ | ----------------------------------------------------------------------------------------------------------------------------- |\n| `min`          | `number`           | `-Infinity`  | Inclusive lower bound.                                                                                                        |\n| `max`          | `number`           | `Infinity`   | Inclusive upper bound.                                                                                                        |\n| `onRangeError` | `EnvRangeFallback` | `'fallback'` | `'fallback'` returns the caller's default when the parsed value is out of range. `'clamp'` returns the nearest bound instead. |\n\nWhen `min` is greater than `max`, the bounds are treated as misconfigured and the fallback is returned regardless of `onRangeError`.\n\n::tip\nUse `onRangeError: 'clamp'` for tuning knobs such as thresholds or concurrency limits. A typo then lands on the nearest valid value instead of silently disabling the feature. Keep the default `'fallback'` for values where any substitution would be wrong.\n::\n\n## Functions\n\n### envInt\n\nInteger reader. Falls back when the variable is missing, empty, non-numeric, non-integer, or out of range.\n\n| Parameter  | Type               | Required | Description                            |\n| ---------- | ------------------ | -------- | -------------------------------------- |\n| `name`     | `string`           | Yes      | The environment variable name.         |\n| `fallback` | `number`           | Yes      | Returned when the value is unusable.   |\n| `options`  | `EnvNumberOptions` | No       | Value range and out-of-range behavior. |\n\n`\" 42 \"`, `1e3`, and `0x10` are accepted because `Number` understands them. `\"12.5\"`, `\"abc\"`, `\"\"`, and `\"Infinity\"` are rejected.\n\n```ts [example.ts]\nimport { envInt } from \"@riavzon\u002Futils\u002Fserver\";\n\nconst port = envInt(\"PORT\", 3000, { min: 1, max: 65535 });\nconst retries = envInt(\"RETRIES\", 3, { min: 1, onRangeError: \"clamp\" });\n```\n\n### envFloat\n\nFloat reader. Falls back when the variable is missing, empty, non-numeric, or out of range.\n\n| Parameter  | Type               | Required | Description                            |\n| ---------- | ------------------ | -------- | -------------------------------------- |\n| `name`     | `string`           | Yes      | The environment variable name.         |\n| `fallback` | `number`           | Yes      | Returned when the value is unusable.   |\n| `options`  | `EnvNumberOptions` | No       | Value range and out-of-range behavior. |\n\n`NaN` and `Infinity` are rejected here. Use `envIntOrInfinity` when \"unbounded\" is itself a meaningful setting.\n\n```ts [example.ts]\nimport { envFloat } from \"@riavzon\u002Futils\u002Fserver\";\n\nconst threshold = envFloat(\"SIMILARITY_THRESHOLD\", 0.9, { min: 0, max: 1 });\nconst temperature = envFloat(\"TEMPERATURE\", 0.2, {\n  min: 0,\n  max: 2,\n  onRangeError: \"clamp\",\n});\n```\n\n### envIntOrInfinity\n\nPositive integer, or `Infinity` when the variable is explicitly `infinity`, `inf`, or `none`.\n\n| Parameter  | Type     | Required | Description                          |\n| ---------- | -------- | -------- | ------------------------------------ |\n| `name`     | `string` | Yes      | The environment variable name.       |\n| `fallback` | `number` | Yes      | Returned when the value is unusable. |\n\nThe sentinels are case-insensitive and surrounding whitespace is ignored. Any other value passes through `envInt` with `min: 1`, so `0` and negative numbers fall back instead of reaching a loop as a zero budget.\n\n```ts [example.ts]\nimport { envIntOrInfinity } from \"@riavzon\u002Futils\u002Fserver\";\n\n\u002F\u002F MAX_ITEMS=none means \"no limit\"\nconst maxItems = envIntOrInfinity(\"MAX_ITEMS\", 100);\nconst budget = Number.isFinite(maxItems) ? maxItems : Number.MAX_SAFE_INTEGER;\n```\n\n### envStr\n\nString reader with a fallback for missing and blank values.\n\n| Parameter  | Type     | Required | Description                                               |\n| ---------- | -------- | -------- | --------------------------------------------------------- |\n| `name`     | `string` | Yes      | The environment variable name.                            |\n| `fallback` | `string` | Yes      | Returned when the variable is missing or whitespace-only. |\n\nThe value is trimmed, but inner whitespace and case are preserved.\n\n```ts [example.ts]\nimport { envStr } from \"@riavzon\u002Futils\u002Fserver\";\n\nconst region = envStr(\"AWS_REGION\", \"eu-central-1\");\nconst appName = envStr(\"APP_NAME\", \"My App\"); \u002F\u002F inner spaces kept\n```\n\n### envList\n\nComma-separated list, split, trimmed, and lower-cased, with blanks dropped.\n\n| Parameter  | Type                | Required | Description                                                                                 |\n| ---------- | ------------------- | -------- | ------------------------------------------------------------------------------------------- |\n| `name`     | `string`            | Yes      | The environment variable name.                                                              |\n| `fallback` | `readonly string[]` | No       | Returned as a copy when the variable is missing or holds only separators. Defaults to `[]`. |\n\n`\"a, B ,,c \"` becomes `['a', 'b', 'c']`. Duplicates are kept, so the order and multiplicity of the raw value survive.\n\n```ts [example.ts]\nimport { envList } from \"@riavzon\u002Futils\u002Fserver\";\n\nconst allowedHosts = envList(\"ALLOWED_HOSTS\"); \u002F\u002F [] when unset\nconst suffixes = envList(\"TRUSTED_SUFFIXES\", [\"gov\"]); \u002F\u002F fallback is not mutated\n```\n\n::warning\nThe returned array is always a fresh copy, including when the fallback is used. Mutating the result never affects the array you passed in.\n::\n\n### envBool\n\nBoolean reader with an explicit allow-list.\n\n| Parameter  | Type      | Required | Description                                          |\n| ---------- | --------- | -------- | ---------------------------------------------------- |\n| `name`     | `string`  | Yes      | The environment variable name.                       |\n| `fallback` | `boolean` | Yes      | Returned for missing, blank, or unrecognized values. |\n\n| Value                                  | Result     |\n| -------------------------------------- | ---------- |\n| `true`, `1`, `yes`, `on`               | `true`     |\n| `false`, `0`, `no`, `off`              | `false`    |\n| Anything else, including `ture` or `2` | `fallback` |\n\nMatching is case-insensitive. A typo falls back rather than guessing, so a mistake cannot silently flip a safety switch.\n\n```ts [example.ts]\nimport { envBool } from \"@riavzon\u002Futils\u002Fserver\";\n\nconst bypassCache = envBool(\"BYPASS_CACHE\", false);\nconst dryRun = envBool(\"DRY_RUN\", true);\n```\n\n### envRequired\n\nReads a variable that must be present and non-blank.\n\n| Parameter | Type     | Required | Description                    |\n| --------- | -------- | -------- | ------------------------------ |\n| `name`    | `string` | Yes      | The environment variable name. |\n\nReturns the trimmed value and throws when the variable is missing, empty, or whitespace-only.\n\n```ts [example.ts]\nimport { envRequired } from \"@riavzon\u002Futils\u002Fserver\";\n\nconst databaseUrl = envRequired(\"DATABASE_URL\");\n\u002F\u002F Throws: Missing required environment variable: DATABASE_URL\n```\n\n::caution\nThis is the only throwing getter in the module. Use it for credentials, connection strings, and anything else where a silent fallback would hide the misconfiguration until the first request arrives. Call it at the point of use rather than at module scope so a missing variable fails with a useful stack trace instead of breaking every import.\n::\n\n## Behavior summary\n\n| Value in `process.env` | `envInt` | `envFloat` | `envStr`     | `envList`         | `envBool` |\n| ---------------------- | -------- | ---------- | ------------ | ----------------- | --------- |\n| Unset                  | fallback | fallback   | fallback     | fallback copy     | fallback  |\n| `''` or whitespace     | fallback | fallback   | fallback     | fallback copy     | fallback  |\n| `'42'`                 | `42`     | `42`       | `'42'`       | `['42']`          | fallback  |\n| `'12.5'`               | fallback | `12.5`     | `'12.5'`     | `['12.5']`        | fallback  |\n| `'abc'`                | fallback | fallback   | `'abc'`      | `['abc']`         | fallback  |\n| `'Infinity'`           | fallback | fallback   | `'Infinity'` | `['infinity']`    | fallback  |\n| `'yes'`                | fallback | fallback   | `'yes'`      | `['yes']`         | `true`    |\n| `'a, B ,,c '`          | fallback | fallback   | `'a, B ,,c'` | `['a', 'b', 'c']` | fallback  |\n",{"title":107,"description":2977},"ZNZeaN8WrIO5NMKBzTojAQcBuLDPeAZDHjvfhab9Gw0",[2985,2986],{"title":102,"path":103,"stem":104,"children":-1},{"title":112,"path":113,"stem":114,"children":-1},{"id":893,"title":107,"body":2988,"description":2977,"extension":2978,"icon":110,"meta":4742,"module":2980,"navigation":8,"path":108,"rawbody":2981,"seo":4743,"stem":109,"__hash__":2983},{"type":895,"value":2989,"toc":4728},[2990,3000,3004,3010,3012,3348,3350,3356,3424,3432,3440,3442,3444,3446,3504,3522,3634,3636,3638,3696,3704,3834,3836,3846,3890,3898,3984,3986,3988,4032,4034,4120,4122,4124,4170,4176,4256,4260,4262,4264,4308,4364,4366,4442,4444,4446,4476,4478,4530,4534,4536,4726],[898,2991,900,2992,904,2994,908,2996,913,2998,917],{},[902,2993,107],{},[902,2995,907],{},[910,2997,912],{},[902,2999,916],{},[898,3001,920,3002,924],{},[902,3003,923],{},[926,3005,3006],{},[898,3007,930,3008,933],{},[902,3009,907],{},[935,3011,938],{"id":937},[940,3013,3014],{"className":942,"code":943,"filename":944,"language":945,"meta":946,"style":946},[902,3015,3016,3042,3046,3056,3066,3076,3086,3090,3094,3104,3114,3124,3134,3144,3154,3164,3174,3184,3194,3226,3258,3292,3324],{"__ignoreMap":946},[950,3017,3018,3020,3022,3024,3026,3028,3030,3032,3034,3036,3038,3040],{"class":952,"line":953},[950,3019,957],{"class":956},[950,3021,961],{"class":960},[950,3023,965],{"class":964},[950,3025,969],{"class":968},[950,3027,973],{"class":972},[950,3029,977],{"class":976},[950,3031,980],{"class":972},[950,3033,983],{"class":968},[950,3035,973],{"class":972},[950,3037,988],{"class":976},[950,3039,980],{"class":972},[950,3041,994],{"class":993},[950,3043,3044],{"class":952,"line":997},[950,3045,1000],{"emptyLinePlaceholder":8},[950,3047,3048,3050,3052,3054],{"class":952,"line":1003},[950,3049,957],{"class":956},[950,3051,1008],{"class":960},[950,3053,1011],{"class":964},[950,3055,1014],{"class":993},[950,3057,3058,3060,3062,3064],{"class":952,"line":1017},[950,3059,1021],{"class":1020},[950,3061,1024],{"class":968},[950,3063,1027],{"class":964},[950,3065,994],{"class":993},[950,3067,3068,3070,3072,3074],{"class":952,"line":1032},[950,3069,1035],{"class":1020},[950,3071,1024],{"class":968},[950,3073,1027],{"class":964},[950,3075,994],{"class":993},[950,3077,3078,3080,3082,3084],{"class":952,"line":1044},[950,3079,1047],{"class":1020},[950,3081,1024],{"class":968},[950,3083,965],{"class":964},[950,3085,994],{"class":993},[950,3087,3088],{"class":952,"line":1056},[950,3089,1059],{"class":993},[950,3091,3092],{"class":952,"line":1062},[950,3093,1000],{"emptyLinePlaceholder":8},[950,3095,3096,3098,3100,3102],{"class":952,"line":1067},[950,3097,957],{"class":956},[950,3099,1072],{"class":960},[950,3101,1076],{"class":1075},[950,3103,1079],{"class":993},[950,3105,3106,3108,3110,3112],{"class":952,"line":1082},[950,3107,1086],{"class":1085},[950,3109,1089],{"class":968},[950,3111,1092],{"class":964},[950,3113,1095],{"class":993},[950,3115,3116,3118,3120,3122],{"class":952,"line":1098},[950,3117,1101],{"class":1085},[950,3119,1089],{"class":968},[950,3121,1027],{"class":964},[950,3123,1095],{"class":993},[950,3125,3126,3128,3130,3132],{"class":952,"line":1110},[950,3127,1113],{"class":1085},[950,3129,1024],{"class":968},[950,3131,1011],{"class":964},[950,3133,1095],{"class":993},[950,3135,3136,3138,3140,3142],{"class":952,"line":1122},[950,3137,1125],{"class":993},[950,3139,1089],{"class":968},[950,3141,1027],{"class":964},[950,3143,994],{"class":993},[950,3145,3146,3148,3150,3152],{"class":952,"line":1134},[950,3147,957],{"class":956},[950,3149,1072],{"class":960},[950,3151,1141],{"class":1075},[950,3153,1079],{"class":993},[950,3155,3156,3158,3160,3162],{"class":952,"line":1146},[950,3157,1086],{"class":1085},[950,3159,1089],{"class":968},[950,3161,1092],{"class":964},[950,3163,1095],{"class":993},[950,3165,3166,3168,3170,3172],{"class":952,"line":1157},[950,3167,1101],{"class":1085},[950,3169,1089],{"class":968},[950,3171,1027],{"class":964},[950,3173,1095],{"class":993},[950,3175,3176,3178,3180,3182],{"class":952,"line":1168},[950,3177,1113],{"class":1085},[950,3179,1024],{"class":968},[950,3181,1011],{"class":964},[950,3183,1095],{"class":993},[950,3185,3186,3188,3190,3192],{"class":952,"line":1179},[950,3187,1125],{"class":993},[950,3189,1089],{"class":968},[950,3191,1027],{"class":964},[950,3193,994],{"class":993},[950,3195,3196,3198,3200,3202,3204,3206,3208,3210,3212,3214,3216,3218,3220,3222,3224],{"class":952,"line":1190},[950,3197,957],{"class":956},[950,3199,1072],{"class":960},[950,3201,1197],{"class":1075},[950,3203,1200],{"class":993},[950,3205,1203],{"class":1085},[950,3207,1089],{"class":968},[950,3209,1092],{"class":964},[950,3211,1210],{"class":993},[950,3213,977],{"class":1085},[950,3215,1089],{"class":968},[950,3217,1027],{"class":964},[950,3219,1125],{"class":993},[950,3221,1089],{"class":968},[950,3223,1027],{"class":964},[950,3225,994],{"class":993},[950,3227,3228,3230,3232,3234,3236,3238,3240,3242,3244,3246,3248,3250,3252,3254,3256],{"class":952,"line":1227},[950,3229,957],{"class":956},[950,3231,1072],{"class":960},[950,3233,1234],{"class":1075},[950,3235,1200],{"class":993},[950,3237,1203],{"class":1085},[950,3239,1089],{"class":968},[950,3241,1092],{"class":964},[950,3243,1210],{"class":993},[950,3245,977],{"class":1085},[950,3247,1089],{"class":968},[950,3249,1092],{"class":964},[950,3251,1125],{"class":993},[950,3253,1089],{"class":968},[950,3255,1092],{"class":964},[950,3257,994],{"class":993},[950,3259,3260,3262,3264,3266,3268,3270,3272,3274,3276,3278,3280,3282,3284,3286,3288,3290],{"class":952,"line":1261},[950,3261,957],{"class":956},[950,3263,1072],{"class":960},[950,3265,1268],{"class":1075},[950,3267,1200],{"class":993},[950,3269,1203],{"class":1085},[950,3271,1089],{"class":968},[950,3273,1092],{"class":964},[950,3275,1210],{"class":993},[950,3277,977],{"class":1085},[950,3279,1024],{"class":968},[950,3281,1285],{"class":960},[950,3283,1092],{"class":964},[950,3285,1290],{"class":993},[950,3287,1089],{"class":968},[950,3289,1092],{"class":964},[950,3291,1297],{"class":993},[950,3293,3294,3296,3298,3300,3302,3304,3306,3308,3310,3312,3314,3316,3318,3320,3322],{"class":952,"line":1300},[950,3295,957],{"class":956},[950,3297,1072],{"class":960},[950,3299,1307],{"class":1075},[950,3301,1200],{"class":993},[950,3303,1203],{"class":1085},[950,3305,1089],{"class":968},[950,3307,1092],{"class":964},[950,3309,1210],{"class":993},[950,3311,977],{"class":1085},[950,3313,1089],{"class":968},[950,3315,1324],{"class":964},[950,3317,1125],{"class":993},[950,3319,1089],{"class":968},[950,3321,1324],{"class":964},[950,3323,994],{"class":993},[950,3325,3326,3328,3330,3332,3334,3336,3338,3340,3342,3344,3346],{"class":952,"line":1335},[950,3327,957],{"class":956},[950,3329,1072],{"class":960},[950,3331,1342],{"class":1075},[950,3333,1200],{"class":993},[950,3335,1203],{"class":1085},[950,3337,1089],{"class":968},[950,3339,1092],{"class":964},[950,3341,1125],{"class":993},[950,3343,1089],{"class":968},[950,3345,1092],{"class":964},[950,3347,994],{"class":993},[935,3349,1362],{"id":1361},[898,3351,3352,1368,3354,1372],{},[902,3353,1367],{},[902,3355,1371],{},[1374,3357,3358,3370],{},[1377,3359,3360],{},[1380,3361,3362,3364,3366,3368],{},[1383,3363,1385],{},[1383,3365,1388],{},[1383,3367,1391],{},[1383,3369,1394],{},[1396,3371,3372,3388,3404],{},[1380,3373,3374,3378,3382,3386],{},[1401,3375,3376],{},[902,3377,1405],{},[1401,3379,3380],{},[902,3381,1410],{},[1401,3383,3384],{},[902,3385,1415],{},[1401,3387,1418],{},[1380,3389,3390,3394,3398,3402],{},[1401,3391,3392],{},[902,3393,1425],{},[1401,3395,3396],{},[902,3397,1410],{},[1401,3399,3400],{},[902,3401,1434],{},[1401,3403,1437],{},[1380,3405,3406,3410,3414,3418],{},[1401,3407,3408],{},[902,3409,1444],{},[1401,3411,3412],{},[902,3413,1449],{},[1401,3415,3416],{},[902,3417,1454],{},[1401,3419,3420,1459,3422,1463],{},[902,3421,1454],{},[902,3423,1462],{},[898,3425,1466,3426,1469,3428,1472,3430,1475],{},[902,3427,1405],{},[902,3429,1425],{},[902,3431,1444],{},[1477,3433,3434],{},[898,3435,1481,3436,1485,3438,1488],{},[902,3437,1484],{},[902,3439,1454],{},[935,3441,1492],{"id":1491},[1494,3443,1367],{"id":1496},[898,3445,1499],{},[1374,3447,3448,3460],{},[1377,3449,3450],{},[1380,3451,3452,3454,3456,3458],{},[1383,3453,1508],{},[1383,3455,1388],{},[1383,3457,1513],{},[1383,3459,1394],{},[1396,3461,3462,3476,3490],{},[1380,3463,3464,3468,3472,3474],{},[1401,3465,3466],{},[902,3467,1203],{},[1401,3469,3470],{},[902,3471,1528],{},[1401,3473,1531],{},[1401,3475,1534],{},[1380,3477,3478,3482,3486,3488],{},[1401,3479,3480],{},[902,3481,977],{},[1401,3483,3484],{},[902,3485,1410],{},[1401,3487,1531],{},[1401,3489,1549],{},[1380,3491,3492,3496,3500,3502],{},[1401,3493,3494],{},[902,3495,1556],{},[1401,3497,3498],{},[902,3499,1561],{},[1401,3501,1564],{},[1401,3503,1567],{},[898,3505,3506,1210,3508,1576,3510,1580,3512,1584,3514,1210,3516,1210,3518,1576,3520,1597],{},[902,3507,1572],{},[902,3509,1575],{},[902,3511,1579],{},[902,3513,1583],{},[902,3515,1587],{},[902,3517,1590],{},[902,3519,1593],{},[902,3521,1596],{},[940,3523,3524],{"className":942,"code":1600,"filename":1601,"language":945,"meta":946,"style":946},[902,3525,3526,3546,3550,3590],{"__ignoreMap":946},[950,3527,3528,3530,3532,3534,3536,3538,3540,3542,3544],{"class":952,"line":953},[950,3529,1608],{"class":956},[950,3531,1611],{"class":993},[950,3533,1367],{"class":1020},[950,3535,1616],{"class":993},[950,3537,1619],{"class":956},[950,3539,973],{"class":972},[950,3541,1624],{"class":976},[950,3543,980],{"class":972},[950,3545,994],{"class":993},[950,3547,3548],{"class":952,"line":997},[950,3549,1000],{"emptyLinePlaceholder":8},[950,3551,3552,3554,3556,3558,3560,3562,3564,3566,3568,3570,3572,3574,3576,3578,3580,3582,3584,3586,3588],{"class":952,"line":1003},[950,3553,1637],{"class":960},[950,3555,1641],{"class":1640},[950,3557,969],{"class":968},[950,3559,1076],{"class":1075},[950,3561,1200],{"class":993},[950,3563,980],{"class":972},[950,3565,1652],{"class":976},[950,3567,980],{"class":972},[950,3569,1210],{"class":993},[950,3571,1660],{"class":1659},[950,3573,1663],{"class":993},[950,3575,1405],{"class":1020},[950,3577,1089],{"class":1668},[950,3579,1671],{"class":1659},[950,3581,1210],{"class":993},[950,3583,1425],{"class":1020},[950,3585,1089],{"class":1668},[950,3587,1680],{"class":1659},[950,3589,1683],{"class":993},[950,3591,3592,3594,3596,3598,3600,3602,3604,3606,3608,3610,3612,3614,3616,3618,3620,3622,3624,3626,3628,3630,3632],{"class":952,"line":1017},[950,3593,1637],{"class":960},[950,3595,1690],{"class":1640},[950,3597,969],{"class":968},[950,3599,1076],{"class":1075},[950,3601,1200],{"class":993},[950,3603,980],{"class":972},[950,3605,1701],{"class":976},[950,3607,980],{"class":972},[950,3609,1210],{"class":993},[950,3611,1708],{"class":1659},[950,3613,1663],{"class":993},[950,3615,1405],{"class":1020},[950,3617,1089],{"class":1668},[950,3619,1671],{"class":1659},[950,3621,1210],{"class":993},[950,3623,1444],{"class":1020},[950,3625,1089],{"class":1668},[950,3627,973],{"class":972},[950,3629,988],{"class":976},[950,3631,980],{"class":972},[950,3633,1683],{"class":993},[1494,3635,1371],{"id":1733},[898,3637,1736],{},[1374,3639,3640,3652],{},[1377,3641,3642],{},[1380,3643,3644,3646,3648,3650],{},[1383,3645,1508],{},[1383,3647,1388],{},[1383,3649,1513],{},[1383,3651,1394],{},[1396,3653,3654,3668,3682],{},[1380,3655,3656,3660,3664,3666],{},[1401,3657,3658],{},[902,3659,1203],{},[1401,3661,3662],{},[902,3663,1528],{},[1401,3665,1531],{},[1401,3667,1534],{},[1380,3669,3670,3674,3678,3680],{},[1401,3671,3672],{},[902,3673,977],{},[1401,3675,3676],{},[902,3677,1410],{},[1401,3679,1531],{},[1401,3681,1549],{},[1380,3683,3684,3688,3692,3694],{},[1401,3685,3686],{},[902,3687,1556],{},[1401,3689,3690],{},[902,3691,1561],{},[1401,3693,1564],{},[1401,3695,1567],{},[898,3697,3698,1368,3700,1802,3702,1806],{},[902,3699,1799],{},[902,3701,1434],{},[902,3703,1805],{},[940,3705,3706],{"className":942,"code":1809,"filename":1601,"language":945,"meta":946,"style":946},[902,3707,3708,3728,3732,3772,3796,3806,3816,3830],{"__ignoreMap":946},[950,3709,3710,3712,3714,3716,3718,3720,3722,3724,3726],{"class":952,"line":953},[950,3711,1608],{"class":956},[950,3713,1611],{"class":993},[950,3715,1371],{"class":1020},[950,3717,1616],{"class":993},[950,3719,1619],{"class":956},[950,3721,973],{"class":972},[950,3723,1624],{"class":976},[950,3725,980],{"class":972},[950,3727,994],{"class":993},[950,3729,3730],{"class":952,"line":997},[950,3731,1000],{"emptyLinePlaceholder":8},[950,3733,3734,3736,3738,3740,3742,3744,3746,3748,3750,3752,3754,3756,3758,3760,3762,3764,3766,3768,3770],{"class":952,"line":1003},[950,3735,1637],{"class":960},[950,3737,1842],{"class":1640},[950,3739,969],{"class":968},[950,3741,1141],{"class":1075},[950,3743,1200],{"class":993},[950,3745,980],{"class":972},[950,3747,1853],{"class":976},[950,3749,980],{"class":972},[950,3751,1210],{"class":993},[950,3753,1860],{"class":1659},[950,3755,1663],{"class":993},[950,3757,1405],{"class":1020},[950,3759,1089],{"class":1668},[950,3761,1869],{"class":1659},[950,3763,1210],{"class":993},[950,3765,1425],{"class":1020},[950,3767,1089],{"class":1668},[950,3769,1671],{"class":1659},[950,3771,1683],{"class":993},[950,3773,3774,3776,3778,3780,3782,3784,3786,3788,3790,3792,3794],{"class":952,"line":1017},[950,3775,1637],{"class":960},[950,3777,1886],{"class":1640},[950,3779,969],{"class":968},[950,3781,1141],{"class":1075},[950,3783,1200],{"class":993},[950,3785,980],{"class":972},[950,3787,1897],{"class":976},[950,3789,980],{"class":972},[950,3791,1210],{"class":993},[950,3793,1904],{"class":1659},[950,3795,1907],{"class":993},[950,3797,3798,3800,3802,3804],{"class":952,"line":1032},[950,3799,1021],{"class":1020},[950,3801,1089],{"class":1668},[950,3803,1869],{"class":1659},[950,3805,1095],{"class":993},[950,3807,3808,3810,3812,3814],{"class":952,"line":1044},[950,3809,1035],{"class":1020},[950,3811,1089],{"class":1668},[950,3813,1926],{"class":1659},[950,3815,1095],{"class":993},[950,3817,3818,3820,3822,3824,3826,3828],{"class":952,"line":1056},[950,3819,1047],{"class":1020},[950,3821,1089],{"class":1668},[950,3823,973],{"class":972},[950,3825,988],{"class":976},[950,3827,980],{"class":972},[950,3829,1095],{"class":993},[950,3831,3832],{"class":952,"line":1062},[950,3833,1947],{"class":993},[1494,3835,1805],{"id":1950},[898,3837,1953,3838,1956,3840,1210,3842,1963,3844,1475],{},[902,3839,1434],{},[902,3841,1959],{},[902,3843,1962],{},[902,3845,1966],{},[1374,3847,3848,3860],{},[1377,3849,3850],{},[1380,3851,3852,3854,3856,3858],{},[1383,3853,1508],{},[1383,3855,1388],{},[1383,3857,1513],{},[1383,3859,1394],{},[1396,3861,3862,3876],{},[1380,3863,3864,3868,3872,3874],{},[1401,3865,3866],{},[902,3867,1203],{},[1401,3869,3870],{},[902,3871,1528],{},[1401,3873,1531],{},[1401,3875,1534],{},[1380,3877,3878,3882,3886,3888],{},[1401,3879,3880],{},[902,3881,977],{},[1401,3883,3884],{},[902,3885,1410],{},[1401,3887,1531],{},[1401,3889,1549],{},[898,3891,2013,3892,2016,3894,2020,3896,2024],{},[902,3893,1367],{},[902,3895,2019],{},[902,3897,2023],{},[940,3899,3900],{"className":942,"code":2027,"filename":1601,"language":945,"meta":946,"style":946},[902,3901,3902,3922,3926,3930,3954],{"__ignoreMap":946},[950,3903,3904,3906,3908,3910,3912,3914,3916,3918,3920],{"class":952,"line":953},[950,3905,1608],{"class":956},[950,3907,1611],{"class":993},[950,3909,1805],{"class":1020},[950,3911,1616],{"class":993},[950,3913,1619],{"class":956},[950,3915,973],{"class":972},[950,3917,1624],{"class":976},[950,3919,980],{"class":972},[950,3921,994],{"class":993},[950,3923,3924],{"class":952,"line":997},[950,3925,1000],{"emptyLinePlaceholder":8},[950,3927,3928],{"class":952,"line":1003},[950,3929,2059],{"class":2058},[950,3931,3932,3934,3936,3938,3940,3942,3944,3946,3948,3950,3952],{"class":952,"line":1017},[950,3933,1637],{"class":960},[950,3935,2066],{"class":1640},[950,3937,969],{"class":968},[950,3939,1197],{"class":1075},[950,3941,1200],{"class":993},[950,3943,980],{"class":972},[950,3945,2077],{"class":976},[950,3947,980],{"class":972},[950,3949,1210],{"class":993},[950,3951,2084],{"class":1659},[950,3953,2087],{"class":993},[950,3955,3956,3958,3960,3962,3964,3966,3968,3970,3972,3974,3976,3978,3980,3982],{"class":952,"line":1032},[950,3957,1637],{"class":960},[950,3959,2094],{"class":1640},[950,3961,969],{"class":968},[950,3963,2099],{"class":1020},[950,3965,1475],{"class":993},[950,3967,2104],{"class":1075},[950,3969,1200],{"class":993},[950,3971,2109],{"class":1020},[950,3973,2112],{"class":993},[950,3975,2115],{"class":968},[950,3977,2066],{"class":1020},[950,3979,2120],{"class":968},[950,3981,2099],{"class":1020},[950,3983,2125],{"class":993},[1494,3985,2129],{"id":2128},[898,3987,2132],{},[1374,3989,3990,4002],{},[1377,3991,3992],{},[1380,3993,3994,3996,3998,4000],{},[1383,3995,1508],{},[1383,3997,1388],{},[1383,3999,1513],{},[1383,4001,1394],{},[1396,4003,4004,4018],{},[1380,4005,4006,4010,4014,4016],{},[1401,4007,4008],{},[902,4009,1203],{},[1401,4011,4012],{},[902,4013,1528],{},[1401,4015,1531],{},[1401,4017,1534],{},[1380,4019,4020,4024,4028,4030],{},[1401,4021,4022],{},[902,4023,977],{},[1401,4025,4026],{},[902,4027,1528],{},[1401,4029,1531],{},[1401,4031,2177],{},[898,4033,2180],{},[940,4035,4036],{"className":942,"code":2183,"filename":1601,"language":945,"meta":946,"style":946},[902,4037,4038,4058,4062,4090],{"__ignoreMap":946},[950,4039,4040,4042,4044,4046,4048,4050,4052,4054,4056],{"class":952,"line":953},[950,4041,1608],{"class":956},[950,4043,1611],{"class":993},[950,4045,2129],{"class":1020},[950,4047,1616],{"class":993},[950,4049,1619],{"class":956},[950,4051,973],{"class":972},[950,4053,1624],{"class":976},[950,4055,980],{"class":972},[950,4057,994],{"class":993},[950,4059,4060],{"class":952,"line":997},[950,4061,1000],{"emptyLinePlaceholder":8},[950,4063,4064,4066,4068,4070,4072,4074,4076,4078,4080,4082,4084,4086,4088],{"class":952,"line":1003},[950,4065,1637],{"class":960},[950,4067,2216],{"class":1640},[950,4069,969],{"class":968},[950,4071,1234],{"class":1075},[950,4073,1200],{"class":993},[950,4075,980],{"class":972},[950,4077,2227],{"class":976},[950,4079,980],{"class":972},[950,4081,1210],{"class":993},[950,4083,980],{"class":972},[950,4085,2236],{"class":976},[950,4087,980],{"class":972},[950,4089,2087],{"class":993},[950,4091,4092,4094,4096,4098,4100,4102,4104,4106,4108,4110,4112,4114,4116,4118],{"class":952,"line":1017},[950,4093,1637],{"class":960},[950,4095,2247],{"class":1640},[950,4097,969],{"class":968},[950,4099,1234],{"class":1075},[950,4101,1200],{"class":993},[950,4103,980],{"class":972},[950,4105,2258],{"class":976},[950,4107,980],{"class":972},[950,4109,1210],{"class":993},[950,4111,980],{"class":972},[950,4113,2267],{"class":976},[950,4115,980],{"class":972},[950,4117,2272],{"class":993},[950,4119,2275],{"class":2058},[1494,4121,2279],{"id":2278},[898,4123,2282],{},[1374,4125,4126,4138],{},[1377,4127,4128],{},[1380,4129,4130,4132,4134,4136],{},[1383,4131,1508],{},[1383,4133,1388],{},[1383,4135,1513],{},[1383,4137,1394],{},[1396,4139,4140,4154],{},[1380,4141,4142,4146,4150,4152],{},[1401,4143,4144],{},[902,4145,1203],{},[1401,4147,4148],{},[902,4149,1528],{},[1401,4151,1531],{},[1401,4153,1534],{},[1380,4155,4156,4160,4164,4166],{},[1401,4157,4158],{},[902,4159,977],{},[1401,4161,4162],{},[902,4163,2323],{},[1401,4165,1564],{},[1401,4167,2328,4168,1475],{},[902,4169,2331],{},[898,4171,4172,2337,4174,2341],{},[902,4173,2336],{},[902,4175,2340],{},[940,4177,4178],{"className":942,"code":2344,"filename":1601,"language":945,"meta":946,"style":946},[902,4179,4180,4200,4204,4226],{"__ignoreMap":946},[950,4181,4182,4184,4186,4188,4190,4192,4194,4196,4198],{"class":952,"line":953},[950,4183,1608],{"class":956},[950,4185,1611],{"class":993},[950,4187,2279],{"class":1020},[950,4189,1616],{"class":993},[950,4191,1619],{"class":956},[950,4193,973],{"class":972},[950,4195,1624],{"class":976},[950,4197,980],{"class":972},[950,4199,994],{"class":993},[950,4201,4202],{"class":952,"line":997},[950,4203,1000],{"emptyLinePlaceholder":8},[950,4205,4206,4208,4210,4212,4214,4216,4218,4220,4222,4224],{"class":952,"line":1003},[950,4207,1637],{"class":960},[950,4209,2377],{"class":1640},[950,4211,969],{"class":968},[950,4213,1268],{"class":1075},[950,4215,1200],{"class":993},[950,4217,980],{"class":972},[950,4219,2388],{"class":976},[950,4221,980],{"class":972},[950,4223,2272],{"class":993},[950,4225,2395],{"class":2058},[950,4227,4228,4230,4232,4234,4236,4238,4240,4242,4244,4246,4248,4250,4252,4254],{"class":952,"line":1017},[950,4229,1637],{"class":960},[950,4231,2402],{"class":1640},[950,4233,969],{"class":968},[950,4235,1268],{"class":1075},[950,4237,1200],{"class":993},[950,4239,980],{"class":972},[950,4241,2413],{"class":976},[950,4243,980],{"class":972},[950,4245,2418],{"class":993},[950,4247,980],{"class":972},[950,4249,2423],{"class":976},[950,4251,980],{"class":972},[950,4253,2428],{"class":993},[950,4255,2431],{"class":2058},[2433,4257,4258],{},[898,4259,2437],{},[1494,4261,2441],{"id":2440},[898,4263,2444],{},[1374,4265,4266,4278],{},[1377,4267,4268],{},[1380,4269,4270,4272,4274,4276],{},[1383,4271,1508],{},[1383,4273,1388],{},[1383,4275,1513],{},[1383,4277,1394],{},[1396,4279,4280,4294],{},[1380,4281,4282,4286,4290,4292],{},[1401,4283,4284],{},[902,4285,1203],{},[1401,4287,4288],{},[902,4289,1528],{},[1401,4291,1531],{},[1401,4293,1534],{},[1380,4295,4296,4300,4304,4306],{},[1401,4297,4298],{},[902,4299,977],{},[1401,4301,4302],{},[902,4303,2485],{},[1401,4305,1531],{},[1401,4307,2490],{},[1374,4309,4310,4318],{},[1377,4311,4312],{},[1380,4313,4314,4316],{},[1383,4315,2499],{},[1383,4317,2502],{},[1396,4319,4320,4336,4352],{},[1380,4321,4322,4332],{},[1401,4323,4324,1210,4326,1210,4328,1210,4330],{},[902,4325,2511],{},[902,4327,2514],{},[902,4329,2517],{},[902,4331,2520],{},[1401,4333,4334],{},[902,4335,2511],{},[1380,4337,4338,4348],{},[1401,4339,4340,1210,4342,1210,4344,1210,4346],{},[902,4341,2531],{},[902,4343,2023],{},[902,4345,2536],{},[902,4347,2539],{},[1401,4349,4350],{},[902,4351,2531],{},[1380,4353,4354,4360],{},[1401,4355,2548,4356,2552,4358],{},[902,4357,2551],{},[902,4359,2555],{},[1401,4361,4362],{},[902,4363,977],{},[898,4365,2562],{},[940,4367,4368],{"className":942,"code":2565,"filename":1601,"language":945,"meta":946,"style":946},[902,4369,4370,4390,4394,4418],{"__ignoreMap":946},[950,4371,4372,4374,4376,4378,4380,4382,4384,4386,4388],{"class":952,"line":953},[950,4373,1608],{"class":956},[950,4375,1611],{"class":993},[950,4377,2441],{"class":1020},[950,4379,1616],{"class":993},[950,4381,1619],{"class":956},[950,4383,973],{"class":972},[950,4385,1624],{"class":976},[950,4387,980],{"class":972},[950,4389,994],{"class":993},[950,4391,4392],{"class":952,"line":997},[950,4393,1000],{"emptyLinePlaceholder":8},[950,4395,4396,4398,4400,4402,4404,4406,4408,4410,4412,4414,4416],{"class":952,"line":1003},[950,4397,1637],{"class":960},[950,4399,2598],{"class":1640},[950,4401,969],{"class":968},[950,4403,1307],{"class":1075},[950,4405,1200],{"class":993},[950,4407,980],{"class":972},[950,4409,2609],{"class":976},[950,4411,980],{"class":972},[950,4413,1210],{"class":993},[950,4415,2531],{"class":2616},[950,4417,2087],{"class":993},[950,4419,4420,4422,4424,4426,4428,4430,4432,4434,4436,4438,4440],{"class":952,"line":1017},[950,4421,1637],{"class":960},[950,4423,2625],{"class":1640},[950,4425,969],{"class":968},[950,4427,1307],{"class":1075},[950,4429,1200],{"class":993},[950,4431,980],{"class":972},[950,4433,2636],{"class":976},[950,4435,980],{"class":972},[950,4437,1210],{"class":993},[950,4439,2511],{"class":2616},[950,4441,2087],{"class":993},[1494,4443,923],{"id":2647},[898,4445,2650],{},[1374,4447,4448,4460],{},[1377,4449,4450],{},[1380,4451,4452,4454,4456,4458],{},[1383,4453,1508],{},[1383,4455,1388],{},[1383,4457,1513],{},[1383,4459,1394],{},[1396,4461,4462],{},[1380,4463,4464,4468,4472,4474],{},[1401,4465,4466],{},[902,4467,1203],{},[1401,4469,4470],{},[902,4471,1528],{},[1401,4473,1531],{},[1401,4475,1534],{},[898,4477,2683],{},[940,4479,4480],{"className":942,"code":2686,"filename":1601,"language":945,"meta":946,"style":946},[902,4481,4482,4502,4506,4526],{"__ignoreMap":946},[950,4483,4484,4486,4488,4490,4492,4494,4496,4498,4500],{"class":952,"line":953},[950,4485,1608],{"class":956},[950,4487,1611],{"class":993},[950,4489,923],{"class":1020},[950,4491,1616],{"class":993},[950,4493,1619],{"class":956},[950,4495,973],{"class":972},[950,4497,1624],{"class":976},[950,4499,980],{"class":972},[950,4501,994],{"class":993},[950,4503,4504],{"class":952,"line":997},[950,4505,1000],{"emptyLinePlaceholder":8},[950,4507,4508,4510,4512,4514,4516,4518,4520,4522,4524],{"class":952,"line":1003},[950,4509,1637],{"class":960},[950,4511,2719],{"class":1640},[950,4513,969],{"class":968},[950,4515,1342],{"class":1075},[950,4517,1200],{"class":993},[950,4519,980],{"class":972},[950,4521,2730],{"class":976},[950,4523,980],{"class":972},[950,4525,2087],{"class":993},[950,4527,4528],{"class":952,"line":1017},[950,4529,2739],{"class":2058},[2741,4531,4532],{},[898,4533,2745],{},[935,4535,2749],{"id":2748},[1374,4537,4538,4566],{},[1377,4539,4540],{},[1380,4541,4542,4546,4550,4554,4558,4562],{},[1383,4543,2758,4544],{},[902,4545,907],{},[1383,4547,4548],{},[902,4549,1367],{},[1383,4551,4552],{},[902,4553,1371],{},[1383,4555,4556],{},[902,4557,2129],{},[1383,4559,4560],{},[902,4561,2279],{},[1383,4563,4564],{},[902,4565,2441],{},[1396,4567,4568,4582,4598,4622,4644,4664,4684,4706],{},[1380,4569,4570,4572,4574,4576,4578,4580],{},[1401,4571,2787],{},[1401,4573,977],{},[1401,4575,977],{},[1401,4577,977],{},[1401,4579,2796],{},[1401,4581,977],{},[1380,4583,4584,4588,4590,4592,4594,4596],{},[1401,4585,4586,2806],{},[902,4587,2805],{},[1401,4589,977],{},[1401,4591,977],{},[1401,4593,977],{},[1401,4595,2796],{},[1401,4597,977],{},[1380,4599,4600,4604,4608,4612,4616,4620],{},[1401,4601,4602],{},[902,4603,2823],{},[1401,4605,4606],{},[902,4607,2828],{},[1401,4609,4610],{},[902,4611,2828],{},[1401,4613,4614],{},[902,4615,2823],{},[1401,4617,4618],{},[902,4619,2841],{},[1401,4621,977],{},[1380,4623,4624,4628,4630,4634,4638,4642],{},[1401,4625,4626],{},[902,4627,2850],{},[1401,4629,977],{},[1401,4631,4632],{},[902,4633,2857],{},[1401,4635,4636],{},[902,4637,2850],{},[1401,4639,4640],{},[902,4641,2866],{},[1401,4643,977],{},[1380,4645,4646,4650,4652,4654,4658,4662],{},[1401,4647,4648],{},[902,4649,2875],{},[1401,4651,977],{},[1401,4653,977],{},[1401,4655,4656],{},[902,4657,2875],{},[1401,4659,4660],{},[902,4661,2888],{},[1401,4663,977],{},[1380,4665,4666,4670,4672,4674,4678,4682],{},[1401,4667,4668],{},[902,4669,2897],{},[1401,4671,977],{},[1401,4673,977],{},[1401,4675,4676],{},[902,4677,2897],{},[1401,4679,4680],{},[902,4681,2910],{},[1401,4683,977],{},[1380,4685,4686,4690,4692,4694,4698,4702],{},[1401,4687,4688],{},[902,4689,2919],{},[1401,4691,977],{},[1401,4693,977],{},[1401,4695,4696],{},[902,4697,2919],{},[1401,4699,4700],{},[902,4701,2932],{},[1401,4703,4704],{},[902,4705,2511],{},[1380,4707,4708,4712,4714,4716,4720,4724],{},[1401,4709,4710],{},[902,4711,2943],{},[1401,4713,977],{},[1401,4715,977],{},[1401,4717,4718],{},[902,4719,2952],{},[1401,4721,4722],{},[902,4723,2340],{},[1401,4725,977],{},[2960,4727,2962],{},{"title":946,"searchDepth":997,"depth":997,"links":4729},[4730,4731,4732,4741],{"id":937,"depth":997,"text":938},{"id":1361,"depth":997,"text":1362},{"id":1491,"depth":997,"text":1492,"children":4733},[4734,4735,4736,4737,4738,4739,4740],{"id":1496,"depth":1003,"text":1367},{"id":1733,"depth":1003,"text":1371},{"id":1950,"depth":1003,"text":1805},{"id":2128,"depth":1003,"text":2129},{"id":2278,"depth":1003,"text":2279},{"id":2440,"depth":1003,"text":2441},{"id":2647,"depth":1003,"text":923},{"id":2748,"depth":997,"text":2749},{},{"title":107,"description":2977},1793256379674]