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