[{"data":1,"prerenderedAt":1270},["ShallowReactive",2],{"fougere:post.list:{}":3,"docs:\u002Fdocs\u002Fserve\u002Fpages":6,"docs-uses":960,"docs-nav":1132},{"items":4,"hasMore":5},[],false,{"id":7,"title":8,"body":9,"description":948,"extension":949,"forms":950,"kind":951,"meta":952,"navigation":80,"path":953,"seo":954,"stem":955,"step":956,"uses":957,"__hash__":959},"docs\u002Fdocs\u002F5.serve\u002F2.pages.md","Pages: queries and commands",{"type":10,"value":11,"toc":941},"minimark",[12,30,227,232,247,250,273,288,316,320,371,374,466,473,572,576,600,616,672,675,679,690,694,700,833,905,928,937],[13,14,15,16,20,21,24,25,29],"p",{},"A page reads with a ",[17,18,19],"strong",{},"query"," and writes with a ",[17,22,23],{},"command",". Both name a facade — the address of a\nhandler, imported from ",[26,27,28],"code",{},"@fronds\u002Ffacade"," — and an operation of that handler.",[31,32,37],"pre",{"className":33,"code":34,"language":35,"meta":36,"style":36},"language-ts shiki shiki-themes material-theme-lighter fougere-pastel material-theme-palenight","import { post } from '@fronds\u002Ffacade';\n\nconst { items, total, hasMore, loading, error } = await useQuery(post, 'list');\nconst publish = useCommand(post, 'publish');\nawait publish.execute({ params: { id } });\n\u002F\u002F every mounted query on `post` reads again\n","ts","",[26,38,39,75,82,149,180,220],{"__ignoreMap":36},[40,41,44,48,52,56,59,62,66,69,72],"span",{"class":42,"line":43},"line",1,[40,45,47],{"class":46},"sK6XW","import",[40,49,51],{"class":50},"s15xx"," {",[40,53,55],{"class":54},"sPEhv"," post",[40,57,58],{"class":50}," }",[40,60,61],{"class":46}," from",[40,63,65],{"class":64},"sDDC1"," '",[40,67,28],{"class":68},"sN-8n",[40,70,71],{"class":64},"'",[40,73,74],{"class":50},";\n",[40,76,78],{"class":42,"line":77},2,[40,79,81],{"emptyLinePlaceholder":80},true,"\n",[40,83,85,89,91,94,97,100,102,105,107,110,112,115,118,121,124,128,132,135,137,139,142,144,147],{"class":42,"line":84},3,[40,86,88],{"class":87},"s76I7","const",[40,90,51],{"class":50},[40,92,93],{"class":54}," items",[40,95,96],{"class":50},",",[40,98,99],{"class":54}," total",[40,101,96],{"class":50},[40,103,104],{"class":54}," hasMore",[40,106,96],{"class":50},[40,108,109],{"class":54}," loading",[40,111,96],{"class":50},[40,113,114],{"class":54}," error ",[40,116,117],{"class":50},"}",[40,119,120],{"class":50}," =",[40,122,123],{"class":46}," await",[40,125,127],{"class":126},"s4mR9"," useQuery",[40,129,131],{"class":130},"srlTG","(",[40,133,134],{"class":54},"post",[40,136,96],{"class":50},[40,138,65],{"class":64},[40,140,141],{"class":68},"list",[40,143,71],{"class":64},[40,145,146],{"class":130},")",[40,148,74],{"class":50},[40,150,152,154,157,160,163,165,167,169,171,174,176,178],{"class":42,"line":151},4,[40,153,88],{"class":87},[40,155,156],{"class":54}," publish ",[40,158,159],{"class":50},"=",[40,161,162],{"class":126}," useCommand",[40,164,131],{"class":130},[40,166,134],{"class":54},[40,168,96],{"class":50},[40,170,65],{"class":64},[40,172,173],{"class":68},"publish",[40,175,71],{"class":64},[40,177,146],{"class":130},[40,179,74],{"class":50},[40,181,183,186,189,192,195,197,200,204,207,209,212,214,216,218],{"class":42,"line":182},5,[40,184,185],{"class":46},"await",[40,187,188],{"class":54}," publish",[40,190,191],{"class":50},".",[40,193,194],{"class":126},"execute",[40,196,131],{"class":130},[40,198,199],{"class":50},"{",[40,201,203],{"class":202},"sHtqg"," params",[40,205,206],{"class":50},":",[40,208,51],{"class":50},[40,210,211],{"class":54}," id ",[40,213,117],{"class":50},[40,215,58],{"class":50},[40,217,146],{"class":130},[40,219,74],{"class":50},[40,221,223],{"class":42,"line":222},6,[40,224,226],{"class":225},"skXKP","\u002F\u002F every mounted query on `post` reads again\n",[228,229,231],"h2",{"id":230},"what-the-import-carries","What the import carries",[13,233,234,236,237,239,240,242,243,246],{},[26,235,28],{}," is written by the scan: one ",[26,238,88],{}," per address, carrying the handler that answers\nthere as a type. Compiled, ",[26,241,134],{}," is ",[26,244,245],{},"{ address: 'post' }"," — the handler is never imported, so no\nserver code reaches the bundle.",[13,248,249],{},"The type is the page's contract: which operations exist, what each answers, what each can refuse.\nYou write no row shape by hand.",[31,251,253],{"className":33,"code":252,"language":35,"meta":36,"style":36},"publish.error?.code   \u002F\u002F ErrorCode.CONFLICT | ErrorCode.FORBIDDEN | ErrorCode.NOT_FOUND\n",[26,254,255],{"__ignoreMap":36},[40,256,257,259,261,265,268,270],{"class":42,"line":43},[40,258,173],{"class":54},[40,260,191],{"class":50},[40,262,264],{"class":263},"sy9f4","error",[40,266,267],{"class":50},"?.",[40,269,26],{"class":263},[40,271,272],{"class":225},"   \u002F\u002F ErrorCode.CONFLICT | ErrorCode.FORBIDDEN | ErrorCode.NOT_FOUND\n",[13,274,275,276,279,280,283,284,287],{},"Those are the codes ",[26,277,278],{},"PostHandler.publish"," can throw, read from its code and the helpers it calls. A\n",[26,281,282],{},"switch"," over them with a ",[26,285,286],{},"never"," default stops compiling the day the operation learns a new refusal.",[13,289,290,291,294,295,298,299,301,302,305,306,309,310,312,313,191],{},"The address is the handler's name less ",[26,292,293],{},"Handler",": ",[26,296,297],{},"PostHandler"," answers at ",[26,300,134],{},", ",[26,303,304],{},"CheckoutHandler","\nat ",[26,307,308],{},"checkout",". If your page already has a variable called ",[26,311,134],{},", rename the import:\n",[26,314,315],{},"import { post as posts } from '@fronds\u002Ffacade'",[228,317,319],{"id":318},"usequery","useQuery",[31,321,323],{"className":33,"code":322,"language":35,"meta":36,"style":36},"useQuery(facade, op, input?, opts?)\n\u002F\u002F op:    an operation of the handler — anything else does not compile\n\u002F\u002F input: CallInput | () => CallInput      CallInput = { params?, query?, input? }\n\u002F\u002F opts:  { immediate?: boolean }          false → do not call on mount\n",[26,324,325,356,361,366],{"__ignoreMap":36},[40,326,327,329,331,334,336,339,341,344,347,350,353],{"class":42,"line":43},[40,328,319],{"class":126},[40,330,131],{"class":130},[40,332,333],{"class":54},"facade",[40,335,96],{"class":50},[40,337,338],{"class":54}," op",[40,340,96],{"class":50},[40,342,343],{"class":54}," input",[40,345,346],{"class":50},"?,",[40,348,349],{"class":54}," opts",[40,351,352],{"class":50},"?",[40,354,355],{"class":54},")\n",[40,357,358],{"class":42,"line":77},[40,359,360],{"class":225},"\u002F\u002F op:    an operation of the handler — anything else does not compile\n",[40,362,363],{"class":42,"line":84},[40,364,365],{"class":225},"\u002F\u002F input: CallInput | () => CallInput      CallInput = { params?, query?, input? }\n",[40,367,368],{"class":42,"line":151},[40,369,370],{"class":225},"\u002F\u002F opts:  { immediate?: boolean }          false → do not call on mount\n",[13,372,373],{},"It returns, all reactive:",[375,376,377,390],"table",{},[378,379,380],"thead",{},[381,382,383,387],"tr",{},[384,385,386],"th",{},"Key",[384,388,389],{},"What it holds",[391,392,393,407,417,430,443,456],"tbody",{},[381,394,395,401],{},[396,397,398],"td",{},[26,399,400],{},"data",[396,402,403,404],{},"the answer as it came — one row for ",[26,405,406],{},"findById",[381,408,409,414],{},[396,410,411],{},[26,412,413],{},"items",[396,415,416],{},"the rows of a list, whether the operation answers an array or a page",[381,418,419,427],{},[396,420,421,301,424],{},[26,422,423],{},"total",[26,425,426],{},"hasMore",[396,428,429],{},"when the operation answers a page",[381,431,432,437],{},[396,433,434],{},[26,435,436],{},"loading",[396,438,439,442],{},[26,440,441],{},"true"," while the call runs",[381,444,445,449],{},[396,446,447],{},[26,448,264],{},[396,450,451,452,455],{},"the ",[26,453,454],{},"FougereError",", typed by what the operation can refuse",[381,457,458,463],{},[396,459,460],{},[26,461,462],{},"refresh",[396,464,465],{},"read again by hand — rarely needed, see below",[13,467,468,469,472],{},"A function as ",[26,470,471],{},"input"," makes the query follow its arguments:",[31,474,476],{"className":33,"code":475,"language":35,"meta":36,"style":36},"const { items } = await useQuery(post, 'searchByTitle',\n  () => ({ input: { title: submitted.value } }),\n  { immediate: false });\n",[26,477,478,511,552],{"__ignoreMap":36},[40,479,480,482,484,487,489,491,493,495,497,499,501,503,506,508],{"class":42,"line":43},[40,481,88],{"class":87},[40,483,51],{"class":50},[40,485,486],{"class":54}," items ",[40,488,117],{"class":50},[40,490,120],{"class":50},[40,492,123],{"class":46},[40,494,127],{"class":126},[40,496,131],{"class":130},[40,498,134],{"class":54},[40,500,96],{"class":50},[40,502,65],{"class":64},[40,504,505],{"class":68},"searchByTitle",[40,507,71],{"class":64},[40,509,510],{"class":50},",\n",[40,512,513,516,520,523,525,527,529,531,534,536,539,541,544,546,548,550],{"class":42,"line":77},[40,514,515],{"class":50},"  ()",[40,517,519],{"class":518},"scTuO"," =>",[40,521,522],{"class":130}," (",[40,524,199],{"class":50},[40,526,343],{"class":202},[40,528,206],{"class":50},[40,530,51],{"class":50},[40,532,533],{"class":202}," title",[40,535,206],{"class":50},[40,537,538],{"class":54}," submitted",[40,540,191],{"class":50},[40,542,543],{"class":263},"value",[40,545,58],{"class":50},[40,547,58],{"class":50},[40,549,146],{"class":130},[40,551,510],{"class":50},[40,553,554,557,560,562,566,568,570],{"class":42,"line":84},[40,555,556],{"class":50},"  {",[40,558,559],{"class":202}," immediate",[40,561,206],{"class":50},[40,563,565],{"class":564},"slmMI"," false",[40,567,58],{"class":50},[40,569,146],{"class":130},[40,571,74],{"class":50},[228,573,575],{"id":574},"usecommand","useCommand",[31,577,579],{"className":33,"code":578,"language":35,"meta":36,"style":36},"useCommand(facade, op)\n\u002F\u002F → { execute(input?), loading, error }\n",[26,580,581,595],{"__ignoreMap":36},[40,582,583,585,587,589,591,593],{"class":42,"line":43},[40,584,575],{"class":126},[40,586,131],{"class":130},[40,588,333],{"class":54},[40,590,96],{"class":50},[40,592,338],{"class":54},[40,594,355],{"class":130},[40,596,597],{"class":42,"line":77},[40,598,599],{"class":225},"\u002F\u002F → { execute(input?), loading, error }\n",[13,601,602,603,605,606,609,610,612,613,615],{},"A refusal is not thrown: ",[26,604,194],{}," answers ",[26,607,608],{},"null"," and puts the ",[26,611,454],{}," in ",[26,614,264],{},". A page that\nshows the error writes nothing else; a page that goes on checks the answer:",[31,617,619],{"className":33,"code":618,"language":35,"meta":36,"style":36},"if (await remove.execute({ params: { id } })) navigateTo('\u002F');\n",[26,620,621],{"__ignoreMap":36},[40,622,623,626,628,630,633,635,637,639,641,643,645,647,649,651,653,656,659,661,663,666,668,670],{"class":42,"line":43},[40,624,625],{"class":46},"if",[40,627,522],{"class":130},[40,629,185],{"class":46},[40,631,632],{"class":54}," remove",[40,634,191],{"class":50},[40,636,194],{"class":126},[40,638,131],{"class":130},[40,640,199],{"class":50},[40,642,203],{"class":202},[40,644,206],{"class":50},[40,646,51],{"class":50},[40,648,211],{"class":54},[40,650,117],{"class":50},[40,652,58],{"class":50},[40,654,655],{"class":130},"))",[40,657,658],{"class":126}," navigateTo",[40,660,131],{"class":130},[40,662,71],{"class":64},[40,664,665],{"class":68},"\u002F",[40,667,71],{"class":64},[40,669,146],{"class":130},[40,671,74],{"class":50},[13,673,674],{},"A command that succeeds makes every mounted query on the same facade read again. Publish a post, and\nthe lists of posts on screen refresh.",[228,676,678],{"id":677},"what-travels","What travels",[13,680,681,682,685,686,689],{},"The browser sends a JSON-RPC call to ",[26,683,684],{},"POST \u002F_fougere\u002Fcall"," — ",[26,687,688],{},"method: \"post.list\""," — the same frame\ntwo processes exchange. While the page renders on the server, the same call runs in memory, with no\nrequest at all. The browser never sends the call's state: the server builds it from the request,\nsession included. A command is never retried on its own.",[228,691,693],{"id":692},"from-the-server-invoke","From the server: invoke",[13,695,696,699],{},[26,697,698],{},"invoke"," calls an operation from server code — a route, a scheduled task — without reactive state:",[31,701,703],{"className":33,"code":702,"language":35,"meta":36,"style":36},"\u002F\u002F server\u002Froutes\u002Ffeed.xml.get.ts\nimport Post from '@fronds\u002Fblog\u002Fentities\u002FPost.js';\n\nexport default defineEventHandler(async () => {\n  const posts = await invoke\u003CPost[]>(Post, 'list');\n\n  return renderRss(posts);\n});\n",[26,704,705,710,729,733,757,802,806,824],{"__ignoreMap":36},[40,706,707],{"class":42,"line":43},[40,708,709],{"class":225},"\u002F\u002F server\u002Froutes\u002Ffeed.xml.get.ts\n",[40,711,712,714,717,720,722,725,727],{"class":42,"line":77},[40,713,47],{"class":46},[40,715,716],{"class":54}," Post ",[40,718,719],{"class":46},"from",[40,721,65],{"class":64},[40,723,724],{"class":68},"@fronds\u002Fblog\u002Fentities\u002FPost.js",[40,726,71],{"class":64},[40,728,74],{"class":50},[40,730,731],{"class":42,"line":84},[40,732,81],{"emptyLinePlaceholder":80},[40,734,735,738,741,744,746,749,752,754],{"class":42,"line":151},[40,736,737],{"class":46},"export",[40,739,740],{"class":46}," default",[40,742,743],{"class":126}," defineEventHandler",[40,745,131],{"class":130},[40,747,748],{"class":87},"async",[40,750,751],{"class":50}," ()",[40,753,519],{"class":518},[40,755,756],{"class":50}," {\n",[40,758,759,762,765,767,769,772,775,779,783,786,788,790,792,794,796,798,800],{"class":42,"line":182},[40,760,761],{"class":87},"  const",[40,763,764],{"class":54}," posts",[40,766,120],{"class":50},[40,768,123],{"class":46},[40,770,771],{"class":126}," invoke",[40,773,774],{"class":50},"\u003C",[40,776,778],{"class":777},"sBZYL","Post",[40,780,782],{"class":781},"spAFX","[]",[40,784,785],{"class":50},">",[40,787,131],{"class":781},[40,789,778],{"class":54},[40,791,96],{"class":50},[40,793,65],{"class":64},[40,795,141],{"class":68},[40,797,71],{"class":64},[40,799,146],{"class":781},[40,801,74],{"class":50},[40,803,804],{"class":42,"line":222},[40,805,81],{"emptyLinePlaceholder":80},[40,807,809,812,815,817,820,822],{"class":42,"line":808},7,[40,810,811],{"class":46},"  return",[40,813,814],{"class":126}," renderRss",[40,816,131],{"class":781},[40,818,819],{"class":54},"posts",[40,821,146],{"class":781},[40,823,74],{"class":50},[40,825,827,829,831],{"class":42,"line":826},8,[40,828,117],{"class":50},[40,830,146],{"class":130},[40,832,74],{"class":50},[31,834,836],{"className":33,"code":835,"language":35,"meta":36,"style":36},"invoke\u003CT>(Entity, op, input?)            \u002F\u002F by entity\ninvoke\u003CT>({ address, op }, input?)       \u002F\u002F by address\n",[26,837,838,870],{"__ignoreMap":36},[40,839,840,842,844,847,849,851,854,856,858,860,862,864,867],{"class":42,"line":43},[40,841,698],{"class":126},[40,843,774],{"class":50},[40,845,846],{"class":777},"T",[40,848,785],{"class":50},[40,850,131],{"class":130},[40,852,853],{"class":54},"Entity",[40,855,96],{"class":50},[40,857,338],{"class":54},[40,859,96],{"class":50},[40,861,343],{"class":54},[40,863,352],{"class":50},[40,865,866],{"class":54},")            ",[40,868,869],{"class":225},"\u002F\u002F by entity\n",[40,871,872,874,876,878,880,882,884,887,889,892,895,897,899,902],{"class":42,"line":77},[40,873,698],{"class":126},[40,875,774],{"class":50},[40,877,846],{"class":777},[40,879,785],{"class":50},[40,881,131],{"class":130},[40,883,199],{"class":50},[40,885,886],{"class":54}," address",[40,888,96],{"class":50},[40,890,891],{"class":54}," op ",[40,893,894],{"class":50},"},",[40,896,343],{"class":54},[40,898,352],{"class":50},[40,900,901],{"class":54},")       ",[40,903,904],{"class":225},"\u002F\u002F by address\n",[906,907,908,919,922],"ul",{},[909,910,911,912,612,915,918],"li",{},"A frond in this process runs in memory; one with a ",[26,913,914],{},"remote",[26,916,917],{},"fronds:"," is called over the\nnetwork. Your code is the same.",[909,920,921],{},"Inside a request, the current session goes with the call. Outside one, the state is empty.",[909,923,924,925,927],{},"A refusal is the same ",[26,926,454],{}," a page receives.",[13,929,930,932,933,936],{},[26,931,698],{}," calls operations, nothing else. A service, the ",[26,934,935],{},"Logger"," or a value come from the constructor.",[938,939,940],"style",{},"html pre.shiki code .sK6XW, html code.shiki .sK6XW{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#8FCF86;--shiki-default-font-style:inherit;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s15xx, html code.shiki .s15xx{--shiki-light:#39ADB5;--shiki-default:#A3B0A5;--shiki-dark:#89DDFF}html pre.shiki code .sPEhv, html code.shiki .sPEhv{--shiki-light:#90A4AE;--shiki-default:#DDE5DA;--shiki-dark:#BABED8}html pre.shiki code .sDDC1, html code.shiki .sDDC1{--shiki-light:#39ADB5;--shiki-default:#EE9F6B;--shiki-dark:#89DDFF}html pre.shiki code .sN-8n, html code.shiki .sN-8n{--shiki-light:#91B859;--shiki-default:#EE9F6B;--shiki-dark:#C3E88D}html pre.shiki code .s76I7, html code.shiki .s76I7{--shiki-light:#9C3EDA;--shiki-default:#8FCF86;--shiki-dark:#C792EA}html pre.shiki code .s4mR9, html code.shiki .s4mR9{--shiki-light:#6182B8;--shiki-default:#C9B6EA;--shiki-dark:#82AAFF}html pre.shiki code .srlTG, html code.shiki .srlTG{--shiki-light:#90A4AE;--shiki-default:#A3B0A5;--shiki-dark:#BABED8}html pre.shiki code .sHtqg, html code.shiki .sHtqg{--shiki-light:#E53935;--shiki-default:#93CFC0;--shiki-dark:#F07178}html pre.shiki code .skXKP, html code.shiki .skXKP{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#7D8C80;--shiki-default-font-style:inherit;--shiki-dark:#676E95;--shiki-dark-font-style:italic}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 .sy9f4, html code.shiki .sy9f4{--shiki-light:#90A4AE;--shiki-default:#93CFC0;--shiki-dark:#BABED8}html pre.shiki code .scTuO, html code.shiki .scTuO{--shiki-light:#9C3EDA;--shiki-default:#A3B0A5;--shiki-dark:#C792EA}html pre.shiki code .slmMI, html code.shiki .slmMI{--shiki-light:#FF5370;--shiki-default:#EE9F6B;--shiki-dark:#FF9CAC}html pre.shiki code .sBZYL, html code.shiki .sBZYL{--shiki-light:#E2931D;--shiki-default:#EFCD8F;--shiki-dark:#FFCB6B}html pre.shiki code .spAFX, html code.shiki .spAFX{--shiki-light:#E53935;--shiki-default:#A3B0A5;--shiki-dark:#F07178}",{"title":36,"searchDepth":77,"depth":77,"links":942},[943,944,945,946,947],{"id":230,"depth":77,"text":231},{"id":318,"depth":77,"text":319},{"id":574,"depth":77,"text":575},{"id":677,"depth":77,"text":678},{"id":692,"depth":77,"text":693},"A page that reads, a command that refreshes it, and a call from the server.","md",[319,575,698],"task",{},"\u002Fdocs\u002Fserve\u002Fpages",{"title":8,"description":948},"docs\u002F5.serve\u002F2.pages",null,[958,333],"handler","CfqQSTyygOTaRtWDXJnsJ9d4mmYUm75kyczMLen6Fb8",[961,963,965,968,971,974,977,980,983,989,994,999,1003,1007,1011,1015,1019,1024,1028,1032,1037,1041,1043,1047,1051,1055,1059,1063,1067,1071,1075,1079,1083,1087,1091,1095,1099,1102,1105,1108,1111,1114,1117,1120,1123,1126,1129],{"path":962,"title":853,"uses":956},"\u002Fdocs\u002Fconcepts\u002Fentity",{"path":964,"title":293,"uses":956},"\u002Fdocs\u002Fconcepts\u002Fhandler",{"path":966,"title":967,"uses":956},"\u002Fdocs\u002Fconcepts\u002Frepository","Repository",{"path":969,"title":970,"uses":956},"\u002Fdocs\u002Fconcepts\u002Ffrond","Frond",{"path":972,"title":973,"uses":956},"\u002Fdocs\u002Fconcepts\u002Ffacade","Facade",{"path":975,"title":976,"uses":956},"\u002Fdocs\u002Fconcepts\u002Ffact","Fact",{"path":978,"title":979,"uses":956},"\u002Fdocs\u002Fconcepts\u002Fport","Port",{"path":981,"title":982,"uses":956},"\u002Fdocs\u002Fconcepts\u002Fconfiguration","Configuration",{"path":984,"title":985,"uses":986},"\u002Fdocs\u002Faccess\u002Fauthentication","Authentication",[987,988],"port","frond",{"path":990,"title":991,"uses":992},"\u002Fdocs\u002Faccess\u002Fstate","Keep a caller's state",[993,958],"configuration",{"path":995,"title":996,"uses":997},"\u002Fdocs\u002Fdata\u002Fsql","SQLite or Postgres",[998,993],"entity",{"path":1000,"title":1001,"uses":1002},"\u002Fdocs\u002Fdata\u002Fseveral-databases","Several databases",[993,998],{"path":1004,"title":1005,"uses":1006},"\u002Fdocs\u002Fdata\u002Fcomputed-field","A computed field",[998,987],{"path":1008,"title":1009,"uses":1010},"\u002Fdocs\u002Fdata\u002Fevolve","Evolve a schema",[998],{"path":1012,"title":1013,"uses":1014},"\u002Fdocs\u002Fdata\u002Fseeds","Seed data",[998],{"path":1016,"title":1017,"uses":1018},"\u002Fdocs\u002Fdata\u002Fvalues","Read settings and secrets",[998,993],{"path":1020,"title":1021,"uses":1022},"\u002Fdocs\u002Fdata\u002Fmirror","Mirror a source you cannot query",[1023],"repository",{"path":1025,"title":1026,"uses":1027},"\u002Fdocs\u002Fdata\u002Ftogether","Two writes as one",[1023],{"path":1029,"title":1030,"uses":1031},"\u002Fdocs\u002Fbehaviour\u002Faround-every-call","Around every call",[987,988],{"path":1033,"title":1034,"uses":1035},"\u002Fdocs\u002Fbehaviour\u002Ffinish-a-fact","Finish a fact",[1036],"fact",{"path":1038,"title":1039,"uses":1040},"\u002Fdocs\u002Fserve\u002Frest-graphql","REST, OpenAPI, GraphQL",[958,993],{"path":953,"title":8,"uses":1042},[958,333],{"path":1044,"title":1045,"uses":1046},"\u002Fdocs\u002Fserve\u002Fforms","A form",[998],{"path":1048,"title":1049,"uses":1050},"\u002Fdocs\u002Fserve\u002Fadmin","An admin panel",[958],{"path":1052,"title":1053,"uses":1054},"\u002Fdocs\u002Frun\u002Fdeploy","Deploy a split",[993,988],{"path":1056,"title":1057,"uses":1058},"\u002Fdocs\u002Frun\u002Fsecure","Secure calls between processes",[993,988],{"path":1060,"title":1061,"uses":1062},"\u002Fdocs\u002Frun\u002Flifecycle","Reload and shut down",[993],{"path":1064,"title":1065,"uses":1066},"\u002Fdocs\u002Frun\u002Fobserve","Observe",[993,958],{"path":1068,"title":1069,"uses":1070},"\u002Fdocs\u002Frun\u002Fdev-panel","The dev panel",[958],{"path":1072,"title":1073,"uses":1074},"\u002Fdocs\u002Frun\u002Ftest","Test",[998,987],{"path":1076,"title":1077,"uses":1078},"\u002Fdocs\u002Fadopt\u002Fnew-project","Start a project",[988,993],{"path":1080,"title":1081,"uses":1082},"\u002Fdocs\u002Fadopt\u002Fexisting-app","Add Fougere to an existing app",[988,993],{"path":1084,"title":1085,"uses":1086},"\u002Fdocs\u002Fadopt\u002Fbring-your-schema","Bring your schema",[998],{"path":1088,"title":1089,"uses":1090},"\u002Fdocs\u002Fadopt\u002Fhosts","Pick a host",[993],{"path":1092,"title":1093,"uses":1094},"\u002Fdocs\u002Fadopt\u002Fanother-repository","A frond from another repository",[333,988],{"path":1096,"title":1097,"uses":1098},"\u002Fdocs\u002Fadopt\u002Fdemos","Demos",[],{"path":1100,"title":1101,"uses":956},"\u002Fdocs\u002Fextending\u002Fscan","How the scan reads a project",{"path":1103,"title":1104,"uses":956},"\u002Fdocs\u002Fextending\u002Fwithout-compiler","Boot without the compiler",{"path":1106,"title":1107,"uses":956},"\u002Fdocs\u002Fextending\u002Fboot","The boot, step by step",{"path":1109,"title":1110,"uses":956},"\u002Fdocs\u002Fextending\u002Fcard-and-wire","The card and the wire",{"path":1112,"title":1113,"uses":956},"\u002Fdocs\u002Fextending\u002Fextension-points","Registries and extension points",{"path":1115,"title":1116,"uses":956},"\u002Fdocs\u002Fextending\u002Fvocabulary","Teach a word",{"path":1118,"title":1119,"uses":956},"\u002Fdocs\u002Fextending\u002Fextensions","Run code at boot and shutdown",{"path":1121,"title":1122,"uses":956},"\u002Fdocs\u002Fextending\u002Fsource-adapter","Write a source adapter",{"path":1124,"title":1125,"uses":956},"\u002Fdocs\u002Fextending\u002Fsurface","Write a surface",{"path":1127,"title":1128,"uses":956},"\u002Fdocs\u002Fextending\u002Fforeign-frond","A frond in another language",{"path":1130,"title":1131,"uses":956},"\u002Fdocs","What is Fougere",[1133],{"title":1134,"path":1130,"stem":1135,"children":1136,"page":-1},"Docs","docs",[1137,1139,1160,1169,1190,1199,1211,1228,1245],{"title":1131,"path":1130,"stem":1138},"docs\u002Findex",{"title":1140,"path":1141,"stem":1142,"children":1143,"page":5},"Concepts","\u002Fdocs\u002Fconcepts","docs\u002F1.concepts",[1144,1146,1148,1150,1152,1154,1156,1158],{"title":853,"path":962,"stem":1145},"docs\u002F1.concepts\u002F1.entity",{"title":293,"path":964,"stem":1147},"docs\u002F1.concepts\u002F2.handler",{"title":967,"path":966,"stem":1149},"docs\u002F1.concepts\u002F3.repository",{"title":970,"path":969,"stem":1151},"docs\u002F1.concepts\u002F4.frond",{"title":973,"path":972,"stem":1153},"docs\u002F1.concepts\u002F5.facade",{"title":976,"path":975,"stem":1155},"docs\u002F1.concepts\u002F6.fact",{"title":979,"path":978,"stem":1157},"docs\u002F1.concepts\u002F7.port",{"title":982,"path":981,"stem":1159},"docs\u002F1.concepts\u002F8.configuration",{"title":1161,"path":1162,"stem":1163,"children":1164,"page":5},"Access","\u002Fdocs\u002Faccess","docs\u002F2.access",[1165,1167],{"title":985,"path":984,"stem":1166},"docs\u002F2.access\u002F1.authentication",{"title":991,"path":990,"stem":1168},"docs\u002F2.access\u002F2.state",{"title":1170,"path":1171,"stem":1172,"children":1173,"page":5},"Data","\u002Fdocs\u002Fdata","docs\u002F3.data",[1174,1176,1178,1180,1182,1184,1186,1188],{"title":996,"path":995,"stem":1175},"docs\u002F3.data\u002F1.sql",{"title":1001,"path":1000,"stem":1177},"docs\u002F3.data\u002F2.several-databases",{"title":1005,"path":1004,"stem":1179},"docs\u002F3.data\u002F3.computed-field",{"title":1009,"path":1008,"stem":1181},"docs\u002F3.data\u002F4.evolve",{"title":1013,"path":1012,"stem":1183},"docs\u002F3.data\u002F5.seeds",{"title":1017,"path":1016,"stem":1185},"docs\u002F3.data\u002F6.values",{"title":1021,"path":1020,"stem":1187},"docs\u002F3.data\u002F7.mirror",{"title":1026,"path":1025,"stem":1189},"docs\u002F3.data\u002F8.together",{"title":1191,"path":1192,"stem":1193,"children":1194,"page":5},"Behaviour","\u002Fdocs\u002Fbehaviour","docs\u002F4.behaviour",[1195,1197],{"title":1030,"path":1029,"stem":1196},"docs\u002F4.behaviour\u002F1.around-every-call",{"title":1034,"path":1033,"stem":1198},"docs\u002F4.behaviour\u002F2.finish-a-fact",{"title":1200,"path":1201,"stem":1202,"children":1203,"page":5},"Serve","\u002Fdocs\u002Fserve","docs\u002F5.serve",[1204,1206,1207,1209],{"title":1039,"path":1038,"stem":1205},"docs\u002F5.serve\u002F1.rest-graphql",{"title":8,"path":953,"stem":955},{"title":1045,"path":1044,"stem":1208},"docs\u002F5.serve\u002F3.forms",{"title":1049,"path":1048,"stem":1210},"docs\u002F5.serve\u002F4.admin",{"title":1212,"path":1213,"stem":1214,"children":1215,"page":5},"Run","\u002Fdocs\u002Frun","docs\u002F6.run",[1216,1218,1220,1222,1224,1226],{"title":1053,"path":1052,"stem":1217},"docs\u002F6.run\u002F1.deploy",{"title":1057,"path":1056,"stem":1219},"docs\u002F6.run\u002F2.secure",{"title":1061,"path":1060,"stem":1221},"docs\u002F6.run\u002F3.lifecycle",{"title":1065,"path":1064,"stem":1223},"docs\u002F6.run\u002F4.observe",{"title":1069,"path":1068,"stem":1225},"docs\u002F6.run\u002F5.dev-panel",{"title":1073,"path":1072,"stem":1227},"docs\u002F6.run\u002F6.test",{"title":1229,"path":1230,"stem":1231,"children":1232,"page":5},"Adopt","\u002Fdocs\u002Fadopt","docs\u002F7.adopt",[1233,1235,1237,1239,1241,1243],{"title":1077,"path":1076,"stem":1234},"docs\u002F7.adopt\u002F1.new-project",{"title":1081,"path":1080,"stem":1236},"docs\u002F7.adopt\u002F2.existing-app",{"title":1085,"path":1084,"stem":1238},"docs\u002F7.adopt\u002F3.bring-your-schema",{"title":1089,"path":1088,"stem":1240},"docs\u002F7.adopt\u002F4.hosts",{"title":1093,"path":1092,"stem":1242},"docs\u002F7.adopt\u002F5.another-repository",{"title":1097,"path":1096,"stem":1244},"docs\u002F7.adopt\u002F6.demos",{"title":1246,"path":1247,"stem":1248,"children":1249,"page":5},"Extending","\u002Fdocs\u002Fextending","docs\u002F8.extending",[1250,1252,1254,1256,1258,1260,1262,1264,1266,1268],{"title":1101,"path":1100,"stem":1251},"docs\u002F8.extending\u002F1.scan",{"title":1104,"path":1103,"stem":1253},"docs\u002F8.extending\u002F10.without-compiler",{"title":1107,"path":1106,"stem":1255},"docs\u002F8.extending\u002F2.boot",{"title":1110,"path":1109,"stem":1257},"docs\u002F8.extending\u002F3.card-and-wire",{"title":1113,"path":1112,"stem":1259},"docs\u002F8.extending\u002F4.extension-points",{"title":1116,"path":1115,"stem":1261},"docs\u002F8.extending\u002F5.vocabulary",{"title":1119,"path":1118,"stem":1263},"docs\u002F8.extending\u002F6.extensions",{"title":1122,"path":1121,"stem":1265},"docs\u002F8.extending\u002F7.source-adapter",{"title":1125,"path":1124,"stem":1267},"docs\u002F8.extending\u002F8.surface",{"title":1128,"path":1127,"stem":1269},"docs\u002F8.extending\u002F9.foreign-frond",1794396614645]