[{"data":1,"prerenderedAt":936},["ShallowReactive",2],{"docs:\u002Ffr\u002Fdocs\u002Fgetting-started":3,"docs-nav:fr":808},{"id":4,"title":5,"body":6,"description":801,"extension":802,"meta":803,"navigation":365,"path":804,"seo":805,"stem":806,"__hash__":807},"docs_fr\u002Ffr\u002Fdocs\u002F01.getting-started.md","Démarrer",{"type":7,"value":8,"toc":793},"minimark",[9,13,81,114,119,126,134,140,146,179,212,230,238,244,250,271,285,289,742,745,749,772,775,781,789],[10,11,5],"h1",{"id":12},"démarrer",[14,15,20],"pre",{"className":16,"code":17,"language":18,"meta":19,"style":19},"language-bash shiki shiki-themes material-theme-lighter github-light github-dark","npm create fougere shop --frond blog --app nuxt\ncd shop && pnpm install && pnpm dev\n","bash","",[21,22,23,55],"code",{"__ignoreMap":19},[24,25,28,32,36,39,42,46,49,52],"span",{"class":26,"line":27},"line",1,[24,29,31],{"class":30},"sbgvK","npm",[24,33,35],{"class":34},"s_sjI"," create",[24,37,38],{"class":34}," fougere",[24,40,41],{"class":34}," shop",[24,43,45],{"class":44},"stzsN"," --frond",[24,47,48],{"class":34}," blog",[24,50,51],{"class":44}," --app",[24,53,54],{"class":34}," nuxt\n",[24,56,58,62,64,68,71,74,76,78],{"class":26,"line":57},2,[24,59,61],{"class":60},"sptTA","cd",[24,63,41],{"class":34},[24,65,67],{"class":66},"sP7_E"," &&",[24,69,70],{"class":30}," pnpm",[24,72,73],{"class":34}," install",[24,75,67],{"class":66},[24,77,70],{"class":30},[24,79,80],{"class":34}," dev\n",[82,83,84],"blockquote",{},[85,86,87,91,92,95,96,99,100,103,104,107,108,113],"p",{},[88,89,90],"strong",{},"Alpha."," Les paquets ",[21,93,94],{},"@fougere\u002F*"," sont sur npm sous le tag ",[21,97,98],{},"alpha"," — le numéro de\nversion est toute la promesse, la surface peut encore bouger. Ce site (",[21,101,102],{},"site\u002F",") et\n",[21,105,106],{},"demos\u002Fnuxt-blog"," servent de références complètes. La structure ci-dessous correspond\nà l'état actuel. Vous avez déjà une app Nuxt ?\n",[109,110,112],"a",{"href":111},"\u002Ffr\u002Fdocs\u002Fexisting-app","Ajoutez-y Fougere",".",[115,116,118],"h2",{"id":117},"structure-dune-app","Structure d'une app",[85,120,121,122,125],{},"Une app Fougere est une app Nuxt plus un répertoire ",[21,123,124],{},"fronds\u002F"," et un fichier de config :",[14,127,132],{"className":128,"code":130,"language":131},[129],"language-text","mon-app\u002F\n  fougere.config.ts       ← persistance, auth, topologie\n  nuxt.config.ts          ← modules: ['@fougere\u002Fnuxt']\n  fronds\u002F\n    blog\u002F\n      entities\u002FPost.ts\n      handlers\u002FPostHandler.ts\n      collectors\u002FCurrentUserCollector.ts\n      seeds\u002FPost.seed.ts\n    user\u002F                 ← un second domaine\n      entities\u002FUser.ts\n  app\u002F\n    pages\u002F                ← des pages Nuxt ordinaires, qui parlent via les primitives\n","text",[21,133,130],{"__ignoreMap":19},[85,135,136,137,139],{},"Le scanner découvre les entités, handlers, collectors et seeds placés sous ",[21,138,124],{},".\nL'emplacement du fichier et le nom de la classe servent à leur enregistrement ; aucun\nfichier de câblage supplémentaire n'est nécessaire.",[85,141,142,143,145],{},"Chaque dossier placé directement sous ",[21,144,124],{}," définit une Frond. Une page importe une\nentité avec le nom de ce dossier :",[14,147,151],{"className":148,"code":149,"language":150,"meta":19,"style":19},"language-ts shiki shiki-themes material-theme-lighter github-light github-dark","import Post from '@frond\u002Fblog\u002Fentities\u002FPost';\n","ts",[21,152,153],{"__ignoreMap":19},[24,154,155,159,163,166,170,173,176],{"class":26,"line":27},[24,156,158],{"class":157},"sVHd0","import",[24,160,162],{"class":161},"su5hD"," Post ",[24,164,165],{"class":157},"from",[24,167,169],{"class":168},"sjJ54"," '",[24,171,172],{"class":34},"@frond\u002Fblog\u002Fentities\u002FPost",[24,174,175],{"class":168},"'",[24,177,178],{"class":66},";\n",[85,180,181,184,185,188,189,192,193,196,197,200,201,204,205,207,208,113],{},[21,182,183],{},"@fougere\u002Fnuxt"," lit le scan et enregistre un alias ",[21,186,187],{},"@frond\u002F\u003Cnom>"," par Frond, donc cet\nimport marche pour ",[21,190,191],{},"blog"," comme pour ",[21,194,195],{},"user"," — rien à ajouter, ni ",[21,198,199],{},"package.json",", ni entrée\ndans ",[21,202,203],{},"pnpm-workspace.yaml",". Renommer une Frond, ou en importer une depuis autre chose\nqu'une app Nuxt, est là où le ",[21,206,199],{}," d'une Frond sert : voir\n",[109,209,211],{"href":210},"\u002Ffr\u002Fdocs\u002Fconcepts\u002Ffrond#nommer-et-importer-une-frond","Frond — nommer et importer",[85,213,214,217,218,221,222,225,226,229],{},[21,215,216],{},"fougere new"," écrit les mêmes dossiers un cran plus haut — l'app sous ",[21,219,220],{},"apps\u002F\u003Cnom>\u002F",", les\nFronds partagées à la racine du workspace, ",[21,223,224],{},"fougere: { root: '..\u002F..' }"," dans\n",[21,227,228],{},"nuxt.config.ts"," — pour que plusieurs apps consomment les mêmes domaines. Une app, un\ndossier : la forme ci-dessus.",[231,232,234,235,237],"h3",{"id":233},"un-seul-domaine-pas-de-fronds-du-tout","Un seul domaine, pas de ",[21,236,124],{}," du tout",[85,239,240,241,243],{},"La racine du projet peut utiliser la même convention qu'un dossier sous ",[21,242,124],{},". Une app\navec un seul domaine peut donc placer directement ses entités et handlers à la racine :",[14,245,248],{"className":246,"code":247,"language":131},[129],"mon-shop\u002F\n  fougere.config.ts\n  nuxt.config.ts\n  entities\u002FProduct.ts       ← la racine EST la Frond, nommée d'après le dossier\n  handlers\u002FProductHandler.ts\n  app\u002Fpages\u002F\n",[21,249,247],{"__ignoreMap":19},[85,251,252,255,256,259,260,262,263,266,267,270],{},[21,253,254],{},"fougere new mon-shop --flat --frond blog"," écrit exactement ça. ",[21,257,258],{},"import Product from '@frond\u002Fmon-shop\u002Fentities\u002FProduct'"," — même règle d'alias, pas de segment ",[21,261,124],{},", et le\nmot n'arrive que le jour où il y a deux domaines à distinguer. La racine doit au moins\nporter un ",[21,264,265],{},"entities\u002F"," pour compter ; un ",[21,268,269],{},"services\u002F"," seul est un nom de dossier ordinaire.",[85,272,273,274,277,278,281,282,284],{},"Quand le deuxième domaine arrive, il va dans ",[21,275,276],{},"fronds\u002Fbilling\u002F"," et ",[88,279,280],{},"la Frond racine reste\noù elle est"," — rien ne bouge, aucun import n'est réécrit. ",[21,283,124],{}," ne définit pas une\nFrond, c'est là où vivent les autres.",[115,286,288],{"id":287},"fougereconfigts-référence","fougere.config.ts — référence",[14,290,292],{"className":148,"code":291,"language":150,"meta":19,"style":19},"import { defineFougere } from '@fougere\u002Fcore';\nimport { betterAuth } from '@fougere\u002Fauth-better';\nimport User from '.\u002Ffronds\u002Fuser\u002Fentities\u002FUser';\n\nexport default defineFougere({\n  \u002F\u002F Persistance. Trois formes :\n  \u002F\u002F   'sqlite'                          → mémoire côté Nuxt (resemée à chaque reload)\n  \u002F\u002F   { dialect: 'sqlite', path: '…' }  → fichier (survit aux reloads et aux deploys)\n  \u002F\u002F   false                             → pas de db\n  db: { dialect: 'sqlite', path: '.data\u002Fapp.db' },\n\n  \u002F\u002F Topologie. Une Frond listée ici reste SCANNÉE (ses entités continuent de\n  \u002F\u002F nourrir formulaires et validation en metadata) mais n'est pas hébergée\n  \u002F\u002F localement : les appels voyagent en JSON-RPC vers le process qui l'héberge.\n  \u002F\u002F Commenter la ligne → in-process.\n  \u002F\u002F remotes: { blog: 'http:\u002F\u002F127.0.0.1:4100' },\n\n  \u002F\u002F Auth (optionnel) — better-auth derrière une fine couche de traduction.\n  auth: betterAuth({\n    user: User,                             \u002F\u002F votre entité qui étend AuthUser\n    secret: process.env.AUTH_SECRET!,       \u002F\u002F 32+ caractères\n    baseUrl: process.env.SITE_URL ?? 'http:\u002F\u002Flocalhost:3000',\n    basePath: '\u002Fauth',                      \u002F\u002F monte \u002Fauth\u002F** (sign-in, sign-up, sign-out…)\n    trustedOrigins: ['http:\u002F\u002Flocalhost:3000'],\n    sessionTtl: 30 * 24 * 60 * 60 * 1000,\n    providers: {\n      credential: { minPasswordLength: 8, autoSignIn: true },\n      \u002F\u002F google: { clientId: …, clientSecret: … },\n    },\n  }),\n});\n",[21,293,294,319,341,360,367,385,392,398,404,410,452,457,463,469,475,481,487,492,498,512,528,559,591,611,633,667,678,709,715,721,732],{"__ignoreMap":19},[24,295,296,298,301,304,307,310,312,315,317],{"class":26,"line":27},[24,297,158],{"class":157},[24,299,300],{"class":66}," {",[24,302,303],{"class":161}," defineFougere",[24,305,306],{"class":66}," }",[24,308,309],{"class":157}," from",[24,311,169],{"class":168},[24,313,314],{"class":34},"@fougere\u002Fcore",[24,316,175],{"class":168},[24,318,178],{"class":66},[24,320,321,323,325,328,330,332,334,337,339],{"class":26,"line":57},[24,322,158],{"class":157},[24,324,300],{"class":66},[24,326,327],{"class":161}," betterAuth",[24,329,306],{"class":66},[24,331,309],{"class":157},[24,333,169],{"class":168},[24,335,336],{"class":34},"@fougere\u002Fauth-better",[24,338,175],{"class":168},[24,340,178],{"class":66},[24,342,344,346,349,351,353,356,358],{"class":26,"line":343},3,[24,345,158],{"class":157},[24,347,348],{"class":161}," User ",[24,350,165],{"class":157},[24,352,169],{"class":168},[24,354,355],{"class":34},".\u002Ffronds\u002Fuser\u002Fentities\u002FUser",[24,357,175],{"class":168},[24,359,178],{"class":66},[24,361,363],{"class":26,"line":362},4,[24,364,366],{"emptyLinePlaceholder":365},true,"\n",[24,368,370,373,376,379,382],{"class":26,"line":369},5,[24,371,372],{"class":157},"export",[24,374,375],{"class":157}," default",[24,377,303],{"class":378},"sGLFI",[24,380,381],{"class":161},"(",[24,383,384],{"class":66},"{\n",[24,386,388],{"class":26,"line":387},6,[24,389,391],{"class":390},"sutJx","  \u002F\u002F Persistance. Trois formes :\n",[24,393,395],{"class":26,"line":394},7,[24,396,397],{"class":390},"  \u002F\u002F   'sqlite'                          → mémoire côté Nuxt (resemée à chaque reload)\n",[24,399,401],{"class":26,"line":400},8,[24,402,403],{"class":390},"  \u002F\u002F   { dialect: 'sqlite', path: '…' }  → fichier (survit aux reloads et aux deploys)\n",[24,405,407],{"class":26,"line":406},9,[24,408,409],{"class":390},"  \u002F\u002F   false                             → pas de db\n",[24,411,413,417,420,422,425,427,429,432,434,437,440,442,444,447,449],{"class":26,"line":412},10,[24,414,416],{"class":415},"skxfh","  db",[24,418,419],{"class":66},":",[24,421,300],{"class":66},[24,423,424],{"class":415}," dialect",[24,426,419],{"class":66},[24,428,169],{"class":168},[24,430,431],{"class":34},"sqlite",[24,433,175],{"class":168},[24,435,436],{"class":66},",",[24,438,439],{"class":415}," path",[24,441,419],{"class":66},[24,443,169],{"class":168},[24,445,446],{"class":34},".data\u002Fapp.db",[24,448,175],{"class":168},[24,450,451],{"class":66}," },\n",[24,453,455],{"class":26,"line":454},11,[24,456,366],{"emptyLinePlaceholder":365},[24,458,460],{"class":26,"line":459},12,[24,461,462],{"class":390},"  \u002F\u002F Topologie. Une Frond listée ici reste SCANNÉE (ses entités continuent de\n",[24,464,466],{"class":26,"line":465},13,[24,467,468],{"class":390},"  \u002F\u002F nourrir formulaires et validation en metadata) mais n'est pas hébergée\n",[24,470,472],{"class":26,"line":471},14,[24,473,474],{"class":390},"  \u002F\u002F localement : les appels voyagent en JSON-RPC vers le process qui l'héberge.\n",[24,476,478],{"class":26,"line":477},15,[24,479,480],{"class":390},"  \u002F\u002F Commenter la ligne → in-process.\n",[24,482,484],{"class":26,"line":483},16,[24,485,486],{"class":390},"  \u002F\u002F remotes: { blog: 'http:\u002F\u002F127.0.0.1:4100' },\n",[24,488,490],{"class":26,"line":489},17,[24,491,366],{"emptyLinePlaceholder":365},[24,493,495],{"class":26,"line":494},18,[24,496,497],{"class":390},"  \u002F\u002F Auth (optionnel) — better-auth derrière une fine couche de traduction.\n",[24,499,501,504,506,508,510],{"class":26,"line":500},19,[24,502,503],{"class":415},"  auth",[24,505,419],{"class":66},[24,507,327],{"class":378},[24,509,381],{"class":161},[24,511,384],{"class":66},[24,513,515,518,520,523,525],{"class":26,"line":514},20,[24,516,517],{"class":415},"    user",[24,519,419],{"class":66},[24,521,522],{"class":161}," User",[24,524,436],{"class":66},[24,526,527],{"class":390},"                             \u002F\u002F votre entité qui étend AuthUser\n",[24,529,531,534,536,539,541,544,546,550,554,556],{"class":26,"line":530},21,[24,532,533],{"class":415},"    secret",[24,535,419],{"class":66},[24,537,538],{"class":161}," process",[24,540,113],{"class":66},[24,542,543],{"class":161},"env",[24,545,113],{"class":66},[24,547,549],{"class":548},"s_hVV","AUTH_SECRET",[24,551,553],{"class":552},"smGrS","!",[24,555,436],{"class":66},[24,557,558],{"class":390},"       \u002F\u002F 32+ caractères\n",[24,560,562,565,567,569,571,573,575,578,581,583,586,588],{"class":26,"line":561},22,[24,563,564],{"class":415},"    baseUrl",[24,566,419],{"class":66},[24,568,538],{"class":161},[24,570,113],{"class":66},[24,572,543],{"class":161},[24,574,113],{"class":66},[24,576,577],{"class":548},"SITE_URL",[24,579,580],{"class":552}," ??",[24,582,169],{"class":168},[24,584,585],{"class":34},"http:\u002F\u002Flocalhost:3000",[24,587,175],{"class":168},[24,589,590],{"class":66},",\n",[24,592,594,597,599,601,604,606,608],{"class":26,"line":593},23,[24,595,596],{"class":415},"    basePath",[24,598,419],{"class":66},[24,600,169],{"class":168},[24,602,603],{"class":34},"\u002Fauth",[24,605,175],{"class":168},[24,607,436],{"class":66},[24,609,610],{"class":390},"                      \u002F\u002F monte \u002Fauth\u002F** (sign-in, sign-up, sign-out…)\n",[24,612,614,617,619,622,624,626,628,631],{"class":26,"line":613},24,[24,615,616],{"class":415},"    trustedOrigins",[24,618,419],{"class":66},[24,620,621],{"class":161}," [",[24,623,175],{"class":168},[24,625,585],{"class":34},[24,627,175],{"class":168},[24,629,630],{"class":161},"]",[24,632,590],{"class":66},[24,634,636,639,641,645,648,651,653,656,658,660,662,665],{"class":26,"line":635},25,[24,637,638],{"class":415},"    sessionTtl",[24,640,419],{"class":66},[24,642,644],{"class":643},"srdBf"," 30",[24,646,647],{"class":552}," *",[24,649,650],{"class":643}," 24",[24,652,647],{"class":552},[24,654,655],{"class":643}," 60",[24,657,647],{"class":552},[24,659,655],{"class":643},[24,661,647],{"class":552},[24,663,664],{"class":643}," 1000",[24,666,590],{"class":66},[24,668,670,673,675],{"class":26,"line":669},26,[24,671,672],{"class":415},"    providers",[24,674,419],{"class":66},[24,676,677],{"class":66}," {\n",[24,679,681,684,686,688,691,693,696,698,701,703,707],{"class":26,"line":680},27,[24,682,683],{"class":415},"      credential",[24,685,419],{"class":66},[24,687,300],{"class":66},[24,689,690],{"class":415}," minPasswordLength",[24,692,419],{"class":66},[24,694,695],{"class":643}," 8",[24,697,436],{"class":66},[24,699,700],{"class":415}," autoSignIn",[24,702,419],{"class":66},[24,704,706],{"class":705},"syTEX"," true",[24,708,451],{"class":66},[24,710,712],{"class":26,"line":711},28,[24,713,714],{"class":390},"      \u002F\u002F google: { clientId: …, clientSecret: … },\n",[24,716,718],{"class":26,"line":717},29,[24,719,720],{"class":66},"    },\n",[24,722,724,727,730],{"class":26,"line":723},30,[24,725,726],{"class":66},"  }",[24,728,729],{"class":161},")",[24,731,590],{"class":66},[24,733,735,738,740],{"class":26,"line":734},31,[24,736,737],{"class":66},"}",[24,739,729],{"class":161},[24,741,178],{"class":66},[85,743,744],{},"Les tables dérivent de vos entités. Au boot, l'auto-DDL SQLite crée les tables manquantes\net ajoute les colonnes absentes. Renommages, suppressions et changements de type demandent\nune migration explicite. Les seeds tournent après cette synchronisation et appellent les\nopérations avec leur validation habituelle.",[115,746,748],{"id":747},"lancer","Lancer",[14,750,752],{"className":16,"code":751,"language":18,"meta":19,"style":19},"pnpm install\npnpm dev          # scan → synchronise le schéma additif → seed → sert sur :3000\n",[21,753,754,762],{"__ignoreMap":19},[24,755,756,759],{"class":26,"line":27},[24,757,758],{"class":30},"pnpm",[24,760,761],{"class":34}," install\n",[24,763,764,766,769],{"class":26,"line":57},[24,765,758],{"class":30},[24,767,768],{"class":34}," dev",[24,770,771],{"class":390},"          # scan → synchronise le schéma additif → seed → sert sur :3000\n",[85,773,774],{},"Vérifiez dans le log de boot le nombre de Fronds détectées :",[14,776,779],{"className":777,"code":778,"language":131},[129],"INF [boot:app] scanned 2 frond(s) in 467ms\nINF [boot] ready in 483ms — 2 frond(s) + auth (\u002Fauth)\n",[21,780,778],{"__ignoreMap":19},[85,782,783,784,788],{},"Suite : ",[109,785,787],{"href":786},"\u002Ffr\u002Fdocs\u002Fschema\u002Fentities","Entités"," — le vocabulaire des champs et les quatre axes.",[790,791,792],"style",{},"html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .stzsN, html code.shiki .stzsN{--shiki-light:#91B859;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sptTA, html code.shiki .sptTA{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}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 .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 .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}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 .skxfh, html code.shiki .skxfh{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .syTEX, html code.shiki .syTEX{--shiki-light:#FF5370;--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":19,"searchDepth":57,"depth":57,"links":794},[795,799,800],{"id":117,"depth":57,"text":118,"children":796},[797],{"id":233,"depth":343,"text":798},"Un seul domaine, pas de fronds\u002F du tout",{"id":287,"depth":57,"text":288},{"id":747,"depth":57,"text":748},"Structure d'une app Fougere et référence de fougere.config.ts.","md",{},"\u002Ffr\u002Fdocs\u002Fgetting-started",{"title":5,"description":801},"fr\u002Fdocs\u002F01.getting-started","DLtEbe0yFIVnnM3MrpQYOG2r07kH2OUd8CHPOAknTP4",[809],{"title":810,"path":811,"stem":812,"children":813,"page":845},"Fr","\u002Ffr","fr",[814],{"title":815,"path":816,"stem":817,"children":818,"page":-1},"Qu'est-ce que Fougere","\u002Ffr\u002Fdocs","fr\u002Fdocs\u002Findex",[819,820,821,824,828,846,865,894,915],{"title":815,"path":816,"stem":817},{"title":5,"path":804,"stem":806},{"title":822,"path":111,"stem":823},"App Nuxt existante","fr\u002Fdocs\u002F02.existing-app",{"title":825,"path":826,"stem":827},"La CLI","\u002Ffr\u002Fdocs\u002Fcli","fr\u002Fdocs\u002F03.cli",{"title":829,"path":830,"stem":831,"children":832,"page":845},"Concepts","\u002Ffr\u002Fdocs\u002Fconcepts","fr\u002Fdocs\u002F2.concepts",[833,837,841],{"title":834,"path":835,"stem":836},"Philosophie","\u002Ffr\u002Fdocs\u002Fconcepts\u002Fphilosophy","fr\u002Fdocs\u002F2.concepts\u002F1.philosophy",{"title":838,"path":839,"stem":840},"La Frond","\u002Ffr\u002Fdocs\u002Fconcepts\u002Ffrond","fr\u002Fdocs\u002F2.concepts\u002F2.frond",{"title":842,"path":843,"stem":844},"Le chemin le plus court","\u002Ffr\u002Fdocs\u002Fconcepts\u002Fshortest-path","fr\u002Fdocs\u002F2.concepts\u002F3.shortest-path",false,{"title":847,"path":848,"stem":849,"children":850,"page":845},"Schéma","\u002Ffr\u002Fdocs\u002Fschema","fr\u002Fdocs\u002F3.schema",[851,853,857,861],{"title":787,"path":786,"stem":852},"fr\u002Fdocs\u002F3.schema\u002F1.entities",{"title":854,"path":855,"stem":856},"Vues","\u002Ffr\u002Fdocs\u002Fschema\u002Fviews","fr\u002Fdocs\u002F3.schema\u002F2.views",{"title":858,"path":859,"stem":860},"La carte d'identité","\u002Ffr\u002Fdocs\u002Fschema\u002Fcard","fr\u002Fdocs\u002F3.schema\u002F3.card",{"title":862,"path":863,"stem":864},"Standard Schema","\u002Ffr\u002Fdocs\u002Fschema\u002Fstandard-schema","fr\u002Fdocs\u002F3.schema\u002F4.standard-schema",{"title":866,"path":867,"stem":868,"children":869,"page":845},"Métier","\u002Ffr\u002Fdocs\u002Fbusiness","fr\u002Fdocs\u002F4.business",[870,874,878,882,886,890],{"title":871,"path":872,"stem":873},"Handlers","\u002Ffr\u002Fdocs\u002Fbusiness\u002Fhandlers","fr\u002Fdocs\u002F4.business\u002F1.handlers",{"title":875,"path":876,"stem":877},"Presenters","\u002Ffr\u002Fdocs\u002Fbusiness\u002Fpresenters","fr\u002Fdocs\u002F4.business\u002F2.presenters",{"title":879,"path":880,"stem":881},"Collectors","\u002Ffr\u002Fdocs\u002Fbusiness\u002Fcollectors","fr\u002Fdocs\u002F4.business\u002F3.collectors",{"title":883,"path":884,"stem":885},"Erreurs","\u002Ffr\u002Fdocs\u002Fbusiness\u002Ferrors","fr\u002Fdocs\u002F4.business\u002F4.errors",{"title":887,"path":888,"stem":889},"Seeds","\u002Ffr\u002Fdocs\u002Fbusiness\u002Fseeds","fr\u002Fdocs\u002F4.business\u002F5.seeds",{"title":891,"path":892,"stem":893},"Les faits","\u002Ffr\u002Fdocs\u002Fbusiness\u002Ffacts","fr\u002Fdocs\u002F4.business\u002F6.facts",{"title":895,"path":896,"stem":897,"children":898,"page":845},"Client","\u002Ffr\u002Fdocs\u002Fclient","fr\u002Fdocs\u002F5.client",[899,903,907,911],{"title":900,"path":901,"stem":902},"Queries & commands","\u002Ffr\u002Fdocs\u002Fclient\u002Fqueries-commands","fr\u002Fdocs\u002F5.client\u002F1.queries-commands",{"title":904,"path":905,"stem":906},"Formulaires","\u002Ffr\u002Fdocs\u002Fclient\u002Fforms","fr\u002Fdocs\u002F5.client\u002F2.forms",{"title":908,"path":909,"stem":910},"Session","\u002Ffr\u002Fdocs\u002Fclient\u002Fsession","fr\u002Fdocs\u002F5.client\u002F3.session",{"title":912,"path":913,"stem":914},"invoke","\u002Ffr\u002Fdocs\u002Fclient\u002Finvoke","fr\u002Fdocs\u002F5.client\u002F4.invoke",{"title":916,"path":917,"stem":918,"children":919,"page":845},"Infrastructure","\u002Ffr\u002Fdocs\u002Finfra","fr\u002Fdocs\u002F6.infra",[920,924,928,932],{"title":921,"path":922,"stem":923},"Le gradient","\u002Ffr\u002Fdocs\u002Finfra\u002Fgradient","fr\u002Fdocs\u002F6.infra\u002F1.gradient",{"title":925,"path":926,"stem":927},"Surfaces — REST & GraphQL","\u002Ffr\u002Fdocs\u002Finfra\u002Fsurfaces","fr\u002Fdocs\u002F6.infra\u002F2.surfaces",{"title":929,"path":930,"stem":931},"Déploiement","\u002Ffr\u002Fdocs\u002Finfra\u002Fdeployment","fr\u002Fdocs\u002F6.infra\u002F3.deployment",{"title":933,"path":934,"stem":935},"Hôtes","\u002Ffr\u002Fdocs\u002Finfra\u002Fhosts","fr\u002Fdocs\u002F6.infra\u002F4.hosts",1786637819107]