[{"data":1,"prerenderedAt":724},["ShallowReactive",2],{"navigation_docs_fr":3,"-fr-getting-started-ai-assistants":342,"-fr-getting-started-ai-assistants-surround":719},[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":40,"body":344,"description":713,"extension":505,"links":714,"meta":715,"navigation":716,"path":41,"seo":717,"stem":42,"__hash__":718},"docs_fr/fr/01.getting-started/8.ai-assistants.md",{"type":345,"value":346,"toc":708},"minimark",[347,370,375,387,390,419,422,498,501,561,564,568,571,630,633,637,693,704],[348,349,350,351,355,356,359,360,355,363,359,366,369],"p",{},"Les assistants de code connaissent bien mieux TanStack Query que Qora. Livrés à eux-mêmes, ils écrivent du code TanStack avec une syntaxe Dart : ",[352,353,354],"code",{},"queryFn"," au lieu de ",[352,357,358],{},"fetcher",", ",[352,361,362],{},"cacheTime",[352,364,365],{},"gcTime",[352,367,368],{},"state.when(...)",", qui n'existe pas. Deux fichiers corrigent l'essentiel : un court fichier de règles que l'assistant charge à chaque session, et la documentation dans un format qu'il sait lire.",[371,372,374],"h2",{"id":373},"_1-ajouter-les-règles-qora-au-projet","1. Ajouter les règles Qora au projet",[348,376,377,386],{},[378,379,383],"a",{"href":380,"rel":381},"https://qora.meragix.dev/qora-rules.md",[382],"nofollow",[352,384,385],{},"qora-rules.md"," est un résumé d'une page écrit pour les assistants. Il contient la configuration, le rendu des états, le comportement hors-ligne, les mutations et l'invalidation, ainsi qu'un tableau des erreurs les plus fréquentes des assistants, chacune avec la forme Qora correcte. Le fichier est en anglais, la langue que les assistants suivent le mieux.",[348,388,389],{},"Téléchargez-le à la racine du projet :",[391,392,398],"pre",{"className":393,"code":394,"filename":395,"language":396,"meta":397,"style":397},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","curl -o qora-rules.md https://qora.meragix.dev/qora-rules.md\n","Terminal","bash","",[352,399,400],{"__ignoreMap":397},[401,402,405,409,413,416],"span",{"class":403,"line":404},"line",1,[401,406,408],{"class":407},"sBMFI","curl",[401,410,412],{"class":411},"sfazB"," -o",[401,414,415],{"class":411}," qora-rules.md",[401,417,418],{"class":411}," https://qora.meragix.dev/qora-rules.md\n",[348,420,421],{},"Puis référencez-le depuis le fichier d'instructions que lit votre assistant :",[423,424,425,438],"table",{},[426,427,428],"thead",{},[429,430,431,435],"tr",{},[432,433,434],"th",{},"Assistant",[432,436,437],{},"Où",[439,440,441,457,469,480],"tbody",{},[429,442,443,447],{},[444,445,446],"td",{},"Claude Code",[444,448,449,450,453,454],{},"Ajouter la ligne ",[352,451,452],{},"@qora-rules.md"," dans ",[352,455,456],{},"CLAUDE.md",[429,458,459,462],{},[444,460,461],{},"Cursor",[444,463,464,465,468],{},"L'enregistrer sous ",[352,466,467],{},".cursor/rules/qora.mdc"," avec l'en-tête ci-dessous",[429,470,471,474],{},[444,472,473],{},"GitHub Copilot",[444,475,476,477],{},"Ajouter son contenu à ",[352,478,479],{},".github/copilot-instructions.md",[429,481,482,488],{},[444,483,484,485],{},"Codex et les autres outils qui lisent ",[352,486,487],{},"AGENTS.md",[444,489,476,490,492,493,495,496],{},[352,491,487],{},", ou demander dans ",[352,494,487],{}," de lire ",[352,497,385],{},[348,499,500],{},"Pour Cursor, le fichier commence par :",[391,502,506],{"className":503,"code":504,"filename":467,"language":505,"meta":397,"style":397},"language-md shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","---\ndescription: Qora server-state library rules\nglobs: \"**/*.dart\"\nalwaysApply: false\n---\n","md",[352,507,508,514,527,544,556],{"__ignoreMap":397},[401,509,510],{"class":403,"line":404},[401,511,513],{"class":512},"sMK4o","---\n",[401,515,517,521,524],{"class":403,"line":516},2,[401,518,520],{"class":519},"swJcz","description",[401,522,523],{"class":512},":",[401,525,526],{"class":411}," Qora server-state library rules\n",[401,528,530,533,535,538,541],{"class":403,"line":529},3,[401,531,532],{"class":519},"globs",[401,534,523],{"class":512},[401,536,537],{"class":512}," \"",[401,539,540],{"class":411},"**/*.dart",[401,542,543],{"class":512},"\"\n",[401,545,547,550,552],{"class":403,"line":546},4,[401,548,549],{"class":519},"alwaysApply",[401,551,523],{"class":512},[401,553,555],{"class":554},"sfNiH"," false\n",[401,557,559],{"class":403,"line":558},5,[401,560,513],{"class":512},[348,562,563],{},"Téléchargez-le à nouveau quand vous mettez Qora à jour : il indique la version qu'il décrit.",[371,565,567],{"id":566},"_2-donner-la-documentation-à-lassistant","2. Donner la documentation à l'assistant",[348,569,570],{},"La documentation est publiée dans des formats destinés aux modèles de langage :",[423,572,573,583],{},[426,574,575],{},[429,576,577,580],{},[432,578,579],{},"URL",[432,581,582],{},"Contenu",[439,584,585,599,613],{},[429,586,587,596],{},[444,588,589],{},[378,590,593],{"href":591,"rel":592},"https://qora.meragix.dev/llms.txt",[382],[352,594,595],{},"/llms.txt",[444,597,598],{},"Index de toutes les pages, avec une description d'une ligne",[429,600,601,610],{},[444,602,603],{},[378,604,607],{"href":605,"rel":606},"https://qora.meragix.dev/llms-full.txt",[382],[352,608,609],{},"/llms-full.txt",[444,611,612],{},"Toute la documentation anglaise dans un seul fichier",[429,614,615,620],{},[444,616,617],{},[352,618,619],{},"/raw/en/\u003Csection>/\u003Cpage>.md",[444,621,622,623],{},"N'importe quelle page en Markdown, par exemple ",[378,624,627],{"href":625,"rel":626},"https://qora.meragix.dev/raw/en/getting-started/quick-start.md",[382],[352,628,629],{},"/raw/en/getting-started/quick-start.md",[348,631,632],{},"Pour une tâche précise, donnez la ou les deux pages utiles plutôt que le fichier complet : un assistant suit mieux un contexte court et précis qu'un contexte long.",[371,634,636],{"id":635},"_3-vérifier-ce-quil-a-écrit","3. Vérifier ce qu'il a écrit",[638,639,640,652,672],"ul",{},[641,642,643,651],"li",{},[644,645,646,647,650],"strong",{},"Lancez ",[352,648,649],{},"dart analyze","."," Une méthode ou un paramètre inventé est une erreur de compilation : c'est le moyen le plus rapide de repérer une habitude TanStack.",[641,653,654,663,664,667,668,671],{},[644,655,656,657,660,661,650],{},"Cherchez un ",[352,658,659],{},"switch"," sur ",[352,662,211],{}," Un code qui teste ",[352,665,666],{},"state.isLoading"," avant de lire la donnée perd souvent le ",[352,669,670],{},"previousData"," conservé pendant les refetchs et les erreurs.",[641,673,674,677,678,681,682,685,686,689,690,650],{},[644,675,676],{},"Testez hors-ligne."," Le code généré à partir d'autres bibliothèques s'attend souvent à un ",[352,679,680],{},"Failure"," ou un ",[352,683,684],{},"Initial"," sans réseau. Qora se met en pause : ",[352,687,688],{},"Loading"," avec ",[352,691,692],{},"FetchStatus.paused",[348,694,695,696,699,700,703],{},"En cas de doute, comparez avec le ",[378,697,21],{"href":698},"./quick-start",", qui fonctionne tel quel, ou demandez à l'assistant de lire ",[378,701,30],{"href":702},"./coming-from-tanstack-query",", qui fait correspondre chaque option.",[705,706,707],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":397,"searchDepth":516,"depth":516,"links":709},[710,711,712],{"id":373,"depth":516,"text":374},{"id":566,"depth":516,"text":567},{"id":635,"depth":516,"text":636},"Donner à Claude, Cursor, Copilot ou tout assistant de code le contexte nécessaire pour écrire du code Qora correct.",null,{},{"icon":43},{"title":40,"description":713},"FiK4ouXeSgAmuzlqVemf6JR5xv_ghmRI5NW4VVQZpjE",[720,722],{"title":35,"path":36,"stem":37,"description":721,"icon":38,"children":-1},"Faire correspondre les concepts de flutter_query et cached_query à Qora et migrer écran par écran.",{"title":52,"path":53,"stem":54,"description":723,"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.",1794040406840]