[{"data":1,"prerenderedAt":865},["ShallowReactive",2],{"fougere:post.list:{}":3,"docs:\u002Fdocs\u002Fbehaviour\u002Faround-every-call":6,"docs-uses":553,"docs-nav":727},{"items":4,"hasMore":5},[],false,{"id":7,"title":8,"body":9,"description":539,"extension":540,"forms":541,"kind":543,"meta":544,"navigation":100,"path":545,"seo":546,"stem":547,"step":548,"uses":549,"__hash__":552},"docs\u002Fdocs\u002F4.behaviour\u002F1.around-every-call.md","Around every call",{"type":10,"value":11,"toc":533},"minimark",[12,21,26,332,348,356,360,363,421,425,431,497,501,519,529],[13,14,15,16,20],"p",{},"Timing, an audit trail, a guard: something that must run around every call of a frond, and that no\nhandler should have to remember. Write it once, as a class standing in front of ",[17,18,19],"code",{},"Dispatcher"," — the\nport every call of the frond goes through.",[22,23,25],"h2",{"id":24},"write-the-link","Write the link",[27,28,33],"pre",{"className":29,"code":30,"language":31,"meta":32,"style":32},"language-ts shiki shiki-themes material-theme-lighter fougere-pastel material-theme-palenight","\u002F\u002F fronds\u002Fblog\u002Fservices\u002FWrote.ts\nimport { Logger, type Call, type Dispatcher } from '@fougere\u002Fcore';\n\nexport default class Wrote implements Partial\u003CDispatcher> {\n  constructor(private inner: Dispatcher, private log: Logger) {}\n\n  async dispatch(call: Call) {\n    const answer = await this.inner.dispatch(call);\n    this.log.info(`${call.address.address}.${call.address.operation}`);\n\n    return answer;\n  }\n}\n","ts","",[17,34,35,44,95,102,136,175,180,203,244,305,310,320,326],{"__ignoreMap":32},[36,37,40],"span",{"class":38,"line":39},"line",1,[36,41,43],{"class":42},"skXKP","\u002F\u002F fronds\u002Fblog\u002Fservices\u002FWrote.ts\n",[36,45,47,51,55,59,62,65,68,70,72,75,78,81,85,89,92],{"class":38,"line":46},2,[36,48,50],{"class":49},"sK6XW","import",[36,52,54],{"class":53},"s15xx"," {",[36,56,58],{"class":57},"sPEhv"," Logger",[36,60,61],{"class":53},",",[36,63,64],{"class":49}," type",[36,66,67],{"class":57}," Call",[36,69,61],{"class":53},[36,71,64],{"class":49},[36,73,74],{"class":57}," Dispatcher",[36,76,77],{"class":53}," }",[36,79,80],{"class":49}," from",[36,82,84],{"class":83},"sDDC1"," '",[36,86,88],{"class":87},"sN-8n","@fougere\u002Fcore",[36,90,91],{"class":83},"'",[36,93,94],{"class":53},";\n",[36,96,98],{"class":38,"line":97},3,[36,99,101],{"emptyLinePlaceholder":100},true,"\n",[36,103,105,108,111,115,119,122,125,128,130,133],{"class":38,"line":104},4,[36,106,107],{"class":49},"export",[36,109,110],{"class":49}," default",[36,112,114],{"class":113},"s76I7"," class",[36,116,118],{"class":117},"sBZYL"," Wrote",[36,120,121],{"class":113}," implements",[36,123,124],{"class":117}," Partial",[36,126,127],{"class":53},"\u003C",[36,129,19],{"class":117},[36,131,132],{"class":53},">",[36,134,135],{"class":53}," {\n",[36,137,139,142,145,148,152,155,157,159,162,165,167,169,172],{"class":38,"line":138},5,[36,140,141],{"class":113},"  constructor",[36,143,144],{"class":53},"(",[36,146,147],{"class":113},"private",[36,149,151],{"class":150},"shDUQ"," inner",[36,153,154],{"class":53},":",[36,156,74],{"class":117},[36,158,61],{"class":53},[36,160,161],{"class":113}," private",[36,163,164],{"class":150}," log",[36,166,154],{"class":53},[36,168,58],{"class":117},[36,170,171],{"class":53},")",[36,173,174],{"class":53}," {}\n",[36,176,178],{"class":38,"line":177},6,[36,179,101],{"emptyLinePlaceholder":100},[36,181,183,186,190,192,195,197,199,201],{"class":38,"line":182},7,[36,184,185],{"class":113},"  async",[36,187,189],{"class":188},"shDkW"," dispatch",[36,191,144],{"class":53},[36,193,194],{"class":150},"call",[36,196,154],{"class":53},[36,198,67],{"class":117},[36,200,171],{"class":53},[36,202,135],{"class":53},[36,204,206,209,212,215,218,222,225,229,231,235,238,240,242],{"class":38,"line":205},8,[36,207,208],{"class":113},"    const",[36,210,211],{"class":57}," answer",[36,213,214],{"class":53}," =",[36,216,217],{"class":49}," await",[36,219,221],{"class":220},"sxG60"," this",[36,223,224],{"class":53},".",[36,226,228],{"class":227},"sy9f4","inner",[36,230,224],{"class":53},[36,232,234],{"class":233},"s4mR9","dispatch",[36,236,144],{"class":237},"spAFX",[36,239,194],{"class":57},[36,241,171],{"class":237},[36,243,94],{"class":53},[36,245,247,250,252,255,257,260,262,265,268,270,272,275,277,279,282,284,286,288,290,292,294,297,299,301,303],{"class":38,"line":246},9,[36,248,249],{"class":220},"    this",[36,251,224],{"class":53},[36,253,254],{"class":227},"log",[36,256,224],{"class":53},[36,258,259],{"class":233},"info",[36,261,144],{"class":237},[36,263,264],{"class":83},"`",[36,266,267],{"class":53},"${",[36,269,194],{"class":57},[36,271,224],{"class":53},[36,273,274],{"class":227},"address",[36,276,224],{"class":53},[36,278,274],{"class":227},[36,280,281],{"class":53},"}",[36,283,224],{"class":87},[36,285,267],{"class":53},[36,287,194],{"class":57},[36,289,224],{"class":53},[36,291,274],{"class":227},[36,293,224],{"class":53},[36,295,296],{"class":227},"operation",[36,298,281],{"class":53},[36,300,264],{"class":83},[36,302,171],{"class":237},[36,304,94],{"class":53},[36,306,308],{"class":38,"line":307},10,[36,309,101],{"emptyLinePlaceholder":100},[36,311,313,316,318],{"class":38,"line":312},11,[36,314,315],{"class":49},"    return",[36,317,211],{"class":57},[36,319,94],{"class":53},[36,321,323],{"class":38,"line":322},12,[36,324,325],{"class":53},"  }\n",[36,327,329],{"class":38,"line":328},13,[36,330,331],{"class":53},"}\n",[13,333,334,335,340,341,344,345,347],{},"It is a ",[336,337,339],"a",{"href":338},"\u002Fdocs\u002Fconcepts\u002Fport#links","link",": it says ",[17,342,343],{},"implements Partial\u003CDispatcher>",", asks for the\n",[17,346,228],{}," that answers the call, and passes the call on. That is the whole registration. It may refuse\nthe call by throwing, or act on what came back.",[13,349,350,351,355],{},"It runs around every call of its frond, and of the fronds that ",[336,352,354],{"href":353},"\u002Fdocs\u002Fconcepts\u002Fconfiguration#what-the-app-is-made-of","extend it",",\nwhichever door brought the call — a page, REST, GraphQL, another process.",[22,357,359],{"id":358},"order-two-of-them","Order two of them",[13,361,362],{},"Two links need an order, outside in, in the frond's config; without one the boot refuses both:",[27,364,366],{"className":29,"code":365,"language":31,"meta":32,"style":32},"\u002F\u002F fronds\u002Fblog\u002Ffrond.config.ts\nexport default { ports: { Dispatcher: ['Timing', 'Wrote'] } };\n",[17,367,368,373],{"__ignoreMap":32},[36,369,370],{"class":38,"line":39},[36,371,372],{"class":42},"\u002F\u002F fronds\u002Fblog\u002Ffrond.config.ts\n",[36,374,375,377,379,381,385,387,389,391,393,397,399,402,404,406,408,411,413,416,418],{"class":38,"line":46},[36,376,107],{"class":49},[36,378,110],{"class":49},[36,380,54],{"class":53},[36,382,384],{"class":383},"sHtqg"," ports",[36,386,154],{"class":53},[36,388,54],{"class":53},[36,390,74],{"class":383},[36,392,154],{"class":53},[36,394,396],{"class":395},"srlTG"," [",[36,398,91],{"class":83},[36,400,401],{"class":87},"Timing",[36,403,91],{"class":83},[36,405,61],{"class":53},[36,407,84],{"class":83},[36,409,410],{"class":87},"Wrote",[36,412,91],{"class":83},[36,414,415],{"class":395},"]",[36,417,77],{"class":53},[36,419,420],{"class":53}," };\n",[22,422,424],{"id":423},"around-one-handler-only","Around one handler only",[13,426,427,430],{},[17,428,429],{},"Dispatcher\u003CPostHandler>"," stands around that handler's calls alone, inside the frond's own links:",[27,432,434],{"className":29,"code":433,"language":31,"meta":32,"style":32},"export default class AuditPosts implements Partial\u003CDispatcher\u003CPostHandler>> {\n  constructor(private inner: Dispatcher\u003CPostHandler>) {}\n  …\n}\n",[17,435,436,465,488,493],{"__ignoreMap":32},[36,437,438,440,442,444,447,449,451,453,455,457,460,463],{"class":38,"line":39},[36,439,107],{"class":49},[36,441,110],{"class":49},[36,443,114],{"class":113},[36,445,446],{"class":117}," AuditPosts",[36,448,121],{"class":113},[36,450,124],{"class":117},[36,452,127],{"class":53},[36,454,19],{"class":117},[36,456,127],{"class":53},[36,458,459],{"class":117},"PostHandler",[36,461,462],{"class":53},">>",[36,464,135],{"class":53},[36,466,467,469,471,473,475,477,479,481,483,486],{"class":38,"line":46},[36,468,141],{"class":113},[36,470,144],{"class":53},[36,472,147],{"class":113},[36,474,151],{"class":150},[36,476,154],{"class":53},[36,478,74],{"class":117},[36,480,127],{"class":53},[36,482,459],{"class":117},[36,484,485],{"class":53},">)",[36,487,174],{"class":53},[36,489,490],{"class":38,"line":97},[36,491,492],{"class":57},"  …\n",[36,494,495],{"class":38,"line":104},[36,496,331],{"class":53},[22,498,500],{"id":499},"around-an-http-request","Around an HTTP request",[13,502,503,504,506,507,510,511,514,515,224],{},"A link in front of ",[17,505,19],{}," sees a ",[508,509,194],"strong",{},", never the HTTP request behind it. To read a header\nor answer with a redirect, stand in front of ",[17,512,513],{},"Rest"," instead:\n",[336,516,518],{"href":517},"\u002Fdocs\u002Fserve\u002Frest-graphql#around-a-request-a-link-in-front-of-rest","a link in front of Rest",[13,520,521,522,525,526,224],{},"One instance of the link serves every call of the frond, so it keeps nothing of a call on ",[17,523,524],{},"this",":\nwhat belongs to a call travels in the ",[17,527,528],{},"Call",[530,531,532],"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 .sBZYL, html code.shiki .sBZYL{--shiki-light:#E2931D;--shiki-default:#EFCD8F;--shiki-dark:#FFCB6B}html pre.shiki code .shDUQ, html code.shiki .shDUQ{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#DDE5DA;--shiki-default-font-style:inherit;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .shDkW, html code.shiki .shDkW{--shiki-light:#E53935;--shiki-default:#C9B6EA;--shiki-dark:#F07178}html pre.shiki code .sxG60, html code.shiki .sxG60{--shiki-light:#39ADB5;--shiki-light-font-style:inherit;--shiki-default:#8FCF86;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:inherit}html pre.shiki code .sy9f4, html code.shiki .sy9f4{--shiki-light:#90A4AE;--shiki-default:#93CFC0;--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 .spAFX, html code.shiki .spAFX{--shiki-light:#E53935;--shiki-default:#A3B0A5;--shiki-dark:#F07178}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 .sHtqg, html code.shiki .sHtqg{--shiki-light:#E53935;--shiki-default:#93CFC0;--shiki-dark:#F07178}html pre.shiki code .srlTG, html code.shiki .srlTG{--shiki-light:#90A4AE;--shiki-default:#A3B0A5;--shiki-dark:#BABED8}",{"title":32,"searchDepth":46,"depth":46,"links":534},[535,536,537,538],{"id":24,"depth":46,"text":25},{"id":358,"depth":46,"text":359},{"id":423,"depth":46,"text":424},{"id":499,"depth":46,"text":500},"Timing, audit or a guard around every call of a frond, without touching a handler.","md",[19,429,542],"ports:","task",{},"\u002Fdocs\u002Fbehaviour\u002Faround-every-call",{"title":8,"description":539},"docs\u002F4.behaviour\u002F1.around-every-call",null,[550,551],"port","frond","UyfvTT2qc1AEnrpPU6APh9IgCFAl9l-GnI6_aCaSWDY",[554,557,560,563,566,569,572,575,578,582,588,593,597,601,605,609,613,618,622,624,629,633,638,642,646,650,654,658,662,666,670,674,678,682,686,690,694,697,700,703,706,709,712,715,718,721,724],{"path":555,"title":556,"uses":548},"\u002Fdocs\u002Fconcepts\u002Fentity","Entity",{"path":558,"title":559,"uses":548},"\u002Fdocs\u002Fconcepts\u002Fhandler","Handler",{"path":561,"title":562,"uses":548},"\u002Fdocs\u002Fconcepts\u002Frepository","Repository",{"path":564,"title":565,"uses":548},"\u002Fdocs\u002Fconcepts\u002Ffrond","Frond",{"path":567,"title":568,"uses":548},"\u002Fdocs\u002Fconcepts\u002Ffacade","Facade",{"path":570,"title":571,"uses":548},"\u002Fdocs\u002Fconcepts\u002Ffact","Fact",{"path":573,"title":574,"uses":548},"\u002Fdocs\u002Fconcepts\u002Fport","Port",{"path":576,"title":577,"uses":548},"\u002Fdocs\u002Fconcepts\u002Fconfiguration","Configuration",{"path":579,"title":580,"uses":581},"\u002Fdocs\u002Faccess\u002Fauthentication","Authentication",[550,551],{"path":583,"title":584,"uses":585},"\u002Fdocs\u002Faccess\u002Fstate","Keep a caller's state",[586,587],"configuration","handler",{"path":589,"title":590,"uses":591},"\u002Fdocs\u002Fdata\u002Fsql","SQLite or Postgres",[592,586],"entity",{"path":594,"title":595,"uses":596},"\u002Fdocs\u002Fdata\u002Fseveral-databases","Several databases",[586,592],{"path":598,"title":599,"uses":600},"\u002Fdocs\u002Fdata\u002Fcomputed-field","A computed field",[592,550],{"path":602,"title":603,"uses":604},"\u002Fdocs\u002Fdata\u002Fevolve","Evolve a schema",[592],{"path":606,"title":607,"uses":608},"\u002Fdocs\u002Fdata\u002Fseeds","Seed data",[592],{"path":610,"title":611,"uses":612},"\u002Fdocs\u002Fdata\u002Fvalues","Read settings and secrets",[592,586],{"path":614,"title":615,"uses":616},"\u002Fdocs\u002Fdata\u002Fmirror","Mirror a source you cannot query",[617],"repository",{"path":619,"title":620,"uses":621},"\u002Fdocs\u002Fdata\u002Ftogether","Two writes as one",[617],{"path":545,"title":8,"uses":623},[550,551],{"path":625,"title":626,"uses":627},"\u002Fdocs\u002Fbehaviour\u002Ffinish-a-fact","Finish a fact",[628],"fact",{"path":630,"title":631,"uses":632},"\u002Fdocs\u002Fserve\u002Frest-graphql","REST, OpenAPI, GraphQL",[587,586],{"path":634,"title":635,"uses":636},"\u002Fdocs\u002Fserve\u002Fpages","Pages: queries and commands",[587,637],"facade",{"path":639,"title":640,"uses":641},"\u002Fdocs\u002Fserve\u002Fforms","A form",[592],{"path":643,"title":644,"uses":645},"\u002Fdocs\u002Fserve\u002Fadmin","An admin panel",[587],{"path":647,"title":648,"uses":649},"\u002Fdocs\u002Frun\u002Fdeploy","Deploy a split",[586,551],{"path":651,"title":652,"uses":653},"\u002Fdocs\u002Frun\u002Fsecure","Secure calls between processes",[586,551],{"path":655,"title":656,"uses":657},"\u002Fdocs\u002Frun\u002Flifecycle","Reload and shut down",[586],{"path":659,"title":660,"uses":661},"\u002Fdocs\u002Frun\u002Fobserve","Observe",[586,587],{"path":663,"title":664,"uses":665},"\u002Fdocs\u002Frun\u002Fdev-panel","The dev panel",[587],{"path":667,"title":668,"uses":669},"\u002Fdocs\u002Frun\u002Ftest","Test",[592,550],{"path":671,"title":672,"uses":673},"\u002Fdocs\u002Fadopt\u002Fnew-project","Start a project",[551,586],{"path":675,"title":676,"uses":677},"\u002Fdocs\u002Fadopt\u002Fexisting-app","Add Fougere to an existing app",[551,586],{"path":679,"title":680,"uses":681},"\u002Fdocs\u002Fadopt\u002Fbring-your-schema","Bring your schema",[592],{"path":683,"title":684,"uses":685},"\u002Fdocs\u002Fadopt\u002Fhosts","Pick a host",[586],{"path":687,"title":688,"uses":689},"\u002Fdocs\u002Fadopt\u002Fanother-repository","A frond from another repository",[637,551],{"path":691,"title":692,"uses":693},"\u002Fdocs\u002Fadopt\u002Fdemos","Demos",[],{"path":695,"title":696,"uses":548},"\u002Fdocs\u002Fextending\u002Fscan","How the scan reads a project",{"path":698,"title":699,"uses":548},"\u002Fdocs\u002Fextending\u002Fwithout-compiler","Boot without the compiler",{"path":701,"title":702,"uses":548},"\u002Fdocs\u002Fextending\u002Fboot","The boot, step by step",{"path":704,"title":705,"uses":548},"\u002Fdocs\u002Fextending\u002Fcard-and-wire","The card and the wire",{"path":707,"title":708,"uses":548},"\u002Fdocs\u002Fextending\u002Fextension-points","Registries and extension points",{"path":710,"title":711,"uses":548},"\u002Fdocs\u002Fextending\u002Fvocabulary","Teach a word",{"path":713,"title":714,"uses":548},"\u002Fdocs\u002Fextending\u002Fextensions","Run code at boot and shutdown",{"path":716,"title":717,"uses":548},"\u002Fdocs\u002Fextending\u002Fsource-adapter","Write a source adapter",{"path":719,"title":720,"uses":548},"\u002Fdocs\u002Fextending\u002Fsurface","Write a surface",{"path":722,"title":723,"uses":548},"\u002Fdocs\u002Fextending\u002Fforeign-frond","A frond in another language",{"path":725,"title":726,"uses":548},"\u002Fdocs","What is Fougere",[728],{"title":729,"path":725,"stem":730,"children":731,"page":-1},"Docs","docs",[732,734,755,764,785,793,806,823,840],{"title":726,"path":725,"stem":733},"docs\u002Findex",{"title":735,"path":736,"stem":737,"children":738,"page":5},"Concepts","\u002Fdocs\u002Fconcepts","docs\u002F1.concepts",[739,741,743,745,747,749,751,753],{"title":556,"path":555,"stem":740},"docs\u002F1.concepts\u002F1.entity",{"title":559,"path":558,"stem":742},"docs\u002F1.concepts\u002F2.handler",{"title":562,"path":561,"stem":744},"docs\u002F1.concepts\u002F3.repository",{"title":565,"path":564,"stem":746},"docs\u002F1.concepts\u002F4.frond",{"title":568,"path":567,"stem":748},"docs\u002F1.concepts\u002F5.facade",{"title":571,"path":570,"stem":750},"docs\u002F1.concepts\u002F6.fact",{"title":574,"path":573,"stem":752},"docs\u002F1.concepts\u002F7.port",{"title":577,"path":576,"stem":754},"docs\u002F1.concepts\u002F8.configuration",{"title":756,"path":757,"stem":758,"children":759,"page":5},"Access","\u002Fdocs\u002Faccess","docs\u002F2.access",[760,762],{"title":580,"path":579,"stem":761},"docs\u002F2.access\u002F1.authentication",{"title":584,"path":583,"stem":763},"docs\u002F2.access\u002F2.state",{"title":765,"path":766,"stem":767,"children":768,"page":5},"Data","\u002Fdocs\u002Fdata","docs\u002F3.data",[769,771,773,775,777,779,781,783],{"title":590,"path":589,"stem":770},"docs\u002F3.data\u002F1.sql",{"title":595,"path":594,"stem":772},"docs\u002F3.data\u002F2.several-databases",{"title":599,"path":598,"stem":774},"docs\u002F3.data\u002F3.computed-field",{"title":603,"path":602,"stem":776},"docs\u002F3.data\u002F4.evolve",{"title":607,"path":606,"stem":778},"docs\u002F3.data\u002F5.seeds",{"title":611,"path":610,"stem":780},"docs\u002F3.data\u002F6.values",{"title":615,"path":614,"stem":782},"docs\u002F3.data\u002F7.mirror",{"title":620,"path":619,"stem":784},"docs\u002F3.data\u002F8.together",{"title":786,"path":787,"stem":788,"children":789,"page":5},"Behaviour","\u002Fdocs\u002Fbehaviour","docs\u002F4.behaviour",[790,791],{"title":8,"path":545,"stem":547},{"title":626,"path":625,"stem":792},"docs\u002F4.behaviour\u002F2.finish-a-fact",{"title":794,"path":795,"stem":796,"children":797,"page":5},"Serve","\u002Fdocs\u002Fserve","docs\u002F5.serve",[798,800,802,804],{"title":631,"path":630,"stem":799},"docs\u002F5.serve\u002F1.rest-graphql",{"title":635,"path":634,"stem":801},"docs\u002F5.serve\u002F2.pages",{"title":640,"path":639,"stem":803},"docs\u002F5.serve\u002F3.forms",{"title":644,"path":643,"stem":805},"docs\u002F5.serve\u002F4.admin",{"title":807,"path":808,"stem":809,"children":810,"page":5},"Run","\u002Fdocs\u002Frun","docs\u002F6.run",[811,813,815,817,819,821],{"title":648,"path":647,"stem":812},"docs\u002F6.run\u002F1.deploy",{"title":652,"path":651,"stem":814},"docs\u002F6.run\u002F2.secure",{"title":656,"path":655,"stem":816},"docs\u002F6.run\u002F3.lifecycle",{"title":660,"path":659,"stem":818},"docs\u002F6.run\u002F4.observe",{"title":664,"path":663,"stem":820},"docs\u002F6.run\u002F5.dev-panel",{"title":668,"path":667,"stem":822},"docs\u002F6.run\u002F6.test",{"title":824,"path":825,"stem":826,"children":827,"page":5},"Adopt","\u002Fdocs\u002Fadopt","docs\u002F7.adopt",[828,830,832,834,836,838],{"title":672,"path":671,"stem":829},"docs\u002F7.adopt\u002F1.new-project",{"title":676,"path":675,"stem":831},"docs\u002F7.adopt\u002F2.existing-app",{"title":680,"path":679,"stem":833},"docs\u002F7.adopt\u002F3.bring-your-schema",{"title":684,"path":683,"stem":835},"docs\u002F7.adopt\u002F4.hosts",{"title":688,"path":687,"stem":837},"docs\u002F7.adopt\u002F5.another-repository",{"title":692,"path":691,"stem":839},"docs\u002F7.adopt\u002F6.demos",{"title":841,"path":842,"stem":843,"children":844,"page":5},"Extending","\u002Fdocs\u002Fextending","docs\u002F8.extending",[845,847,849,851,853,855,857,859,861,863],{"title":696,"path":695,"stem":846},"docs\u002F8.extending\u002F1.scan",{"title":699,"path":698,"stem":848},"docs\u002F8.extending\u002F10.without-compiler",{"title":702,"path":701,"stem":850},"docs\u002F8.extending\u002F2.boot",{"title":705,"path":704,"stem":852},"docs\u002F8.extending\u002F3.card-and-wire",{"title":708,"path":707,"stem":854},"docs\u002F8.extending\u002F4.extension-points",{"title":711,"path":710,"stem":856},"docs\u002F8.extending\u002F5.vocabulary",{"title":714,"path":713,"stem":858},"docs\u002F8.extending\u002F6.extensions",{"title":717,"path":716,"stem":860},"docs\u002F8.extending\u002F7.source-adapter",{"title":720,"path":719,"stem":862},"docs\u002F8.extending\u002F8.surface",{"title":723,"path":722,"stem":864},"docs\u002F8.extending\u002F9.foreign-frond",1794396614610]