[{"data":1,"prerenderedAt":978},["ShallowReactive",2],{"docs-nav:fr":3,"docs:\u002Ffr\u002Fdocs\u002Fschema\u002Fviews":189},[4],{"title":5,"path":6,"stem":7,"children":8,"page":52},"Fr","\u002Ffr","fr",[9],{"title":10,"path":11,"stem":12,"children":13},"Qu'est-ce que Fougere","\u002Ffr\u002Fdocs","fr\u002Fdocs\u002Findex",[14,15,19,23,27,31,53,78,123,148],{"title":10,"path":11,"stem":12},{"title":16,"path":17,"stem":18},"Démarrer","\u002Ffr\u002Fdocs\u002Fgetting-started","fr\u002Fdocs\u002F01.getting-started",{"title":20,"path":21,"stem":22},"Une app que vous avez déjà","\u002Ffr\u002Fdocs\u002Fexisting-app","fr\u002Fdocs\u002F02.existing-app",{"title":24,"path":25,"stem":26},"Apportez votre schéma","\u002Ffr\u002Fdocs\u002Fbring-your-schema","fr\u002Fdocs\u002F03.bring-your-schema",{"title":28,"path":29,"stem":30},"La CLI","\u002Ffr\u002Fdocs\u002Fcli","fr\u002Fdocs\u002F04.cli",{"title":32,"path":33,"stem":34,"children":35,"page":52},"Concepts","\u002Ffr\u002Fdocs\u002Fconcepts","fr\u002Fdocs\u002F2.concepts",[36,40,44,48],{"title":37,"path":38,"stem":39},"Philosophie","\u002Ffr\u002Fdocs\u002Fconcepts\u002Fphilosophy","fr\u002Fdocs\u002F2.concepts\u002F1.philosophy",{"title":41,"path":42,"stem":43},"La Frond","\u002Ffr\u002Fdocs\u002Fconcepts\u002Ffrond","fr\u002Fdocs\u002F2.concepts\u002F2.frond",{"title":45,"path":46,"stem":47},"Le chemin le plus court","\u002Ffr\u002Fdocs\u002Fconcepts\u002Fshortest-path","fr\u002Fdocs\u002F2.concepts\u002F3.shortest-path",{"title":49,"path":50,"stem":51},"Le socle","\u002Ffr\u002Fdocs\u002Fconcepts\u002Fthe-base","fr\u002Fdocs\u002F2.concepts\u002F4.the-base",false,{"title":54,"path":55,"stem":56,"children":57,"page":52},"Schéma","\u002Ffr\u002Fdocs\u002Fschema","fr\u002Fdocs\u002F3.schema",[58,62,66,70,74],{"title":59,"path":60,"stem":61},"Entités","\u002Ffr\u002Fdocs\u002Fschema\u002Fentities","fr\u002Fdocs\u002F3.schema\u002F1.entities",{"title":63,"path":64,"stem":65},"Vues","\u002Ffr\u002Fdocs\u002Fschema\u002Fviews","fr\u002Fdocs\u002F3.schema\u002F2.views",{"title":67,"path":68,"stem":69},"La carte d'identité","\u002Ffr\u002Fdocs\u002Fschema\u002Fcard","fr\u002Fdocs\u002F3.schema\u002F3.card",{"title":71,"path":72,"stem":73},"Standard Schema","\u002Ffr\u002Fdocs\u002Fschema\u002Fstandard-schema","fr\u002Fdocs\u002F3.schema\u002F4.standard-schema",{"title":75,"path":76,"stem":77},"Comment un schéma bouge","\u002Ffr\u002Fdocs\u002Fschema\u002Fevolution","fr\u002Fdocs\u002F3.schema\u002F5.evolution",{"title":79,"path":80,"stem":81,"children":82,"page":52},"Métier","\u002Ffr\u002Fdocs\u002Fbusiness","fr\u002Fdocs\u002F4.business",[83,87,91,95,99,103,107,111,115,119],{"title":84,"path":85,"stem":86},"Handlers","\u002Ffr\u002Fdocs\u002Fbusiness\u002Fhandlers","fr\u002Fdocs\u002F4.business\u002F1.handlers",{"title":88,"path":89,"stem":90},"Les ports","\u002Ffr\u002Fdocs\u002Fbusiness\u002Fports","fr\u002Fdocs\u002F4.business\u002F10.ports",{"title":92,"path":93,"stem":94},"Presenters","\u002Ffr\u002Fdocs\u002Fbusiness\u002Fpresenters","fr\u002Fdocs\u002F4.business\u002F2.presenters",{"title":96,"path":97,"stem":98},"Collectors","\u002Ffr\u002Fdocs\u002Fbusiness\u002Fcollectors","fr\u002Fdocs\u002F4.business\u002F3.collectors",{"title":100,"path":101,"stem":102},"Erreurs","\u002Ffr\u002Fdocs\u002Fbusiness\u002Ferrors","fr\u002Fdocs\u002F4.business\u002F4.errors",{"title":104,"path":105,"stem":106},"Seeds","\u002Ffr\u002Fdocs\u002Fbusiness\u002Fseeds","fr\u002Fdocs\u002F4.business\u002F5.seeds",{"title":108,"path":109,"stem":110},"Les faits","\u002Ffr\u002Fdocs\u002Fbusiness\u002Ffacts","fr\u002Fdocs\u002F4.business\u002F6.facts",{"title":112,"path":113,"stem":114},"Le port Storage","\u002Ffr\u002Fdocs\u002Fbusiness\u002Fstorage","fr\u002Fdocs\u002F4.business\u002F7.storage",{"title":116,"path":117,"stem":118},"Des écritures qui tiennent ou tombent ensemble","\u002Ffr\u002Fdocs\u002Fbusiness\u002Ftogether","fr\u002Fdocs\u002F4.business\u002F8.together",{"title":120,"path":121,"stem":122},"Les repositories","\u002Ffr\u002Fdocs\u002Fbusiness\u002Frepositories","fr\u002Fdocs\u002F4.business\u002F9.repositories",{"title":124,"path":125,"stem":126,"children":127,"page":52},"Client","\u002Ffr\u002Fdocs\u002Fclient","fr\u002Fdocs\u002F5.client",[128,132,136,140,144],{"title":129,"path":130,"stem":131},"Queries & commands","\u002Ffr\u002Fdocs\u002Fclient\u002Fqueries-commands","fr\u002Fdocs\u002F5.client\u002F1.queries-commands",{"title":133,"path":134,"stem":135},"Formulaires","\u002Ffr\u002Fdocs\u002Fclient\u002Fforms","fr\u002Fdocs\u002F5.client\u002F2.forms",{"title":137,"path":138,"stem":139},"Session","\u002Ffr\u002Fdocs\u002Fclient\u002Fsession","fr\u002Fdocs\u002F5.client\u002F3.session",{"title":141,"path":142,"stem":143},"invoke","\u002Ffr\u002Fdocs\u002Fclient\u002Finvoke","fr\u002Fdocs\u002F5.client\u002F4.invoke",{"title":145,"path":146,"stem":147},"Back-office","\u002Ffr\u002Fdocs\u002Fclient\u002Fadmin","fr\u002Fdocs\u002F5.client\u002F5.admin",{"title":149,"path":150,"stem":151,"children":152,"page":52},"Infrastructure","\u002Ffr\u002Fdocs\u002Finfra","fr\u002Fdocs\u002F6.infra",[153,157,161,165,169,173,177,181,185],{"title":154,"path":155,"stem":156},"Le gradient","\u002Ffr\u002Fdocs\u002Finfra\u002Fgradient","fr\u002Fdocs\u002F6.infra\u002F1.gradient",{"title":158,"path":159,"stem":160},"Surfaces — REST & GraphQL","\u002Ffr\u002Fdocs\u002Finfra\u002Fsurfaces","fr\u002Fdocs\u002F6.infra\u002F2.surfaces",{"title":162,"path":163,"stem":164},"Déploiement","\u002Ffr\u002Fdocs\u002Finfra\u002Fdeployment","fr\u002Fdocs\u002F6.infra\u002F3.deployment",{"title":166,"path":167,"stem":168},"Hôtes","\u002Ffr\u002Fdocs\u002Finfra\u002Fhosts","fr\u002Fdocs\u002F6.infra\u002F4.hosts",{"title":170,"path":171,"stem":172},"Les sources","\u002Ffr\u002Fdocs\u002Finfra\u002Fsources","fr\u002Fdocs\u002F6.infra\u002F5.sources",{"title":174,"path":175,"stem":176},"Le cycle de vie","\u002Ffr\u002Fdocs\u002Finfra\u002Flifecycle","fr\u002Fdocs\u002F6.infra\u002F6.lifecycle",{"title":178,"path":179,"stem":180},"L'identité entre Fronds","\u002Ffr\u002Fdocs\u002Finfra\u002Fidentity","fr\u002Fdocs\u002F6.infra\u002F7.identity",{"title":182,"path":183,"stem":184},"Observabilité","\u002Ffr\u002Fdocs\u002Finfra\u002Fobservability","fr\u002Fdocs\u002F6.infra\u002F8.observability",{"title":186,"path":187,"stem":188},"Tests","\u002Ffr\u002Fdocs\u002Finfra\u002Ftesting","fr\u002Fdocs\u002F6.infra\u002F9.testing",{"id":190,"title":63,"body":191,"description":973,"extension":974,"meta":975,"navigation":304,"path":64,"seo":976,"stem":65,"__hash__":977},"docs_fr\u002Ffr\u002Fdocs\u002F3.schema\u002F2.views.md",{"type":192,"value":193,"toc":966},"minimark",[194,198,202,417,431,436,506,513,527,531,555,648,674,684,699,703,742,746,749,807,820,824,839,861,864,892,895,942,956,962],[195,196,63],"h1",{"id":197},"vues",[199,200,201],"p",{},"Une vue est une classe de schéma créée à partir d'une entité :",[203,204,209],"pre",{"className":205,"code":206,"language":207,"meta":208,"style":208},"language-ts shiki shiki-themes material-theme-lighter github-light github-dark","\u002F** Ce qu'un auteur peut écrire. *\u002F\nexport class PostDraft extends Post.pick('slug', 'title', 'summary', 'body') {}\n\n\u002F** Ce que l'index public montre — pas de body. *\u002F\nexport class PostCard extends Post.pick('id', 'slug', 'title', 'summary', 'publishedAt') {}\n\n\u002F** L'entrée d'une opération de lecture custom. *\u002F\nexport class BySlugInput extends Post.pick('slug') {}\n","ts","",[210,211,212,221,299,306,312,376,381,387],"code",{"__ignoreMap":208},[213,214,217],"span",{"class":215,"line":216},"line",1,[213,218,220],{"class":219},"sutJx","\u002F** Ce qu'un auteur peut écrire. *\u002F\n",[213,222,224,228,232,236,239,243,247,251,254,258,262,264,267,270,273,275,277,279,282,284,286,288,291,293,296],{"class":215,"line":223},2,[213,225,227],{"class":226},"sVHd0","export",[213,229,231],{"class":230},"sbsja"," class",[213,233,235],{"class":234},"sbgvK"," PostDraft",[213,237,238],{"class":230}," extends",[213,240,242],{"class":241},"su5hD"," Post",[213,244,246],{"class":245},"sP7_E",".",[213,248,250],{"class":249},"sGLFI","pick",[213,252,253],{"class":241},"(",[213,255,257],{"class":256},"sjJ54","'",[213,259,261],{"class":260},"s_sjI","slug",[213,263,257],{"class":256},[213,265,266],{"class":245},",",[213,268,269],{"class":256}," '",[213,271,272],{"class":260},"title",[213,274,257],{"class":256},[213,276,266],{"class":245},[213,278,269],{"class":256},[213,280,281],{"class":260},"summary",[213,283,257],{"class":256},[213,285,266],{"class":245},[213,287,269],{"class":256},[213,289,290],{"class":260},"body",[213,292,257],{"class":256},[213,294,295],{"class":241},") ",[213,297,298],{"class":245},"{}\n",[213,300,302],{"class":215,"line":301},3,[213,303,305],{"emptyLinePlaceholder":304},true,"\n",[213,307,309],{"class":215,"line":308},4,[213,310,311],{"class":219},"\u002F** Ce que l'index public montre — pas de body. *\u002F\n",[213,313,315,317,319,322,324,326,328,330,332,334,337,339,341,343,345,347,349,351,353,355,357,359,361,363,365,367,370,372,374],{"class":215,"line":314},5,[213,316,227],{"class":226},[213,318,231],{"class":230},[213,320,321],{"class":234}," PostCard",[213,323,238],{"class":230},[213,325,242],{"class":241},[213,327,246],{"class":245},[213,329,250],{"class":249},[213,331,253],{"class":241},[213,333,257],{"class":256},[213,335,336],{"class":260},"id",[213,338,257],{"class":256},[213,340,266],{"class":245},[213,342,269],{"class":256},[213,344,261],{"class":260},[213,346,257],{"class":256},[213,348,266],{"class":245},[213,350,269],{"class":256},[213,352,272],{"class":260},[213,354,257],{"class":256},[213,356,266],{"class":245},[213,358,269],{"class":256},[213,360,281],{"class":260},[213,362,257],{"class":256},[213,364,266],{"class":245},[213,366,269],{"class":256},[213,368,369],{"class":260},"publishedAt",[213,371,257],{"class":256},[213,373,295],{"class":241},[213,375,298],{"class":245},[213,377,379],{"class":215,"line":378},6,[213,380,305],{"emptyLinePlaceholder":304},[213,382,384],{"class":215,"line":383},7,[213,385,386],{"class":219},"\u002F** L'entrée d'une opération de lecture custom. *\u002F\n",[213,388,390,392,394,397,399,401,403,405,407,409,411,413,415],{"class":215,"line":389},8,[213,391,227],{"class":226},[213,393,231],{"class":230},[213,395,396],{"class":234}," BySlugInput",[213,398,238],{"class":230},[213,400,242],{"class":241},[213,402,246],{"class":245},[213,404,250],{"class":249},[213,406,253],{"class":241},[213,408,257],{"class":256},[213,410,261],{"class":260},[213,412,257],{"class":256},[213,414,295],{"class":241},[213,416,298],{"class":245},[199,418,419,420,423,424,427,428,246],{},"Une vue est une classe de schéma complète : elle a ",[210,421,422],{},"getFields()",", ",[210,425,426],{},"validate()",", et\ns'utilise comme type TypeScript. Les vues se chaînent : ",[210,429,430],{},"Post.pick(…).partial()",[432,433,435],"h2",{"id":434},"les-cinq-dérivations","Les cinq dérivations",[437,438,439,452],"table",{},[440,441,442],"thead",{},[443,444,445,449],"tr",{},[446,447,448],"th",{},"Dérivation",[446,450,451],{},"Produit",[453,454,455,466,476,486,496],"tbody",{},[443,456,457,463],{},[458,459,460],"td",{},[210,461,462],{},"Post.pick('a', 'b')",[458,464,465],{},"ces champs seulement",[443,467,468,473],{},[458,469,470],{},[210,471,472],{},"Post.omit('a')",[458,474,475],{},"tous les champs sauf ceux-là",[443,477,478,483],{},[458,479,480],{},[210,481,482],{},"Post.rename({ a: 'b' })",[458,484,485],{},"les mêmes champs sous d'autres noms — les contraintes et ce qui est adressé à chaque adaptateur suivent",[443,487,488,493],{},[458,489,490],{},[210,491,492],{},"Post.partial()",[458,494,495],{},"chaque champ optionnel : un champ absent n'est pas mis à jour",[443,497,498,503],{},[458,499,500],{},[210,501,502],{},"Post.extend({ extra: text() })",[458,504,505],{},"les mêmes champs plus d'autres",[199,507,508,509,512],{},"Le mode ",[210,510,511],{},"partial"," est conservé lorsque la vue est utilisée comme entrée d'une opération.",[199,514,515,516,519,520,523,524,246],{},"Une vue décrit les lignes d'un autre schéma, et c'est pourquoi elle n'a pas de table. Celle\nqui n'a rien retiré décrit exactement les mêmes lignes que son origine : elle n'est donc ni\nl'une ni l'autre, et elle est refusée au démarrage tant qu'elle ne dit pas laquelle.\n",[210,517,518],{},".anchor()"," détient ses propres lignes — c'est ainsi que ",[210,521,522],{},"User"," étend ",[210,525,526],{},"AuthUser",[432,528,530],{"id":529},"ce-quune-vue-retient","Ce qu'une vue retient",[199,532,533,534,537,538,541,542,546,547,550,551,554],{},"Une vue garde deux choses de son origine : ",[210,535,536],{},"source",", la déclaration dont elle est tirée, et\n",[210,539,540],{},"survived",", ce que la coupe a laissé — indexé par les noms de champs de ",[543,544,545],"strong",{},"l'origine",". Les\ndeux vivent sur ",[210,548,549],{},"derivation",", d'où ",[210,552,553],{},"anchor"," remonte jusqu'au schéma dont la vue décrit les\nlignes.",[203,556,558],{"className":205,"code":557,"language":207,"meta":208,"style":208},"class PostCard extends Post.pick('id', 'title') {}\n\nPostCard.derivation.source     \u002F\u002F Post\nPostCard.derivation.survived   \u002F\u002F { id: 'id', title: 'title', body: undefined, status: undefined }\nPostCard.derivation.anchor     \u002F\u002F Post — de qui sont les lignes que cette forme décrit\n",[210,559,560,595,599,616,632],{"__ignoreMap":208},[213,561,562,565,567,569,571,573,575,577,579,581,583,585,587,589,591,593],{"class":215,"line":216},[213,563,564],{"class":230},"class",[213,566,321],{"class":234},[213,568,238],{"class":230},[213,570,242],{"class":241},[213,572,246],{"class":245},[213,574,250],{"class":249},[213,576,253],{"class":241},[213,578,257],{"class":256},[213,580,336],{"class":260},[213,582,257],{"class":256},[213,584,266],{"class":245},[213,586,269],{"class":256},[213,588,272],{"class":260},[213,590,257],{"class":256},[213,592,295],{"class":241},[213,594,298],{"class":245},[213,596,597],{"class":215,"line":223},[213,598,305],{"emptyLinePlaceholder":304},[213,600,601,604,606,608,610,613],{"class":215,"line":301},[213,602,603],{"class":241},"PostCard",[213,605,246],{"class":245},[213,607,549],{"class":241},[213,609,246],{"class":245},[213,611,612],{"class":241},"source     ",[213,614,615],{"class":219},"\u002F\u002F Post\n",[213,617,618,620,622,624,626,629],{"class":215,"line":308},[213,619,603],{"class":241},[213,621,246],{"class":245},[213,623,549],{"class":241},[213,625,246],{"class":245},[213,627,628],{"class":241},"survived   ",[213,630,631],{"class":219},"\u002F\u002F { id: 'id', title: 'title', body: undefined, status: undefined }\n",[213,633,634,636,638,640,642,645],{"class":215,"line":314},[213,635,603],{"class":241},[213,637,246],{"class":245},[213,639,549],{"class":241},[213,641,246],{"class":245},[213,643,644],{"class":241},"anchor     ",[213,646,647],{"class":219},"\u002F\u002F Post — de qui sont les lignes que cette forme décrit\n",[199,649,650,651,654,655,658,659,662,663,666,667,670,671,673],{},"Un champ retiré figure à ",[210,652,653],{},"undefined"," : la trace dit donc ce qui manque, pas seulement ce\nqui reste. Un ",[210,656,657],{},"rename"," y porte le nouveau nom (",[210,660,661],{},"{ note: 'comment' }","), et les deux se\ncomposent avec celle du parent — ",[210,664,665],{},"Post.pick('a','b','c').omit('c')"," se rapporte à ",[210,668,669],{},"Post"," et\njamais à l'intermédiaire, exactement comme ",[210,672,536],{}," saute celui-ci.",[199,675,676,679,680,683],{},[210,677,678],{},"partial()"," et ",[210,681,682],{},"extend()"," laissent la trace inchangée : rendre un champ optionnel ne change\npas son origine, et un champ ajouté n'en a aucune à déclarer.",[199,685,686,687,691,692,698],{},"C'est ce qui permet à la ",[688,689,690],"a",{"href":68},"carte d'identité"," de publier une vue comme\n",[693,694,695,696],"em",{},"un Post sans ",[210,697,290],{}," plutôt que comme une forme anonyme — deux vues d'une même entité se\ndécrivaient jusqu'ici à l'identique.",[432,700,702],{"id":701},"où-les-vues-se-branchent","Où les vues se branchent",[704,705,706,716,732],"ul",{},[707,708,709,712,713,715],"li",{},[543,710,711],{},"Entrées de handler"," — déclarez la vue comme type du paramètre ; la façade valide le\nbody du fil contre elle avant votre code (",[688,714,84],{"href":85},").",[707,717,718,721,722,725,726,729,730,715],{},[543,719,720],{},"Sorties de handler"," — ",[210,723,724],{},"Crud(Post, { list: PostCard })"," nomme la vue d'une opération ;\n",[210,727,728],{},"Crud(Post, PostPublic)"," restreint tout le handler (",[688,731,84],{"href":85},[707,733,734,721,736,739,740,715],{},[543,735,133],{},[210,737,738],{},"useFormFor(PostDraft)"," dérive ses champs de la vue (",[688,741,133],{"href":134},[432,743,745],{"id":744},"les-projections-io","Les projections io",[199,747,748],{},"L'axe boundary dérive deux ensembles de champs que toutes les surfaces utilisent :",[203,750,752],{"className":205,"code":751,"language":207,"meta":208,"style":208},"Visibility.of(Post.getFields()).input   \u002F\u002F les champs qu'un client peut ÉCRIRE — readOnly exclus\nVisibility.of(Post.getFields()).output  \u002F\u002F les champs qu'un client peut LIRE  — writeOnly exclus\n",[210,753,754,783],{"__ignoreMap":208},[213,755,756,759,761,764,767,769,772,775,777,780],{"class":215,"line":216},[213,757,758],{"class":241},"Visibility",[213,760,246],{"class":245},[213,762,763],{"class":249},"of",[213,765,766],{"class":241},"(Post",[213,768,246],{"class":245},[213,770,771],{"class":249},"getFields",[213,773,774],{"class":241},"())",[213,776,246],{"class":245},[213,778,779],{"class":241},"input   ",[213,781,782],{"class":219},"\u002F\u002F les champs qu'un client peut ÉCRIRE — readOnly exclus\n",[213,784,785,787,789,791,793,795,797,799,801,804],{"class":215,"line":223},[213,786,758],{"class":241},[213,788,246],{"class":245},[213,790,763],{"class":249},[213,792,766],{"class":241},[213,794,246],{"class":245},[213,796,771],{"class":249},[213,798,774],{"class":241},[213,800,246],{"class":245},[213,802,803],{"class":241},"output  ",[213,805,806],{"class":219},"\u002F\u002F les champs qu'un client peut LIRE  — writeOnly exclus\n",[199,808,809,810,812,813,816,817,819],{},"C'est pourquoi un formulaire bâti sur ",[210,811,669],{}," n'affiche pas d'inputs ",[210,814,815],{},"status"," ou\n",[210,818,369],{},", sans configuration supplémentaire par formulaire.",[432,821,823],{"id":822},"choisir-entre-un-champ-et-une-vue","Choisir entre un champ et une vue",[199,825,826,829,830,679,833,829,835,838],{},[210,827,828],{},"readOnly"," \u002F ",[210,831,832],{},"writeOnly",[210,834,250],{},[210,836,837],{},"omit"," peuvent tous retirer un champ d'une surface,\nmais leur portée diffère.",[704,840,841,851],{},[707,842,843,846,847,850],{},[543,844,845],{},"boundary"," (sur le champ) définit une règle globale. Avec ",[210,848,849],{},"writeOnly(password)",", le mot\nde passe est exclu de toutes les sorties.",[707,852,853,856,857,860],{},[543,854,855],{},"pick \u002F omit"," (sur une vue) choisit les champs d'un usage précis. Par exemple,\n",[210,858,859],{},"Post.pick('id', 'title')"," définit la réponse de l'index public.",[199,862,863],{},"Ces deux mécanismes sont complémentaires.",[704,865,866,876],{},[707,867,868,869,871,872,875],{},"Sans ",[210,870,832],{}," sur le champ, chaque vue de sortie devrait penser à omettre ",[210,873,874],{},"password",".\nLa règle globale évite cet oubli.",[707,877,878,879,423,881,883,884,887,888,891],{},"Une réponse publique (",[210,880,336],{},[210,882,272],{},") et une réponse admin (",[210,885,886],{},"+ authorEmail",") ont en revanche\nbesoin de vues différentes : ",[210,889,890],{},"authorEmail"," est inclus ou exclu selon l'usage.",[199,893,894],{},"Le critère est la portée de la règle : globale ou propre à un usage.",[437,896,897,910],{},[440,898,899],{},[443,900,901,904,907],{},[446,902,903],{},"Le fait est…",[446,905,906],{},"Il vit…",[446,908,909],{},"Exemple",[453,911,912,927],{},[443,913,914,917,924],{},[458,915,916],{},"vrai partout (invariant)",[458,918,919,920,829,922],{},"sur le champ — ",[210,921,828],{},[210,923,832],{},[458,925,926],{},"un mot de passe ne sort jamais",[443,928,929,932,939],{},[458,930,931],{},"vrai pour un usage (local)",[458,933,934,935,829,937],{},"en dérivation — ",[210,936,250],{},[210,938,837],{},[458,940,941],{},"cet endpoint ne renvoie que id + titre",[199,943,944,945,947,948,951,952,955],{},"Une règle ",[210,946,845],{}," est sérialisée dans la ",[688,949,950],{"href":68},"carte"," sous\n",[210,953,954],{},"x-fougere.boundary",". Un consommateur dans un autre langage peut donc l'appliquer. Une vue\ndérivée en TypeScript n'est pas sérialisée.",[199,957,958,959,961],{},"Suite : ",[688,960,67],{"href":68}," — la forme portable du schéma.",[963,964,965],"style",{},"html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}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);}",{"title":208,"searchDepth":223,"depth":223,"links":967},[968,969,970,971,972],{"id":434,"depth":223,"text":435},{"id":529,"depth":223,"text":530},{"id":701,"depth":223,"text":702},{"id":744,"depth":223,"text":745},{"id":822,"depth":223,"text":823},"Créer des schémas d'entrée et de sortie avec pick, omit, partial et extend.","md",{},{"title":63,"description":973},"jLHCeu5F7Zy93LCTNs43v4XdLtVdTdnP660-UzVtDEo",1788598418979]