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