[{"data":1,"prerenderedAt":1170},["ShallowReactive",2],{"page-\u002Fsupabase\u002Flire-et-ecrire":3,"pieces-supabase":1127,"autour-\u002Fsupabase\u002Flire-et-ecrire":1152,"prerequis-\u002Fsupabase\u002Flire-et-ecrire":1157,"plan-supabase":1159},{"id":4,"title":5,"body":6,"description":1100,"extension":1101,"ligne":1102,"meta":1103,"motsCles":1104,"navigation":785,"niveau":1106,"path":1107,"prerequis":1108,"ressources":1110,"seo":1121,"sources":1122,"stem":1125,"__hash__":1126},"docs\u002Fsupabase\u002F03.lire-et-ecrire.md","Lire et écrire des données",{"type":7,"value":8,"toc":1088},"minimark",[9,14,48,52,60,136,149,155,183,187,194,234,241,245,251,354,357,411,422,426,479,489,495,555,559,624,636,645,649,706,709,713,716,989,998,1002,1005,1022,1025,1029,1084],[10,11,13],"h2",{"id":12},"ce-que-tu-vas-apprendre","Ce que tu vas apprendre",[15,16,17,26,41],"ul",{},[18,19,20,21,25],"li",{},"Lire des lignes avec ",[22,23,24],"code",{},"select",", les filtrer et les trier.",[18,27,28,29,32,33,36,37,40],{},"Ajouter, modifier et supprimer avec ",[22,30,31],{},"insert",", ",[22,34,35],{},"update"," et ",[22,38,39],{},"delete",".",[18,42,43,44,47],{},"Lire le résultat ",[22,45,46],{},"{ data, error }"," de chaque appel.",[10,49,51],{"id":50},"le-principe-une-chaîne-dappels","Le principe : une chaîne d'appels",[53,54,55,56,59],"p",{},"Chaque requête du client suit le même schéma : on choisit la table avec ",[22,57,58],{},"from",", l'opération, puis des filtres.",[61,62,67],"pre",{"className":63,"code":64,"language":65,"meta":66,"style":66},"language-ts shiki shiki-themes github-light-default github-dark-default github-dark-default","const { data, error } = await supabase\n  .from('recettes')\n  .select('id, titre, duree_minutes')\n","ts","",[22,68,69,103,122],{"__ignoreMap":66},[70,71,74,78,82,86,88,91,94,97,100],"span",{"class":72,"line":73},"line",1,[70,75,77],{"class":76},"sOnC1","const",[70,79,81],{"class":80},"scfrF"," { ",[70,83,85],{"class":84},"s5iOY","data",[70,87,32],{"class":80},[70,89,90],{"class":84},"error",[70,92,93],{"class":80}," } ",[70,95,96],{"class":76},"=",[70,98,99],{"class":76}," await",[70,101,102],{"class":80}," supabase\n",[70,104,106,109,112,115,119],{"class":72,"line":105},2,[70,107,108],{"class":80},"  .",[70,110,58],{"class":111},"syCW7",[70,113,114],{"class":80},"(",[70,116,118],{"class":117},"shWOn","'recettes'",[70,120,121],{"class":80},")\n",[70,123,125,127,129,131,134],{"class":72,"line":124},3,[70,126,108],{"class":80},[70,128,24],{"class":111},[70,130,114],{"class":80},[70,132,133],{"class":117},"'id, titre, duree_minutes'",[70,135,121],{"class":80},[53,137,138,139,142,143,145,146,40],{},"Le résultat est toujours un objet à deux champs. ",[140,141,85],"strong",{}," contient les lignes en cas de succès. ",[140,144,90],{}," contient le problème en cas d'échec, sinon ",[22,147,148],{},"null",[53,150,151,152,154],{},"Le client renvoie l'erreur dans ",[22,153,90],{}," : c'est à toi de la vérifier.",[61,156,158],{"className":63,"code":157,"language":65,"meta":66,"style":66},"if (error) {\n  console.error(error.message)\n}\n",[22,159,160,168,178],{"__ignoreMap":66},[70,161,162,165],{"class":72,"line":73},[70,163,164],{"class":76},"if",[70,166,167],{"class":80}," (error) {\n",[70,169,170,173,175],{"class":72,"line":105},[70,171,172],{"class":80},"  console.",[70,174,90],{"class":111},[70,176,177],{"class":80},"(error.message)\n",[70,179,180],{"class":72,"line":124},[70,181,182],{"class":80},"}\n",[10,184,186],{"id":185},"lire-avec-select","Lire avec select",[53,188,189,190,193],{},"Sans argument, ",[22,191,192],{},"select()"," renvoie toutes les colonnes. En listant des colonnes, tu ne demandes que ce qui sert :",[61,195,197],{"className":63,"code":196,"language":65,"meta":66,"style":66},"const { data } = await supabase.from('recettes').select('titre')\n",[22,198,199],{"__ignoreMap":66},[70,200,201,203,205,207,209,211,213,216,218,220,222,225,227,229,232],{"class":72,"line":73},[70,202,77],{"class":76},[70,204,81],{"class":80},[70,206,85],{"class":84},[70,208,93],{"class":80},[70,210,96],{"class":76},[70,212,99],{"class":76},[70,214,215],{"class":80}," supabase.",[70,217,58],{"class":111},[70,219,114],{"class":80},[70,221,118],{"class":117},[70,223,224],{"class":80},").",[70,226,24],{"class":111},[70,228,114],{"class":80},[70,230,231],{"class":117},"'titre'",[70,233,121],{"class":80},[53,235,236,237,240],{},"Ces appels sont asynchrones, d'où le ",[22,238,239],{},"await",". Ils font des allers-retours sur Internet, donc un résultat n'arrive jamais instantanément.",[10,242,244],{"id":243},"filtrer-trier-limiter","Filtrer, trier, limiter",[53,246,247,248,250],{},"Des méthodes se chaînent après ",[22,249,24],{}," :",[61,252,254],{"className":63,"code":253,"language":65,"meta":66,"style":66},"const { data } = await supabase\n  .from('recettes')\n  .select('id, titre')\n  .eq('duree_minutes', 30)\n  .order('created_at', { ascending: false })\n  .limit(10)\n",[22,255,256,272,284,297,317,339],{"__ignoreMap":66},[70,257,258,260,262,264,266,268,270],{"class":72,"line":73},[70,259,77],{"class":76},[70,261,81],{"class":80},[70,263,85],{"class":84},[70,265,93],{"class":80},[70,267,96],{"class":76},[70,269,99],{"class":76},[70,271,102],{"class":80},[70,273,274,276,278,280,282],{"class":72,"line":105},[70,275,108],{"class":80},[70,277,58],{"class":111},[70,279,114],{"class":80},[70,281,118],{"class":117},[70,283,121],{"class":80},[70,285,286,288,290,292,295],{"class":72,"line":124},[70,287,108],{"class":80},[70,289,24],{"class":111},[70,291,114],{"class":80},[70,293,294],{"class":117},"'id, titre'",[70,296,121],{"class":80},[70,298,300,302,305,307,310,312,315],{"class":72,"line":299},4,[70,301,108],{"class":80},[70,303,304],{"class":111},"eq",[70,306,114],{"class":80},[70,308,309],{"class":117},"'duree_minutes'",[70,311,32],{"class":80},[70,313,314],{"class":84},"30",[70,316,121],{"class":80},[70,318,320,322,325,327,330,333,336],{"class":72,"line":319},5,[70,321,108],{"class":80},[70,323,324],{"class":111},"order",[70,326,114],{"class":80},[70,328,329],{"class":117},"'created_at'",[70,331,332],{"class":80},", { ascending: ",[70,334,335],{"class":84},"false",[70,337,338],{"class":80}," })\n",[70,340,342,344,347,349,352],{"class":72,"line":341},6,[70,343,108],{"class":80},[70,345,346],{"class":111},"limit",[70,348,114],{"class":80},[70,350,351],{"class":84},"10",[70,353,121],{"class":80},[53,355,356],{},"Dans l'ordre : les recettes de 30 minutes, les plus récentes d'abord, dix au maximum.",[358,359,360,373],"table",{},[361,362,363],"thead",{},[364,365,366,370],"tr",{},[367,368,369],"th",{},"Méthode",[367,371,372],{},"Effet",[374,375,376,387,397],"tbody",{},[364,377,378,384],{},[379,380,381],"td",{},[22,382,383],{},"eq('colonne', valeur)",[379,385,386],{},"Garde les lignes dont la colonne vaut la valeur.",[364,388,389,394],{},[379,390,391],{},[22,392,393],{},"order('colonne')",[379,395,396],{},"Trie, croissant par défaut.",[364,398,399,404],{},[379,400,401],{},[22,402,403],{},"limit(n)",[379,405,406,407,410],{},"Garde au plus ",[22,408,409],{},"n"," lignes.",[53,412,413,414,417,418,421],{},"D'autres filtres existent, comme ",[22,415,416],{},"gt"," (plus grand que) ou ",[22,419,420],{},"ilike"," (recherche de texte), décrits dans la référence.",[10,423,425],{"id":424},"ajouter-avec-insert","Ajouter avec insert",[61,427,429],{"className":63,"code":428,"language":65,"meta":66,"style":66},"const { error } = await supabase\n  .from('recettes')\n  .insert({ titre: 'Crêpes', duree_minutes: 20 })\n",[22,430,431,447,459],{"__ignoreMap":66},[70,432,433,435,437,439,441,443,445],{"class":72,"line":73},[70,434,77],{"class":76},[70,436,81],{"class":80},[70,438,90],{"class":84},[70,440,93],{"class":80},[70,442,96],{"class":76},[70,444,99],{"class":76},[70,446,102],{"class":80},[70,448,449,451,453,455,457],{"class":72,"line":105},[70,450,108],{"class":80},[70,452,58],{"class":111},[70,454,114],{"class":80},[70,456,118],{"class":117},[70,458,121],{"class":80},[70,460,461,463,465,468,471,474,477],{"class":72,"line":124},[70,462,108],{"class":80},[70,464,31],{"class":111},[70,466,467],{"class":80},"({ titre: ",[70,469,470],{"class":117},"'Crêpes'",[70,472,473],{"class":80},", duree_minutes: ",[70,475,476],{"class":84},"20",[70,478,338],{"class":80},[53,480,481,482,36,485,488],{},"Un objet ajoute une ligne, un tableau d'objets en ajoute plusieurs. Les colonnes ",[22,483,484],{},"id",[22,486,487],{},"created_at"," se remplissent toutes seules.",[53,490,491,492,250],{},"Par défaut, les lignes ajoutées ne sont pas renvoyées. Pour les récupérer, chaîne ",[22,493,494],{},".select()",[61,496,498],{"className":63,"code":497,"language":65,"meta":66,"style":66},"const { data } = await supabase\n  .from('recettes')\n  .insert({ titre: 'Gratin dauphinois', duree_minutes: 90 })\n  .select()\n",[22,499,500,516,528,546],{"__ignoreMap":66},[70,501,502,504,506,508,510,512,514],{"class":72,"line":73},[70,503,77],{"class":76},[70,505,81],{"class":80},[70,507,85],{"class":84},[70,509,93],{"class":80},[70,511,96],{"class":76},[70,513,99],{"class":76},[70,515,102],{"class":80},[70,517,518,520,522,524,526],{"class":72,"line":105},[70,519,108],{"class":80},[70,521,58],{"class":111},[70,523,114],{"class":80},[70,525,118],{"class":117},[70,527,121],{"class":80},[70,529,530,532,534,536,539,541,544],{"class":72,"line":124},[70,531,108],{"class":80},[70,533,31],{"class":111},[70,535,467],{"class":80},[70,537,538],{"class":117},"'Gratin dauphinois'",[70,540,473],{"class":80},[70,542,543],{"class":84},"90",[70,545,338],{"class":80},[70,547,548,550,552],{"class":72,"line":299},[70,549,108],{"class":80},[70,551,24],{"class":111},[70,553,554],{"class":80},"()\n",[10,556,558],{"id":557},"modifier-avec-update","Modifier avec update",[61,560,562],{"className":63,"code":561,"language":65,"meta":66,"style":66},"const { error } = await supabase\n  .from('recettes')\n  .update({ duree_minutes: 25 })\n  .eq('id', 1)\n",[22,563,564,580,592,606],{"__ignoreMap":66},[70,565,566,568,570,572,574,576,578],{"class":72,"line":73},[70,567,77],{"class":76},[70,569,81],{"class":80},[70,571,90],{"class":84},[70,573,93],{"class":80},[70,575,96],{"class":76},[70,577,99],{"class":76},[70,579,102],{"class":80},[70,581,582,584,586,588,590],{"class":72,"line":105},[70,583,108],{"class":80},[70,585,58],{"class":111},[70,587,114],{"class":80},[70,589,118],{"class":117},[70,591,121],{"class":80},[70,593,594,596,598,601,604],{"class":72,"line":124},[70,595,108],{"class":80},[70,597,35],{"class":111},[70,599,600],{"class":80},"({ duree_minutes: ",[70,602,603],{"class":84},"25",[70,605,338],{"class":80},[70,607,608,610,612,614,617,619,622],{"class":72,"line":299},[70,609,108],{"class":80},[70,611,304],{"class":111},[70,613,114],{"class":80},[70,615,616],{"class":117},"'id'",[70,618,32],{"class":80},[70,620,621],{"class":84},"1",[70,623,121],{"class":80},[625,626,627],"warning",{},[53,628,629,630,632,633,635],{},"Un ",[22,631,35],{}," sans ",[22,634,304],{}," vise toute la table. Pense à toujours dire quelle ligne tu modifies.",[53,637,638,639,641,642,644],{},"Comme pour ",[22,640,31],{},", ajoute ",[22,643,494],{}," après le filtre pour recevoir les lignes modifiées.",[10,646,648],{"id":647},"supprimer-avec-delete","Supprimer avec delete",[61,650,652],{"className":63,"code":651,"language":65,"meta":66,"style":66},"const { error } = await supabase\n  .from('recettes')\n  .delete()\n  .eq('id', 1)\n",[22,653,654,670,682,690],{"__ignoreMap":66},[70,655,656,658,660,662,664,666,668],{"class":72,"line":73},[70,657,77],{"class":76},[70,659,81],{"class":80},[70,661,90],{"class":84},[70,663,93],{"class":80},[70,665,96],{"class":76},[70,667,99],{"class":76},[70,669,102],{"class":80},[70,671,672,674,676,678,680],{"class":72,"line":105},[70,673,108],{"class":80},[70,675,58],{"class":111},[70,677,114],{"class":80},[70,679,118],{"class":117},[70,681,121],{"class":80},[70,683,684,686,688],{"class":72,"line":124},[70,685,108],{"class":80},[70,687,39],{"class":111},[70,689,554],{"class":80},[70,691,692,694,696,698,700,702,704],{"class":72,"line":299},[70,693,108],{"class":80},[70,695,304],{"class":111},[70,697,114],{"class":80},[70,699,616],{"class":117},[70,701,32],{"class":80},[70,703,621],{"class":84},[70,705,121],{"class":80},[53,707,708],{},"Même précaution : sans filtre, la suppression concerne toutes les lignes que tu as le droit d'effacer. Une suppression ne se rattrape pas.",[10,710,712],{"id":711},"un-exemple-complet-dans-une-page","Un exemple complet dans une page",[53,714,715],{},"Un formulaire qui ajoute une recette puis recharge la liste :",[61,717,722],{"className":718,"code":719,"filename":720,"language":721,"meta":66,"style":66},"language-vue shiki shiki-themes github-light-default github-dark-default github-dark-default","\u003Cscript setup lang=\"ts\">\nconst supabase = useSupabaseClient()\nconst titre = ref('')\n\nconst { data: recettes, refresh } = await useAsyncData('recettes', async () => {\n  const { data } = await supabase.from('recettes').select('id, titre')\n  return data\n})\n\nasync function ajouter() {\n  const { error } = await supabase.from('recettes').insert({ titre: titre.value })\n  if (!error) {\n    titre.value = ''\n    await refresh()\n  }\n}\n\u003C\u002Fscript>\n","app\u002Fpages\u002Frecettes.vue","vue",[22,723,724,747,762,781,787,834,867,876,882,887,901,931,946,957,968,974,979],{"__ignoreMap":66},[70,725,726,729,733,736,739,741,744],{"class":72,"line":73},[70,727,728],{"class":80},"\u003C",[70,730,732],{"class":731},"s5JFL","script",[70,734,735],{"class":84}," setup",[70,737,738],{"class":84}," lang",[70,740,96],{"class":80},[70,742,743],{"class":117},"\"ts\"",[70,745,746],{"class":80},">\n",[70,748,749,751,754,757,760],{"class":72,"line":105},[70,750,77],{"class":76},[70,752,753],{"class":84}," supabase",[70,755,756],{"class":76}," =",[70,758,759],{"class":111}," useSupabaseClient",[70,761,554],{"class":80},[70,763,764,766,769,771,774,776,779],{"class":72,"line":124},[70,765,77],{"class":76},[70,767,768],{"class":84}," titre",[70,770,756],{"class":76},[70,772,773],{"class":111}," ref",[70,775,114],{"class":80},[70,777,778],{"class":117},"''",[70,780,121],{"class":80},[70,782,783],{"class":72,"line":299},[70,784,786],{"emptyLinePlaceholder":785},true,"\n",[70,788,789,791,793,796,799,802,804,807,809,811,813,816,818,820,822,825,828,831],{"class":72,"line":319},[70,790,77],{"class":76},[70,792,81],{"class":80},[70,794,85],{"class":795},"sIXEE",[70,797,798],{"class":80},": ",[70,800,801],{"class":84},"recettes",[70,803,32],{"class":80},[70,805,806],{"class":84},"refresh",[70,808,93],{"class":80},[70,810,96],{"class":76},[70,812,99],{"class":76},[70,814,815],{"class":111}," useAsyncData",[70,817,114],{"class":80},[70,819,118],{"class":117},[70,821,32],{"class":80},[70,823,824],{"class":76},"async",[70,826,827],{"class":80}," () ",[70,829,830],{"class":76},"=>",[70,832,833],{"class":80}," {\n",[70,835,836,839,841,843,845,847,849,851,853,855,857,859,861,863,865],{"class":72,"line":341},[70,837,838],{"class":76},"  const",[70,840,81],{"class":80},[70,842,85],{"class":84},[70,844,93],{"class":80},[70,846,96],{"class":76},[70,848,99],{"class":76},[70,850,215],{"class":80},[70,852,58],{"class":111},[70,854,114],{"class":80},[70,856,118],{"class":117},[70,858,224],{"class":80},[70,860,24],{"class":111},[70,862,114],{"class":80},[70,864,294],{"class":117},[70,866,121],{"class":80},[70,868,870,873],{"class":72,"line":869},7,[70,871,872],{"class":76},"  return",[70,874,875],{"class":80}," data\n",[70,877,879],{"class":72,"line":878},8,[70,880,881],{"class":80},"})\n",[70,883,885],{"class":72,"line":884},9,[70,886,786],{"emptyLinePlaceholder":785},[70,888,890,892,895,898],{"class":72,"line":889},10,[70,891,824],{"class":76},[70,893,894],{"class":76}," function",[70,896,897],{"class":111}," ajouter",[70,899,900],{"class":80},"() {\n",[70,902,904,906,908,910,912,914,916,918,920,922,924,926,928],{"class":72,"line":903},11,[70,905,838],{"class":76},[70,907,81],{"class":80},[70,909,90],{"class":84},[70,911,93],{"class":80},[70,913,96],{"class":76},[70,915,99],{"class":76},[70,917,215],{"class":80},[70,919,58],{"class":111},[70,921,114],{"class":80},[70,923,118],{"class":117},[70,925,224],{"class":80},[70,927,31],{"class":111},[70,929,930],{"class":80},"({ titre: titre.value })\n",[70,932,934,937,940,943],{"class":72,"line":933},12,[70,935,936],{"class":76},"  if",[70,938,939],{"class":80}," (",[70,941,942],{"class":76},"!",[70,944,945],{"class":80},"error) {\n",[70,947,949,952,954],{"class":72,"line":948},13,[70,950,951],{"class":80},"    titre.value ",[70,953,96],{"class":76},[70,955,956],{"class":117}," ''\n",[70,958,960,963,966],{"class":72,"line":959},14,[70,961,962],{"class":76},"    await",[70,964,965],{"class":111}," refresh",[70,967,554],{"class":80},[70,969,971],{"class":72,"line":970},15,[70,972,973],{"class":80},"  }\n",[70,975,977],{"class":72,"line":976},16,[70,978,182],{"class":80},[70,980,982,985,987],{"class":72,"line":981},17,[70,983,984],{"class":80},"\u003C\u002F",[70,986,732],{"class":731},[70,988,746],{"class":80},[53,990,991,993,994,997],{},[22,992,806],{}," relance le chargement de ",[22,995,996],{},"useAsyncData",". La liste se met à jour après chaque ajout réussi.",[10,999,1001],{"id":1000},"quand-rien-ne-se-passe","Quand rien ne se passe",[53,1003,1004],{},"Deux cas surprennent les débutants :",[15,1006,1007,1012],{},[18,1008,1009,1011],{},[22,1010,24],{}," renvoie une liste vide sans erreur : la RLS filtre les lignes que tu n'as pas le droit de voir.",[18,1013,1014,32,1016,1018,1019,1021],{},[22,1015,31],{},[22,1017,35],{}," ou ",[22,1020,39],{}," est refusé : une politique RLS manque pour cette opération.",[53,1023,1024],{},"Dans les deux cas, la solution est dans les politiques de la table, pas dans ton code. Le cours 05 les détaille.",[10,1026,1028],{"id":1027},"à-retenir","À retenir",[15,1030,1031,1038,1046,1057,1066,1077],{},[18,1032,1033,1034,1037],{},"Chaque requête suit ",[22,1035,1036],{},"supabase.from('table')",", une opération, puis des filtres.",[18,1039,1040,1041,1043,1044,40],{},"Le résultat est ",[22,1042,46],{}," : vérifie toujours ",[22,1045,90],{},[18,1047,1048,32,1050,32,1052,32,1054,1056],{},[22,1049,24],{},[22,1051,31],{},[22,1053,35],{},[22,1055,39],{}," couvrent les quatre opérations de base.",[18,1058,1059,32,1061,36,1063,1065],{},[22,1060,304],{},[22,1062,324],{},[22,1064,346],{}," se chaînent pour filtrer, trier et limiter.",[18,1067,1068,1069,1071,1072,1018,1074,1076],{},"Ajoute ",[22,1070,494],{}," après ",[22,1073,31],{},[22,1075,35],{}," pour récupérer les lignes concernées.",[18,1078,629,1079,1018,1081,1083],{},[22,1080,35],{},[22,1082,39],{}," sans filtre touche toutes les lignes autorisées.",[1085,1086,1087],"style",{},"html pre.shiki code .sOnC1, html code.shiki .sOnC1{--shiki-light:#CF222E;--shiki-default:#FF7B72;--shiki-dark:#FF7B72}html pre.shiki code .scfrF, html code.shiki .scfrF{--shiki-light:#1F2328;--shiki-default:#E6EDF3;--shiki-dark:#E6EDF3}html pre.shiki code .s5iOY, html code.shiki .s5iOY{--shiki-light:#0550AE;--shiki-default:#79C0FF;--shiki-dark:#79C0FF}html pre.shiki code .syCW7, html code.shiki .syCW7{--shiki-light:#8250DF;--shiki-default:#D2A8FF;--shiki-dark:#D2A8FF}html pre.shiki code .shWOn, html code.shiki .shWOn{--shiki-light:#0A3069;--shiki-default:#A5D6FF;--shiki-dark:#A5D6FF}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 .s5JFL, html code.shiki .s5JFL{--shiki-light:#116329;--shiki-default:#7EE787;--shiki-dark:#7EE787}html pre.shiki code .sIXEE, html code.shiki .sIXEE{--shiki-light:#953800;--shiki-default:#FFA657;--shiki-dark:#FFA657}",{"title":66,"searchDepth":105,"depth":124,"links":1089},[1090,1091,1092,1093,1094,1095,1096,1097,1098,1099],{"id":12,"depth":105,"text":13},{"id":50,"depth":105,"text":51},{"id":185,"depth":105,"text":186},{"id":243,"depth":105,"text":244},{"id":424,"depth":105,"text":425},{"id":557,"depth":105,"text":558},{"id":647,"depth":105,"text":648},{"id":711,"depth":105,"text":712},{"id":1000,"depth":105,"text":1001},{"id":1027,"depth":105,"text":1028},"Lire, ajouter, modifier et supprimer des lignes avec le client Supabase, en gérant les erreurs.","md","supabase",{},[24,31,35,39,304,324,346,1105],"data et error","debutant","\u002Fsupabase\u002Flire-et-ecrire",[1109],"\u002Fsupabase\u002Fbrancher-a-nuxt",[1111,1115,1118],{"nom":1112,"url":1113,"type":1114,"anglais":785},"Supabase, select (en anglais)","https:\u002F\u002Fsupabase.com\u002Fdocs\u002Freference\u002Fjavascript\u002Fselect","doc",{"nom":1116,"url":1117,"type":1114,"anglais":785},"Supabase, insert (en anglais)","https:\u002F\u002Fsupabase.com\u002Fdocs\u002Freference\u002Fjavascript\u002Finsert",{"nom":1119,"url":1120,"type":1114,"anglais":785},"Supabase, update (en anglais)","https:\u002F\u002Fsupabase.com\u002Fdocs\u002Freference\u002Fjavascript\u002Fupdate",{"title":5,"description":1100},[1123],{"nom":1124,"url":1113},"Supabase, référence JavaScript (en anglais)","supabase\u002F03.lire-et-ecrire","4ReuV7zML2bfzh-d8j71AvCsFaj0d1bfWzeOt2kcKe0",[1128,1132,1135,1136,1140,1144,1148],{"path":1129,"title":1130,"stem":1131},"\u002Fsupabase\u002Fdecouvrir-supabase","Découvrir Supabase","supabase\u002F01.decouvrir-supabase",{"path":1109,"title":1133,"stem":1134},"Brancher Supabase à Nuxt","supabase\u002F02.brancher-a-nuxt",{"path":1107,"title":5,"stem":1125},{"path":1137,"title":1138,"stem":1139},"\u002Fsupabase\u002Fauthentification","Authentification","supabase\u002F04.authentification",{"path":1141,"title":1142,"stem":1143},"\u002Fsupabase\u002Frow-level-security","Row Level Security","supabase\u002F05.row-level-security",{"path":1145,"title":1146,"stem":1147},"\u002Fsupabase\u002Fstockage-et-temps-reel","Stockage et temps réel","supabase\u002F06.stockage-et-temps-reel",{"path":1149,"title":1150,"stem":1151},"\u002Fsupabase","Supabase","supabase\u002Findex",[1153,1155],{"title":1133,"path":1109,"stem":1134,"description":1154,"children":-1},"Installer le module @nuxtjs\u002Fsupabase, renseigner les variables d'environnement et savoir quelle clé va où.",{"title":1138,"path":1137,"stem":1139,"description":1156,"children":-1},"Inscrire et connecter des utilisateurs avec e-mail et mot de passe, lire la session et protéger une page.",[1158],{"path":1109,"title":1133,"ligne":1102},[1160,1161,1162,1163,1165,1166,1168],{"path":1129,"title":1130,"niveau":1106,"stem":1131},{"path":1109,"title":1133,"niveau":1106,"stem":1134},{"path":1107,"title":5,"niveau":1106,"stem":1125},{"path":1137,"title":1138,"niveau":1164,"stem":1139},"intermediaire",{"path":1141,"title":1142,"niveau":1164,"stem":1143},{"path":1145,"title":1146,"niveau":1167,"stem":1147},"avance",{"path":1149,"title":1150,"niveau":1169,"stem":1151},"memo",1794583460673]