[{"data":1,"prerenderedAt":4604},["ShallowReactive",2],{"navigation_docs_fr":3,"-fr-core-concepts-query-keys":342,"-fr-core-concepts-query-keys-surround":4599},[4,45,91,137,195,236,257,291,327],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":44},"Prise en main","i-lucide-rocket","/fr/getting-started","fr/01.getting-started",[10,15,20,24,29,34,39],{"title":11,"path":12,"stem":13,"icon":14},"Qu'est-ce que Qora ?","/fr/getting-started/what-is-qora","fr/01.getting-started/2.what-is-qora","i-lucide-info",{"title":16,"path":17,"stem":18,"icon":19},"Installation","/fr/getting-started/installation","fr/01.getting-started/3.installation","i-lucide-download",{"title":21,"path":22,"stem":23,"icon":6},"Démarrage rapide","/fr/getting-started/quick-start","fr/01.getting-started/4.quick-start",{"title":25,"path":26,"stem":27,"icon":28},"Comparaison","/fr/getting-started/comparison","fr/01.getting-started/5.comparison","i-lucide-scale",{"title":30,"path":31,"stem":32,"icon":33},"Venant de TanStack Query","/fr/getting-started/coming-from-tanstack-query","fr/01.getting-started/6.coming-from-tanstack-query","i-lucide-arrow-left-right",{"title":35,"path":36,"stem":37,"icon":38},"Migrer depuis d'Autres Librairies","/fr/getting-started/migrating-from-other-libraries","fr/01.getting-started/7.migrating-from-other-libraries","i-lucide-arrow-right-left",{"title":40,"path":41,"stem":42,"icon":43},"Assistants IA","/fr/getting-started/ai-assistants","fr/01.getting-started/8.ai-assistants","i-lucide-sparkles",false,{"title":46,"icon":47,"path":48,"stem":49,"children":50,"page":44},"Concepts clés","i-lucide-book-open","/fr/core-concepts","fr/02.core-concepts",[51,56,61,66,71,76,81,86],{"title":52,"path":53,"stem":54,"icon":55},"Requêtes","/fr/core-concepts/queries","fr/02.core-concepts/1.queries","i-lucide-database",{"title":57,"path":58,"stem":59,"icon":60},"Clés de requête","/fr/core-concepts/query-keys","fr/02.core-concepts/2.query-keys","i-lucide-key-round",{"title":62,"path":63,"stem":64,"icon":65},"États des requêtes","/fr/core-concepts/query-states","fr/02.core-concepts/3.query-states","i-lucide-activity",{"title":67,"path":68,"stem":69,"icon":70},"Cache","/fr/core-concepts/caching","fr/02.core-concepts/4.caching","i-lucide-layers-3",{"title":72,"path":73,"stem":74,"icon":75},"Stale-While-Revalidate","/fr/core-concepts/stale-while-revalidate","fr/02.core-concepts/5.stale-while-revalidate","i-lucide-timer-reset",{"title":77,"path":78,"stem":79,"icon":80},"Déduplication","/fr/core-concepts/deduplication","fr/02.core-concepts/6.deduplication","i-lucide-copy-minus",{"title":82,"path":83,"stem":84,"icon":85},"Mutations et invalidation","/fr/core-concepts/mutations","fr/02.core-concepts/7.mutations","i-lucide-pencil-line",{"title":87,"path":88,"stem":89,"icon":90},"Hors-ligne et réseau","/fr/core-concepts/offline","fr/02.core-concepts/8.offline","i-lucide-wifi-off",{"title":92,"icon":93,"path":94,"stem":95,"children":96,"page":44},"Usage avec Flutter","i-lucide-smartphone","/fr/flutter-integration","fr/03.flutter-integration",[97,102,107,112,117,122,127,132],{"title":98,"path":99,"stem":100,"icon":101},"Configuration","/fr/flutter-integration/setup","fr/03.flutter-integration/1.setup","i-lucide-wrench",{"title":103,"path":104,"stem":105,"icon":106},"QoraScope","/fr/flutter-integration/qora-scope","fr/03.flutter-integration/2.qora-scope","i-lucide-share-2",{"title":108,"path":109,"stem":110,"icon":111},"QoraBuilder","/fr/flutter-integration/qora-builder","fr/03.flutter-integration/3.qora-builder","i-lucide-blocks",{"title":113,"path":114,"stem":115,"icon":116},"QoraMutationBuilder","/fr/flutter-integration/qora-mutation-builder","fr/03.flutter-integration/4.qora-mutation-builder","i-lucide-pencil",{"title":118,"path":119,"stem":120,"icon":121},"InfiniteQueryBuilder","/fr/flutter-integration/infinite-query-builder","fr/03.flutter-integration/5.infinite-query-builder","i-lucide-infinity",{"title":123,"path":124,"stem":125,"icon":126},"Hooks (flutter_hooks)","/fr/flutter-integration/hooks","fr/03.flutter-integration/6.hooks","i-lucide-anchor",{"title":128,"path":129,"stem":130,"icon":131},"Widgets de statut réseau","/fr/flutter-integration/network-status","fr/03.flutter-integration/7.network-status","i-lucide-wifi",{"title":133,"path":134,"stem":135,"icon":136},"Bonnes pratiques","/fr/flutter-integration/best-practices","fr/03.flutter-integration/8.best-practices","i-lucide-badge-check",{"title":138,"icon":139,"path":140,"stem":141,"children":142,"page":44},"Guides Pratiques","i-lucide-chef-hat","/fr/recipes","fr/04.recipes",[143,147,152,157,162,166,171,176,181,186,191],{"title":144,"path":145,"stem":146,"icon":85},"Mutations","/fr/recipes/mutations","fr/04.recipes/02.mutations",{"title":148,"path":149,"stem":150,"icon":151},"Mises à jour optimistes","/fr/recipes/optimistic-updates","fr/04.recipes/03.optimistic-updates","i-lucide-zap",{"title":153,"path":154,"stem":155,"icon":156},"Persistance","/fr/recipes/persistence","fr/04.recipes/04.persistence","i-lucide-hard-drive",{"title":158,"path":159,"stem":160,"icon":161},"Réseau adaptatif","/fr/recipes/network-aware","fr/04.recipes/05.network-aware","i-lucide-signal",{"title":163,"path":164,"stem":165,"icon":121},"Requêtes infinies","/fr/recipes/infinite-queries","fr/04.recipes/06.infinite-queries",{"title":167,"path":168,"stem":169,"icon":170},"Requêtes dépendantes","/fr/recipes/dependent-queries","fr/04.recipes/07.dependent-queries","i-lucide-link-2",{"title":172,"path":173,"stem":174,"icon":175},"Annulation","/fr/recipes/cancel-token","fr/04.recipes/08.cancel-token","i-lucide-circle-slash",{"title":177,"path":178,"stem":179,"icon":180},"Hydratation SSR","/fr/recipes/ssr-hydration","fr/04.recipes/09.ssr-hydration","i-lucide-server",{"title":182,"path":183,"stem":184,"icon":185},"Gestion des erreurs","/fr/recipes/error-handling","fr/04.recipes/10.error-handling","i-lucide-shield-alert",{"title":187,"path":188,"stem":189,"icon":190},"Tests","/fr/recipes/testing","fr/04.recipes/11.testing","i-lucide-flask-conical",{"title":192,"path":193,"stem":194},"Prefetch au Niveau des Routes","/fr/recipes/prefetch","fr/04.recipes/12.prefetch",{"title":196,"icon":197,"path":198,"stem":199,"children":200,"page":44},"Référence de l'API","i-lucide-file-code","/fr/api-reference","fr/05.api-reference",[201,206,210,214,219,224,228,232],{"title":202,"path":203,"stem":204,"icon":205},"QoraClient","/fr/api-reference/qora-client","fr/05.api-reference/1.qora-client","i-lucide-cpu",{"title":207,"path":208,"stem":209,"icon":60},"QoraKey","/fr/api-reference/qora-key","fr/05.api-reference/2.qora-key",{"title":211,"path":212,"stem":213,"icon":65},"QoraState","/fr/api-reference/qora-state","fr/05.api-reference/3.qora-state",{"title":215,"path":216,"stem":217,"icon":218},"QoraOptions","/fr/api-reference/qora-options","fr/05.api-reference/4.qora-options","i-lucide-sliders-horizontal",{"title":220,"path":221,"stem":222,"icon":223},"QoraClientConfig","/fr/api-reference/qora-client-config","fr/05.api-reference/5.qora-client-config","i-lucide-settings-2",{"title":225,"path":226,"stem":227,"icon":85},"API Mutation","/fr/api-reference/qora-mutation","fr/05.api-reference/6.qora-mutation",{"title":229,"path":230,"stem":231,"icon":156},"PersistQoraClient","/fr/api-reference/persist-qora-client","fr/05.api-reference/7.persist-qora-client",{"title":233,"path":234,"stem":235,"icon":121},"Requête infinie","/fr/api-reference/infinite-query","fr/05.api-reference/8.infinite-query",{"title":237,"icon":238,"path":239,"stem":240,"children":241,"page":44},"Outils de debug","i-lucide-bug","/fr/devtools","fr/06.devtools",[242,247,252],{"title":243,"path":244,"stem":245,"icon":246},"Vue d'ensemble","/fr/devtools/overview","fr/06.devtools/1.overview","i-lucide-layout-dashboard",{"title":248,"path":249,"stem":250,"icon":251},"Overlay intégré","/fr/devtools/overlay","fr/06.devtools/2.overlay","i-lucide-layers",{"title":253,"path":254,"stem":255,"icon":256},"Sérialisation des données","/fr/devtools/data-display","fr/06.devtools/4.data-display","i-lucide-eye",{"title":258,"icon":259,"path":260,"stem":261,"children":262,"page":44},"Intégrations tierces","i-lucide-puzzle","/fr/third-party","fr/07.third-party",[263,268,272,277,282,286],{"title":264,"path":265,"stem":266,"icon":267},"Avec Provider","/fr/third-party/with-provider","fr/07.third-party/1.with-provider","i-lucide-plug",{"title":269,"path":270,"stem":271,"icon":111},"Avec BLoC","/fr/third-party/with-bloc","fr/07.third-party/2.with-bloc",{"title":273,"path":274,"stem":275,"icon":276},"Avec Riverpod","/fr/third-party/with-riverpod","fr/07.third-party/3.with-riverpod","i-lucide-droplets",{"title":278,"path":279,"stem":280,"icon":281},"Avec RxDart","/fr/third-party/with-rxdart","fr/07.third-party/4.with-rxdart","i-lucide-git-branch",{"title":283,"path":284,"stem":285},"Avec Dio","/fr/third-party/with-dio","fr/07.third-party/5.with-dio",{"title":287,"path":288,"stem":289,"icon":290},"Avec GraphQL","/fr/third-party/with-graphql","fr/07.third-party/6.with-graphql","i-lucide-binary",{"title":292,"icon":190,"path":293,"stem":294,"children":295,"page":44},"Exemples","/fr/examples","fr/08.examples",[296,301,305,310,314,318,322],{"title":297,"path":298,"stem":299,"icon":300},"Étude de cas : Liste et détail utilisateur","/fr/examples/basic-query","fr/08.examples/1.basic-query","i-lucide-play-circle",{"title":302,"path":303,"stem":304,"icon":151},"Étude de cas : Mutations optimistes et rollback","/fr/examples/mutations-optimistic","fr/08.examples/2.mutations-optimistic",{"title":306,"path":307,"stem":308,"icon":309},"Étude de cas : Feed à défilement infini","/fr/examples/infinite-scroll","fr/08.examples/3.infinite-scroll","i-lucide-scroll",{"title":311,"path":312,"stem":313,"icon":90},"Étude de cas : Application Todo offline-first","/fr/examples/offline-first","fr/08.examples/4.offline-first",{"title":315,"path":316,"stem":317,"icon":161},"Étude de cas : Conscience réseau","/fr/examples/network-awareness","fr/08.examples/5.network-awareness",{"title":319,"path":320,"stem":321,"icon":126},"Étude de cas : Intégration des hooks","/fr/examples/hooks-integration","fr/08.examples/6.hooks-integration",{"title":323,"path":324,"stem":325,"icon":326},"Étude de cas : Application Todo complète","/fr/examples/complete-todo-app","fr/08.examples/7.complete-todo-app","i-lucide-check-square",{"title":328,"icon":329,"path":330,"stem":331,"children":332,"page":44},"Aide","i-lucide-life-buoy","/fr/help","fr/09.help",[333,338],{"title":334,"path":335,"stem":336,"icon":337},"FAQ","/fr/help/faq","fr/09.help/1.faq","i-lucide-circle-help",{"title":339,"path":340,"stem":341,"icon":101},"Dépannage","/fr/help/troubleshooting","fr/09.help/2.troubleshooting",{"id":343,"title":57,"body":344,"description":4592,"extension":4593,"links":4594,"meta":4595,"navigation":4596,"path":58,"seo":4597,"stem":59,"__hash__":4598},"docs_fr/fr/02.core-concepts/2.query-keys.md",{"type":345,"value":346,"toc":4545},"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,2546,2554,2556,2560,2563,3016,3020,3330,3332,3336,3340,3365,3369,3378,3484,3488,3494,3568,3572,3575,3639,3641,3645,3652,3862,3864,3868,3871,3953,3960,4021,4024,4026,4030,4034,4173,4177,4284,4286,4290,4294,4300,4309,4351,4365,4367,4371,4379,4391,4453,4455,4459,4464,4469,4493,4498,4500,4504,4541],[348,349,243],"h2",{"id":350},"vue-densemble",[352,353,354,355,359],"p",{},"Une clé de requête est un ",[356,357,358],"strong",{},"tableau sérialisable"," que Qora utilise pour :",[361,362,363,367,370,373],"ul",{},[364,365,366],"li",{},"Mettre en cache les données de façon unique par requête",[364,368,369],{},"Déclencher la revalidation en arrière-plan quand les clés changent",[364,371,372],{},"Partager l'état du cache entre services et widgets",[364,374,375],{},"Invalider et mettre à jour les requêtes liées après les mutations",[352,377,378],{},"Qora supporte deux 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","// Liste directe (sans friction)\nclient.fetchQuery(key: ['users', userId], fetcher: () => api.getUser(userId));\n\n// Wrapper typé (sûreté du typage)\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","// Liste directe (sans friction)\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},"// Wrapper typé (sûreté du typage)\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],{},"Les deux formes sont 100% interchangeables. Elles se résolvent en la même représentation interne.",[528,529],"hr",{},[348,531,533],{"id":532},"bases-des-clés-de-requête","Bases des clés de requête",[535,536,538],"h3",{"id":537},"clés-simples","Clés simples",[380,540,542],{"className":382,"code":541,"language":384,"meta":385,"style":385},"// Récupérer tous les utilisateurs\nfinal users = await client.fetchQuery\u003CList\u003CUser>>(\n  key: ['users'],\n  fetcher: fetchUsers,\n);\n\n// Récupérer les paramètres de l'application\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},"// Récupérer tous les utilisateurs\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},"// Récupérer les paramètres de l'application\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},"clés-avec-variables","Clés avec variables",[380,699,701],{"className":382,"code":700,"language":384,"meta":385,"style":385},"// Récupérer un utilisateur spécifique\nfinal user = await client.fetchQuery\u003CUser>(\n  key: ['users', userId],\n  fetcher: () => fetchUser(userId),\n);\n\n// Récupérer des posts filtrés\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},"// Récupérer un utilisateur spécifique\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},"// Récupérer des posts filtrés\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},"clés-hiérarchiques","Clés hiérarchiques",[380,887,889],{"className":382,"code":888,"language":384,"meta":385,"style":385},"// Profil utilisateur\n['users', userId, 'profile']\n\n// Posts d'un utilisateur\n['users', userId, 'posts']\n\n// Commentaires d'un post spécifique\n['posts', postId, 'comments']\n\n// Données paginées\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},"// Profil utilisateur\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},"// Posts d'un utilisateur\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},"// Commentaires d'un post spécifique\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},"// Données paginées\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},"égalité-des-clés","Égalité des clés",[352,1017,1018,1019,1022,1023,1026],{},"Qora utilise l'",[356,1020,1021],{},"égalité profonde"," pour comparer les clés. Deux clés sont égales si leur ",[356,1024,1025],{},"contenu"," est identique, et non leur référence.",[535,1028,1030],{"id":1029},"valeurs-primitives","Valeurs primitives",[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},"listes-et-imbrication","Listes et imbrication",[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 (l'ordre importe)\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 (l'ordre importe)\n",[535,1195,1197],{"id":1196},"maps-indépendant-de-lordre","Maps (indépendant de l'ordre)",[352,1199,1200,1201,1203],{},"Les maps sont comparées par leur ",[356,1202,1025],{},", quel que soit l'ordre d'insertion des clés :",[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],{},"Ce comportement diffère de TanStack Query (JavaScript), où l'ordre des clés d'objet est significatif.",[535,1277,1279],{"id":1278},"valeurs-null","Valeurs null",[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},"structure-des-clés-de-requête","Structure des clés de requête",[535,1346,1348],{"id":1347},"patterns-recommandés","Patterns recommandés",[1350,1351,1353],"h4",{"id":1352},"pattern-1-entité-id","Pattern 1 : Entité + 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-entité-filtres","Pattern 2 : Entité + filtres",[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-entité-id-relation","Pattern 3 : Entité + 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},"// Basée sur l'offset\n['posts', {'page': pageNumber}]\n\n// Basée sur le curseur\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},"// Basée sur l'offset\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},"// Basée sur le curseur\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],{},"Les objets non sérialisables provoquent des cache misses silencieux :",[380,1616,1618],{"className":382,"code":1617,"language":384,"meta":385,"style":385},"['users', StreamController()]  // Instance non sérialisable\n['data', widget]               // Instance de widget\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},"// Instance non sérialisable\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},"// Instance de widget\n",[352,1653,1654],{},"Les valeurs non déterministes provoquent un cache miss à chaque appel :",[380,1656,1658],{"className":382,"code":1657,"language":384,"meta":385,"style":385},"['posts', DateTime.now()]     // Non déterministe\n['users', Random().nextInt()] // Change à chaque appel\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 déterministe\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},"// Change à chaque appel\n",[352,1708,1709],{},"L'imbrication excessive réduit la lisibilité sans bénéfice :",[380,1711,1713],{"className":382,"code":1712,"language":384,"meta":385,"style":385},"['a', ['b', ['c', ['d', 'e']]]]  // À éviter\n['posts', {'status': 'published', 'limit': 10}]  // Préférer une structure plate\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},"// À éviter\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},"// Préférer une structure plate\n",[528,1784],{},[348,1786,1788],{"id":1787},"objets-personnalisés-dans-les-clés","Objets personnalisés dans les clés",[352,1790,1791,1792,1794,1795,408],{},"Les objets personnalisés sont valides en tant que parties de clé uniquement s'ils surchargent ",[387,1793,1052],{}," et ",[387,1796,1797],{},"hashCode",[535,1799,1801],{"id":1800},"avec-equatable","Avec 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// Utilisation\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},"// Utilisation\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},"surcharge-manuelle","Surcharge manuelle",[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",{},"Sans surcharge de ",[387,2282,1052],{},[387,2284,1797],{},", le cache échoue silencieusement. Chaque instance d'objet est traitée comme une clé distincte, produisant un cache miss à chaque appel.",[528,2287],{},[348,2289,2291],{"id":2290},"la-classe-qorakey-optionnel","La classe QoraKey (optionnel)",[352,2293,2294,2296],{},[387,2295,207],{}," est un wrapper typé qui rend la construction des clés explicite et réutilisable.",[535,2298,2300],{"id":2299},"constructeurs-factory","Constructeurs factory",[380,2302,2304],{"className":382,"code":2303,"language":384,"meta":385,"style":385},"// Clé à un seul segment\nclient.fetchQuery(key: QoraKey.single('settings'), fetcher: fetchSettings);\n\n// Entité + ID\nclient.fetchQuery(key: QoraKey.withId('users', userId), fetcher: () => fetchUser(userId));\n\n// Entité + map de filtres\nclient.fetchQuery(\n  key: QoraKey.withFilter('posts', {'status': 'published'}),\n  fetcher: () => fetchPosts(status: 'published'),\n);\n\n// Segments personnalisés\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},"// Clé à un seul segment\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},"// Entité + 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},"// Entité + map de filtres\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},"// Segments personnalisés\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},"quand-utiliser-qorakey","Quand utiliser QoraKey",[352,2524,2525,2526,2528],{},"Utiliser ",[387,2527,207],{}," quand :",[361,2530,2531,2534,2537],{},[364,2532,2533],{},"Construction d'une factory de clés partagée utilisée dans plusieurs services",[364,2535,2536],{},"Travail en grande équipe où les APIs auto-documentées réduisent la coordination",[364,2538,2539],{},"La sûreté du typage explicite est préférée à la concision",[352,2541,2542,2543,2545],{},"Utiliser une ",[387,2544,577],{}," brute quand :",[361,2547,2548,2551],{},[364,2549,2550],{},"Prototypage ou écriture de requêtes ponctuelles",[364,2552,2553],{},"La syntaxe minimale est privilégiée",[528,2555],{},[348,2557,2559],{"id":2558},"factories-de-clés-de-requête","Factories de clés de requête",[352,2561,2562],{},"Les factories de clés centralisées garantissent la cohérence et permettent de refactoriser la structure des clés en un seul endroit.",[380,2564,2567],{"className":382,"code":2565,"filename":2566,"language":384,"meta":385,"style":385},"class QueryKeys {\n  QueryKeys._();\n\n  // Clés statiques (pas d'allocation sur les appels répétés)\n  static const settings = QoraKey(['settings']);\n  static const currentUser = QoraKey(['users', 'current']);\n\n  // Clés dynamiques\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// Utilisation\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,2568,2569,2578,2590,2594,2599,2621,2647,2651,2656,2692,2696,2714,2735,2739,2768,2784,2808,2829,2836,2841,2846,2851,2869,2892,2913,2920,2925,2946,2978,3009],{"__ignoreMap":385},[390,2570,2571,2573,2576],{"class":392,"line":393},[390,2572,1831],{"class":407},[390,2574,2575],{"class":487}," QueryKeys",[390,2577,1843],{"class":403},[390,2579,2580,2583,2585,2588],{"class":392,"line":400},[390,2581,2582],{"class":487},"  QueryKeys",[390,2584,408],{"class":407},[390,2586,2587],{"class":403},"_()",[390,2589,458],{"class":407},[390,2591,2592],{"class":392,"line":461},[390,2593,465],{"emptyLinePlaceholder":464},[390,2595,2596],{"class":392,"line":468},[390,2597,2598],{"class":396},"  // Clés statiques (pas d'allocation sur les appels répétés)\n",[390,2600,2601,2604,2607,2609,2611,2613,2615,2617,2619],{"class":392,"line":474},[390,2602,2603],{"class":553},"  static",[390,2605,2606],{"class":553}," const",[390,2608,640],{"class":403},[390,2610,560],{"class":407},[390,2612,488],{"class":487},[390,2614,2500],{"class":403},[390,2616,670],{"class":424},[390,2618,2516],{"class":403},[390,2620,458],{"class":407},[390,2622,2623,2625,2627,2630,2632,2634,2636,2638,2640,2643,2645],{"class":392,"line":624},[390,2624,2603],{"class":553},[390,2626,2606],{"class":553},[390,2628,2629],{"class":403}," currentUser ",[390,2631,560],{"class":407},[390,2633,488],{"class":487},[390,2635,2500],{"class":403},[390,2637,425],{"class":424},[390,2639,428],{"class":407},[390,2641,2642],{"class":424}," 'current'",[390,2644,2516],{"class":403},[390,2646,458],{"class":407},[390,2648,2649],{"class":392,"line":629},[390,2650,465],{"emptyLinePlaceholder":464},[390,2652,2653],{"class":392,"line":635},[390,2654,2655],{"class":396},"  // Clés dynamiques\n",[390,2657,2658,2660,2662,2665,2667,2670,2673,2675,2677,2679,2681,2683,2685,2687,2690],{"class":392,"line":661},[390,2659,2603],{"class":553},[390,2661,488],{"class":487},[390,2663,2664],{"class":411}," user",[390,2666,496],{"class":403},[390,2668,2669],{"class":487},"String",[390,2671,2672],{"class":403}," id) ",[390,2674,444],{"class":407},[390,2676,488],{"class":487},[390,2678,408],{"class":407},[390,2680,493],{"class":411},[390,2682,496],{"class":403},[390,2684,425],{"class":424},[390,2686,428],{"class":407},[390,2688,2689],{"class":403}," id)",[390,2691,458],{"class":407},[390,2693,2694],{"class":392,"line":677},[390,2695,465],{"emptyLinePlaceholder":464},[390,2697,2698,2700,2702,2705,2707,2709,2712],{"class":392,"line":689},[390,2699,2603],{"class":553},[390,2701,488],{"class":487},[390,2703,2704],{"class":411}," userPosts",[390,2706,496],{"class":403},[390,2708,2669],{"class":487},[390,2710,2711],{"class":403}," userId) ",[390,2713,2171],{"class":407},[390,2715,2716,2719,2721,2723,2725,2727,2729,2731,2733],{"class":392,"line":1950},[390,2717,2718],{"class":487},"    QoraKey",[390,2720,2500],{"class":403},[390,2722,425],{"class":424},[390,2724,428],{"class":407},[390,2726,907],{"class":403},[390,2728,428],{"class":407},[390,2730,939],{"class":424},[390,2732,2516],{"class":403},[390,2734,458],{"class":407},[390,2736,2737],{"class":392,"line":1956},[390,2738,465],{"emptyLinePlaceholder":464},[390,2740,2741,2743,2745,2748,2750,2752,2755,2757,2759,2761,2763,2766],{"class":392,"line":1961},[390,2742,2603],{"class":553},[390,2744,488],{"class":487},[390,2746,2747],{"class":411}," posts",[390,2749,1882],{"class":403},[390,2751,2669],{"class":487},[390,2753,2754],{"class":407},"?",[390,2756,1854],{"class":403},[390,2758,428],{"class":407},[390,2760,1863],{"class":487},[390,2762,2754],{"class":407},[390,2764,2765],{"class":403}," limit}) ",[390,2767,2171],{"class":407},[390,2769,2770,2772,2774,2776,2778,2780,2782],{"class":392,"line":1967},[390,2771,2718],{"class":487},[390,2773,408],{"class":407},[390,2775,2430],{"class":411},[390,2777,496],{"class":403},[390,2779,818],{"class":424},[390,2781,428],{"class":407},[390,2783,1843],{"class":403},[390,2785,2786,2789,2792,2795,2797,2800,2802,2804,2806],{"class":392,"line":1994},[390,2787,2788],{"class":563},"      if",[390,2790,2791],{"class":403}," (status ",[390,2793,2794],{"class":407},"!=",[390,2796,1295],{"class":407},[390,2798,2799],{"class":403},") ",[390,2801,826],{"class":424},[390,2803,418],{"class":407},[390,2805,1854],{"class":403},[390,2807,602],{"class":407},[390,2809,2810,2812,2815,2817,2819,2821,2823,2825,2827],{"class":392,"line":2028},[390,2811,2788],{"class":563},[390,2813,2814],{"class":403}," (limit ",[390,2816,2794],{"class":407},[390,2818,1295],{"class":407},[390,2820,2799],{"class":403},[390,2822,1254],{"class":424},[390,2824,418],{"class":407},[390,2826,1866],{"class":403},[390,2828,602],{"class":407},[390,2830,2831,2834],{"class":392,"line":2059},[390,2832,2833],{"class":403},"    })",[390,2835,458],{"class":407},[390,2837,2839],{"class":392,"line":2838},19,[390,2840,1953],{"class":403},[390,2842,2844],{"class":392,"line":2843},20,[390,2845,465],{"emptyLinePlaceholder":464},[390,2847,2849],{"class":392,"line":2848},21,[390,2850,1964],{"class":396},[390,2852,2854,2857,2859,2861,2863,2865,2867],{"class":392,"line":2853},22,[390,2855,2856],{"class":563},"await",[390,2858,567],{"class":403},[390,2860,408],{"class":407},[390,2862,412],{"class":411},[390,2864,574],{"class":403},[390,2866,582],{"class":487},[390,2868,658],{"class":403},[390,2870,2872,2874,2876,2878,2880,2883,2885,2888,2890],{"class":392,"line":2871},23,[390,2873,590],{"class":403},[390,2875,418],{"class":407},[390,2877,2575],{"class":487},[390,2879,408],{"class":407},[390,2881,2882],{"class":411},"user",[390,2884,496],{"class":403},[390,2886,2887],{"class":424},"'123'",[390,2889,619],{"class":403},[390,2891,602],{"class":407},[390,2893,2895,2897,2899,2901,2903,2905,2907,2909,2911],{"class":392,"line":2894},24,[390,2896,607],{"class":403},[390,2898,418],{"class":407},[390,2900,441],{"class":403},[390,2902,444],{"class":407},[390,2904,759],{"class":411},[390,2906,496],{"class":403},[390,2908,2887],{"class":424},[390,2910,619],{"class":403},[390,2912,602],{"class":407},[390,2914,2916,2918],{"class":392,"line":2915},25,[390,2917,619],{"class":403},[390,2919,458],{"class":407},[390,2921,2923],{"class":392,"line":2922},26,[390,2924,465],{"emptyLinePlaceholder":464},[390,2926,2928,2930,2932,2934,2936,2938,2940,2942,2944],{"class":392,"line":2927},27,[390,2929,2856],{"class":563},[390,2931,567],{"class":403},[390,2933,408],{"class":407},[390,2935,412],{"class":411},[390,2937,574],{"class":403},[390,2939,577],{"class":487},[390,2941,574],{"class":403},[390,2943,805],{"class":487},[390,2945,585],{"class":403},[390,2947,2949,2951,2953,2955,2957,2960,2962,2964,2966,2968,2970,2972,2974,2976],{"class":392,"line":2948},28,[390,2950,590],{"class":403},[390,2952,418],{"class":407},[390,2954,2575],{"class":487},[390,2956,408],{"class":407},[390,2958,2959],{"class":411},"posts",[390,2961,859],{"class":403},[390,2963,418],{"class":407},[390,2965,831],{"class":424},[390,2967,428],{"class":407},[390,2969,1866],{"class":403},[390,2971,418],{"class":407},[390,2973,1234],{"class":995},[390,2975,619],{"class":403},[390,2977,602],{"class":407},[390,2979,2981,2983,2985,2987,2989,2991,2993,2995,2997,2999,3001,3003,3005,3007],{"class":392,"line":2980},29,[390,2982,607],{"class":403},[390,2984,418],{"class":407},[390,2986,441],{"class":403},[390,2988,444],{"class":407},[390,2990,856],{"class":411},[390,2992,859],{"class":403},[390,2994,418],{"class":407},[390,2996,831],{"class":424},[390,2998,428],{"class":407},[390,3000,1866],{"class":403},[390,3002,418],{"class":407},[390,3004,1234],{"class":995},[390,3006,619],{"class":403},[390,3008,602],{"class":407},[390,3010,3012,3014],{"class":392,"line":3011},30,[390,3013,619],{"class":403},[390,3015,458],{"class":407},[535,3017,3019],{"id":3018},"factory-avec-invalidation-par-préfixe","Factory avec invalidation par préfixe",[380,3021,3024],{"className":382,"code":3022,"filename":3023,"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// Invalider toutes les requêtes liées aux posts après une mutation\nclient.invalidateWhere((key) =>\n  key.isNotEmpty && key[0] == 'posts'\n);\n","post_query_keys.dart",[387,3025,3026,3035,3054,3058,3085,3089,3128,3174,3178,3219,3223,3246,3272,3276,3280,3285,3299,3324],{"__ignoreMap":385},[390,3027,3028,3030,3033],{"class":392,"line":393},[390,3029,1831],{"class":407},[390,3031,3032],{"class":487}," PostQueryKeys",[390,3034,1843],{"class":403},[390,3036,3037,3039,3041,3044,3046,3048,3050,3052],{"class":392,"line":400},[390,3038,2603],{"class":553},[390,3040,2606],{"class":553},[390,3042,3043],{"class":403}," _prefix ",[390,3045,560],{"class":407},[390,3047,421],{"class":403},[390,3049,818],{"class":424},[390,3051,599],{"class":403},[390,3053,458],{"class":407},[390,3055,3056],{"class":392,"line":461},[390,3057,465],{"emptyLinePlaceholder":464},[390,3059,3060,3062,3065,3067,3070,3073,3075,3078,3080,3083],{"class":392,"line":468},[390,3061,2603],{"class":553},[390,3063,3064],{"class":487}," List",[390,3066,574],{"class":403},[390,3068,3069],{"class":487},"dynamic",[390,3071,3072],{"class":403},"> ",[390,3074,1932],{"class":407},[390,3076,3077],{"class":403}," all ",[390,3079,444],{"class":407},[390,3081,3082],{"class":403}," _prefix",[390,3084,458],{"class":407},[390,3086,3087],{"class":392,"line":474},[390,3088,465],{"emptyLinePlaceholder":464},[390,3090,3091,3093,3095,3097,3099,3101,3104,3106,3109,3111,3113,3116,3118,3121,3123,3126],{"class":392,"line":624},[390,3092,2603],{"class":553},[390,3094,3064],{"class":487},[390,3096,574],{"class":403},[390,3098,3069],{"class":487},[390,3100,3072],{"class":403},[390,3102,3103],{"class":411},"list",[390,3105,2500],{"class":403},[390,3107,3108],{"class":487},"Map",[390,3110,574],{"class":403},[390,3112,2669],{"class":487},[390,3114,3115],{"class":403},", ",[390,3117,3069],{"class":487},[390,3119,3120],{"class":403},">",[390,3122,2754],{"class":407},[390,3124,3125],{"class":403}," filters]) ",[390,3127,2171],{"class":407},[390,3129,3130,3133,3135,3137,3140,3142,3145,3148,3150,3153,3155,3158,3160,3162,3164,3166,3168,3170,3172],{"class":392,"line":629},[390,3131,3132],{"class":403},"    filters ",[390,3134,2794],{"class":407},[390,3136,1295],{"class":407},[390,3138,3139],{"class":407}," ?",[390,3141,421],{"class":403},[390,3143,3144],{"class":407},"...",[390,3146,3147],{"class":403},"_prefix",[390,3149,428],{"class":407},[390,3151,3152],{"class":424}," 'list'",[390,3154,428],{"class":407},[390,3156,3157],{"class":403}," filters] ",[390,3159,418],{"class":407},[390,3161,421],{"class":403},[390,3163,3144],{"class":407},[390,3165,3147],{"class":403},[390,3167,428],{"class":407},[390,3169,3152],{"class":424},[390,3171,599],{"class":403},[390,3173,458],{"class":407},[390,3175,3176],{"class":392,"line":635},[390,3177,465],{"emptyLinePlaceholder":464},[390,3179,3180,3182,3184,3186,3188,3190,3193,3195,3197,3199,3201,3203,3205,3207,3209,3212,3214,3217],{"class":392,"line":661},[390,3181,2603],{"class":553},[390,3183,3064],{"class":487},[390,3185,574],{"class":403},[390,3187,3069],{"class":487},[390,3189,3072],{"class":403},[390,3191,3192],{"class":411},"detail",[390,3194,496],{"class":403},[390,3196,2669],{"class":487},[390,3198,2672],{"class":403},[390,3200,444],{"class":407},[390,3202,421],{"class":403},[390,3204,3144],{"class":407},[390,3206,3147],{"class":403},[390,3208,428],{"class":407},[390,3210,3211],{"class":424}," 'detail'",[390,3213,428],{"class":407},[390,3215,3216],{"class":403}," id]",[390,3218,458],{"class":407},[390,3220,3221],{"class":392,"line":677},[390,3222,465],{"emptyLinePlaceholder":464},[390,3224,3225,3227,3229,3231,3233,3235,3238,3240,3242,3244],{"class":392,"line":689},[390,3226,2603],{"class":553},[390,3228,3064],{"class":487},[390,3230,574],{"class":403},[390,3232,3069],{"class":487},[390,3234,3072],{"class":403},[390,3236,3237],{"class":411},"comments",[390,3239,496],{"class":403},[390,3241,2669],{"class":487},[390,3243,2672],{"class":403},[390,3245,2171],{"class":407},[390,3247,3248,3251,3253,3255,3257,3259,3261,3264,3266,3268,3270],{"class":392,"line":1950},[390,3249,3250],{"class":403},"    [",[390,3252,3144],{"class":407},[390,3254,3147],{"class":403},[390,3256,428],{"class":407},[390,3258,3211],{"class":424},[390,3260,428],{"class":407},[390,3262,3263],{"class":403}," id",[390,3265,428],{"class":407},[390,3267,966],{"class":424},[390,3269,599],{"class":403},[390,3271,458],{"class":407},[390,3273,3274],{"class":392,"line":1956},[390,3275,1953],{"class":403},[390,3277,3278],{"class":392,"line":1961},[390,3279,465],{"emptyLinePlaceholder":464},[390,3281,3282],{"class":392,"line":1967},[390,3283,3284],{"class":396},"// Invalider toutes les requêtes liées aux posts après une mutation\n",[390,3286,3287,3289,3291,3294,3297],{"class":392,"line":1994},[390,3288,404],{"class":403},[390,3290,408],{"class":407},[390,3292,3293],{"class":411},"invalidateWhere",[390,3295,3296],{"class":403},"((key) ",[390,3298,2171],{"class":407},[390,3300,3301,3303,3305,3308,3311,3314,3317,3319,3321],{"class":392,"line":2028},[390,3302,590],{"class":403},[390,3304,408],{"class":407},[390,3306,3307],{"class":403},"isNotEmpty ",[390,3309,3310],{"class":407},"&&",[390,3312,3313],{"class":403}," key[",[390,3315,3316],{"class":995},"0",[390,3318,1049],{"class":403},[390,3320,1052],{"class":407},[390,3322,3323],{"class":424}," 'posts'\n",[390,3325,3326,3328],{"class":392,"line":2059},[390,3327,619],{"class":403},[390,3329,458],{"class":407},[528,3331],{},[348,3333,3335],{"id":3334},"stratégies-dinvalidation","Stratégies d'invalidation",[535,3337,3339],{"id":3338},"correspondance-exacte","Correspondance exacte",[380,3341,3343],{"className":382,"code":3342,"language":384,"meta":385,"style":385},"client.invalidate(['users', userId]);\n",[387,3344,3345],{"__ignoreMap":385},[390,3346,3347,3349,3351,3354,3356,3358,3360,3363],{"class":392,"line":393},[390,3348,404],{"class":403},[390,3350,408],{"class":407},[390,3352,3353],{"class":411},"invalidate",[390,3355,2500],{"class":403},[390,3357,425],{"class":424},[390,3359,428],{"class":407},[390,3361,3362],{"class":403}," userId])",[390,3364,458],{"class":407},[535,3366,3368],{"id":3367},"invalidation-par-prédicat","Invalidation par prédicat",[352,3370,3371,3373,3374,3377],{},[387,3372,3293],{}," reçoit la clé normalisée sous forme de ",[387,3375,3376],{},"List\u003Cdynamic>"," :",[380,3379,3381],{"className":382,"code":3380,"language":384,"meta":385,"style":385},"// Invalider toutes les requêtes utilisateurs\nclient.invalidateWhere((key) => key.firstOrNull == 'users');\n\n// Invalider toutes les requêtes pour un utilisateur spécifique\nclient.invalidateWhere((key) =>\n  key.length >= 2 && key[0] == 'users' && key[1] == userId\n);\n",[387,3382,3383,3388,3417,3421,3426,3438,3478],{"__ignoreMap":385},[390,3384,3385],{"class":392,"line":393},[390,3386,3387],{"class":396},"// Invalider toutes les requêtes utilisateurs\n",[390,3389,3390,3392,3394,3396,3398,3400,3403,3405,3408,3410,3413,3415],{"class":392,"line":400},[390,3391,404],{"class":403},[390,3393,408],{"class":407},[390,3395,3293],{"class":411},[390,3397,3296],{"class":403},[390,3399,444],{"class":407},[390,3401,3402],{"class":403}," key",[390,3404,408],{"class":407},[390,3406,3407],{"class":403},"firstOrNull ",[390,3409,1052],{"class":407},[390,3411,3412],{"class":424}," 'users'",[390,3414,619],{"class":403},[390,3416,458],{"class":407},[390,3418,3419],{"class":392,"line":461},[390,3420,465],{"emptyLinePlaceholder":464},[390,3422,3423],{"class":392,"line":468},[390,3424,3425],{"class":396},"// Invalider toutes les requêtes pour un utilisateur spécifique\n",[390,3427,3428,3430,3432,3434,3436],{"class":392,"line":474},[390,3429,404],{"class":403},[390,3431,408],{"class":407},[390,3433,3293],{"class":411},[390,3435,3296],{"class":403},[390,3437,2171],{"class":407},[390,3439,3440,3442,3444,3447,3450,3452,3455,3457,3459,3461,3463,3465,3467,3469,3471,3473,3475],{"class":392,"line":624},[390,3441,590],{"class":403},[390,3443,408],{"class":407},[390,3445,3446],{"class":403},"length ",[390,3448,3449],{"class":407},">=",[390,3451,996],{"class":995},[390,3453,3454],{"class":407}," &&",[390,3456,3313],{"class":403},[390,3458,3316],{"class":995},[390,3460,1049],{"class":403},[390,3462,1052],{"class":407},[390,3464,3412],{"class":424},[390,3466,3454],{"class":407},[390,3468,3313],{"class":403},[390,3470,1115],{"class":995},[390,3472,1049],{"class":403},[390,3474,1052],{"class":407},[390,3476,3477],{"class":403}," userId\n",[390,3479,3480,3482],{"class":392,"line":629},[390,3481,619],{"class":403},[390,3483,458],{"class":407},[535,3485,3487],{"id":3486},"invalidation-par-filtre","Invalidation par filtre",[352,3489,3490,3493],{},[387,3491,3492],{},"invalidateQueries"," reçoit la clé, l'état courant et les dernières options pour une sélection plus fine :",[380,3495,3497],{"className":382,"code":3496,"language":384,"meta":385,"style":385},"// Invalider toutes les requêtes en échec utilisant un intervalle de refetch\nclient.invalidateQueries(\n  filter: (key, state, opts) =>\n      state is Failure && opts?.refetchInterval != null,\n);\n",[387,3498,3499,3504,3514,3536,3562],{"__ignoreMap":385},[390,3500,3501],{"class":392,"line":393},[390,3502,3503],{"class":396},"// Invalider toutes les requêtes en échec utilisant un intervalle de refetch\n",[390,3505,3506,3508,3510,3512],{"class":392,"line":400},[390,3507,404],{"class":403},[390,3509,408],{"class":407},[390,3511,3492],{"class":411},[390,3513,2417],{"class":403},[390,3515,3516,3519,3521,3524,3526,3529,3531,3534],{"class":392,"line":461},[390,3517,3518],{"class":403},"  filter",[390,3520,418],{"class":407},[390,3522,3523],{"class":403}," (key",[390,3525,428],{"class":407},[390,3527,3528],{"class":403}," state",[390,3530,428],{"class":407},[390,3532,3533],{"class":403}," opts) ",[390,3535,2171],{"class":407},[390,3537,3538,3541,3543,3546,3548,3551,3554,3557,3559],{"class":392,"line":468},[390,3539,3540],{"class":403},"      state ",[390,3542,2194],{"class":407},[390,3544,3545],{"class":487}," Failure",[390,3547,3454],{"class":407},[390,3549,3550],{"class":403}," opts",[390,3552,3553],{"class":407},"?.",[390,3555,3556],{"class":403},"refetchInterval ",[390,3558,2794],{"class":407},[390,3560,3561],{"class":407}," null,\n",[390,3563,3564,3566],{"class":392,"line":474},[390,3565,619],{"class":403},[390,3567,458],{"class":407},[535,3569,3571],{"id":3570},"invalidation-hiérarchique","Invalidation hiérarchique",[352,3573,3574],{},"Structurer les clés de façon hiérarchique pour invalider les requêtes liées en lot :",[380,3576,3578],{"className":382,"code":3577,"language":384,"meta":385,"style":385},"// Invalider toutes les données associées à un utilisateur spécifique\nclient.invalidateWhere((key) =>\n  key.length >= 2 && key[0] == 'users' && key[1] == userId\n);\n",[387,3579,3580,3585,3597,3633],{"__ignoreMap":385},[390,3581,3582],{"class":392,"line":393},[390,3583,3584],{"class":396},"// Invalider toutes les données associées à un utilisateur spécifique\n",[390,3586,3587,3589,3591,3593,3595],{"class":392,"line":400},[390,3588,404],{"class":403},[390,3590,408],{"class":407},[390,3592,3293],{"class":411},[390,3594,3296],{"class":403},[390,3596,2171],{"class":407},[390,3598,3599,3601,3603,3605,3607,3609,3611,3613,3615,3617,3619,3621,3623,3625,3627,3629,3631],{"class":392,"line":461},[390,3600,590],{"class":403},[390,3602,408],{"class":407},[390,3604,3446],{"class":403},[390,3606,3449],{"class":407},[390,3608,996],{"class":995},[390,3610,3454],{"class":407},[390,3612,3313],{"class":403},[390,3614,3316],{"class":995},[390,3616,1049],{"class":403},[390,3618,1052],{"class":407},[390,3620,3412],{"class":424},[390,3622,3454],{"class":407},[390,3624,3313],{"class":403},[390,3626,1115],{"class":995},[390,3628,1049],{"class":403},[390,3630,1052],{"class":407},[390,3632,3477],{"class":403},[390,3634,3635,3637],{"class":392,"line":468},[390,3636,619],{"class":403},[390,3638,458],{"class":407},[528,3640],{},[348,3642,3644],{"id":3643},"compatibilité-entre-syntaxes","Compatibilité entre syntaxes",[352,3646,3647,1794,3649,3651],{},[387,3648,577],{},[387,3650,207],{}," sont 100% interchangeables :",[380,3653,3655],{"className":382,"code":3654,"language":384,"meta":385,"style":385},"// Écriture avec List\nawait client.fetchQuery\u003CUser>(\n  key: ['users', 123],\n  fetcher: () => fetchUser(123),\n);\n\n// Cache hit avec QoraKey (même entrée)\nawait client.fetchQuery\u003CUser>(\n  key: QoraKey.withId('users', 123),\n  fetcher: () => throw Exception('Non appelé'),\n);\n\n// Invalidation avec l'une ou l'autre forme\nclient.invalidate(['users', 123]);\nclient.invalidate(QoraKey.withId('users', 123));\n",[387,3656,3657,3662,3678,3697,3718,3724,3728,3733,3749,3773,3798,3804,3808,3813,3833],{"__ignoreMap":385},[390,3658,3659],{"class":392,"line":393},[390,3660,3661],{"class":396},"// Écriture avec List\n",[390,3663,3664,3666,3668,3670,3672,3674,3676],{"class":392,"line":400},[390,3665,2856],{"class":563},[390,3667,567],{"class":403},[390,3669,408],{"class":407},[390,3671,412],{"class":411},[390,3673,574],{"class":403},[390,3675,582],{"class":487},[390,3677,658],{"class":403},[390,3679,3680,3682,3684,3686,3688,3690,3693,3695],{"class":392,"line":461},[390,3681,590],{"class":403},[390,3683,418],{"class":407},[390,3685,421],{"class":403},[390,3687,425],{"class":424},[390,3689,428],{"class":407},[390,3691,3692],{"class":995}," 123",[390,3694,599],{"class":403},[390,3696,602],{"class":407},[390,3698,3699,3701,3703,3705,3707,3709,3711,3714,3716],{"class":392,"line":468},[390,3700,607],{"class":403},[390,3702,418],{"class":407},[390,3704,441],{"class":403},[390,3706,444],{"class":407},[390,3708,759],{"class":411},[390,3710,496],{"class":403},[390,3712,3713],{"class":995},"123",[390,3715,619],{"class":403},[390,3717,602],{"class":407},[390,3719,3720,3722],{"class":392,"line":474},[390,3721,619],{"class":403},[390,3723,458],{"class":407},[390,3725,3726],{"class":392,"line":624},[390,3727,465],{"emptyLinePlaceholder":464},[390,3729,3730],{"class":392,"line":629},[390,3731,3732],{"class":396},"// Cache hit avec QoraKey (même entrée)\n",[390,3734,3735,3737,3739,3741,3743,3745,3747],{"class":392,"line":635},[390,3736,2856],{"class":563},[390,3738,567],{"class":403},[390,3740,408],{"class":407},[390,3742,412],{"class":411},[390,3744,574],{"class":403},[390,3746,582],{"class":487},[390,3748,658],{"class":403},[390,3750,3751,3753,3755,3757,3759,3761,3763,3765,3767,3769,3771],{"class":392,"line":661},[390,3752,590],{"class":403},[390,3754,418],{"class":407},[390,3756,488],{"class":487},[390,3758,408],{"class":407},[390,3760,493],{"class":411},[390,3762,496],{"class":403},[390,3764,425],{"class":424},[390,3766,428],{"class":407},[390,3768,3692],{"class":995},[390,3770,619],{"class":403},[390,3772,602],{"class":407},[390,3774,3775,3777,3779,3781,3783,3786,3789,3791,3794,3796],{"class":392,"line":677},[390,3776,607],{"class":403},[390,3778,418],{"class":407},[390,3780,441],{"class":403},[390,3782,444],{"class":407},[390,3784,3785],{"class":563}," throw",[390,3787,3788],{"class":487}," Exception",[390,3790,496],{"class":403},[390,3792,3793],{"class":424},"'Non appelé'",[390,3795,619],{"class":403},[390,3797,602],{"class":407},[390,3799,3800,3802],{"class":392,"line":689},[390,3801,619],{"class":403},[390,3803,458],{"class":407},[390,3805,3806],{"class":392,"line":1950},[390,3807,465],{"emptyLinePlaceholder":464},[390,3809,3810],{"class":392,"line":1956},[390,3811,3812],{"class":396},"// Invalidation avec l'une ou l'autre forme\n",[390,3814,3815,3817,3819,3821,3823,3825,3827,3829,3831],{"class":392,"line":1961},[390,3816,404],{"class":403},[390,3818,408],{"class":407},[390,3820,3353],{"class":411},[390,3822,2500],{"class":403},[390,3824,425],{"class":424},[390,3826,428],{"class":407},[390,3828,3692],{"class":995},[390,3830,2516],{"class":403},[390,3832,458],{"class":407},[390,3834,3835,3837,3839,3841,3843,3845,3847,3849,3851,3853,3855,3857,3860],{"class":392,"line":1967},[390,3836,404],{"class":403},[390,3838,408],{"class":407},[390,3840,3353],{"class":411},[390,3842,496],{"class":403},[390,3844,207],{"class":487},[390,3846,408],{"class":407},[390,3848,493],{"class":411},[390,3850,496],{"class":403},[390,3852,425],{"class":424},[390,3854,428],{"class":407},[390,3856,3692],{"class":995},[390,3858,3859],{"class":403},"))",[390,3861,458],{"class":407},[528,3863],{},[348,3865,3867],{"id":3866},"considérations-de-performance","Considérations de performance",[352,3869,3870],{},"Chaque clé est copiée en profondeur et rendue immuable à l'ingestion. Modifier la liste originale après l'avoir passée n'a aucun effet :",[380,3872,3874],{"className":382,"code":3873,"language":384,"meta":385,"style":385},"final key = ['users', 123];\nclient.fetchQuery(key: key, fetcher: () => fetchUser(123));\nkey.add('extra'); // Sans effet : la copie interne est déjà immuable\n",[387,3875,3876,3896,3930],{"__ignoreMap":385},[390,3877,3878,3880,3882,3884,3886,3888,3890,3892,3894],{"class":392,"line":393},[390,3879,554],{"class":553},[390,3881,2493],{"class":403},[390,3883,560],{"class":407},[390,3885,421],{"class":403},[390,3887,425],{"class":424},[390,3889,428],{"class":407},[390,3891,3692],{"class":995},[390,3893,599],{"class":403},[390,3895,458],{"class":407},[390,3897,3898,3900,3902,3904,3906,3908,3910,3912,3914,3916,3918,3920,3922,3924,3926,3928],{"class":392,"line":400},[390,3899,404],{"class":403},[390,3901,408],{"class":407},[390,3903,412],{"class":411},[390,3905,415],{"class":403},[390,3907,418],{"class":407},[390,3909,3402],{"class":403},[390,3911,428],{"class":407},[390,3913,436],{"class":403},[390,3915,418],{"class":407},[390,3917,441],{"class":403},[390,3919,444],{"class":407},[390,3921,759],{"class":411},[390,3923,496],{"class":403},[390,3925,3713],{"class":995},[390,3927,3859],{"class":403},[390,3929,458],{"class":407},[390,3931,3932,3935,3937,3940,3942,3945,3947,3950],{"class":392,"line":461},[390,3933,3934],{"class":403},"key",[390,3936,408],{"class":407},[390,3938,3939],{"class":411},"add",[390,3941,496],{"class":403},[390,3943,3944],{"class":424},"'extra'",[390,3946,619],{"class":403},[390,3948,3949],{"class":407},";",[390,3951,3952],{"class":396}," // Sans effet : la copie interne est déjà immuable\n",[352,3954,3955,3956,3959],{},"Pour les clés statiques fréquemment référencées, les déclarer ",[387,3957,3958],{},"const"," pour éliminer les allocations répétées :",[380,3961,3963],{"className":382,"code":3962,"language":384,"meta":385,"style":385},"class QueryKeys {\n  static const settings = QoraKey(['settings']);\n  static const currentUser = QoraKey(['users', 'current']);\n}\n",[387,3964,3965,3973,3993,4017],{"__ignoreMap":385},[390,3966,3967,3969,3971],{"class":392,"line":393},[390,3968,1831],{"class":407},[390,3970,2575],{"class":487},[390,3972,1843],{"class":403},[390,3974,3975,3977,3979,3981,3983,3985,3987,3989,3991],{"class":392,"line":400},[390,3976,2603],{"class":553},[390,3978,2606],{"class":553},[390,3980,640],{"class":403},[390,3982,560],{"class":407},[390,3984,488],{"class":487},[390,3986,2500],{"class":403},[390,3988,670],{"class":424},[390,3990,2516],{"class":403},[390,3992,458],{"class":407},[390,3994,3995,3997,3999,4001,4003,4005,4007,4009,4011,4013,4015],{"class":392,"line":461},[390,3996,2603],{"class":553},[390,3998,2606],{"class":553},[390,4000,2629],{"class":403},[390,4002,560],{"class":407},[390,4004,488],{"class":487},[390,4006,2500],{"class":403},[390,4008,425],{"class":424},[390,4010,428],{"class":407},[390,4012,2642],{"class":424},[390,4014,2516],{"class":403},[390,4016,458],{"class":407},[390,4018,4019],{"class":392,"line":468},[390,4020,1953],{"class":403},[352,4022,4023],{},"Conserver des clés peu profondes. Les maps nécessitent un tri pour les vérifications d'égalité. Une imbrication au-delà de trois niveaux ajoute une surcharge sans bénéfice.",[528,4025],{},[348,4027,4029],{"id":4028},"résumé-des-bonnes-pratiques","Résumé des bonnes pratiques",[535,4031,4033],{"id":4032},"à-faire","À faire",[380,4035,4037],{"className":382,"code":4036,"language":384,"meta":385,"style":385},"// Primitifs\n['users', 123, 'profile']\n\n// Maps pour les filtres\n['posts', {'status': 'published', 'limit': 10}]\n\n// Structure hiérarchique pour l'invalidation en lot\n['entity', id, 'relation']\n\n// Factories centralisées\nQueryKeys.user(userId)\n\n// const pour les clés statiques\nstatic const settings = QoraKey(['settings']);\n",[387,4038,4039,4044,4060,4064,4069,4095,4099,4104,4122,4126,4131,4143,4147,4152],{"__ignoreMap":385},[390,4040,4041],{"class":392,"line":393},[390,4042,4043],{"class":396},"// Primitifs\n",[390,4045,4046,4048,4050,4052,4054,4056,4058],{"class":392,"line":400},[390,4047,900],{"class":403},[390,4049,425],{"class":424},[390,4051,428],{"class":407},[390,4053,3692],{"class":995},[390,4055,428],{"class":407},[390,4057,912],{"class":424},[390,4059,915],{"class":403},[390,4061,4062],{"class":392,"line":461},[390,4063,465],{"emptyLinePlaceholder":464},[390,4065,4066],{"class":392,"line":468},[390,4067,4068],{"class":396},"// Maps pour les filtres\n",[390,4070,4071,4073,4075,4077,4079,4081,4083,4085,4087,4089,4091,4093],{"class":392,"line":474},[390,4072,900],{"class":403},[390,4074,818],{"class":424},[390,4076,428],{"class":407},[390,4078,823],{"class":403},[390,4080,826],{"class":424},[390,4082,418],{"class":407},[390,4084,831],{"class":424},[390,4086,428],{"class":407},[390,4088,1001],{"class":424},[390,4090,418],{"class":407},[390,4092,1234],{"class":995},[390,4094,1009],{"class":403},[390,4096,4097],{"class":392,"line":624},[390,4098,465],{"emptyLinePlaceholder":464},[390,4100,4101],{"class":392,"line":629},[390,4102,4103],{"class":396},"// Structure hiérarchique pour l'invalidation en lot\n",[390,4105,4106,4108,4111,4113,4115,4117,4120],{"class":392,"line":635},[390,4107,900],{"class":403},[390,4109,4110],{"class":424},"'entity'",[390,4112,428],{"class":407},[390,4114,3263],{"class":403},[390,4116,428],{"class":407},[390,4118,4119],{"class":424}," 'relation'",[390,4121,915],{"class":403},[390,4123,4124],{"class":392,"line":661},[390,4125,465],{"emptyLinePlaceholder":464},[390,4127,4128],{"class":392,"line":677},[390,4129,4130],{"class":396},"// Factories centralisées\n",[390,4132,4133,4136,4138,4140],{"class":392,"line":689},[390,4134,4135],{"class":487},"QueryKeys",[390,4137,408],{"class":407},[390,4139,2882],{"class":411},[390,4141,4142],{"class":403},"(userId)\n",[390,4144,4145],{"class":392,"line":1950},[390,4146,465],{"emptyLinePlaceholder":464},[390,4148,4149],{"class":392,"line":1956},[390,4150,4151],{"class":396},"// const pour les clés statiques\n",[390,4153,4154,4157,4159,4161,4163,4165,4167,4169,4171],{"class":392,"line":1961},[390,4155,4156],{"class":553},"static",[390,4158,2606],{"class":553},[390,4160,640],{"class":403},[390,4162,560],{"class":407},[390,4164,488],{"class":487},[390,4166,2500],{"class":403},[390,4168,670],{"class":424},[390,4170,2516],{"class":403},[390,4172,458],{"class":407},[535,4174,4176],{"id":4175},"à-éviter","À éviter",[380,4178,4180],{"className":382,"code":4179,"language":384,"meta":385,"style":385},"// Instances non sérialisables\n['users', StreamController()]\n\n// Valeurs non déterministes\n['posts', DateTime.now()]\n\n// Imbrication excessive\n['a', ['b', ['c', ['d']]]]\n\n// Objets sans surcharge ==\n['filter', UnequatableClass()]\n",[387,4181,4182,4187,4200,4204,4209,4225,4229,4234,4261,4265,4270],{"__ignoreMap":385},[390,4183,4184],{"class":392,"line":393},[390,4185,4186],{"class":396},"// Instances non sérialisables\n",[390,4188,4189,4191,4193,4195,4197],{"class":392,"line":400},[390,4190,900],{"class":403},[390,4192,425],{"class":424},[390,4194,428],{"class":407},[390,4196,1630],{"class":487},[390,4198,4199],{"class":403},"()]\n",[390,4201,4202],{"class":392,"line":461},[390,4203,465],{"emptyLinePlaceholder":464},[390,4205,4206],{"class":392,"line":468},[390,4207,4208],{"class":396},"// Valeurs non déterministes\n",[390,4210,4211,4213,4215,4217,4219,4221,4223],{"class":392,"line":474},[390,4212,900],{"class":403},[390,4214,818],{"class":424},[390,4216,428],{"class":407},[390,4218,1670],{"class":487},[390,4220,408],{"class":407},[390,4222,1675],{"class":411},[390,4224,4199],{"class":403},[390,4226,4227],{"class":392,"line":624},[390,4228,465],{"emptyLinePlaceholder":464},[390,4230,4231],{"class":392,"line":629},[390,4232,4233],{"class":396},"// Imbrication excessive\n",[390,4235,4236,4238,4240,4242,4244,4246,4248,4250,4252,4254,4256,4258],{"class":392,"line":635},[390,4237,900],{"class":403},[390,4239,1721],{"class":424},[390,4241,428],{"class":407},[390,4243,421],{"class":403},[390,4245,1728],{"class":424},[390,4247,428],{"class":407},[390,4249,421],{"class":403},[390,4251,1735],{"class":424},[390,4253,428],{"class":407},[390,4255,421],{"class":403},[390,4257,1742],{"class":424},[390,4259,4260],{"class":403},"]]]]\n",[390,4262,4263],{"class":392,"line":661},[390,4264,465],{"emptyLinePlaceholder":464},[390,4266,4267],{"class":392,"line":677},[390,4268,4269],{"class":396},"// Objets sans surcharge ==\n",[390,4271,4272,4274,4277,4279,4282],{"class":392,"line":689},[390,4273,900],{"class":403},[390,4275,4276],{"class":424},"'filter'",[390,4278,428],{"class":407},[390,4280,4281],{"class":487}," UnequatableClass",[390,4283,4199],{"class":403},[528,4285],{},[348,4287,4289],{"id":4288},"diagnostic","Diagnostic",[535,4291,4293],{"id":4292},"le-cache-rate-toujours","Le cache rate toujours",[352,4295,4296,4299],{},[356,4297,4298],{},"Symptôme"," : chaque fetch déclenche une requête réseau.",[352,4301,4302,4304,4305,1794,4307,408],{},[356,4303,4289],{}," : les objets personnalisés dans la clé ne surchargent pas ",[387,4306,1052],{},[387,4308,1797],{},[380,4310,4312],{"className":382,"code":4311,"language":384,"meta":385,"style":385},"// Vérifier l'égalité des clés\nprint(['users', customObject1] == ['users', customObject2]);\n// Doit afficher true si les objets représentent les mêmes données\n",[387,4313,4314,4319,4346],{"__ignoreMap":385},[390,4315,4316],{"class":392,"line":393},[390,4317,4318],{"class":396},"// Vérifier l'égalité des clés\n",[390,4320,4321,4324,4326,4328,4330,4333,4335,4337,4339,4341,4344],{"class":392,"line":400},[390,4322,4323],{"class":411},"print",[390,4325,2500],{"class":403},[390,4327,425],{"class":424},[390,4329,428],{"class":407},[390,4331,4332],{"class":403}," customObject1] ",[390,4334,1052],{"class":407},[390,4336,421],{"class":403},[390,4338,425],{"class":424},[390,4340,428],{"class":407},[390,4342,4343],{"class":403}," customObject2])",[390,4345,458],{"class":407},[390,4347,4348],{"class":392,"line":461},[390,4349,4350],{"class":396},"// Doit afficher true si les objets représentent les mêmes données\n",[352,4352,4353,4356,4357,1794,4359,4361,4362,408],{},[356,4354,4355],{},"Correctif"," : ajouter les surcharges ",[387,4358,1052],{},[387,4360,1797],{},", ou utiliser ",[387,4363,4364],{},"Equatable",[528,4366],{},[535,4368,4370],{"id":4369},"argumenterror-sur-la-clé","ArgumentError sur la clé",[352,4372,4373,4375,4376],{},[356,4374,4298],{}," : ",[387,4377,4378],{},"ArgumentError: Key must be QoraKey or List\u003Cdynamic>",[352,4380,4381,4384,4385,4387,4388,4390],{},[356,4382,4383],{},"Cause"," : une valeur qui n'est ni ",[387,4386,577],{}," ni ",[387,4389,207],{}," a été passée comme clé.",[380,4392,4394],{"className":382,"code":4393,"language":384,"meta":385,"style":385},"client.fetchQuery(key: 'string', ...); // Incorrect\nclient.fetchQuery(key: ['string'], ...); // Correct\n",[387,4395,4396,4423],{"__ignoreMap":385},[390,4397,4398,4400,4402,4404,4406,4408,4411,4413,4416,4418,4420],{"class":392,"line":393},[390,4399,404],{"class":403},[390,4401,408],{"class":407},[390,4403,412],{"class":411},[390,4405,415],{"class":403},[390,4407,418],{"class":407},[390,4409,4410],{"class":424}," 'string'",[390,4412,428],{"class":407},[390,4414,4415],{"class":407}," ...",[390,4417,619],{"class":403},[390,4419,3949],{"class":407},[390,4421,4422],{"class":396}," // Incorrect\n",[390,4424,4425,4427,4429,4431,4433,4435,4437,4440,4442,4444,4446,4448,4450],{"class":392,"line":400},[390,4426,404],{"class":403},[390,4428,408],{"class":407},[390,4430,412],{"class":411},[390,4432,415],{"class":403},[390,4434,418],{"class":407},[390,4436,421],{"class":403},[390,4438,4439],{"class":424},"'string'",[390,4441,599],{"class":403},[390,4443,428],{"class":407},[390,4445,4415],{"class":407},[390,4447,619],{"class":403},[390,4449,3949],{"class":407},[390,4451,4452],{"class":396}," // Correct\n",[528,4454],{},[535,4456,4458],{"id":4457},"refetchs-inattendus","Refetchs inattendus",[352,4460,4461,4463],{},[356,4462,4298],{}," : la requête refetch alors que la clé semble identique.",[352,4465,4466,4468],{},[356,4467,4383],{}," : la clé contient une valeur non déterministe qui change à chaque build.",[380,4470,4472],{"className":382,"code":4471,"language":384,"meta":385,"style":385},"['posts', DateTime.now()] // Les rebuilds créent une nouvelle clé à chaque fois\n",[387,4473,4474],{"__ignoreMap":385},[390,4475,4476,4478,4480,4482,4484,4486,4488,4490],{"class":392,"line":393},[390,4477,900],{"class":403},[390,4479,818],{"class":424},[390,4481,428],{"class":407},[390,4483,1670],{"class":487},[390,4485,408],{"class":407},[390,4487,1675],{"class":411},[390,4489,1703],{"class":403},[390,4491,4492],{"class":396},"// Les rebuilds créent une nouvelle clé à chaque fois\n",[352,4494,4495,4497],{},[356,4496,4355],{}," : utiliser des valeurs stables et déterministes dans les clés.",[528,4499],{},[348,4501,4503],{"id":4502},"étapes-suivantes","Étapes suivantes",[361,4505,4506,4522,4528],{},[364,4507,4508,4512,4513,3115,4516,1794,4519],{},[4509,4510,62],"a",{"href":4511},"./query-states"," : Machine d'état ",[387,4514,4515],{},"Loading",[387,4517,4518],{},"Success",[387,4520,4521],{},"Failure",[364,4523,4524,4527],{},[4509,4525,67],{"href":4526},"./caching"," : LRU, GC et cycle de vie du cache",[364,4529,4530,4375,4533,3115,4535,1794,4538],{},[4509,4531,52],{"href":4532},"./queries",[387,4534,412],{},[387,4536,4537],{},"watchQuery",[387,4539,4540],{},"prefetch",[4542,4543,4544],"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":4546},[4547,4548,4553,4559,4563,4567,4571,4574,4580,4581,4582,4586,4591],{"id":350,"depth":400,"text":243},{"id":532,"depth":400,"text":533,"children":4549},[4550,4551,4552],{"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":4554},[4555,4556,4557,4558],{"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":4560},[4561,4562],{"id":1347,"depth":461,"text":1348},{"id":1610,"depth":461,"text":1611},{"id":1787,"depth":400,"text":1788,"children":4564},[4565,4566],{"id":1800,"depth":461,"text":1801},{"id":2066,"depth":461,"text":2067},{"id":2290,"depth":400,"text":2291,"children":4568},[4569,4570],{"id":2299,"depth":461,"text":2300},{"id":2521,"depth":461,"text":2522},{"id":2558,"depth":400,"text":2559,"children":4572},[4573],{"id":3018,"depth":461,"text":3019},{"id":3334,"depth":400,"text":3335,"children":4575},[4576,4577,4578,4579],{"id":3338,"depth":461,"text":3339},{"id":3367,"depth":461,"text":3368},{"id":3486,"depth":461,"text":3487},{"id":3570,"depth":461,"text":3571},{"id":3643,"depth":400,"text":3644},{"id":3866,"depth":400,"text":3867},{"id":4028,"depth":400,"text":4029,"children":4583},[4584,4585],{"id":4032,"depth":461,"text":4033},{"id":4175,"depth":461,"text":4176},{"id":4288,"depth":400,"text":4289,"children":4587},[4588,4589,4590],{"id":4292,"depth":461,"text":4293},{"id":4369,"depth":461,"text":4370},{"id":4457,"depth":461,"text":4458},{"id":4502,"depth":400,"text":4503},"Les clés de requête sont le fondement du système de cache de Qora. Elles identifient les requêtes de façon unique et permettent la gestion automatique du cache, l'invalidation et le refetch.","md",null,{},{"icon":60},{"title":57,"description":4592},"TdpqnXuC4gcHpEmyOEP8Zl5j8aNNyaDO8lSR9e0yRNw",[4600,4602],{"title":52,"path":53,"stem":54,"description":4601,"icon":55,"children":-1},"Les requêtes sont le fondement de Qora. Une requête est une demande asynchrone liée à une clé, avec cache automatique, déduplication, retries et state réactif.",{"title":62,"path":63,"stem":64,"description":4603,"icon":65,"children":-1},"Les états des requêtes représentent le cycle de vie des opérations de récupération de données. Qora utilise des classes scellées pour fournir une gestion des états exhaustive et sûre au niveau des types, éliminant des catégories entières d'erreurs à l'exécution.",1794040406970]