[{"data":1,"prerenderedAt":1132},["ShallowReactive",2],{"fougere:post.list:{}":3,"docs:\u002Fdocs\u002Fextending\u002Fwithout-compiler":6,"docs-uses":819,"docs-nav":994},{"items":4,"hasMore":5},[],false,{"id":7,"title":8,"body":9,"description":810,"extension":811,"forms":812,"kind":813,"meta":814,"navigation":204,"path":815,"seo":816,"stem":817,"step":812,"uses":812,"__hash__":818},"docs\u002Fdocs\u002F8.extending\u002F10.without-compiler.md","Boot without the compiler",{"type":10,"value":11,"toc":807},"minimark",[12,35,46,549,573,588,593,604,692,695,797,803],[13,14,15,16,21,22,26,27,30,31,34],"p",{},"The scan reads the ",[17,18,20],"a",{"href":19},"\u002Fdocs\u002Fextending\u002Fscan","convention directories",". What it writes from them is a ",[23,24,25],"code",{},"fronds.ts"," — the list of\n",[23,28,29],{},"frond()"," calls an author would write — and that file is what every host boots from. Writing it\nyourself is how an app runs with no ",[23,32,33],{},"@fougere\u002Fcompiler"," installed.",[13,36,37,38,41,42,45],{},"A class says most of what it is: ",[23,39,40],{},"Repository\u003CPost>"," its five operations, ",[23,43,44],{},"Present\u003CPost>"," its fields. What\nTypeScript erases — the parameters of a method you wrote, and what it answers — is stated, and nothing\nis guessed:",[47,48,53],"pre",{"className":49,"code":50,"language":51,"meta":52,"style":52},"language-ts shiki shiki-themes material-theme-lighter fougere-pastel material-theme-palenight","\u002F\u002F fronds.ts\nimport { frond } from '@fougere\u002Fcore';\nimport Post from '.\u002Ffronds\u002Fblog\u002Fentities\u002FPost.ts';\nimport User from '.\u002Ffronds\u002Fuser\u002Fentities\u002FUser.ts';\nimport PostHandler from '.\u002Ffronds\u002Fblog\u002Fhandlers\u002FPostHandler.ts';\nimport CurrentUserCollector from '.\u002Ffronds\u002Fblog\u002Fservices\u002FCurrentUserCollector.ts';\nimport { slug } from '.\u002Ffronds\u002Fblog\u002Fvocabulary\u002Fslug.ts';\n\nexport const vocabulary = [slug];\n\nexport default [\n  frond('blog', {\n    entities: [Post],\n    collectors: [CurrentUserCollector],\n    handlers: [{\n      ctor: PostHandler,\n      operations: {\n        publish: { params: { id: [Post, 'id'], user: { type: User, optional: true } }, output: Post },\n        mine: { params: { user: { type: User, optional: true } }, output: [Post] },\n      },\n    }],\n  }),\n  frond('user', { entities: [User] }),\n];\n","ts","",[23,54,55,64,99,119,138,157,176,199,206,234,239,250,273,293,310,323,336,346,426,479,485,495,506,542],{"__ignoreMap":52},[56,57,60],"span",{"class":58,"line":59},"line",1,[56,61,63],{"class":62},"skXKP","\u002F\u002F fronds.ts\n",[56,65,67,71,75,79,82,85,89,93,96],{"class":58,"line":66},2,[56,68,70],{"class":69},"sK6XW","import",[56,72,74],{"class":73},"s15xx"," {",[56,76,78],{"class":77},"sPEhv"," frond",[56,80,81],{"class":73}," }",[56,83,84],{"class":69}," from",[56,86,88],{"class":87},"sDDC1"," '",[56,90,92],{"class":91},"sN-8n","@fougere\u002Fcore",[56,94,95],{"class":87},"'",[56,97,98],{"class":73},";\n",[56,100,102,104,107,110,112,115,117],{"class":58,"line":101},3,[56,103,70],{"class":69},[56,105,106],{"class":77}," Post ",[56,108,109],{"class":69},"from",[56,111,88],{"class":87},[56,113,114],{"class":91},".\u002Ffronds\u002Fblog\u002Fentities\u002FPost.ts",[56,116,95],{"class":87},[56,118,98],{"class":73},[56,120,122,124,127,129,131,134,136],{"class":58,"line":121},4,[56,123,70],{"class":69},[56,125,126],{"class":77}," User ",[56,128,109],{"class":69},[56,130,88],{"class":87},[56,132,133],{"class":91},".\u002Ffronds\u002Fuser\u002Fentities\u002FUser.ts",[56,135,95],{"class":87},[56,137,98],{"class":73},[56,139,141,143,146,148,150,153,155],{"class":58,"line":140},5,[56,142,70],{"class":69},[56,144,145],{"class":77}," PostHandler ",[56,147,109],{"class":69},[56,149,88],{"class":87},[56,151,152],{"class":91},".\u002Ffronds\u002Fblog\u002Fhandlers\u002FPostHandler.ts",[56,154,95],{"class":87},[56,156,98],{"class":73},[56,158,160,162,165,167,169,172,174],{"class":58,"line":159},6,[56,161,70],{"class":69},[56,163,164],{"class":77}," CurrentUserCollector ",[56,166,109],{"class":69},[56,168,88],{"class":87},[56,170,171],{"class":91},".\u002Ffronds\u002Fblog\u002Fservices\u002FCurrentUserCollector.ts",[56,173,95],{"class":87},[56,175,98],{"class":73},[56,177,179,181,183,186,188,190,192,195,197],{"class":58,"line":178},7,[56,180,70],{"class":69},[56,182,74],{"class":73},[56,184,185],{"class":77}," slug",[56,187,81],{"class":73},[56,189,84],{"class":69},[56,191,88],{"class":87},[56,193,194],{"class":91},".\u002Ffronds\u002Fblog\u002Fvocabulary\u002Fslug.ts",[56,196,95],{"class":87},[56,198,98],{"class":73},[56,200,202],{"class":58,"line":201},8,[56,203,205],{"emptyLinePlaceholder":204},true,"\n",[56,207,209,212,216,219,222,226,229,232],{"class":58,"line":208},9,[56,210,211],{"class":69},"export",[56,213,215],{"class":214},"s76I7"," const",[56,217,218],{"class":77}," vocabulary ",[56,220,221],{"class":73},"=",[56,223,225],{"class":224},"srlTG"," [",[56,227,228],{"class":77},"slug",[56,230,231],{"class":224},"]",[56,233,98],{"class":73},[56,235,237],{"class":58,"line":236},10,[56,238,205],{"emptyLinePlaceholder":204},[56,240,242,244,247],{"class":58,"line":241},11,[56,243,211],{"class":69},[56,245,246],{"class":69}," default",[56,248,249],{"class":224}," [\n",[56,251,253,257,260,262,265,267,270],{"class":58,"line":252},12,[56,254,256],{"class":255},"s4mR9","  frond",[56,258,259],{"class":224},"(",[56,261,95],{"class":87},[56,263,264],{"class":91},"blog",[56,266,95],{"class":87},[56,268,269],{"class":73},",",[56,271,272],{"class":73}," {\n",[56,274,276,280,283,285,288,290],{"class":58,"line":275},13,[56,277,279],{"class":278},"sHtqg","    entities",[56,281,282],{"class":73},":",[56,284,225],{"class":224},[56,286,287],{"class":77},"Post",[56,289,231],{"class":224},[56,291,292],{"class":73},",\n",[56,294,296,299,301,303,306,308],{"class":58,"line":295},14,[56,297,298],{"class":278},"    collectors",[56,300,282],{"class":73},[56,302,225],{"class":224},[56,304,305],{"class":77},"CurrentUserCollector",[56,307,231],{"class":224},[56,309,292],{"class":73},[56,311,313,316,318,320],{"class":58,"line":312},15,[56,314,315],{"class":278},"    handlers",[56,317,282],{"class":73},[56,319,225],{"class":224},[56,321,322],{"class":73},"{\n",[56,324,326,329,331,334],{"class":58,"line":325},16,[56,327,328],{"class":278},"      ctor",[56,330,282],{"class":73},[56,332,333],{"class":77}," PostHandler",[56,335,292],{"class":73},[56,337,339,342,344],{"class":58,"line":338},17,[56,340,341],{"class":278},"      operations",[56,343,282],{"class":73},[56,345,272],{"class":73},[56,347,349,352,354,356,359,361,363,366,368,370,372,374,376,379,381,383,385,388,390,392,395,397,400,402,405,407,411,413,416,419,421,423],{"class":58,"line":348},18,[56,350,351],{"class":278},"        publish",[56,353,282],{"class":73},[56,355,74],{"class":73},[56,357,358],{"class":278}," params",[56,360,282],{"class":73},[56,362,74],{"class":73},[56,364,365],{"class":278}," id",[56,367,282],{"class":73},[56,369,225],{"class":224},[56,371,287],{"class":77},[56,373,269],{"class":73},[56,375,88],{"class":87},[56,377,378],{"class":91},"id",[56,380,95],{"class":87},[56,382,231],{"class":224},[56,384,269],{"class":73},[56,386,387],{"class":278}," user",[56,389,282],{"class":73},[56,391,74],{"class":73},[56,393,394],{"class":278}," type",[56,396,282],{"class":73},[56,398,399],{"class":77}," User",[56,401,269],{"class":73},[56,403,404],{"class":278}," optional",[56,406,282],{"class":73},[56,408,410],{"class":409},"slmMI"," true",[56,412,81],{"class":73},[56,414,415],{"class":73}," },",[56,417,418],{"class":278}," output",[56,420,282],{"class":73},[56,422,106],{"class":77},[56,424,425],{"class":73},"},\n",[56,427,429,432,434,436,438,440,442,444,446,448,450,452,454,456,458,460,462,464,466,468,470,472,474,476],{"class":58,"line":428},19,[56,430,431],{"class":278},"        mine",[56,433,282],{"class":73},[56,435,74],{"class":73},[56,437,358],{"class":278},[56,439,282],{"class":73},[56,441,74],{"class":73},[56,443,387],{"class":278},[56,445,282],{"class":73},[56,447,74],{"class":73},[56,449,394],{"class":278},[56,451,282],{"class":73},[56,453,399],{"class":77},[56,455,269],{"class":73},[56,457,404],{"class":278},[56,459,282],{"class":73},[56,461,410],{"class":409},[56,463,81],{"class":73},[56,465,415],{"class":73},[56,467,418],{"class":278},[56,469,282],{"class":73},[56,471,225],{"class":224},[56,473,287],{"class":77},[56,475,231],{"class":224},[56,477,478],{"class":73}," },\n",[56,480,482],{"class":58,"line":481},20,[56,483,484],{"class":73},"      },\n",[56,486,488,491,493],{"class":58,"line":487},21,[56,489,490],{"class":73},"    }",[56,492,231],{"class":224},[56,494,292],{"class":73},[56,496,498,501,504],{"class":58,"line":497},22,[56,499,500],{"class":73},"  }",[56,502,503],{"class":224},")",[56,505,292],{"class":73},[56,507,509,511,513,515,518,520,522,524,527,529,531,534,536,538,540],{"class":58,"line":508},23,[56,510,256],{"class":255},[56,512,259],{"class":224},[56,514,95],{"class":87},[56,516,517],{"class":91},"user",[56,519,95],{"class":87},[56,521,269],{"class":73},[56,523,74],{"class":73},[56,525,526],{"class":278}," entities",[56,528,282],{"class":73},[56,530,225],{"class":224},[56,532,533],{"class":77},"User",[56,535,231],{"class":224},[56,537,81],{"class":73},[56,539,503],{"class":224},[56,541,292],{"class":73},[56,543,545,547],{"class":58,"line":544},24,[56,546,231],{"class":224},[56,548,98],{"class":73},[13,550,551,554,555,557,558,561,562,565,566,572],{},[23,552,553],{},"[Post, 'id']"," is a field of an entity, ",[23,556,517],{}," is what the collector answers, ",[23,559,560],{},"[Post]"," answers several, and whether an operation is a query or\na command is told by its name: only read verbs make a query. What the file does not list is not served — the boot\ncannot tell a method left out from one kept ",[23,563,564],{},"private",", since TypeScript erases the keyword.\n",[17,567,569],{"href":568},"\u002Freference\u002Fcli",[23,570,571],{},"fougere check"," reads the sources and names a public method the file does not list.",[13,574,575,576,579,580,583,584,587],{},"What an operation refuses is yours to state too: ",[23,577,578],{},"errors: [ErrorCode.CONFLICT]"," beside ",[23,581,582],{},"output",". The scan finds\nthat list by following the ",[23,585,586],{},"throw","s, and a list you write is taken as it is, so nothing checks it against the code.",[589,590,592],"h2",{"id":591},"every-generated-file-is-optional","Every generated file is optional",[13,594,595,596,599,600,603],{},"The scan writes in ",[23,597,598],{},".fougere\u002F",", which git ignores and you can delete at any time. No command has to run:\na host writes these files when it starts, and ",[23,601,602],{},"fougere build"," writes them for a CI. Each one saves you\nsome writing, and none is required:",[605,606,607,623],"table",{},[608,609,610],"thead",{},[611,612,613,617,620],"tr",{},[614,615,616],"th",{},"Generated",[614,618,619],{},"Without it",[614,621,622],{},"By hand",[624,625,626,643,660,673],"tbody",{},[611,627,628,634,637],{},[629,630,631],"td",{},[23,632,633],{},"fronds.generated.ts",[629,635,636],{},"the scan runs at boot, or the boot refuses if the compiler is not installed",[629,638,639,640,642],{},"a ",[23,641,25],{},", above",[611,644,645,650,657],{},[629,646,647],{},[23,648,649],{},"facade.generated.ts",[629,651,652,653,656],{},"a page's ",[23,654,655],{},"@fronds\u002Ffacade"," import does not resolve",[629,658,659],{},"one line per handler, below",[611,661,662,667,670],{},[629,663,664],{},[23,665,666],{},"names.generated.d.ts",[629,668,669],{},"a wrong name in the config is refused at boot, not in the editor",[629,671,672],{},"nothing to write",[611,674,675,680,690],{},[629,676,677],{},[23,678,679],{},"build\u002F",[629,681,682,685,686,689],{},[23,683,684],{},"fougere serve"," refuses; ",[23,687,688],{},"fougere dev"," runs the sources",[629,691,672],{},[13,693,694],{},"A facade is the handler as a type, and an address as a value. Written in a page, it brings no server\ncode to the browser:",[47,696,698],{"className":49,"code":697,"language":51,"meta":52,"style":52},"import type { FacadeName } from '@fougere\u002Fcore\u002Fcontract';\nimport type PostHandler from '@fronds\u002Fblog\u002Fhandlers\u002FPostHandler.js';\n\nconst post: FacadeName\u003CPostHandler, 'post'> = { address: 'post' };\n",[23,699,700,724,743,747],{"__ignoreMap":52},[56,701,702,704,706,708,711,713,715,717,720,722],{"class":58,"line":59},[56,703,70],{"class":69},[56,705,394],{"class":69},[56,707,74],{"class":73},[56,709,710],{"class":77}," FacadeName",[56,712,81],{"class":73},[56,714,84],{"class":69},[56,716,88],{"class":87},[56,718,719],{"class":91},"@fougere\u002Fcore\u002Fcontract",[56,721,95],{"class":87},[56,723,98],{"class":73},[56,725,726,728,730,732,734,736,739,741],{"class":58,"line":66},[56,727,70],{"class":69},[56,729,394],{"class":69},[56,731,145],{"class":77},[56,733,109],{"class":69},[56,735,88],{"class":87},[56,737,738],{"class":91},"@fronds\u002Fblog\u002Fhandlers\u002FPostHandler.js",[56,740,95],{"class":87},[56,742,98],{"class":73},[56,744,745],{"class":58,"line":101},[56,746,205],{"emptyLinePlaceholder":204},[56,748,749,752,755,757,760,763,766,768,770,773,775,778,781,783,786,788,790,792,794],{"class":58,"line":121},[56,750,751],{"class":214},"const",[56,753,754],{"class":77}," post",[56,756,282],{"class":73},[56,758,710],{"class":759},"sBZYL",[56,761,762],{"class":73},"\u003C",[56,764,765],{"class":759},"PostHandler",[56,767,269],{"class":73},[56,769,88],{"class":87},[56,771,772],{"class":91},"post",[56,774,95],{"class":87},[56,776,777],{"class":73},">",[56,779,780],{"class":73}," =",[56,782,74],{"class":73},[56,784,785],{"class":278}," address",[56,787,282],{"class":73},[56,789,88],{"class":87},[56,791,772],{"class":91},[56,793,95],{"class":87},[56,795,796],{"class":73}," };\n",[13,798,799,800,802],{},"Two things are lost. The address is yours to keep right, since a typo only fails when the call runs. And\na client reads every error code, because what an operation refuses is what the scan finds by following\nits ",[23,801,586],{},"s.",[804,805,806],"style",{},"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 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 .srlTG, html code.shiki .srlTG{--shiki-light:#90A4AE;--shiki-default:#A3B0A5;--shiki-dark:#BABED8}html pre.shiki code .s4mR9, html code.shiki .s4mR9{--shiki-light:#6182B8;--shiki-default:#C9B6EA;--shiki-dark:#82AAFF}html pre.shiki code .sHtqg, html code.shiki .sHtqg{--shiki-light:#E53935;--shiki-default:#93CFC0;--shiki-dark:#F07178}html pre.shiki code .slmMI, html code.shiki .slmMI{--shiki-light:#FF5370;--shiki-default:#EE9F6B;--shiki-dark:#FF9CAC}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 .sBZYL, html code.shiki .sBZYL{--shiki-light:#E2931D;--shiki-default:#EFCD8F;--shiki-dark:#FFCB6B}",{"title":52,"searchDepth":66,"depth":66,"links":808},[809],{"id":591,"depth":66,"text":592},"Fronds written by hand, booted by Node alone.","md",null,"extending",{},"\u002Fdocs\u002Fextending\u002Fwithout-compiler",{"title":8,"description":810},"docs\u002F8.extending\u002F10.without-compiler","o7YtVhEKYrrhBW7BhamVcf4e1DwkLrhDl8XyaWBWy-U",[820,823,826,829,832,835,838,841,844,850,856,861,865,869,873,877,881,886,890,894,899,903,908,912,916,920,924,928,932,936,940,944,948,952,956,960,964,966,967,970,973,976,979,982,985,988,991],{"path":821,"title":822,"uses":812},"\u002Fdocs\u002Fconcepts\u002Fentity","Entity",{"path":824,"title":825,"uses":812},"\u002Fdocs\u002Fconcepts\u002Fhandler","Handler",{"path":827,"title":828,"uses":812},"\u002Fdocs\u002Fconcepts\u002Frepository","Repository",{"path":830,"title":831,"uses":812},"\u002Fdocs\u002Fconcepts\u002Ffrond","Frond",{"path":833,"title":834,"uses":812},"\u002Fdocs\u002Fconcepts\u002Ffacade","Facade",{"path":836,"title":837,"uses":812},"\u002Fdocs\u002Fconcepts\u002Ffact","Fact",{"path":839,"title":840,"uses":812},"\u002Fdocs\u002Fconcepts\u002Fport","Port",{"path":842,"title":843,"uses":812},"\u002Fdocs\u002Fconcepts\u002Fconfiguration","Configuration",{"path":845,"title":846,"uses":847},"\u002Fdocs\u002Faccess\u002Fauthentication","Authentication",[848,849],"port","frond",{"path":851,"title":852,"uses":853},"\u002Fdocs\u002Faccess\u002Fstate","Keep a caller's state",[854,855],"configuration","handler",{"path":857,"title":858,"uses":859},"\u002Fdocs\u002Fdata\u002Fsql","SQLite or Postgres",[860,854],"entity",{"path":862,"title":863,"uses":864},"\u002Fdocs\u002Fdata\u002Fseveral-databases","Several databases",[854,860],{"path":866,"title":867,"uses":868},"\u002Fdocs\u002Fdata\u002Fcomputed-field","A computed field",[860,848],{"path":870,"title":871,"uses":872},"\u002Fdocs\u002Fdata\u002Fevolve","Evolve a schema",[860],{"path":874,"title":875,"uses":876},"\u002Fdocs\u002Fdata\u002Fseeds","Seed data",[860],{"path":878,"title":879,"uses":880},"\u002Fdocs\u002Fdata\u002Fvalues","Read settings and secrets",[860,854],{"path":882,"title":883,"uses":884},"\u002Fdocs\u002Fdata\u002Fmirror","Mirror a source you cannot query",[885],"repository",{"path":887,"title":888,"uses":889},"\u002Fdocs\u002Fdata\u002Ftogether","Two writes as one",[885],{"path":891,"title":892,"uses":893},"\u002Fdocs\u002Fbehaviour\u002Faround-every-call","Around every call",[848,849],{"path":895,"title":896,"uses":897},"\u002Fdocs\u002Fbehaviour\u002Ffinish-a-fact","Finish a fact",[898],"fact",{"path":900,"title":901,"uses":902},"\u002Fdocs\u002Fserve\u002Frest-graphql","REST, OpenAPI, GraphQL",[855,854],{"path":904,"title":905,"uses":906},"\u002Fdocs\u002Fserve\u002Fpages","Pages: queries and commands",[855,907],"facade",{"path":909,"title":910,"uses":911},"\u002Fdocs\u002Fserve\u002Fforms","A form",[860],{"path":913,"title":914,"uses":915},"\u002Fdocs\u002Fserve\u002Fadmin","An admin panel",[855],{"path":917,"title":918,"uses":919},"\u002Fdocs\u002Frun\u002Fdeploy","Deploy a split",[854,849],{"path":921,"title":922,"uses":923},"\u002Fdocs\u002Frun\u002Fsecure","Secure calls between processes",[854,849],{"path":925,"title":926,"uses":927},"\u002Fdocs\u002Frun\u002Flifecycle","Reload and shut down",[854],{"path":929,"title":930,"uses":931},"\u002Fdocs\u002Frun\u002Fobserve","Observe",[854,855],{"path":933,"title":934,"uses":935},"\u002Fdocs\u002Frun\u002Fdev-panel","The dev panel",[855],{"path":937,"title":938,"uses":939},"\u002Fdocs\u002Frun\u002Ftest","Test",[860,848],{"path":941,"title":942,"uses":943},"\u002Fdocs\u002Fadopt\u002Fnew-project","Start a project",[849,854],{"path":945,"title":946,"uses":947},"\u002Fdocs\u002Fadopt\u002Fexisting-app","Add Fougere to an existing app",[849,854],{"path":949,"title":950,"uses":951},"\u002Fdocs\u002Fadopt\u002Fbring-your-schema","Bring your schema",[860],{"path":953,"title":954,"uses":955},"\u002Fdocs\u002Fadopt\u002Fhosts","Pick a host",[854],{"path":957,"title":958,"uses":959},"\u002Fdocs\u002Fadopt\u002Fanother-repository","A frond from another repository",[907,849],{"path":961,"title":962,"uses":963},"\u002Fdocs\u002Fadopt\u002Fdemos","Demos",[],{"path":19,"title":965,"uses":812},"How the scan reads a project",{"path":815,"title":8,"uses":812},{"path":968,"title":969,"uses":812},"\u002Fdocs\u002Fextending\u002Fboot","The boot, step by step",{"path":971,"title":972,"uses":812},"\u002Fdocs\u002Fextending\u002Fcard-and-wire","The card and the wire",{"path":974,"title":975,"uses":812},"\u002Fdocs\u002Fextending\u002Fextension-points","Registries and extension points",{"path":977,"title":978,"uses":812},"\u002Fdocs\u002Fextending\u002Fvocabulary","Teach a word",{"path":980,"title":981,"uses":812},"\u002Fdocs\u002Fextending\u002Fextensions","Run code at boot and shutdown",{"path":983,"title":984,"uses":812},"\u002Fdocs\u002Fextending\u002Fsource-adapter","Write a source adapter",{"path":986,"title":987,"uses":812},"\u002Fdocs\u002Fextending\u002Fsurface","Write a surface",{"path":989,"title":990,"uses":812},"\u002Fdocs\u002Fextending\u002Fforeign-frond","A frond in another language",{"path":992,"title":993,"uses":812},"\u002Fdocs","What is Fougere",[995],{"title":996,"path":992,"stem":997,"children":998,"page":-1},"Docs","docs",[999,1001,1022,1031,1052,1061,1074,1091,1108],{"title":993,"path":992,"stem":1000},"docs\u002Findex",{"title":1002,"path":1003,"stem":1004,"children":1005,"page":5},"Concepts","\u002Fdocs\u002Fconcepts","docs\u002F1.concepts",[1006,1008,1010,1012,1014,1016,1018,1020],{"title":822,"path":821,"stem":1007},"docs\u002F1.concepts\u002F1.entity",{"title":825,"path":824,"stem":1009},"docs\u002F1.concepts\u002F2.handler",{"title":828,"path":827,"stem":1011},"docs\u002F1.concepts\u002F3.repository",{"title":831,"path":830,"stem":1013},"docs\u002F1.concepts\u002F4.frond",{"title":834,"path":833,"stem":1015},"docs\u002F1.concepts\u002F5.facade",{"title":837,"path":836,"stem":1017},"docs\u002F1.concepts\u002F6.fact",{"title":840,"path":839,"stem":1019},"docs\u002F1.concepts\u002F7.port",{"title":843,"path":842,"stem":1021},"docs\u002F1.concepts\u002F8.configuration",{"title":1023,"path":1024,"stem":1025,"children":1026,"page":5},"Access","\u002Fdocs\u002Faccess","docs\u002F2.access",[1027,1029],{"title":846,"path":845,"stem":1028},"docs\u002F2.access\u002F1.authentication",{"title":852,"path":851,"stem":1030},"docs\u002F2.access\u002F2.state",{"title":1032,"path":1033,"stem":1034,"children":1035,"page":5},"Data","\u002Fdocs\u002Fdata","docs\u002F3.data",[1036,1038,1040,1042,1044,1046,1048,1050],{"title":858,"path":857,"stem":1037},"docs\u002F3.data\u002F1.sql",{"title":863,"path":862,"stem":1039},"docs\u002F3.data\u002F2.several-databases",{"title":867,"path":866,"stem":1041},"docs\u002F3.data\u002F3.computed-field",{"title":871,"path":870,"stem":1043},"docs\u002F3.data\u002F4.evolve",{"title":875,"path":874,"stem":1045},"docs\u002F3.data\u002F5.seeds",{"title":879,"path":878,"stem":1047},"docs\u002F3.data\u002F6.values",{"title":883,"path":882,"stem":1049},"docs\u002F3.data\u002F7.mirror",{"title":888,"path":887,"stem":1051},"docs\u002F3.data\u002F8.together",{"title":1053,"path":1054,"stem":1055,"children":1056,"page":5},"Behaviour","\u002Fdocs\u002Fbehaviour","docs\u002F4.behaviour",[1057,1059],{"title":892,"path":891,"stem":1058},"docs\u002F4.behaviour\u002F1.around-every-call",{"title":896,"path":895,"stem":1060},"docs\u002F4.behaviour\u002F2.finish-a-fact",{"title":1062,"path":1063,"stem":1064,"children":1065,"page":5},"Serve","\u002Fdocs\u002Fserve","docs\u002F5.serve",[1066,1068,1070,1072],{"title":901,"path":900,"stem":1067},"docs\u002F5.serve\u002F1.rest-graphql",{"title":905,"path":904,"stem":1069},"docs\u002F5.serve\u002F2.pages",{"title":910,"path":909,"stem":1071},"docs\u002F5.serve\u002F3.forms",{"title":914,"path":913,"stem":1073},"docs\u002F5.serve\u002F4.admin",{"title":1075,"path":1076,"stem":1077,"children":1078,"page":5},"Run","\u002Fdocs\u002Frun","docs\u002F6.run",[1079,1081,1083,1085,1087,1089],{"title":918,"path":917,"stem":1080},"docs\u002F6.run\u002F1.deploy",{"title":922,"path":921,"stem":1082},"docs\u002F6.run\u002F2.secure",{"title":926,"path":925,"stem":1084},"docs\u002F6.run\u002F3.lifecycle",{"title":930,"path":929,"stem":1086},"docs\u002F6.run\u002F4.observe",{"title":934,"path":933,"stem":1088},"docs\u002F6.run\u002F5.dev-panel",{"title":938,"path":937,"stem":1090},"docs\u002F6.run\u002F6.test",{"title":1092,"path":1093,"stem":1094,"children":1095,"page":5},"Adopt","\u002Fdocs\u002Fadopt","docs\u002F7.adopt",[1096,1098,1100,1102,1104,1106],{"title":942,"path":941,"stem":1097},"docs\u002F7.adopt\u002F1.new-project",{"title":946,"path":945,"stem":1099},"docs\u002F7.adopt\u002F2.existing-app",{"title":950,"path":949,"stem":1101},"docs\u002F7.adopt\u002F3.bring-your-schema",{"title":954,"path":953,"stem":1103},"docs\u002F7.adopt\u002F4.hosts",{"title":958,"path":957,"stem":1105},"docs\u002F7.adopt\u002F5.another-repository",{"title":962,"path":961,"stem":1107},"docs\u002F7.adopt\u002F6.demos",{"title":1109,"path":1110,"stem":1111,"children":1112,"page":5},"Extending","\u002Fdocs\u002Fextending","docs\u002F8.extending",[1113,1115,1116,1118,1120,1122,1124,1126,1128,1130],{"title":965,"path":19,"stem":1114},"docs\u002F8.extending\u002F1.scan",{"title":8,"path":815,"stem":817},{"title":969,"path":968,"stem":1117},"docs\u002F8.extending\u002F2.boot",{"title":972,"path":971,"stem":1119},"docs\u002F8.extending\u002F3.card-and-wire",{"title":975,"path":974,"stem":1121},"docs\u002F8.extending\u002F4.extension-points",{"title":978,"path":977,"stem":1123},"docs\u002F8.extending\u002F5.vocabulary",{"title":981,"path":980,"stem":1125},"docs\u002F8.extending\u002F6.extensions",{"title":984,"path":983,"stem":1127},"docs\u002F8.extending\u002F7.source-adapter",{"title":987,"path":986,"stem":1129},"docs\u002F8.extending\u002F8.surface",{"title":990,"path":989,"stem":1131},"docs\u002F8.extending\u002F9.foreign-frond",1794396615312]