[{"data":1,"prerenderedAt":4603},["ShallowReactive",2],{"navigation_docs_en":3,"-en-core-concepts-query-keys":342,"-en-core-concepts-query-keys-surround":4598},[4,45,91,137,195,236,257,291,327],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":44},"Getting Started","i-lucide-rocket","/en/getting-started","en/01.getting-started",[10,15,20,24,29,34,39],{"title":11,"path":12,"stem":13,"icon":14},"What is Qora?","/en/getting-started/what-is-qora","en/01.getting-started/2.what-is-qora","i-lucide-info",{"title":16,"path":17,"stem":18,"icon":19},"Installation","/en/getting-started/installation","en/01.getting-started/3.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":6},"Quick Start","/en/getting-started/quick-start","en/01.getting-started/4.quick-start",{"title":25,"path":26,"stem":27,"icon":28},"Comparison","/en/getting-started/comparison","en/01.getting-started/5.comparison","i-lucide-scale",{"title":30,"path":31,"stem":32,"icon":33},"Coming from TanStack Query","/en/getting-started/coming-from-tanstack-query","en/01.getting-started/6.coming-from-tanstack-query","i-lucide-arrow-left-right",{"title":35,"path":36,"stem":37,"icon":38},"Migrating from Other Libraries","/en/getting-started/migrating-from-other-libraries","en/01.getting-started/7.migrating-from-other-libraries","i-lucide-arrow-right-left",{"title":40,"path":41,"stem":42,"icon":43},"AI Assistants","/en/getting-started/ai-assistants","en/01.getting-started/8.ai-assistants","i-lucide-sparkles",false,{"title":46,"icon":47,"path":48,"stem":49,"children":50,"page":44},"Core Concepts","i-lucide-book-open","/en/core-concepts","en/02.core-concepts",[51,56,61,66,71,76,81,86],{"title":52,"path":53,"stem":54,"icon":55},"Queries","/en/core-concepts/queries","en/02.core-concepts/1.queries","i-lucide-database",{"title":57,"path":58,"stem":59,"icon":60},"Query Keys","/en/core-concepts/query-keys","en/02.core-concepts/2.query-keys","i-lucide-key-round",{"title":62,"path":63,"stem":64,"icon":65},"Query States","/en/core-concepts/query-states","en/02.core-concepts/3.query-states","i-lucide-activity",{"title":67,"path":68,"stem":69,"icon":70},"Caching","/en/core-concepts/caching","en/02.core-concepts/4.caching","i-lucide-layers-3",{"title":72,"path":73,"stem":74,"icon":75},"Stale-While-Revalidate","/en/core-concepts/stale-while-revalidate","en/02.core-concepts/5.stale-while-revalidate","i-lucide-timer-reset",{"title":77,"path":78,"stem":79,"icon":80},"Deduplication","/en/core-concepts/deduplication","en/02.core-concepts/6.deduplication","i-lucide-copy-minus",{"title":82,"path":83,"stem":84,"icon":85},"Mutations & Invalidation","/en/core-concepts/mutations","en/02.core-concepts/7.mutations","i-lucide-pencil-line",{"title":87,"path":88,"stem":89,"icon":90},"Offline & Network","/en/core-concepts/offline","en/02.core-concepts/8.offline","i-lucide-wifi-off",{"title":92,"icon":93,"path":94,"stem":95,"children":96,"page":44},"Flutter Integration","i-lucide-smartphone","/en/flutter-integration","en/03.flutter-integration",[97,102,107,112,117,122,127,132],{"title":98,"path":99,"stem":100,"icon":101},"Setup","/en/flutter-integration/setup","en/03.flutter-integration/1.setup","i-lucide-wrench",{"title":103,"path":104,"stem":105,"icon":106},"QoraScope","/en/flutter-integration/qora-scope","en/03.flutter-integration/2.qora-scope","i-lucide-share-2",{"title":108,"path":109,"stem":110,"icon":111},"QoraBuilder","/en/flutter-integration/qora-builder","en/03.flutter-integration/3.qora-builder","i-lucide-blocks",{"title":113,"path":114,"stem":115,"icon":116},"QoraMutationBuilder","/en/flutter-integration/qora-mutation-builder","en/03.flutter-integration/4.qora-mutation-builder","i-lucide-pencil",{"title":118,"path":119,"stem":120,"icon":121},"InfiniteQueryBuilder","/en/flutter-integration/infinite-query-builder","en/03.flutter-integration/5.infinite-query-builder","i-lucide-infinity",{"title":123,"path":124,"stem":125,"icon":126},"Hooks (flutter_hooks)","/en/flutter-integration/hooks","en/03.flutter-integration/6.hooks","i-lucide-anchor",{"title":128,"path":129,"stem":130,"icon":131},"Network Status Widgets","/en/flutter-integration/network-status","en/03.flutter-integration/7.network-status","i-lucide-wifi",{"title":133,"path":134,"stem":135,"icon":136},"Best Practices","/en/flutter-integration/best-practices","en/03.flutter-integration/8.best-practices","i-lucide-badge-check",{"title":138,"icon":139,"path":140,"stem":141,"children":142,"page":44},"Recipes","i-lucide-chef-hat","/en/recipes","en/04.recipes",[143,147,152,157,162,166,171,176,181,186,191],{"title":144,"path":145,"stem":146,"icon":85},"Mutations","/en/recipes/mutations","en/04.recipes/02.mutations",{"title":148,"path":149,"stem":150,"icon":151},"Optimistic Updates","/en/recipes/optimistic-updates","en/04.recipes/03.optimistic-updates","i-lucide-zap",{"title":153,"path":154,"stem":155,"icon":156},"Persistence","/en/recipes/persistence","en/04.recipes/04.persistence","i-lucide-hard-drive",{"title":158,"path":159,"stem":160,"icon":161},"Network Aware","/en/recipes/network-aware","en/04.recipes/05.network-aware","i-lucide-signal",{"title":163,"path":164,"stem":165,"icon":121},"Infinite Queries","/en/recipes/infinite-queries","en/04.recipes/06.infinite-queries",{"title":167,"path":168,"stem":169,"icon":170},"Dependent Queries","/en/recipes/dependent-queries","en/04.recipes/07.dependent-queries","i-lucide-link-2",{"title":172,"path":173,"stem":174,"icon":175},"Cancellation","/en/recipes/cancel-token","en/04.recipes/08.cancel-token","i-lucide-circle-slash",{"title":177,"path":178,"stem":179,"icon":180},"SSR Hydration","/en/recipes/ssr-hydration","en/04.recipes/09.ssr-hydration","i-lucide-server",{"title":182,"path":183,"stem":184,"icon":185},"Error Handling","/en/recipes/error-handling","en/04.recipes/10.error-handling","i-lucide-shield-alert",{"title":187,"path":188,"stem":189,"icon":190},"Testing","/en/recipes/testing","en/04.recipes/11.testing","i-lucide-flask-conical",{"title":192,"path":193,"stem":194},"Route-Level Prefetching","/en/recipes/prefetch","en/04.recipes/12.prefetch",{"title":196,"icon":197,"path":198,"stem":199,"children":200,"page":44},"API Reference","i-lucide-file-code","/en/api-reference","en/05.api-reference",[201,206,210,214,219,224,228,232],{"title":202,"path":203,"stem":204,"icon":205},"QoraClient","/en/api-reference/qora-client","en/05.api-reference/1.qora-client","i-lucide-cpu",{"title":207,"path":208,"stem":209,"icon":60},"QoraKey","/en/api-reference/qora-key","en/05.api-reference/2.qora-key",{"title":211,"path":212,"stem":213,"icon":65},"QoraState","/en/api-reference/qora-state","en/05.api-reference/3.qora-state",{"title":215,"path":216,"stem":217,"icon":218},"QoraOptions","/en/api-reference/qora-options","en/05.api-reference/4.qora-options","i-lucide-sliders-horizontal",{"title":220,"path":221,"stem":222,"icon":223},"QoraClientConfig","/en/api-reference/qora-client-config","en/05.api-reference/5.qora-client-config","i-lucide-settings-2",{"title":225,"path":226,"stem":227,"icon":85},"Mutation API","/en/api-reference/qora-mutation","en/05.api-reference/6.qora-mutation",{"title":229,"path":230,"stem":231,"icon":156},"PersistQoraClient","/en/api-reference/persist-qora-client","en/05.api-reference/7.persist-qora-client",{"title":233,"path":234,"stem":235,"icon":121},"Infinite Query","/en/api-reference/infinite-query","en/05.api-reference/8.infinite-query",{"title":237,"icon":238,"path":239,"stem":240,"children":241,"page":44},"DevTools","i-lucide-bug","/en/devtools","en/06.devtools",[242,247,252],{"title":243,"path":244,"stem":245,"icon":246},"Overview","/en/devtools/overview","en/06.devtools/1.overview","i-lucide-layout-dashboard",{"title":248,"path":249,"stem":250,"icon":251},"In-App Overlay","/en/devtools/overlay","en/06.devtools/2.overlay","i-lucide-layers",{"title":253,"path":254,"stem":255,"icon":256},"Data Serialization","/en/devtools/data-display","en/06.devtools/4.data-display","i-lucide-eye",{"title":258,"icon":259,"path":260,"stem":261,"children":262,"page":44},"Third Party","i-lucide-puzzle","/en/third-party","en/07.third-party",[263,268,272,277,282,286],{"title":264,"path":265,"stem":266,"icon":267},"With Provider","/en/third-party/with-provider","en/07.third-party/1.with-provider","i-lucide-plug",{"title":269,"path":270,"stem":271,"icon":111},"With BLoC","/en/third-party/with-bloc","en/07.third-party/2.with-bloc",{"title":273,"path":274,"stem":275,"icon":276},"With Riverpod","/en/third-party/with-riverpod","en/07.third-party/3.with-riverpod","i-lucide-droplets",{"title":278,"path":279,"stem":280,"icon":281},"With RxDart","/en/third-party/with-rxdart","en/07.third-party/4.with-rxdart","i-lucide-git-branch",{"title":283,"path":284,"stem":285},"With Dio","/en/third-party/with-dio","en/07.third-party/5.with-dio",{"title":287,"path":288,"stem":289,"icon":290},"With GraphQL","/en/third-party/with-graphql","en/07.third-party/6.with-graphql","i-lucide-binary",{"title":292,"icon":190,"path":293,"stem":294,"children":295,"page":44},"Examples","/en/examples","en/08.examples",[296,301,305,310,314,318,322],{"title":297,"path":298,"stem":299,"icon":300},"Case Study: User List & Detail","/en/examples/basic-query","en/08.examples/1.basic-query","i-lucide-play-circle",{"title":302,"path":303,"stem":304,"icon":151},"Case Study: Optimistic Mutations & Rollback","/en/examples/mutations-optimistic","en/08.examples/2.mutations-optimistic",{"title":306,"path":307,"stem":308,"icon":309},"Case Study: Infinite Scroll Feed","/en/examples/infinite-scroll","en/08.examples/3.infinite-scroll","i-lucide-scroll",{"title":311,"path":312,"stem":313,"icon":90},"Case Study: Offline-First Todo App","/en/examples/offline-first","en/08.examples/4.offline-first",{"title":315,"path":316,"stem":317,"icon":161},"Case Study: Network Awareness","/en/examples/network-awareness","en/08.examples/5.network-awareness",{"title":319,"path":320,"stem":321,"icon":126},"Case Study: Hooks Integration","/en/examples/hooks-integration","en/08.examples/6.hooks-integration",{"title":323,"path":324,"stem":325,"icon":326},"Case Study: Complete Todo App","/en/examples/complete-todo-app","en/08.examples/7.complete-todo-app","i-lucide-check-square",{"title":328,"icon":329,"path":330,"stem":331,"children":332,"page":44},"Help","i-lucide-life-buoy","/en/help","en/09.help",[333,338],{"title":334,"path":335,"stem":336,"icon":337},"FAQ","/en/help/faq","en/09.help/1.faq","i-lucide-circle-help",{"title":339,"path":340,"stem":341,"icon":101},"Troubleshooting","/en/help/troubleshooting","en/09.help/2.troubleshooting",{"id":343,"title":57,"body":344,"description":4591,"extension":4592,"links":4593,"meta":4594,"navigation":4595,"path":58,"seo":4596,"stem":59,"__hash__":4597},"docs_en/en/02.core-concepts/2.query-keys.md",{"type":345,"value":346,"toc":4544},"minimark",[347,351,360,376,379,524,527,530,534,539,694,698,882,886,1010,1012,1016,1027,1031,1094,1098,1194,1198,1204,1273,1276,1280,1339,1341,1345,1349,1354,1393,1397,1478,1482,1538,1542,1608,1612,1615,1652,1655,1707,1710,1783,1785,1789,1798,1802,2064,2068,2277,2286,2288,2292,2297,2301,2519,2523,2529,2540,2545,2553,2555,2559,2562,3015,3019,3329,3331,3335,3339,3364,3368,3376,3482,3486,3492,3566,3570,3573,3637,3639,3643,3650,3860,3862,3866,3869,3951,3958,4019,4022,4024,4028,4032,4171,4175,4282,4284,4287,4291,4297,4307,4349,4363,4365,4369,4377,4389,4451,4453,4457,4462,4467,4491,4496,4498,4502,4540],[348,349,243],"h2",{"id":350},"overview",[352,353,354,355,359],"p",{},"A query key is a ",[356,357,358],"strong",{},"serializable array"," that Qora uses to:",[361,362,363,367,370,373],"ul",{},[364,365,366],"li",{},"Cache data uniquely per query",[364,368,369],{},"Trigger background revalidation when keys change",[364,371,372],{},"Share cache state across services and widgets",[364,374,375],{},"Invalidate and update related queries after mutations",[352,377,378],{},"Qora supports two syntaxes:",[380,381,386],"pre",{"className":382,"code":383,"language":384,"meta":385,"style":385},"language-dart shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","// Direct List (frictionless)\nclient.fetchQuery(key: ['users', userId], fetcher: () => api.getUser(userId));\n\n// Typed Wrapper (type-safe)\nclient.fetchQuery(key: QoraKey.withId('users', userId), fetcher: () => api.getUser(userId));\n","dart","",[387,388,389,398,459,466,472],"code",{"__ignoreMap":385},[390,391,394],"span",{"class":392,"line":393},"line",1,[390,395,397],{"class":396},"sHwdD","// Direct List (frictionless)\n",[390,399,401,405,409,413,416,419,422,426,429,432,434,437,439,442,445,448,450,453,456],{"class":392,"line":400},2,[390,402,404],{"class":403},"sTEyZ","client",[390,406,408],{"class":407},"sMK4o",".",[390,410,412],{"class":411},"s2Zo4","fetchQuery",[390,414,415],{"class":403},"(key",[390,417,418],{"class":407},":",[390,420,421],{"class":403}," [",[390,423,425],{"class":424},"sfazB","'users'",[390,427,428],{"class":407},",",[390,430,431],{"class":403}," userId]",[390,433,428],{"class":407},[390,435,436],{"class":403}," fetcher",[390,438,418],{"class":407},[390,440,441],{"class":403}," () ",[390,443,444],{"class":407},"=>",[390,446,447],{"class":403}," api",[390,449,408],{"class":407},[390,451,452],{"class":411},"getUser",[390,454,455],{"class":403},"(userId))",[390,457,458],{"class":407},";\n",[390,460,462],{"class":392,"line":461},3,[390,463,465],{"emptyLinePlaceholder":464},true,"\n",[390,467,469],{"class":392,"line":468},4,[390,470,471],{"class":396},"// Typed Wrapper (type-safe)\n",[390,473,475,477,479,481,483,485,489,491,494,497,499,501,504,506,508,510,512,514,516,518,520,522],{"class":392,"line":474},5,[390,476,404],{"class":403},[390,478,408],{"class":407},[390,480,412],{"class":411},[390,482,415],{"class":403},[390,484,418],{"class":407},[390,486,488],{"class":487},"sBMFI"," QoraKey",[390,490,408],{"class":407},[390,492,493],{"class":411},"withId",[390,495,496],{"class":403},"(",[390,498,425],{"class":424},[390,500,428],{"class":407},[390,502,503],{"class":403}," userId)",[390,505,428],{"class":407},[390,507,436],{"class":403},[390,509,418],{"class":407},[390,511,441],{"class":403},[390,513,444],{"class":407},[390,515,447],{"class":403},[390,517,408],{"class":407},[390,519,452],{"class":411},[390,521,455],{"class":403},[390,523,458],{"class":407},[352,525,526],{},"Both forms are 100% interchangeable. They resolve to the same internal representation.",[528,529],"hr",{},[348,531,533],{"id":532},"query-key-basics","Query Key Basics",[535,536,538],"h3",{"id":537},"simple-keys","Simple Keys",[380,540,542],{"className":382,"code":541,"language":384,"meta":385,"style":385},"// Fetch all users\nfinal users = await client.fetchQuery\u003CList\u003CUser>>(\n  key: ['users'],\n  fetcher: fetchUsers,\n);\n\n// Fetch app settings\nfinal settings = await client.fetchQuery\u003CSettings>(\n  key: ['settings'],\n  fetcher: fetchSettings,\n);\n",[387,543,544,549,586,603,615,622,627,633,659,675,687],{"__ignoreMap":385},[390,545,546],{"class":392,"line":393},[390,547,548],{"class":396},"// Fetch all users\n",[390,550,551,555,558,561,565,568,570,572,575,578,580,583],{"class":392,"line":400},[390,552,554],{"class":553},"spNyl","final",[390,556,557],{"class":403}," users ",[390,559,560],{"class":407},"=",[390,562,564],{"class":563},"s7zQu"," await",[390,566,567],{"class":403}," client",[390,569,408],{"class":407},[390,571,412],{"class":411},[390,573,574],{"class":403},"\u003C",[390,576,577],{"class":487},"List",[390,579,574],{"class":403},[390,581,582],{"class":487},"User",[390,584,585],{"class":403},">>(\n",[390,587,588,591,593,595,597,600],{"class":392,"line":461},[390,589,590],{"class":403},"  key",[390,592,418],{"class":407},[390,594,421],{"class":403},[390,596,425],{"class":424},[390,598,599],{"class":403},"]",[390,601,602],{"class":407},",\n",[390,604,605,608,610,613],{"class":392,"line":468},[390,606,607],{"class":403},"  fetcher",[390,609,418],{"class":407},[390,611,612],{"class":403}," fetchUsers",[390,614,602],{"class":407},[390,616,617,620],{"class":392,"line":474},[390,618,619],{"class":403},")",[390,621,458],{"class":407},[390,623,625],{"class":392,"line":624},6,[390,626,465],{"emptyLinePlaceholder":464},[390,628,630],{"class":392,"line":629},7,[390,631,632],{"class":396},"// Fetch app settings\n",[390,634,636,638,641,643,645,647,649,651,653,656],{"class":392,"line":635},8,[390,637,554],{"class":553},[390,639,640],{"class":403}," settings ",[390,642,560],{"class":407},[390,644,564],{"class":563},[390,646,567],{"class":403},[390,648,408],{"class":407},[390,650,412],{"class":411},[390,652,574],{"class":403},[390,654,655],{"class":487},"Settings",[390,657,658],{"class":403},">(\n",[390,660,662,664,666,668,671,673],{"class":392,"line":661},9,[390,663,590],{"class":403},[390,665,418],{"class":407},[390,667,421],{"class":403},[390,669,670],{"class":424},"'settings'",[390,672,599],{"class":403},[390,674,602],{"class":407},[390,676,678,680,682,685],{"class":392,"line":677},10,[390,679,607],{"class":403},[390,681,418],{"class":407},[390,683,684],{"class":403}," fetchSettings",[390,686,602],{"class":407},[390,688,690,692],{"class":392,"line":689},11,[390,691,619],{"class":403},[390,693,458],{"class":407},[535,695,697],{"id":696},"keys-with-variables","Keys with Variables",[380,699,701],{"className":382,"code":700,"language":384,"meta":385,"style":385},"// Fetch a specific user\nfinal user = await client.fetchQuery\u003CUser>(\n  key: ['users', userId],\n  fetcher: () => fetchUser(userId),\n);\n\n// Fetch filtered posts\nfinal posts = await client.fetchQuery\u003CList\u003CPost>>(\n  key: ['posts', {'status': 'published', 'author': authorId}],\n  fetcher: () => fetchPosts(status: 'published', author: authorId),\n);\n",[387,702,703,708,731,747,765,771,775,780,808,844,876],{"__ignoreMap":385},[390,704,705],{"class":392,"line":393},[390,706,707],{"class":396},"// Fetch a specific user\n",[390,709,710,712,715,717,719,721,723,725,727,729],{"class":392,"line":400},[390,711,554],{"class":553},[390,713,714],{"class":403}," user ",[390,716,560],{"class":407},[390,718,564],{"class":563},[390,720,567],{"class":403},[390,722,408],{"class":407},[390,724,412],{"class":411},[390,726,574],{"class":403},[390,728,582],{"class":487},[390,730,658],{"class":403},[390,732,733,735,737,739,741,743,745],{"class":392,"line":461},[390,734,590],{"class":403},[390,736,418],{"class":407},[390,738,421],{"class":403},[390,740,425],{"class":424},[390,742,428],{"class":407},[390,744,431],{"class":403},[390,746,602],{"class":407},[390,748,749,751,753,755,757,760,763],{"class":392,"line":468},[390,750,607],{"class":403},[390,752,418],{"class":407},[390,754,441],{"class":403},[390,756,444],{"class":407},[390,758,759],{"class":411}," fetchUser",[390,761,762],{"class":403},"(userId)",[390,764,602],{"class":407},[390,766,767,769],{"class":392,"line":474},[390,768,619],{"class":403},[390,770,458],{"class":407},[390,772,773],{"class":392,"line":624},[390,774,465],{"emptyLinePlaceholder":464},[390,776,777],{"class":392,"line":629},[390,778,779],{"class":396},"// Fetch filtered posts\n",[390,781,782,784,787,789,791,793,795,797,799,801,803,806],{"class":392,"line":635},[390,783,554],{"class":553},[390,785,786],{"class":403}," posts ",[390,788,560],{"class":407},[390,790,564],{"class":563},[390,792,567],{"class":403},[390,794,408],{"class":407},[390,796,412],{"class":411},[390,798,574],{"class":403},[390,800,577],{"class":487},[390,802,574],{"class":403},[390,804,805],{"class":487},"Post",[390,807,585],{"class":403},[390,809,810,812,814,816,819,821,824,827,829,832,834,837,839,842],{"class":392,"line":661},[390,811,590],{"class":403},[390,813,418],{"class":407},[390,815,421],{"class":403},[390,817,818],{"class":424},"'posts'",[390,820,428],{"class":407},[390,822,823],{"class":403}," {",[390,825,826],{"class":424},"'status'",[390,828,418],{"class":407},[390,830,831],{"class":424}," 'published'",[390,833,428],{"class":407},[390,835,836],{"class":424}," 'author'",[390,838,418],{"class":407},[390,840,841],{"class":403}," authorId}]",[390,843,602],{"class":407},[390,845,846,848,850,852,854,857,860,862,864,866,869,871,874],{"class":392,"line":677},[390,847,607],{"class":403},[390,849,418],{"class":407},[390,851,441],{"class":403},[390,853,444],{"class":407},[390,855,856],{"class":411}," fetchPosts",[390,858,859],{"class":403},"(status",[390,861,418],{"class":407},[390,863,831],{"class":424},[390,865,428],{"class":407},[390,867,868],{"class":403}," author",[390,870,418],{"class":407},[390,872,873],{"class":403}," authorId)",[390,875,602],{"class":407},[390,877,878,880],{"class":392,"line":689},[390,879,619],{"class":403},[390,881,458],{"class":407},[535,883,885],{"id":884},"hierarchical-keys","Hierarchical Keys",[380,887,889],{"className":382,"code":888,"language":384,"meta":385,"style":385},"// User profile\n['users', userId, 'profile']\n\n// User's posts\n['users', userId, 'posts']\n\n// Specific post comments\n['posts', postId, 'comments']\n\n// Paginated data\n['posts', {'page': 2, 'limit': 20}]\n",[387,890,891,896,916,920,925,942,946,951,969,973,978],{"__ignoreMap":385},[390,892,893],{"class":392,"line":393},[390,894,895],{"class":396},"// User profile\n",[390,897,898,901,903,905,908,910,913],{"class":392,"line":400},[390,899,900],{"class":403},"[",[390,902,425],{"class":424},[390,904,428],{"class":407},[390,906,907],{"class":403}," userId",[390,909,428],{"class":407},[390,911,912],{"class":424}," 'profile'",[390,914,915],{"class":403},"]\n",[390,917,918],{"class":392,"line":461},[390,919,465],{"emptyLinePlaceholder":464},[390,921,922],{"class":392,"line":468},[390,923,924],{"class":396},"// User's posts\n",[390,926,927,929,931,933,935,937,940],{"class":392,"line":474},[390,928,900],{"class":403},[390,930,425],{"class":424},[390,932,428],{"class":407},[390,934,907],{"class":403},[390,936,428],{"class":407},[390,938,939],{"class":424}," 'posts'",[390,941,915],{"class":403},[390,943,944],{"class":392,"line":624},[390,945,465],{"emptyLinePlaceholder":464},[390,947,948],{"class":392,"line":629},[390,949,950],{"class":396},"// Specific post comments\n",[390,952,953,955,957,959,962,964,967],{"class":392,"line":635},[390,954,900],{"class":403},[390,956,818],{"class":424},[390,958,428],{"class":407},[390,960,961],{"class":403}," postId",[390,963,428],{"class":407},[390,965,966],{"class":424}," 'comments'",[390,968,915],{"class":403},[390,970,971],{"class":392,"line":661},[390,972,465],{"emptyLinePlaceholder":464},[390,974,975],{"class":392,"line":677},[390,976,977],{"class":396},"// Paginated data\n",[390,979,980,982,984,986,988,991,993,997,999,1002,1004,1007],{"class":392,"line":689},[390,981,900],{"class":403},[390,983,818],{"class":424},[390,985,428],{"class":407},[390,987,823],{"class":403},[390,989,990],{"class":424},"'page'",[390,992,418],{"class":407},[390,994,996],{"class":995},"sbssI"," 2",[390,998,428],{"class":407},[390,1000,1001],{"class":424}," 'limit'",[390,1003,418],{"class":407},[390,1005,1006],{"class":995}," 20",[390,1008,1009],{"class":403},"}]\n",[528,1011],{},[348,1013,1015],{"id":1014},"key-equality","Key Equality",[352,1017,1018,1019,1022,1023,1026],{},"Qora uses ",[356,1020,1021],{},"deep equality"," to compare query keys. Two keys are equal if their ",[356,1024,1025],{},"content"," is identical, not their reference.",[535,1028,1030],{"id":1029},"primitive-values","Primitive Values",[380,1032,1034],{"className":382,"code":1033,"language":384,"meta":385,"style":385},"['users', 1] == ['users', 1]  // true\n['users', 1] == ['users', 2]  // false\n",[387,1035,1036,1067],{"__ignoreMap":385},[390,1037,1038,1040,1042,1044,1047,1050,1053,1055,1057,1059,1061,1064],{"class":392,"line":393},[390,1039,900],{"class":403},[390,1041,425],{"class":424},[390,1043,428],{"class":407},[390,1045,1046],{"class":995}," 1",[390,1048,1049],{"class":403},"] ",[390,1051,1052],{"class":407},"==",[390,1054,421],{"class":403},[390,1056,425],{"class":424},[390,1058,428],{"class":407},[390,1060,1046],{"class":995},[390,1062,1063],{"class":403},"]  ",[390,1065,1066],{"class":396},"// true\n",[390,1068,1069,1071,1073,1075,1077,1079,1081,1083,1085,1087,1089,1091],{"class":392,"line":400},[390,1070,900],{"class":403},[390,1072,425],{"class":424},[390,1074,428],{"class":407},[390,1076,1046],{"class":995},[390,1078,1049],{"class":403},[390,1080,1052],{"class":407},[390,1082,421],{"class":403},[390,1084,425],{"class":424},[390,1086,428],{"class":407},[390,1088,996],{"class":995},[390,1090,1063],{"class":403},[390,1092,1093],{"class":396},"// false\n",[535,1095,1097],{"id":1096},"lists-and-nesting","Lists and Nesting",[380,1099,1101],{"className":382,"code":1100,"language":384,"meta":385,"style":385},"['users', [1, 2, 3]] == ['users', [1, 2, 3]]  // true\n['users', [1, 2]] == ['users', [2, 1]]        // false (order matters)\n",[387,1102,1103,1153],{"__ignoreMap":385},[390,1104,1105,1107,1109,1111,1113,1116,1118,1120,1122,1125,1128,1130,1132,1134,1136,1138,1140,1142,1144,1146,1148,1151],{"class":392,"line":393},[390,1106,900],{"class":403},[390,1108,425],{"class":424},[390,1110,428],{"class":407},[390,1112,421],{"class":403},[390,1114,1115],{"class":995},"1",[390,1117,428],{"class":407},[390,1119,996],{"class":995},[390,1121,428],{"class":407},[390,1123,1124],{"class":995}," 3",[390,1126,1127],{"class":403},"]] ",[390,1129,1052],{"class":407},[390,1131,421],{"class":403},[390,1133,425],{"class":424},[390,1135,428],{"class":407},[390,1137,421],{"class":403},[390,1139,1115],{"class":995},[390,1141,428],{"class":407},[390,1143,996],{"class":995},[390,1145,428],{"class":407},[390,1147,1124],{"class":995},[390,1149,1150],{"class":403},"]]  ",[390,1152,1066],{"class":396},[390,1154,1155,1157,1159,1161,1163,1165,1167,1169,1171,1173,1175,1177,1179,1181,1184,1186,1188,1191],{"class":392,"line":400},[390,1156,900],{"class":403},[390,1158,425],{"class":424},[390,1160,428],{"class":407},[390,1162,421],{"class":403},[390,1164,1115],{"class":995},[390,1166,428],{"class":407},[390,1168,996],{"class":995},[390,1170,1127],{"class":403},[390,1172,1052],{"class":407},[390,1174,421],{"class":403},[390,1176,425],{"class":424},[390,1178,428],{"class":407},[390,1180,421],{"class":403},[390,1182,1183],{"class":995},"2",[390,1185,428],{"class":407},[390,1187,1046],{"class":995},[390,1189,1190],{"class":403},"]]        ",[390,1192,1193],{"class":396},"// false (order matters)\n",[535,1195,1197],{"id":1196},"maps-order-independent","Maps (Order-Independent)",[352,1199,1200,1201,1203],{},"Maps are compared by their ",[356,1202,1025],{},", regardless of key insertion order:",[380,1205,1207],{"className":382,"code":1206,"language":384,"meta":385,"style":385},"['posts', {'status': 'active', 'limit': 10}]\n  ==\n['posts', {'limit': 10, 'status': 'active'}]  // true\n",[387,1208,1209,1237,1242],{"__ignoreMap":385},[390,1210,1211,1213,1215,1217,1219,1221,1223,1226,1228,1230,1232,1235],{"class":392,"line":393},[390,1212,900],{"class":403},[390,1214,818],{"class":424},[390,1216,428],{"class":407},[390,1218,823],{"class":403},[390,1220,826],{"class":424},[390,1222,418],{"class":407},[390,1224,1225],{"class":424}," 'active'",[390,1227,428],{"class":407},[390,1229,1001],{"class":424},[390,1231,418],{"class":407},[390,1233,1234],{"class":995}," 10",[390,1236,1009],{"class":403},[390,1238,1239],{"class":392,"line":400},[390,1240,1241],{"class":407},"  ==\n",[390,1243,1244,1246,1248,1250,1252,1255,1257,1259,1261,1264,1266,1268,1271],{"class":392,"line":461},[390,1245,900],{"class":403},[390,1247,818],{"class":424},[390,1249,428],{"class":407},[390,1251,823],{"class":403},[390,1253,1254],{"class":424},"'limit'",[390,1256,418],{"class":407},[390,1258,1234],{"class":995},[390,1260,428],{"class":407},[390,1262,1263],{"class":424}," 'status'",[390,1265,418],{"class":407},[390,1267,1225],{"class":424},[390,1269,1270],{"class":403},"}]  ",[390,1272,1066],{"class":396},[352,1274,1275],{},"This differs from TanStack Query (JavaScript), where object key order matters.",[535,1277,1279],{"id":1278},"null-values","Null Values",[380,1281,1283],{"className":382,"code":1282,"language":384,"meta":385,"style":385},"['users', null] == ['users', null]  // true\n['users', null] == ['users', 1]     // false\n",[387,1284,1285,1312],{"__ignoreMap":385},[390,1286,1287,1289,1291,1293,1296,1298,1300,1302,1304,1306,1308,1310],{"class":392,"line":393},[390,1288,900],{"class":403},[390,1290,425],{"class":424},[390,1292,428],{"class":407},[390,1294,1295],{"class":407}," null",[390,1297,1049],{"class":403},[390,1299,1052],{"class":407},[390,1301,421],{"class":403},[390,1303,425],{"class":424},[390,1305,428],{"class":407},[390,1307,1295],{"class":407},[390,1309,1063],{"class":403},[390,1311,1066],{"class":396},[390,1313,1314,1316,1318,1320,1322,1324,1326,1328,1330,1332,1334,1337],{"class":392,"line":400},[390,1315,900],{"class":403},[390,1317,425],{"class":424},[390,1319,428],{"class":407},[390,1321,1295],{"class":407},[390,1323,1049],{"class":403},[390,1325,1052],{"class":407},[390,1327,421],{"class":403},[390,1329,425],{"class":424},[390,1331,428],{"class":407},[390,1333,1046],{"class":995},[390,1335,1336],{"class":403},"]     ",[390,1338,1093],{"class":396},[528,1340],{},[348,1342,1344],{"id":1343},"query-key-structure","Query Key Structure",[535,1346,1348],{"id":1347},"recommended-patterns","Recommended Patterns",[1350,1351,1353],"h4",{"id":1352},"pattern-1-entity-id","Pattern 1: Entity + ID",[380,1355,1357],{"className":382,"code":1356,"language":384,"meta":385,"style":385},"['users', userId]\n['posts', postId]\n['products', sku]\n",[387,1358,1359,1370,1381],{"__ignoreMap":385},[390,1360,1361,1363,1365,1367],{"class":392,"line":393},[390,1362,900],{"class":403},[390,1364,425],{"class":424},[390,1366,428],{"class":407},[390,1368,1369],{"class":403}," userId]\n",[390,1371,1372,1374,1376,1378],{"class":392,"line":400},[390,1373,900],{"class":403},[390,1375,818],{"class":424},[390,1377,428],{"class":407},[390,1379,1380],{"class":403}," postId]\n",[390,1382,1383,1385,1388,1390],{"class":392,"line":461},[390,1384,900],{"class":403},[390,1386,1387],{"class":424},"'products'",[390,1389,428],{"class":407},[390,1391,1392],{"class":403}," sku]\n",[1350,1394,1396],{"id":1395},"pattern-2-entity-filters","Pattern 2: Entity + Filters",[380,1398,1400],{"className":382,"code":1399,"language":384,"meta":385,"style":385},"['posts', {'status': 'published'}]\n['users', {'role': 'admin', 'active': true}]\n['products', {'category': 'electronics', 'inStock': true}]\n",[387,1401,1402,1420,1449],{"__ignoreMap":385},[390,1403,1404,1406,1408,1410,1412,1414,1416,1418],{"class":392,"line":393},[390,1405,900],{"class":403},[390,1407,818],{"class":424},[390,1409,428],{"class":407},[390,1411,823],{"class":403},[390,1413,826],{"class":424},[390,1415,418],{"class":407},[390,1417,831],{"class":424},[390,1419,1009],{"class":403},[390,1421,1422,1424,1426,1428,1430,1433,1435,1438,1440,1442,1444,1447],{"class":392,"line":400},[390,1423,900],{"class":403},[390,1425,425],{"class":424},[390,1427,428],{"class":407},[390,1429,823],{"class":403},[390,1431,1432],{"class":424},"'role'",[390,1434,418],{"class":407},[390,1436,1437],{"class":424}," 'admin'",[390,1439,428],{"class":407},[390,1441,1225],{"class":424},[390,1443,418],{"class":407},[390,1445,1446],{"class":407}," true",[390,1448,1009],{"class":403},[390,1450,1451,1453,1455,1457,1459,1462,1464,1467,1469,1472,1474,1476],{"class":392,"line":461},[390,1452,900],{"class":403},[390,1454,1387],{"class":424},[390,1456,428],{"class":407},[390,1458,823],{"class":403},[390,1460,1461],{"class":424},"'category'",[390,1463,418],{"class":407},[390,1465,1466],{"class":424}," 'electronics'",[390,1468,428],{"class":407},[390,1470,1471],{"class":424}," 'inStock'",[390,1473,418],{"class":407},[390,1475,1446],{"class":407},[390,1477,1009],{"class":403},[1350,1479,1481],{"id":1480},"pattern-3-entity-id-relation","Pattern 3: Entity + ID + Relation",[380,1483,1485],{"className":382,"code":1484,"language":384,"meta":385,"style":385},"['users', userId, 'posts']\n['posts', postId, 'comments']\n['orders', orderId, 'items']\n",[387,1486,1487,1503,1519],{"__ignoreMap":385},[390,1488,1489,1491,1493,1495,1497,1499,1501],{"class":392,"line":393},[390,1490,900],{"class":403},[390,1492,425],{"class":424},[390,1494,428],{"class":407},[390,1496,907],{"class":403},[390,1498,428],{"class":407},[390,1500,939],{"class":424},[390,1502,915],{"class":403},[390,1504,1505,1507,1509,1511,1513,1515,1517],{"class":392,"line":400},[390,1506,900],{"class":403},[390,1508,818],{"class":424},[390,1510,428],{"class":407},[390,1512,961],{"class":403},[390,1514,428],{"class":407},[390,1516,966],{"class":424},[390,1518,915],{"class":403},[390,1520,1521,1523,1526,1528,1531,1533,1536],{"class":392,"line":461},[390,1522,900],{"class":403},[390,1524,1525],{"class":424},"'orders'",[390,1527,428],{"class":407},[390,1529,1530],{"class":403}," orderId",[390,1532,428],{"class":407},[390,1534,1535],{"class":424}," 'items'",[390,1537,915],{"class":403},[1350,1539,1541],{"id":1540},"pattern-4-pagination","Pattern 4: Pagination",[380,1543,1545],{"className":382,"code":1544,"language":384,"meta":385,"style":385},"// Offset-based\n['posts', {'page': pageNumber}]\n\n// Cursor-based\n['messages', {'cursor': lastMessageId, 'limit': 50}]\n",[387,1546,1547,1552,1569,1573,1578],{"__ignoreMap":385},[390,1548,1549],{"class":392,"line":393},[390,1550,1551],{"class":396},"// Offset-based\n",[390,1553,1554,1556,1558,1560,1562,1564,1566],{"class":392,"line":400},[390,1555,900],{"class":403},[390,1557,818],{"class":424},[390,1559,428],{"class":407},[390,1561,823],{"class":403},[390,1563,990],{"class":424},[390,1565,418],{"class":407},[390,1567,1568],{"class":403}," pageNumber}]\n",[390,1570,1571],{"class":392,"line":461},[390,1572,465],{"emptyLinePlaceholder":464},[390,1574,1575],{"class":392,"line":468},[390,1576,1577],{"class":396},"// Cursor-based\n",[390,1579,1580,1582,1585,1587,1589,1592,1594,1597,1599,1601,1603,1606],{"class":392,"line":474},[390,1581,900],{"class":403},[390,1583,1584],{"class":424},"'messages'",[390,1586,428],{"class":407},[390,1588,823],{"class":403},[390,1590,1591],{"class":424},"'cursor'",[390,1593,418],{"class":407},[390,1595,1596],{"class":403}," lastMessageId",[390,1598,428],{"class":407},[390,1600,1001],{"class":424},[390,1602,418],{"class":407},[390,1604,1605],{"class":995}," 50",[390,1607,1009],{"class":403},[535,1609,1611],{"id":1610},"anti-patterns","Anti-Patterns",[352,1613,1614],{},"Non-serializable objects cause silent cache misses:",[380,1616,1618],{"className":382,"code":1617,"language":384,"meta":385,"style":385},"['users', StreamController()]  // Non-serializable instance\n['data', widget]               // Widget instance\n",[387,1619,1620,1637],{"__ignoreMap":385},[390,1621,1622,1624,1626,1628,1631,1634],{"class":392,"line":393},[390,1623,900],{"class":403},[390,1625,425],{"class":424},[390,1627,428],{"class":407},[390,1629,1630],{"class":487}," StreamController",[390,1632,1633],{"class":403},"()]  ",[390,1635,1636],{"class":396},"// Non-serializable instance\n",[390,1638,1639,1641,1644,1646,1649],{"class":392,"line":400},[390,1640,900],{"class":403},[390,1642,1643],{"class":424},"'data'",[390,1645,428],{"class":407},[390,1647,1648],{"class":403}," widget]               ",[390,1650,1651],{"class":396},"// Widget instance\n",[352,1653,1654],{},"Non-deterministic values cause cache misses on every call:",[380,1656,1658],{"className":382,"code":1657,"language":384,"meta":385,"style":385},"['posts', DateTime.now()]     // Non-deterministic\n['users', Random().nextInt()] // Changes on every call\n",[387,1659,1660,1682],{"__ignoreMap":385},[390,1661,1662,1664,1666,1668,1671,1673,1676,1679],{"class":392,"line":393},[390,1663,900],{"class":403},[390,1665,818],{"class":424},[390,1667,428],{"class":407},[390,1669,1670],{"class":487}," DateTime",[390,1672,408],{"class":407},[390,1674,1675],{"class":411},"now",[390,1677,1678],{"class":403},"()]     ",[390,1680,1681],{"class":396},"// Non-deterministic\n",[390,1683,1684,1686,1688,1690,1693,1696,1698,1701,1704],{"class":392,"line":400},[390,1685,900],{"class":403},[390,1687,425],{"class":424},[390,1689,428],{"class":407},[390,1691,1692],{"class":487}," Random",[390,1694,1695],{"class":403},"()",[390,1697,408],{"class":407},[390,1699,1700],{"class":411},"nextInt",[390,1702,1703],{"class":403},"()] ",[390,1705,1706],{"class":396},"// Changes on every call\n",[352,1708,1709],{},"Excessive nesting reduces readability without benefit:",[380,1711,1713],{"className":382,"code":1712,"language":384,"meta":385,"style":385},"['a', ['b', ['c', ['d', 'e']]]]  // Avoid\n['posts', {'status': 'published', 'limit': 10}]  // Prefer flat structure\n",[387,1714,1715,1754],{"__ignoreMap":385},[390,1716,1717,1719,1722,1724,1726,1729,1731,1733,1736,1738,1740,1743,1745,1748,1751],{"class":392,"line":393},[390,1718,900],{"class":403},[390,1720,1721],{"class":424},"'a'",[390,1723,428],{"class":407},[390,1725,421],{"class":403},[390,1727,1728],{"class":424},"'b'",[390,1730,428],{"class":407},[390,1732,421],{"class":403},[390,1734,1735],{"class":424},"'c'",[390,1737,428],{"class":407},[390,1739,421],{"class":403},[390,1741,1742],{"class":424},"'d'",[390,1744,428],{"class":407},[390,1746,1747],{"class":424}," 'e'",[390,1749,1750],{"class":403},"]]]]  ",[390,1752,1753],{"class":396},"// Avoid\n",[390,1755,1756,1758,1760,1762,1764,1766,1768,1770,1772,1774,1776,1778,1780],{"class":392,"line":400},[390,1757,900],{"class":403},[390,1759,818],{"class":424},[390,1761,428],{"class":407},[390,1763,823],{"class":403},[390,1765,826],{"class":424},[390,1767,418],{"class":407},[390,1769,831],{"class":424},[390,1771,428],{"class":407},[390,1773,1001],{"class":424},[390,1775,418],{"class":407},[390,1777,1234],{"class":995},[390,1779,1270],{"class":403},[390,1781,1782],{"class":396},"// Prefer flat structure\n",[528,1784],{},[348,1786,1788],{"id":1787},"using-custom-objects-in-keys","Using Custom Objects in Keys",[352,1790,1791,1792,1794,1795,408],{},"Custom objects are valid key parts only when they override ",[387,1793,1052],{}," and ",[387,1796,1797],{},"hashCode",[535,1799,1801],{"id":1800},"with-equatable","With Equatable",[380,1803,1806],{"className":382,"code":1804,"filename":1805,"language":384,"meta":385,"style":385},"import 'package:equatable/equatable.dart';\n\n@immutable\nclass PostFilter extends Equatable {\n  final String status;\n  final int limit;\n\n  const PostFilter({required this.status, required this.limit});\n\n  @override\n  List\u003CObject?> get props => [status, limit];\n}\n\n// Usage\nfinal posts = await client.fetchQuery\u003CList\u003CPost>>(\n  key: ['posts', PostFilter(status: 'published', limit: 10)],\n  fetcher: () => fetchPosts(status: 'published', limit: 10),\n);\n","post_filter.dart",[387,1807,1808,1818,1822,1827,1844,1857,1869,1873,1908,1912,1917,1948,1954,1959,1965,1992,2026,2057],{"__ignoreMap":385},[390,1809,1810,1813,1816],{"class":392,"line":393},[390,1811,1812],{"class":995},"import",[390,1814,1815],{"class":424}," 'package:equatable/equatable.dart'",[390,1817,458],{"class":407},[390,1819,1820],{"class":392,"line":400},[390,1821,465],{"emptyLinePlaceholder":464},[390,1823,1824],{"class":392,"line":461},[390,1825,1826],{"class":553},"@immutable\n",[390,1828,1829,1832,1835,1838,1841],{"class":392,"line":468},[390,1830,1831],{"class":407},"class",[390,1833,1834],{"class":487}," PostFilter",[390,1836,1837],{"class":407}," extends",[390,1839,1840],{"class":487}," Equatable",[390,1842,1843],{"class":403}," {\n",[390,1845,1846,1849,1852,1855],{"class":392,"line":474},[390,1847,1848],{"class":553},"  final",[390,1850,1851],{"class":487}," String",[390,1853,1854],{"class":403}," status",[390,1856,458],{"class":407},[390,1858,1859,1861,1864,1867],{"class":392,"line":624},[390,1860,1848],{"class":553},[390,1862,1863],{"class":487}," int",[390,1865,1866],{"class":403}," limit",[390,1868,458],{"class":407},[390,1870,1871],{"class":392,"line":629},[390,1872,465],{"emptyLinePlaceholder":464},[390,1874,1875,1878,1880,1883,1886,1889,1891,1894,1896,1899,1901,1903,1906],{"class":392,"line":635},[390,1876,1877],{"class":553},"  const",[390,1879,1834],{"class":487},[390,1881,1882],{"class":403},"({",[390,1884,1885],{"class":553},"required",[390,1887,1888],{"class":403}," this",[390,1890,408],{"class":407},[390,1892,1893],{"class":403},"status",[390,1895,428],{"class":407},[390,1897,1898],{"class":553}," required",[390,1900,1888],{"class":403},[390,1902,408],{"class":407},[390,1904,1905],{"class":403},"limit})",[390,1907,458],{"class":407},[390,1909,1910],{"class":392,"line":661},[390,1911,465],{"emptyLinePlaceholder":464},[390,1913,1914],{"class":392,"line":677},[390,1915,1916],{"class":553},"  @override\n",[390,1918,1919,1922,1924,1927,1930,1933,1936,1938,1941,1943,1946],{"class":392,"line":689},[390,1920,1921],{"class":487},"  List",[390,1923,574],{"class":403},[390,1925,1926],{"class":487},"Object",[390,1928,1929],{"class":403},"?> ",[390,1931,1932],{"class":407},"get",[390,1934,1935],{"class":403}," props ",[390,1937,444],{"class":407},[390,1939,1940],{"class":403}," [status",[390,1942,428],{"class":407},[390,1944,1945],{"class":403}," limit]",[390,1947,458],{"class":407},[390,1949,1951],{"class":392,"line":1950},12,[390,1952,1953],{"class":403},"}\n",[390,1955,1957],{"class":392,"line":1956},13,[390,1958,465],{"emptyLinePlaceholder":464},[390,1960,1962],{"class":392,"line":1961},14,[390,1963,1964],{"class":396},"// Usage\n",[390,1966,1968,1970,1972,1974,1976,1978,1980,1982,1984,1986,1988,1990],{"class":392,"line":1967},15,[390,1969,554],{"class":553},[390,1971,786],{"class":403},[390,1973,560],{"class":407},[390,1975,564],{"class":563},[390,1977,567],{"class":403},[390,1979,408],{"class":407},[390,1981,412],{"class":411},[390,1983,574],{"class":403},[390,1985,577],{"class":487},[390,1987,574],{"class":403},[390,1989,805],{"class":487},[390,1991,585],{"class":403},[390,1993,1995,1997,1999,2001,2003,2005,2007,2009,2011,2013,2015,2017,2019,2021,2024],{"class":392,"line":1994},16,[390,1996,590],{"class":403},[390,1998,418],{"class":407},[390,2000,421],{"class":403},[390,2002,818],{"class":424},[390,2004,428],{"class":407},[390,2006,1834],{"class":487},[390,2008,859],{"class":403},[390,2010,418],{"class":407},[390,2012,831],{"class":424},[390,2014,428],{"class":407},[390,2016,1866],{"class":403},[390,2018,418],{"class":407},[390,2020,1234],{"class":995},[390,2022,2023],{"class":403},")]",[390,2025,602],{"class":407},[390,2027,2029,2031,2033,2035,2037,2039,2041,2043,2045,2047,2049,2051,2053,2055],{"class":392,"line":2028},17,[390,2030,607],{"class":403},[390,2032,418],{"class":407},[390,2034,441],{"class":403},[390,2036,444],{"class":407},[390,2038,856],{"class":411},[390,2040,859],{"class":403},[390,2042,418],{"class":407},[390,2044,831],{"class":424},[390,2046,428],{"class":407},[390,2048,1866],{"class":403},[390,2050,418],{"class":407},[390,2052,1234],{"class":995},[390,2054,619],{"class":403},[390,2056,602],{"class":407},[390,2058,2060,2062],{"class":392,"line":2059},18,[390,2061,619],{"class":403},[390,2063,458],{"class":407},[535,2065,2067],{"id":2066},"manual-override","Manual Override",[380,2069,2072],{"className":382,"code":2070,"filename":2071,"language":384,"meta":385,"style":385},"@immutable\nclass UserQuery {\n  final String role;\n  final int minAge;\n\n  const UserQuery({required this.role, required this.minAge});\n\n  @override\n  bool operator ==(Object other) =>\n      identical(this, other) ||\n      other is UserQuery &&\n      role == other.role &&\n      minAge == other.minAge;\n\n  @override\n  int get hashCode => Object.hash(role, minAge);\n}\n","user_query.dart",[387,2073,2074,2078,2087,2098,2109,2113,2143,2147,2151,2172,2187,2200,2218,2234,2238,2242,2273],{"__ignoreMap":385},[390,2075,2076],{"class":392,"line":393},[390,2077,1826],{"class":553},[390,2079,2080,2082,2085],{"class":392,"line":400},[390,2081,1831],{"class":407},[390,2083,2084],{"class":487}," UserQuery",[390,2086,1843],{"class":403},[390,2088,2089,2091,2093,2096],{"class":392,"line":461},[390,2090,1848],{"class":553},[390,2092,1851],{"class":487},[390,2094,2095],{"class":403}," role",[390,2097,458],{"class":407},[390,2099,2100,2102,2104,2107],{"class":392,"line":468},[390,2101,1848],{"class":553},[390,2103,1863],{"class":487},[390,2105,2106],{"class":403}," minAge",[390,2108,458],{"class":407},[390,2110,2111],{"class":392,"line":474},[390,2112,465],{"emptyLinePlaceholder":464},[390,2114,2115,2117,2119,2121,2123,2125,2127,2130,2132,2134,2136,2138,2141],{"class":392,"line":624},[390,2116,1877],{"class":553},[390,2118,2084],{"class":487},[390,2120,1882],{"class":403},[390,2122,1885],{"class":553},[390,2124,1888],{"class":403},[390,2126,408],{"class":407},[390,2128,2129],{"class":403},"role",[390,2131,428],{"class":407},[390,2133,1898],{"class":553},[390,2135,1888],{"class":403},[390,2137,408],{"class":407},[390,2139,2140],{"class":403},"minAge})",[390,2142,458],{"class":407},[390,2144,2145],{"class":392,"line":629},[390,2146,465],{"emptyLinePlaceholder":464},[390,2148,2149],{"class":392,"line":635},[390,2150,1916],{"class":553},[390,2152,2153,2156,2159,2162,2164,2166,2169],{"class":392,"line":661},[390,2154,2155],{"class":487},"  bool",[390,2157,2158],{"class":407}," operator",[390,2160,2161],{"class":407}," ==",[390,2163,496],{"class":403},[390,2165,1926],{"class":487},[390,2167,2168],{"class":403}," other) ",[390,2170,2171],{"class":407},"=>\n",[390,2173,2174,2177,2180,2182,2184],{"class":392,"line":677},[390,2175,2176],{"class":411},"      identical",[390,2178,2179],{"class":403},"(this",[390,2181,428],{"class":407},[390,2183,2168],{"class":403},[390,2185,2186],{"class":407},"||\n",[390,2188,2189,2192,2195,2197],{"class":392,"line":689},[390,2190,2191],{"class":403},"      other ",[390,2193,2194],{"class":407},"is",[390,2196,2084],{"class":487},[390,2198,2199],{"class":407}," &&\n",[390,2201,2202,2205,2207,2210,2212,2215],{"class":392,"line":1950},[390,2203,2204],{"class":403},"      role ",[390,2206,1052],{"class":407},[390,2208,2209],{"class":403}," other",[390,2211,408],{"class":407},[390,2213,2214],{"class":403},"role ",[390,2216,2217],{"class":407},"&&\n",[390,2219,2220,2223,2225,2227,2229,2232],{"class":392,"line":1956},[390,2221,2222],{"class":403},"      minAge ",[390,2224,1052],{"class":407},[390,2226,2209],{"class":403},[390,2228,408],{"class":407},[390,2230,2231],{"class":403},"minAge",[390,2233,458],{"class":407},[390,2235,2236],{"class":392,"line":1961},[390,2237,465],{"emptyLinePlaceholder":464},[390,2239,2240],{"class":392,"line":1967},[390,2241,1916],{"class":553},[390,2243,2244,2247,2250,2253,2255,2258,2260,2263,2266,2268,2271],{"class":392,"line":1994},[390,2245,2246],{"class":487},"  int",[390,2248,2249],{"class":407}," get",[390,2251,2252],{"class":403}," hashCode ",[390,2254,444],{"class":407},[390,2256,2257],{"class":487}," Object",[390,2259,408],{"class":407},[390,2261,2262],{"class":411},"hash",[390,2264,2265],{"class":403},"(role",[390,2267,428],{"class":407},[390,2269,2270],{"class":403}," minAge)",[390,2272,458],{"class":407},[390,2274,2275],{"class":392,"line":2028},[390,2276,1953],{"class":403},[2278,2279,2280,2281,1794,2283,2285],"warning",{},"Without ",[387,2282,1052],{},[387,2284,1797],{}," overrides, caching fails silently. Each object instance is treated as a distinct key, resulting in a cache miss on every call.",[528,2287],{},[348,2289,2291],{"id":2290},"the-qorakey-class-optional","The QoraKey Class (Optional)",[352,2293,2294,2296],{},[387,2295,207],{}," is a typed wrapper that makes key construction explicit and reusable.",[535,2298,2300],{"id":2299},"factory-constructors","Factory Constructors",[380,2302,2304],{"className":382,"code":2303,"language":384,"meta":385,"style":385},"// Single-part key\nclient.fetchQuery(key: QoraKey.single('settings'), fetcher: fetchSettings);\n\n// Entity + ID\nclient.fetchQuery(key: QoraKey.withId('users', userId), fetcher: () => fetchUser(userId));\n\n// Entity + filter map\nclient.fetchQuery(\n  key: QoraKey.withFilter('posts', {'status': 'published'}),\n  fetcher: () => fetchPosts(status: 'published'),\n);\n\n// Custom parts\nfinal key = QoraKey(['custom', 'key', 'parts']);\n",[387,2305,2306,2311,2347,2351,2356,2398,2402,2407,2418,2450,2472,2478,2482,2487],{"__ignoreMap":385},[390,2307,2308],{"class":392,"line":393},[390,2309,2310],{"class":396},"// Single-part key\n",[390,2312,2313,2315,2317,2319,2321,2323,2325,2327,2330,2332,2334,2336,2338,2340,2342,2345],{"class":392,"line":400},[390,2314,404],{"class":403},[390,2316,408],{"class":407},[390,2318,412],{"class":411},[390,2320,415],{"class":403},[390,2322,418],{"class":407},[390,2324,488],{"class":487},[390,2326,408],{"class":407},[390,2328,2329],{"class":411},"single",[390,2331,496],{"class":403},[390,2333,670],{"class":424},[390,2335,619],{"class":403},[390,2337,428],{"class":407},[390,2339,436],{"class":403},[390,2341,418],{"class":407},[390,2343,2344],{"class":403}," fetchSettings)",[390,2346,458],{"class":407},[390,2348,2349],{"class":392,"line":461},[390,2350,465],{"emptyLinePlaceholder":464},[390,2352,2353],{"class":392,"line":468},[390,2354,2355],{"class":396},"// Entity + ID\n",[390,2357,2358,2360,2362,2364,2366,2368,2370,2372,2374,2376,2378,2380,2382,2384,2386,2388,2390,2392,2394,2396],{"class":392,"line":474},[390,2359,404],{"class":403},[390,2361,408],{"class":407},[390,2363,412],{"class":411},[390,2365,415],{"class":403},[390,2367,418],{"class":407},[390,2369,488],{"class":487},[390,2371,408],{"class":407},[390,2373,493],{"class":411},[390,2375,496],{"class":403},[390,2377,425],{"class":424},[390,2379,428],{"class":407},[390,2381,503],{"class":403},[390,2383,428],{"class":407},[390,2385,436],{"class":403},[390,2387,418],{"class":407},[390,2389,441],{"class":403},[390,2391,444],{"class":407},[390,2393,759],{"class":411},[390,2395,455],{"class":403},[390,2397,458],{"class":407},[390,2399,2400],{"class":392,"line":624},[390,2401,465],{"emptyLinePlaceholder":464},[390,2403,2404],{"class":392,"line":629},[390,2405,2406],{"class":396},"// Entity + filter map\n",[390,2408,2409,2411,2413,2415],{"class":392,"line":635},[390,2410,404],{"class":403},[390,2412,408],{"class":407},[390,2414,412],{"class":411},[390,2416,2417],{"class":403},"(\n",[390,2419,2420,2422,2424,2426,2428,2431,2433,2435,2437,2439,2441,2443,2445,2448],{"class":392,"line":661},[390,2421,590],{"class":403},[390,2423,418],{"class":407},[390,2425,488],{"class":487},[390,2427,408],{"class":407},[390,2429,2430],{"class":411},"withFilter",[390,2432,496],{"class":403},[390,2434,818],{"class":424},[390,2436,428],{"class":407},[390,2438,823],{"class":403},[390,2440,826],{"class":424},[390,2442,418],{"class":407},[390,2444,831],{"class":424},[390,2446,2447],{"class":403},"})",[390,2449,602],{"class":407},[390,2451,2452,2454,2456,2458,2460,2462,2464,2466,2468,2470],{"class":392,"line":677},[390,2453,607],{"class":403},[390,2455,418],{"class":407},[390,2457,441],{"class":403},[390,2459,444],{"class":407},[390,2461,856],{"class":411},[390,2463,859],{"class":403},[390,2465,418],{"class":407},[390,2467,831],{"class":424},[390,2469,619],{"class":403},[390,2471,602],{"class":407},[390,2473,2474,2476],{"class":392,"line":689},[390,2475,619],{"class":403},[390,2477,458],{"class":407},[390,2479,2480],{"class":392,"line":1950},[390,2481,465],{"emptyLinePlaceholder":464},[390,2483,2484],{"class":392,"line":1956},[390,2485,2486],{"class":396},"// Custom parts\n",[390,2488,2489,2491,2494,2496,2498,2501,2504,2506,2509,2511,2514,2517],{"class":392,"line":1961},[390,2490,554],{"class":553},[390,2492,2493],{"class":403}," key ",[390,2495,560],{"class":407},[390,2497,488],{"class":487},[390,2499,2500],{"class":403},"([",[390,2502,2503],{"class":424},"'custom'",[390,2505,428],{"class":407},[390,2507,2508],{"class":424}," 'key'",[390,2510,428],{"class":407},[390,2512,2513],{"class":424}," 'parts'",[390,2515,2516],{"class":403},"])",[390,2518,458],{"class":407},[535,2520,2522],{"id":2521},"when-to-use-qorakey","When to Use QoraKey",[352,2524,2525,2526,2528],{},"Use ",[387,2527,207],{}," when:",[361,2530,2531,2534,2537],{},[364,2532,2533],{},"Building a shared key factory used across multiple services",[364,2535,2536],{},"Working in a large team where self-documenting APIs reduce coordination overhead",[364,2538,2539],{},"Explicit type safety is preferred over brevity",[352,2541,2542,2543,2528],{},"Use a raw ",[387,2544,577],{},[361,2546,2547,2550],{},[364,2548,2549],{},"Prototyping or writing one-off queries",[364,2551,2552],{},"Minimal syntax is preferred",[528,2554],{},[348,2556,2558],{"id":2557},"query-key-factories","Query Key Factories",[352,2560,2561],{},"Centralized key factories ensure consistency and enable refactoring of key structure in one place.",[380,2563,2566],{"className":382,"code":2564,"filename":2565,"language":384,"meta":385,"style":385},"class QueryKeys {\n  QueryKeys._();\n\n  // Static keys (no allocation on repeated calls)\n  static const settings = QoraKey(['settings']);\n  static const currentUser = QoraKey(['users', 'current']);\n\n  // Dynamic keys\n  static QoraKey user(String id) => QoraKey.withId('users', id);\n\n  static QoraKey userPosts(String userId) =>\n    QoraKey(['users', userId, 'posts']);\n\n  static QoraKey posts({String? status, int? limit}) =>\n    QoraKey.withFilter('posts', {\n      if (status != null) 'status': status,\n      if (limit != null) 'limit': limit,\n    });\n}\n\n// Usage\nawait client.fetchQuery\u003CUser>(\n  key: QueryKeys.user('123'),\n  fetcher: () => fetchUser('123'),\n);\n\nawait client.fetchQuery\u003CList\u003CPost>>(\n  key: QueryKeys.posts(status: 'published', limit: 10),\n  fetcher: () => fetchPosts(status: 'published', limit: 10),\n);\n","query_keys.dart",[387,2567,2568,2577,2589,2593,2598,2620,2646,2650,2655,2691,2695,2713,2734,2738,2767,2783,2807,2828,2835,2840,2845,2850,2868,2891,2912,2919,2924,2945,2977,3008],{"__ignoreMap":385},[390,2569,2570,2572,2575],{"class":392,"line":393},[390,2571,1831],{"class":407},[390,2573,2574],{"class":487}," QueryKeys",[390,2576,1843],{"class":403},[390,2578,2579,2582,2584,2587],{"class":392,"line":400},[390,2580,2581],{"class":487},"  QueryKeys",[390,2583,408],{"class":407},[390,2585,2586],{"class":403},"_()",[390,2588,458],{"class":407},[390,2590,2591],{"class":392,"line":461},[390,2592,465],{"emptyLinePlaceholder":464},[390,2594,2595],{"class":392,"line":468},[390,2596,2597],{"class":396},"  // Static keys (no allocation on repeated calls)\n",[390,2599,2600,2603,2606,2608,2610,2612,2614,2616,2618],{"class":392,"line":474},[390,2601,2602],{"class":553},"  static",[390,2604,2605],{"class":553}," const",[390,2607,640],{"class":403},[390,2609,560],{"class":407},[390,2611,488],{"class":487},[390,2613,2500],{"class":403},[390,2615,670],{"class":424},[390,2617,2516],{"class":403},[390,2619,458],{"class":407},[390,2621,2622,2624,2626,2629,2631,2633,2635,2637,2639,2642,2644],{"class":392,"line":624},[390,2623,2602],{"class":553},[390,2625,2605],{"class":553},[390,2627,2628],{"class":403}," currentUser ",[390,2630,560],{"class":407},[390,2632,488],{"class":487},[390,2634,2500],{"class":403},[390,2636,425],{"class":424},[390,2638,428],{"class":407},[390,2640,2641],{"class":424}," 'current'",[390,2643,2516],{"class":403},[390,2645,458],{"class":407},[390,2647,2648],{"class":392,"line":629},[390,2649,465],{"emptyLinePlaceholder":464},[390,2651,2652],{"class":392,"line":635},[390,2653,2654],{"class":396},"  // Dynamic keys\n",[390,2656,2657,2659,2661,2664,2666,2669,2672,2674,2676,2678,2680,2682,2684,2686,2689],{"class":392,"line":661},[390,2658,2602],{"class":553},[390,2660,488],{"class":487},[390,2662,2663],{"class":411}," user",[390,2665,496],{"class":403},[390,2667,2668],{"class":487},"String",[390,2670,2671],{"class":403}," id) ",[390,2673,444],{"class":407},[390,2675,488],{"class":487},[390,2677,408],{"class":407},[390,2679,493],{"class":411},[390,2681,496],{"class":403},[390,2683,425],{"class":424},[390,2685,428],{"class":407},[390,2687,2688],{"class":403}," id)",[390,2690,458],{"class":407},[390,2692,2693],{"class":392,"line":677},[390,2694,465],{"emptyLinePlaceholder":464},[390,2696,2697,2699,2701,2704,2706,2708,2711],{"class":392,"line":689},[390,2698,2602],{"class":553},[390,2700,488],{"class":487},[390,2702,2703],{"class":411}," userPosts",[390,2705,496],{"class":403},[390,2707,2668],{"class":487},[390,2709,2710],{"class":403}," userId) ",[390,2712,2171],{"class":407},[390,2714,2715,2718,2720,2722,2724,2726,2728,2730,2732],{"class":392,"line":1950},[390,2716,2717],{"class":487},"    QoraKey",[390,2719,2500],{"class":403},[390,2721,425],{"class":424},[390,2723,428],{"class":407},[390,2725,907],{"class":403},[390,2727,428],{"class":407},[390,2729,939],{"class":424},[390,2731,2516],{"class":403},[390,2733,458],{"class":407},[390,2735,2736],{"class":392,"line":1956},[390,2737,465],{"emptyLinePlaceholder":464},[390,2739,2740,2742,2744,2747,2749,2751,2754,2756,2758,2760,2762,2765],{"class":392,"line":1961},[390,2741,2602],{"class":553},[390,2743,488],{"class":487},[390,2745,2746],{"class":411}," posts",[390,2748,1882],{"class":403},[390,2750,2668],{"class":487},[390,2752,2753],{"class":407},"?",[390,2755,1854],{"class":403},[390,2757,428],{"class":407},[390,2759,1863],{"class":487},[390,2761,2753],{"class":407},[390,2763,2764],{"class":403}," limit}) ",[390,2766,2171],{"class":407},[390,2768,2769,2771,2773,2775,2777,2779,2781],{"class":392,"line":1967},[390,2770,2717],{"class":487},[390,2772,408],{"class":407},[390,2774,2430],{"class":411},[390,2776,496],{"class":403},[390,2778,818],{"class":424},[390,2780,428],{"class":407},[390,2782,1843],{"class":403},[390,2784,2785,2788,2791,2794,2796,2799,2801,2803,2805],{"class":392,"line":1994},[390,2786,2787],{"class":563},"      if",[390,2789,2790],{"class":403}," (status ",[390,2792,2793],{"class":407},"!=",[390,2795,1295],{"class":407},[390,2797,2798],{"class":403},") ",[390,2800,826],{"class":424},[390,2802,418],{"class":407},[390,2804,1854],{"class":403},[390,2806,602],{"class":407},[390,2808,2809,2811,2814,2816,2818,2820,2822,2824,2826],{"class":392,"line":2028},[390,2810,2787],{"class":563},[390,2812,2813],{"class":403}," (limit ",[390,2815,2793],{"class":407},[390,2817,1295],{"class":407},[390,2819,2798],{"class":403},[390,2821,1254],{"class":424},[390,2823,418],{"class":407},[390,2825,1866],{"class":403},[390,2827,602],{"class":407},[390,2829,2830,2833],{"class":392,"line":2059},[390,2831,2832],{"class":403},"    })",[390,2834,458],{"class":407},[390,2836,2838],{"class":392,"line":2837},19,[390,2839,1953],{"class":403},[390,2841,2843],{"class":392,"line":2842},20,[390,2844,465],{"emptyLinePlaceholder":464},[390,2846,2848],{"class":392,"line":2847},21,[390,2849,1964],{"class":396},[390,2851,2853,2856,2858,2860,2862,2864,2866],{"class":392,"line":2852},22,[390,2854,2855],{"class":563},"await",[390,2857,567],{"class":403},[390,2859,408],{"class":407},[390,2861,412],{"class":411},[390,2863,574],{"class":403},[390,2865,582],{"class":487},[390,2867,658],{"class":403},[390,2869,2871,2873,2875,2877,2879,2882,2884,2887,2889],{"class":392,"line":2870},23,[390,2872,590],{"class":403},[390,2874,418],{"class":407},[390,2876,2574],{"class":487},[390,2878,408],{"class":407},[390,2880,2881],{"class":411},"user",[390,2883,496],{"class":403},[390,2885,2886],{"class":424},"'123'",[390,2888,619],{"class":403},[390,2890,602],{"class":407},[390,2892,2894,2896,2898,2900,2902,2904,2906,2908,2910],{"class":392,"line":2893},24,[390,2895,607],{"class":403},[390,2897,418],{"class":407},[390,2899,441],{"class":403},[390,2901,444],{"class":407},[390,2903,759],{"class":411},[390,2905,496],{"class":403},[390,2907,2886],{"class":424},[390,2909,619],{"class":403},[390,2911,602],{"class":407},[390,2913,2915,2917],{"class":392,"line":2914},25,[390,2916,619],{"class":403},[390,2918,458],{"class":407},[390,2920,2922],{"class":392,"line":2921},26,[390,2923,465],{"emptyLinePlaceholder":464},[390,2925,2927,2929,2931,2933,2935,2937,2939,2941,2943],{"class":392,"line":2926},27,[390,2928,2855],{"class":563},[390,2930,567],{"class":403},[390,2932,408],{"class":407},[390,2934,412],{"class":411},[390,2936,574],{"class":403},[390,2938,577],{"class":487},[390,2940,574],{"class":403},[390,2942,805],{"class":487},[390,2944,585],{"class":403},[390,2946,2948,2950,2952,2954,2956,2959,2961,2963,2965,2967,2969,2971,2973,2975],{"class":392,"line":2947},28,[390,2949,590],{"class":403},[390,2951,418],{"class":407},[390,2953,2574],{"class":487},[390,2955,408],{"class":407},[390,2957,2958],{"class":411},"posts",[390,2960,859],{"class":403},[390,2962,418],{"class":407},[390,2964,831],{"class":424},[390,2966,428],{"class":407},[390,2968,1866],{"class":403},[390,2970,418],{"class":407},[390,2972,1234],{"class":995},[390,2974,619],{"class":403},[390,2976,602],{"class":407},[390,2978,2980,2982,2984,2986,2988,2990,2992,2994,2996,2998,3000,3002,3004,3006],{"class":392,"line":2979},29,[390,2981,607],{"class":403},[390,2983,418],{"class":407},[390,2985,441],{"class":403},[390,2987,444],{"class":407},[390,2989,856],{"class":411},[390,2991,859],{"class":403},[390,2993,418],{"class":407},[390,2995,831],{"class":424},[390,2997,428],{"class":407},[390,2999,1866],{"class":403},[390,3001,418],{"class":407},[390,3003,1234],{"class":995},[390,3005,619],{"class":403},[390,3007,602],{"class":407},[390,3009,3011,3013],{"class":392,"line":3010},30,[390,3012,619],{"class":403},[390,3014,458],{"class":407},[535,3016,3018],{"id":3017},"factory-with-prefix-invalidation","Factory with Prefix Invalidation",[380,3020,3023],{"className":382,"code":3021,"filename":3022,"language":384,"meta":385,"style":385},"class PostQueryKeys {\n  static const _prefix = ['posts'];\n\n  static List\u003Cdynamic> get all => _prefix;\n\n  static List\u003Cdynamic> list([Map\u003CString, dynamic>? filters]) =>\n    filters != null ? [..._prefix, 'list', filters] : [..._prefix, 'list'];\n\n  static List\u003Cdynamic> detail(String id) => [..._prefix, 'detail', id];\n\n  static List\u003Cdynamic> comments(String id) =>\n    [..._prefix, 'detail', id, 'comments'];\n}\n\n// Invalidate all post-related queries after a mutation\nclient.invalidateWhere((key) =>\n  key.isNotEmpty && key[0] == 'posts'\n);\n","post_query_keys.dart",[387,3024,3025,3034,3053,3057,3084,3088,3127,3173,3177,3218,3222,3245,3271,3275,3279,3284,3298,3323],{"__ignoreMap":385},[390,3026,3027,3029,3032],{"class":392,"line":393},[390,3028,1831],{"class":407},[390,3030,3031],{"class":487}," PostQueryKeys",[390,3033,1843],{"class":403},[390,3035,3036,3038,3040,3043,3045,3047,3049,3051],{"class":392,"line":400},[390,3037,2602],{"class":553},[390,3039,2605],{"class":553},[390,3041,3042],{"class":403}," _prefix ",[390,3044,560],{"class":407},[390,3046,421],{"class":403},[390,3048,818],{"class":424},[390,3050,599],{"class":403},[390,3052,458],{"class":407},[390,3054,3055],{"class":392,"line":461},[390,3056,465],{"emptyLinePlaceholder":464},[390,3058,3059,3061,3064,3066,3069,3072,3074,3077,3079,3082],{"class":392,"line":468},[390,3060,2602],{"class":553},[390,3062,3063],{"class":487}," List",[390,3065,574],{"class":403},[390,3067,3068],{"class":487},"dynamic",[390,3070,3071],{"class":403},"> ",[390,3073,1932],{"class":407},[390,3075,3076],{"class":403}," all ",[390,3078,444],{"class":407},[390,3080,3081],{"class":403}," _prefix",[390,3083,458],{"class":407},[390,3085,3086],{"class":392,"line":474},[390,3087,465],{"emptyLinePlaceholder":464},[390,3089,3090,3092,3094,3096,3098,3100,3103,3105,3108,3110,3112,3115,3117,3120,3122,3125],{"class":392,"line":624},[390,3091,2602],{"class":553},[390,3093,3063],{"class":487},[390,3095,574],{"class":403},[390,3097,3068],{"class":487},[390,3099,3071],{"class":403},[390,3101,3102],{"class":411},"list",[390,3104,2500],{"class":403},[390,3106,3107],{"class":487},"Map",[390,3109,574],{"class":403},[390,3111,2668],{"class":487},[390,3113,3114],{"class":403},", ",[390,3116,3068],{"class":487},[390,3118,3119],{"class":403},">",[390,3121,2753],{"class":407},[390,3123,3124],{"class":403}," filters]) ",[390,3126,2171],{"class":407},[390,3128,3129,3132,3134,3136,3139,3141,3144,3147,3149,3152,3154,3157,3159,3161,3163,3165,3167,3169,3171],{"class":392,"line":629},[390,3130,3131],{"class":403},"    filters ",[390,3133,2793],{"class":407},[390,3135,1295],{"class":407},[390,3137,3138],{"class":407}," ?",[390,3140,421],{"class":403},[390,3142,3143],{"class":407},"...",[390,3145,3146],{"class":403},"_prefix",[390,3148,428],{"class":407},[390,3150,3151],{"class":424}," 'list'",[390,3153,428],{"class":407},[390,3155,3156],{"class":403}," filters] ",[390,3158,418],{"class":407},[390,3160,421],{"class":403},[390,3162,3143],{"class":407},[390,3164,3146],{"class":403},[390,3166,428],{"class":407},[390,3168,3151],{"class":424},[390,3170,599],{"class":403},[390,3172,458],{"class":407},[390,3174,3175],{"class":392,"line":635},[390,3176,465],{"emptyLinePlaceholder":464},[390,3178,3179,3181,3183,3185,3187,3189,3192,3194,3196,3198,3200,3202,3204,3206,3208,3211,3213,3216],{"class":392,"line":661},[390,3180,2602],{"class":553},[390,3182,3063],{"class":487},[390,3184,574],{"class":403},[390,3186,3068],{"class":487},[390,3188,3071],{"class":403},[390,3190,3191],{"class":411},"detail",[390,3193,496],{"class":403},[390,3195,2668],{"class":487},[390,3197,2671],{"class":403},[390,3199,444],{"class":407},[390,3201,421],{"class":403},[390,3203,3143],{"class":407},[390,3205,3146],{"class":403},[390,3207,428],{"class":407},[390,3209,3210],{"class":424}," 'detail'",[390,3212,428],{"class":407},[390,3214,3215],{"class":403}," id]",[390,3217,458],{"class":407},[390,3219,3220],{"class":392,"line":677},[390,3221,465],{"emptyLinePlaceholder":464},[390,3223,3224,3226,3228,3230,3232,3234,3237,3239,3241,3243],{"class":392,"line":689},[390,3225,2602],{"class":553},[390,3227,3063],{"class":487},[390,3229,574],{"class":403},[390,3231,3068],{"class":487},[390,3233,3071],{"class":403},[390,3235,3236],{"class":411},"comments",[390,3238,496],{"class":403},[390,3240,2668],{"class":487},[390,3242,2671],{"class":403},[390,3244,2171],{"class":407},[390,3246,3247,3250,3252,3254,3256,3258,3260,3263,3265,3267,3269],{"class":392,"line":1950},[390,3248,3249],{"class":403},"    [",[390,3251,3143],{"class":407},[390,3253,3146],{"class":403},[390,3255,428],{"class":407},[390,3257,3210],{"class":424},[390,3259,428],{"class":407},[390,3261,3262],{"class":403}," id",[390,3264,428],{"class":407},[390,3266,966],{"class":424},[390,3268,599],{"class":403},[390,3270,458],{"class":407},[390,3272,3273],{"class":392,"line":1956},[390,3274,1953],{"class":403},[390,3276,3277],{"class":392,"line":1961},[390,3278,465],{"emptyLinePlaceholder":464},[390,3280,3281],{"class":392,"line":1967},[390,3282,3283],{"class":396},"// Invalidate all post-related queries after a mutation\n",[390,3285,3286,3288,3290,3293,3296],{"class":392,"line":1994},[390,3287,404],{"class":403},[390,3289,408],{"class":407},[390,3291,3292],{"class":411},"invalidateWhere",[390,3294,3295],{"class":403},"((key) ",[390,3297,2171],{"class":407},[390,3299,3300,3302,3304,3307,3310,3313,3316,3318,3320],{"class":392,"line":2028},[390,3301,590],{"class":403},[390,3303,408],{"class":407},[390,3305,3306],{"class":403},"isNotEmpty ",[390,3308,3309],{"class":407},"&&",[390,3311,3312],{"class":403}," key[",[390,3314,3315],{"class":995},"0",[390,3317,1049],{"class":403},[390,3319,1052],{"class":407},[390,3321,3322],{"class":424}," 'posts'\n",[390,3324,3325,3327],{"class":392,"line":2059},[390,3326,619],{"class":403},[390,3328,458],{"class":407},[528,3330],{},[348,3332,3334],{"id":3333},"invalidation-strategies","Invalidation Strategies",[535,3336,3338],{"id":3337},"exact-match","Exact Match",[380,3340,3342],{"className":382,"code":3341,"language":384,"meta":385,"style":385},"client.invalidate(['users', userId]);\n",[387,3343,3344],{"__ignoreMap":385},[390,3345,3346,3348,3350,3353,3355,3357,3359,3362],{"class":392,"line":393},[390,3347,404],{"class":403},[390,3349,408],{"class":407},[390,3351,3352],{"class":411},"invalidate",[390,3354,2500],{"class":403},[390,3356,425],{"class":424},[390,3358,428],{"class":407},[390,3360,3361],{"class":403}," userId])",[390,3363,458],{"class":407},[535,3365,3367],{"id":3366},"predicate-based-invalidation","Predicate-Based Invalidation",[352,3369,3370,3372,3373,418],{},[387,3371,3292],{}," receives the normalized key as ",[387,3374,3375],{},"List\u003Cdynamic>",[380,3377,3379],{"className":382,"code":3378,"language":384,"meta":385,"style":385},"// Invalidate all user queries\nclient.invalidateWhere((key) => key.firstOrNull == 'users');\n\n// Invalidate all queries for a specific user\nclient.invalidateWhere((key) =>\n  key.length >= 2 && key[0] == 'users' && key[1] == userId\n);\n",[387,3380,3381,3386,3415,3419,3424,3436,3476],{"__ignoreMap":385},[390,3382,3383],{"class":392,"line":393},[390,3384,3385],{"class":396},"// Invalidate all user queries\n",[390,3387,3388,3390,3392,3394,3396,3398,3401,3403,3406,3408,3411,3413],{"class":392,"line":400},[390,3389,404],{"class":403},[390,3391,408],{"class":407},[390,3393,3292],{"class":411},[390,3395,3295],{"class":403},[390,3397,444],{"class":407},[390,3399,3400],{"class":403}," key",[390,3402,408],{"class":407},[390,3404,3405],{"class":403},"firstOrNull ",[390,3407,1052],{"class":407},[390,3409,3410],{"class":424}," 'users'",[390,3412,619],{"class":403},[390,3414,458],{"class":407},[390,3416,3417],{"class":392,"line":461},[390,3418,465],{"emptyLinePlaceholder":464},[390,3420,3421],{"class":392,"line":468},[390,3422,3423],{"class":396},"// Invalidate all queries for a specific user\n",[390,3425,3426,3428,3430,3432,3434],{"class":392,"line":474},[390,3427,404],{"class":403},[390,3429,408],{"class":407},[390,3431,3292],{"class":411},[390,3433,3295],{"class":403},[390,3435,2171],{"class":407},[390,3437,3438,3440,3442,3445,3448,3450,3453,3455,3457,3459,3461,3463,3465,3467,3469,3471,3473],{"class":392,"line":624},[390,3439,590],{"class":403},[390,3441,408],{"class":407},[390,3443,3444],{"class":403},"length ",[390,3446,3447],{"class":407},">=",[390,3449,996],{"class":995},[390,3451,3452],{"class":407}," &&",[390,3454,3312],{"class":403},[390,3456,3315],{"class":995},[390,3458,1049],{"class":403},[390,3460,1052],{"class":407},[390,3462,3410],{"class":424},[390,3464,3452],{"class":407},[390,3466,3312],{"class":403},[390,3468,1115],{"class":995},[390,3470,1049],{"class":403},[390,3472,1052],{"class":407},[390,3474,3475],{"class":403}," userId\n",[390,3477,3478,3480],{"class":392,"line":629},[390,3479,619],{"class":403},[390,3481,458],{"class":407},[535,3483,3485],{"id":3484},"filter-based-invalidation","Filter-Based Invalidation",[352,3487,3488,3491],{},[387,3489,3490],{},"invalidateQueries"," receives key, current state, and last options for richer selection:",[380,3493,3495],{"className":382,"code":3494,"language":384,"meta":385,"style":385},"// Invalidate all failing queries that use a refetch interval\nclient.invalidateQueries(\n  filter: (key, state, opts) =>\n      state is Failure && opts?.refetchInterval != null,\n);\n",[387,3496,3497,3502,3512,3534,3560],{"__ignoreMap":385},[390,3498,3499],{"class":392,"line":393},[390,3500,3501],{"class":396},"// Invalidate all failing queries that use a refetch interval\n",[390,3503,3504,3506,3508,3510],{"class":392,"line":400},[390,3505,404],{"class":403},[390,3507,408],{"class":407},[390,3509,3490],{"class":411},[390,3511,2417],{"class":403},[390,3513,3514,3517,3519,3522,3524,3527,3529,3532],{"class":392,"line":461},[390,3515,3516],{"class":403},"  filter",[390,3518,418],{"class":407},[390,3520,3521],{"class":403}," (key",[390,3523,428],{"class":407},[390,3525,3526],{"class":403}," state",[390,3528,428],{"class":407},[390,3530,3531],{"class":403}," opts) ",[390,3533,2171],{"class":407},[390,3535,3536,3539,3541,3544,3546,3549,3552,3555,3557],{"class":392,"line":468},[390,3537,3538],{"class":403},"      state ",[390,3540,2194],{"class":407},[390,3542,3543],{"class":487}," Failure",[390,3545,3452],{"class":407},[390,3547,3548],{"class":403}," opts",[390,3550,3551],{"class":407},"?.",[390,3553,3554],{"class":403},"refetchInterval ",[390,3556,2793],{"class":407},[390,3558,3559],{"class":407}," null,\n",[390,3561,3562,3564],{"class":392,"line":474},[390,3563,619],{"class":403},[390,3565,458],{"class":407},[535,3567,3569],{"id":3568},"hierarchical-invalidation","Hierarchical Invalidation",[352,3571,3572],{},"Structure keys hierarchically to batch-invalidate related queries:",[380,3574,3576],{"className":382,"code":3575,"language":384,"meta":385,"style":385},"// Invalidate all data associated with a specific user\nclient.invalidateWhere((key) =>\n  key.length >= 2 && key[0] == 'users' && key[1] == userId\n);\n",[387,3577,3578,3583,3595,3631],{"__ignoreMap":385},[390,3579,3580],{"class":392,"line":393},[390,3581,3582],{"class":396},"// Invalidate all data associated with a specific user\n",[390,3584,3585,3587,3589,3591,3593],{"class":392,"line":400},[390,3586,404],{"class":403},[390,3588,408],{"class":407},[390,3590,3292],{"class":411},[390,3592,3295],{"class":403},[390,3594,2171],{"class":407},[390,3596,3597,3599,3601,3603,3605,3607,3609,3611,3613,3615,3617,3619,3621,3623,3625,3627,3629],{"class":392,"line":461},[390,3598,590],{"class":403},[390,3600,408],{"class":407},[390,3602,3444],{"class":403},[390,3604,3447],{"class":407},[390,3606,996],{"class":995},[390,3608,3452],{"class":407},[390,3610,3312],{"class":403},[390,3612,3315],{"class":995},[390,3614,1049],{"class":403},[390,3616,1052],{"class":407},[390,3618,3410],{"class":424},[390,3620,3452],{"class":407},[390,3622,3312],{"class":403},[390,3624,1115],{"class":995},[390,3626,1049],{"class":403},[390,3628,1052],{"class":407},[390,3630,3475],{"class":403},[390,3632,3633,3635],{"class":392,"line":468},[390,3634,619],{"class":403},[390,3636,458],{"class":407},[528,3638],{},[348,3640,3642],{"id":3641},"cross-pattern-compatibility","Cross-Pattern Compatibility",[352,3644,3645,1794,3647,3649],{},[387,3646,577],{},[387,3648,207],{}," are 100% interchangeable:",[380,3651,3653],{"className":382,"code":3652,"language":384,"meta":385,"style":385},"// Set with List\nawait client.fetchQuery\u003CUser>(\n  key: ['users', 123],\n  fetcher: () => fetchUser(123),\n);\n\n// Cache hit with QoraKey (same entry)\nawait client.fetchQuery\u003CUser>(\n  key: QoraKey.withId('users', 123),\n  fetcher: () => throw Exception('Not called'),\n);\n\n// Invalidate with either form\nclient.invalidate(['users', 123]);\nclient.invalidate(QoraKey.withId('users', 123));\n",[387,3654,3655,3660,3676,3695,3716,3722,3726,3731,3747,3771,3796,3802,3806,3811,3831],{"__ignoreMap":385},[390,3656,3657],{"class":392,"line":393},[390,3658,3659],{"class":396},"// Set with List\n",[390,3661,3662,3664,3666,3668,3670,3672,3674],{"class":392,"line":400},[390,3663,2855],{"class":563},[390,3665,567],{"class":403},[390,3667,408],{"class":407},[390,3669,412],{"class":411},[390,3671,574],{"class":403},[390,3673,582],{"class":487},[390,3675,658],{"class":403},[390,3677,3678,3680,3682,3684,3686,3688,3691,3693],{"class":392,"line":461},[390,3679,590],{"class":403},[390,3681,418],{"class":407},[390,3683,421],{"class":403},[390,3685,425],{"class":424},[390,3687,428],{"class":407},[390,3689,3690],{"class":995}," 123",[390,3692,599],{"class":403},[390,3694,602],{"class":407},[390,3696,3697,3699,3701,3703,3705,3707,3709,3712,3714],{"class":392,"line":468},[390,3698,607],{"class":403},[390,3700,418],{"class":407},[390,3702,441],{"class":403},[390,3704,444],{"class":407},[390,3706,759],{"class":411},[390,3708,496],{"class":403},[390,3710,3711],{"class":995},"123",[390,3713,619],{"class":403},[390,3715,602],{"class":407},[390,3717,3718,3720],{"class":392,"line":474},[390,3719,619],{"class":403},[390,3721,458],{"class":407},[390,3723,3724],{"class":392,"line":624},[390,3725,465],{"emptyLinePlaceholder":464},[390,3727,3728],{"class":392,"line":629},[390,3729,3730],{"class":396},"// Cache hit with QoraKey (same entry)\n",[390,3732,3733,3735,3737,3739,3741,3743,3745],{"class":392,"line":635},[390,3734,2855],{"class":563},[390,3736,567],{"class":403},[390,3738,408],{"class":407},[390,3740,412],{"class":411},[390,3742,574],{"class":403},[390,3744,582],{"class":487},[390,3746,658],{"class":403},[390,3748,3749,3751,3753,3755,3757,3759,3761,3763,3765,3767,3769],{"class":392,"line":661},[390,3750,590],{"class":403},[390,3752,418],{"class":407},[390,3754,488],{"class":487},[390,3756,408],{"class":407},[390,3758,493],{"class":411},[390,3760,496],{"class":403},[390,3762,425],{"class":424},[390,3764,428],{"class":407},[390,3766,3690],{"class":995},[390,3768,619],{"class":403},[390,3770,602],{"class":407},[390,3772,3773,3775,3777,3779,3781,3784,3787,3789,3792,3794],{"class":392,"line":677},[390,3774,607],{"class":403},[390,3776,418],{"class":407},[390,3778,441],{"class":403},[390,3780,444],{"class":407},[390,3782,3783],{"class":563}," throw",[390,3785,3786],{"class":487}," Exception",[390,3788,496],{"class":403},[390,3790,3791],{"class":424},"'Not called'",[390,3793,619],{"class":403},[390,3795,602],{"class":407},[390,3797,3798,3800],{"class":392,"line":689},[390,3799,619],{"class":403},[390,3801,458],{"class":407},[390,3803,3804],{"class":392,"line":1950},[390,3805,465],{"emptyLinePlaceholder":464},[390,3807,3808],{"class":392,"line":1956},[390,3809,3810],{"class":396},"// Invalidate with either form\n",[390,3812,3813,3815,3817,3819,3821,3823,3825,3827,3829],{"class":392,"line":1961},[390,3814,404],{"class":403},[390,3816,408],{"class":407},[390,3818,3352],{"class":411},[390,3820,2500],{"class":403},[390,3822,425],{"class":424},[390,3824,428],{"class":407},[390,3826,3690],{"class":995},[390,3828,2516],{"class":403},[390,3830,458],{"class":407},[390,3832,3833,3835,3837,3839,3841,3843,3845,3847,3849,3851,3853,3855,3858],{"class":392,"line":1967},[390,3834,404],{"class":403},[390,3836,408],{"class":407},[390,3838,3352],{"class":411},[390,3840,496],{"class":403},[390,3842,207],{"class":487},[390,3844,408],{"class":407},[390,3846,493],{"class":411},[390,3848,496],{"class":403},[390,3850,425],{"class":424},[390,3852,428],{"class":407},[390,3854,3690],{"class":995},[390,3856,3857],{"class":403},"))",[390,3859,458],{"class":407},[528,3861],{},[348,3863,3865],{"id":3864},"performance-considerations","Performance Considerations",[352,3867,3868],{},"Every key is deep-copied and made unmodifiable on ingestion. Mutating the original list after passing it has no effect:",[380,3870,3872],{"className":382,"code":3871,"language":384,"meta":385,"style":385},"final key = ['users', 123];\nclient.fetchQuery(key: key, fetcher: () => fetchUser(123));\nkey.add('extra'); // No effect: the internal copy is already immutable\n",[387,3873,3874,3894,3928],{"__ignoreMap":385},[390,3875,3876,3878,3880,3882,3884,3886,3888,3890,3892],{"class":392,"line":393},[390,3877,554],{"class":553},[390,3879,2493],{"class":403},[390,3881,560],{"class":407},[390,3883,421],{"class":403},[390,3885,425],{"class":424},[390,3887,428],{"class":407},[390,3889,3690],{"class":995},[390,3891,599],{"class":403},[390,3893,458],{"class":407},[390,3895,3896,3898,3900,3902,3904,3906,3908,3910,3912,3914,3916,3918,3920,3922,3924,3926],{"class":392,"line":400},[390,3897,404],{"class":403},[390,3899,408],{"class":407},[390,3901,412],{"class":411},[390,3903,415],{"class":403},[390,3905,418],{"class":407},[390,3907,3400],{"class":403},[390,3909,428],{"class":407},[390,3911,436],{"class":403},[390,3913,418],{"class":407},[390,3915,441],{"class":403},[390,3917,444],{"class":407},[390,3919,759],{"class":411},[390,3921,496],{"class":403},[390,3923,3711],{"class":995},[390,3925,3857],{"class":403},[390,3927,458],{"class":407},[390,3929,3930,3933,3935,3938,3940,3943,3945,3948],{"class":392,"line":461},[390,3931,3932],{"class":403},"key",[390,3934,408],{"class":407},[390,3936,3937],{"class":411},"add",[390,3939,496],{"class":403},[390,3941,3942],{"class":424},"'extra'",[390,3944,619],{"class":403},[390,3946,3947],{"class":407},";",[390,3949,3950],{"class":396}," // No effect: the internal copy is already immutable\n",[352,3952,3953,3954,3957],{},"For frequently referenced static keys, declare them ",[387,3955,3956],{},"const"," to eliminate repeated allocations:",[380,3959,3961],{"className":382,"code":3960,"language":384,"meta":385,"style":385},"class QueryKeys {\n  static const settings = QoraKey(['settings']);\n  static const currentUser = QoraKey(['users', 'current']);\n}\n",[387,3962,3963,3971,3991,4015],{"__ignoreMap":385},[390,3964,3965,3967,3969],{"class":392,"line":393},[390,3966,1831],{"class":407},[390,3968,2574],{"class":487},[390,3970,1843],{"class":403},[390,3972,3973,3975,3977,3979,3981,3983,3985,3987,3989],{"class":392,"line":400},[390,3974,2602],{"class":553},[390,3976,2605],{"class":553},[390,3978,640],{"class":403},[390,3980,560],{"class":407},[390,3982,488],{"class":487},[390,3984,2500],{"class":403},[390,3986,670],{"class":424},[390,3988,2516],{"class":403},[390,3990,458],{"class":407},[390,3992,3993,3995,3997,3999,4001,4003,4005,4007,4009,4011,4013],{"class":392,"line":461},[390,3994,2602],{"class":553},[390,3996,2605],{"class":553},[390,3998,2628],{"class":403},[390,4000,560],{"class":407},[390,4002,488],{"class":487},[390,4004,2500],{"class":403},[390,4006,425],{"class":424},[390,4008,428],{"class":407},[390,4010,2641],{"class":424},[390,4012,2516],{"class":403},[390,4014,458],{"class":407},[390,4016,4017],{"class":392,"line":468},[390,4018,1953],{"class":403},[352,4020,4021],{},"Keep keys shallow. Maps incur a sort pass for equality checks. Nesting beyond three levels adds overhead without benefit.",[528,4023],{},[348,4025,4027],{"id":4026},"best-practices-summary","Best Practices Summary",[535,4029,4031],{"id":4030},"do","Do",[380,4033,4035],{"className":382,"code":4034,"language":384,"meta":385,"style":385},"// Primitives\n['users', 123, 'profile']\n\n// Maps for filters\n['posts', {'status': 'published', 'limit': 10}]\n\n// Hierarchical structure for batch invalidation\n['entity', id, 'relation']\n\n// Centralized factories\nQueryKeys.user(userId)\n\n// const for static keys\nstatic const settings = QoraKey(['settings']);\n",[387,4036,4037,4042,4058,4062,4067,4093,4097,4102,4120,4124,4129,4141,4145,4150],{"__ignoreMap":385},[390,4038,4039],{"class":392,"line":393},[390,4040,4041],{"class":396},"// Primitives\n",[390,4043,4044,4046,4048,4050,4052,4054,4056],{"class":392,"line":400},[390,4045,900],{"class":403},[390,4047,425],{"class":424},[390,4049,428],{"class":407},[390,4051,3690],{"class":995},[390,4053,428],{"class":407},[390,4055,912],{"class":424},[390,4057,915],{"class":403},[390,4059,4060],{"class":392,"line":461},[390,4061,465],{"emptyLinePlaceholder":464},[390,4063,4064],{"class":392,"line":468},[390,4065,4066],{"class":396},"// Maps for filters\n",[390,4068,4069,4071,4073,4075,4077,4079,4081,4083,4085,4087,4089,4091],{"class":392,"line":474},[390,4070,900],{"class":403},[390,4072,818],{"class":424},[390,4074,428],{"class":407},[390,4076,823],{"class":403},[390,4078,826],{"class":424},[390,4080,418],{"class":407},[390,4082,831],{"class":424},[390,4084,428],{"class":407},[390,4086,1001],{"class":424},[390,4088,418],{"class":407},[390,4090,1234],{"class":995},[390,4092,1009],{"class":403},[390,4094,4095],{"class":392,"line":624},[390,4096,465],{"emptyLinePlaceholder":464},[390,4098,4099],{"class":392,"line":629},[390,4100,4101],{"class":396},"// Hierarchical structure for batch invalidation\n",[390,4103,4104,4106,4109,4111,4113,4115,4118],{"class":392,"line":635},[390,4105,900],{"class":403},[390,4107,4108],{"class":424},"'entity'",[390,4110,428],{"class":407},[390,4112,3262],{"class":403},[390,4114,428],{"class":407},[390,4116,4117],{"class":424}," 'relation'",[390,4119,915],{"class":403},[390,4121,4122],{"class":392,"line":661},[390,4123,465],{"emptyLinePlaceholder":464},[390,4125,4126],{"class":392,"line":677},[390,4127,4128],{"class":396},"// Centralized factories\n",[390,4130,4131,4134,4136,4138],{"class":392,"line":689},[390,4132,4133],{"class":487},"QueryKeys",[390,4135,408],{"class":407},[390,4137,2881],{"class":411},[390,4139,4140],{"class":403},"(userId)\n",[390,4142,4143],{"class":392,"line":1950},[390,4144,465],{"emptyLinePlaceholder":464},[390,4146,4147],{"class":392,"line":1956},[390,4148,4149],{"class":396},"// const for static keys\n",[390,4151,4152,4155,4157,4159,4161,4163,4165,4167,4169],{"class":392,"line":1961},[390,4153,4154],{"class":553},"static",[390,4156,2605],{"class":553},[390,4158,640],{"class":403},[390,4160,560],{"class":407},[390,4162,488],{"class":487},[390,4164,2500],{"class":403},[390,4166,670],{"class":424},[390,4168,2516],{"class":403},[390,4170,458],{"class":407},[535,4172,4174],{"id":4173},"avoid","Avoid",[380,4176,4178],{"className":382,"code":4177,"language":384,"meta":385,"style":385},"// Non-serializable instances\n['users', StreamController()]\n\n// Non-deterministic values\n['posts', DateTime.now()]\n\n// Excessive nesting\n['a', ['b', ['c', ['d']]]]\n\n// Objects without == override\n['filter', UnequatableClass()]\n",[387,4179,4180,4185,4198,4202,4207,4223,4227,4232,4259,4263,4268],{"__ignoreMap":385},[390,4181,4182],{"class":392,"line":393},[390,4183,4184],{"class":396},"// Non-serializable instances\n",[390,4186,4187,4189,4191,4193,4195],{"class":392,"line":400},[390,4188,900],{"class":403},[390,4190,425],{"class":424},[390,4192,428],{"class":407},[390,4194,1630],{"class":487},[390,4196,4197],{"class":403},"()]\n",[390,4199,4200],{"class":392,"line":461},[390,4201,465],{"emptyLinePlaceholder":464},[390,4203,4204],{"class":392,"line":468},[390,4205,4206],{"class":396},"// Non-deterministic values\n",[390,4208,4209,4211,4213,4215,4217,4219,4221],{"class":392,"line":474},[390,4210,900],{"class":403},[390,4212,818],{"class":424},[390,4214,428],{"class":407},[390,4216,1670],{"class":487},[390,4218,408],{"class":407},[390,4220,1675],{"class":411},[390,4222,4197],{"class":403},[390,4224,4225],{"class":392,"line":624},[390,4226,465],{"emptyLinePlaceholder":464},[390,4228,4229],{"class":392,"line":629},[390,4230,4231],{"class":396},"// Excessive nesting\n",[390,4233,4234,4236,4238,4240,4242,4244,4246,4248,4250,4252,4254,4256],{"class":392,"line":635},[390,4235,900],{"class":403},[390,4237,1721],{"class":424},[390,4239,428],{"class":407},[390,4241,421],{"class":403},[390,4243,1728],{"class":424},[390,4245,428],{"class":407},[390,4247,421],{"class":403},[390,4249,1735],{"class":424},[390,4251,428],{"class":407},[390,4253,421],{"class":403},[390,4255,1742],{"class":424},[390,4257,4258],{"class":403},"]]]]\n",[390,4260,4261],{"class":392,"line":661},[390,4262,465],{"emptyLinePlaceholder":464},[390,4264,4265],{"class":392,"line":677},[390,4266,4267],{"class":396},"// Objects without == override\n",[390,4269,4270,4272,4275,4277,4280],{"class":392,"line":689},[390,4271,900],{"class":403},[390,4273,4274],{"class":424},"'filter'",[390,4276,428],{"class":407},[390,4278,4279],{"class":487}," UnequatableClass",[390,4281,4197],{"class":403},[528,4283],{},[348,4285,339],{"id":4286},"troubleshooting",[535,4288,4290],{"id":4289},"cache-always-misses","Cache always misses",[352,4292,4293,4296],{},[356,4294,4295],{},"Symptom",": every fetch triggers a network request.",[352,4298,4299,4302,4303,1794,4305,408],{},[356,4300,4301],{},"Diagnosis",": custom objects in the key do not override ",[387,4304,1052],{},[387,4306,1797],{},[380,4308,4310],{"className":382,"code":4309,"language":384,"meta":385,"style":385},"// Confirm key equality\nprint(['users', customObject1] == ['users', customObject2]);\n// Should print true if the objects represent the same data\n",[387,4311,4312,4317,4344],{"__ignoreMap":385},[390,4313,4314],{"class":392,"line":393},[390,4315,4316],{"class":396},"// Confirm key equality\n",[390,4318,4319,4322,4324,4326,4328,4331,4333,4335,4337,4339,4342],{"class":392,"line":400},[390,4320,4321],{"class":411},"print",[390,4323,2500],{"class":403},[390,4325,425],{"class":424},[390,4327,428],{"class":407},[390,4329,4330],{"class":403}," customObject1] ",[390,4332,1052],{"class":407},[390,4334,421],{"class":403},[390,4336,425],{"class":424},[390,4338,428],{"class":407},[390,4340,4341],{"class":403}," customObject2])",[390,4343,458],{"class":407},[390,4345,4346],{"class":392,"line":461},[390,4347,4348],{"class":396},"// Should print true if the objects represent the same data\n",[352,4350,4351,4354,4355,1794,4357,4359,4360,408],{},[356,4352,4353],{},"Fix",": add ",[387,4356,1052],{},[387,4358,1797],{}," overrides, or use ",[387,4361,4362],{},"Equatable",[528,4364],{},[535,4366,4368],{"id":4367},"argumenterror-on-key","ArgumentError on key",[352,4370,4371,4373,4374],{},[356,4372,4295],{},": ",[387,4375,4376],{},"ArgumentError: Key must be QoraKey or List\u003Cdynamic>",[352,4378,4379,4382,4383,4385,4386,4388],{},[356,4380,4381],{},"Cause",": a non-",[387,4384,577],{},", non-",[387,4387,207],{}," value was passed as the key.",[380,4390,4392],{"className":382,"code":4391,"language":384,"meta":385,"style":385},"client.fetchQuery(key: 'string', ...); // Wrong\nclient.fetchQuery(key: ['string'], ...); // Correct\n",[387,4393,4394,4421],{"__ignoreMap":385},[390,4395,4396,4398,4400,4402,4404,4406,4409,4411,4414,4416,4418],{"class":392,"line":393},[390,4397,404],{"class":403},[390,4399,408],{"class":407},[390,4401,412],{"class":411},[390,4403,415],{"class":403},[390,4405,418],{"class":407},[390,4407,4408],{"class":424}," 'string'",[390,4410,428],{"class":407},[390,4412,4413],{"class":407}," ...",[390,4415,619],{"class":403},[390,4417,3947],{"class":407},[390,4419,4420],{"class":396}," // Wrong\n",[390,4422,4423,4425,4427,4429,4431,4433,4435,4438,4440,4442,4444,4446,4448],{"class":392,"line":400},[390,4424,404],{"class":403},[390,4426,408],{"class":407},[390,4428,412],{"class":411},[390,4430,415],{"class":403},[390,4432,418],{"class":407},[390,4434,421],{"class":403},[390,4436,4437],{"class":424},"'string'",[390,4439,599],{"class":403},[390,4441,428],{"class":407},[390,4443,4413],{"class":407},[390,4445,619],{"class":403},[390,4447,3947],{"class":407},[390,4449,4450],{"class":396}," // Correct\n",[528,4452],{},[535,4454,4456],{"id":4455},"unexpected-refetches","Unexpected refetches",[352,4458,4459,4461],{},[356,4460,4295],{},": query refetches even though the key appears identical.",[352,4463,4464,4466],{},[356,4465,4381],{},": the key contains a non-deterministic value that changes on every build.",[380,4468,4470],{"className":382,"code":4469,"language":384,"meta":385,"style":385},"['posts', DateTime.now()] // Rebuilds create a new key each time\n",[387,4471,4472],{"__ignoreMap":385},[390,4473,4474,4476,4478,4480,4482,4484,4486,4488],{"class":392,"line":393},[390,4475,900],{"class":403},[390,4477,818],{"class":424},[390,4479,428],{"class":407},[390,4481,1670],{"class":487},[390,4483,408],{"class":407},[390,4485,1675],{"class":411},[390,4487,1703],{"class":403},[390,4489,4490],{"class":396},"// Rebuilds create a new key each time\n",[352,4492,4493,4495],{},[356,4494,4353],{},": use stable, deterministic values in keys.",[528,4497],{},[348,4499,4501],{"id":4500},"next-steps","Next Steps",[361,4503,4504,4521,4527],{},[364,4505,4506,4373,4510,3114,4513,4516,4517,4520],{},[4507,4508,62],"a",{"href":4509},"./query-states",[387,4511,4512],{},"Loading",[387,4514,4515],{},"Success",", and ",[387,4518,4519],{},"Failure"," state machine",[364,4522,4523,4526],{},[4507,4524,67],{"href":4525},"./caching",": LRU, GC, and cache lifecycle",[364,4528,4529,4373,4532,3114,4534,4516,4537],{},[4507,4530,52],{"href":4531},"./queries",[387,4533,412],{},[387,4535,4536],{},"watchQuery",[387,4538,4539],{},"prefetch",[4541,4542,4543],"style",{},"html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":385,"searchDepth":400,"depth":400,"links":4545},[4546,4547,4552,4558,4562,4566,4570,4573,4579,4580,4581,4585,4590],{"id":350,"depth":400,"text":243},{"id":532,"depth":400,"text":533,"children":4548},[4549,4550,4551],{"id":537,"depth":461,"text":538},{"id":696,"depth":461,"text":697},{"id":884,"depth":461,"text":885},{"id":1014,"depth":400,"text":1015,"children":4553},[4554,4555,4556,4557],{"id":1029,"depth":461,"text":1030},{"id":1096,"depth":461,"text":1097},{"id":1196,"depth":461,"text":1197},{"id":1278,"depth":461,"text":1279},{"id":1343,"depth":400,"text":1344,"children":4559},[4560,4561],{"id":1347,"depth":461,"text":1348},{"id":1610,"depth":461,"text":1611},{"id":1787,"depth":400,"text":1788,"children":4563},[4564,4565],{"id":1800,"depth":461,"text":1801},{"id":2066,"depth":461,"text":2067},{"id":2290,"depth":400,"text":2291,"children":4567},[4568,4569],{"id":2299,"depth":461,"text":2300},{"id":2521,"depth":461,"text":2522},{"id":2557,"depth":400,"text":2558,"children":4571},[4572],{"id":3017,"depth":461,"text":3018},{"id":3333,"depth":400,"text":3334,"children":4574},[4575,4576,4577,4578],{"id":3337,"depth":461,"text":3338},{"id":3366,"depth":461,"text":3367},{"id":3484,"depth":461,"text":3485},{"id":3568,"depth":461,"text":3569},{"id":3641,"depth":400,"text":3642},{"id":3864,"depth":400,"text":3865},{"id":4026,"depth":400,"text":4027,"children":4582},[4583,4584],{"id":4030,"depth":461,"text":4031},{"id":4173,"depth":461,"text":4174},{"id":4286,"depth":400,"text":339,"children":4586},[4587,4588,4589],{"id":4289,"depth":461,"text":4290},{"id":4367,"depth":461,"text":4368},{"id":4455,"depth":461,"text":4456},{"id":4500,"depth":400,"text":4501},"Query keys are the foundation of Qora's caching system. They uniquely identify queries and enable automatic cache management, invalidation, and refetching.","md",null,{},{"icon":60},{"title":57,"description":4591},"gBcx8PE10EU1rbzzIjup00DP8SWe824VsY-rv0C_XGo",[4599,4601],{"title":52,"path":53,"stem":54,"description":4600,"icon":55,"children":-1},"Queries are the foundation of Qora. A query is an async request bound to a key, with automatic caching, deduplication, retries, and reactive state.",{"title":62,"path":63,"stem":64,"description":4602,"icon":65,"children":-1},"Query states represent the lifecycle of your data fetching operations. Qora uses sealed classes to provide exhaustive, type-safe state handling that eliminates entire categories of runtime errors.",1794040396743]