[{"data":1,"prerenderedAt":837},["ShallowReactive",2],{"fougere:post.list:{}":3,"docs:\u002Fdocs\u002Fguides\u002Ftopology":5,"docs-nav":632},{"items":4},[],{"id":6,"title":7,"body":8,"description":625,"extension":626,"meta":627,"navigation":126,"path":628,"seo":629,"stem":630,"__hash__":631},"docs\u002Fdocs\u002F1.guides\u002F3.topology.md","Shape your topology",{"type":9,"value":10,"toc":621},"minimark",[11,15,19,24,32,42,45,328,490,496,504,508,511,539,545,597,606,617],[12,13,7],"h1",{"id":14},"shape-your-topology",[16,17,18],"p",{},"So far the shop is one frond. This guide splits it in three — the catalog, the prices, the\ncart — has them call each other, then runs the catalog in its own process without\nchanging their code.",[20,21,23],"h2",{"id":22},"fronds","Fronds",[16,25,26,27,31],{},"A frond is a directory under ",[28,29,30],"code",{},"fronds\u002F",". It holds its own entities, handlers, services and\nrepositories:",[33,34,39],"pre",{"className":35,"code":37,"language":38},[36],"language-text","fronds\u002F\n  catalog\u002F     Product, ProductHandler\n  pricing\u002F     PriceHandler\n  cart\u002F        CartHandler\n","text",[28,40,37],{"__ignoreMap":41},"",[16,43,44],{},"A frond does not import another's files. It asks for another frond's facade, by type:",[33,46,50],{"className":47,"code":48,"language":49,"meta":41,"style":41},"language-ts shiki shiki-themes material-theme-lighter fougere-pastel material-theme-palenight","\u002F\u002F fronds\u002Fpricing\u002Fhandlers\u002FPriceHandler.ts\nimport type { Facade } from '@fougere\u002Fcore';\nimport type ProductHandler from '@fronds\u002Fcatalog\u002Fhandlers\u002FProductHandler.js';\n\nexport default class PriceHandler {\n  constructor(private catalog: Facade\u003CProductHandler>) {}\n\n  async getTotal(): Promise\u003Cnumber> {\n    const products = await this.catalog.list();\n\n    return products.items.reduce((sum, product) => sum + product.cents, 0);\n  }\n}\n","ts",[28,51,52,61,99,121,128,148,181,186,212,250,255,316,322],{"__ignoreMap":41},[53,54,57],"span",{"class":55,"line":56},"line",1,[53,58,60],{"class":59},"skXKP","\u002F\u002F fronds\u002Fpricing\u002Fhandlers\u002FPriceHandler.ts\n",[53,62,64,68,71,75,79,82,85,89,93,96],{"class":55,"line":63},2,[53,65,67],{"class":66},"sK6XW","import",[53,69,70],{"class":66}," type",[53,72,74],{"class":73},"s15xx"," {",[53,76,78],{"class":77},"sPEhv"," Facade",[53,80,81],{"class":73}," }",[53,83,84],{"class":66}," from",[53,86,88],{"class":87},"sDDC1"," '",[53,90,92],{"class":91},"sN-8n","@fougere\u002Fcore",[53,94,95],{"class":87},"'",[53,97,98],{"class":73},";\n",[53,100,102,104,106,109,112,114,117,119],{"class":55,"line":101},3,[53,103,67],{"class":66},[53,105,70],{"class":66},[53,107,108],{"class":77}," ProductHandler ",[53,110,111],{"class":66},"from",[53,113,88],{"class":87},[53,115,116],{"class":91},"@fronds\u002Fcatalog\u002Fhandlers\u002FProductHandler.js",[53,118,95],{"class":87},[53,120,98],{"class":73},[53,122,124],{"class":55,"line":123},4,[53,125,127],{"emptyLinePlaceholder":126},true,"\n",[53,129,131,134,137,141,145],{"class":55,"line":130},5,[53,132,133],{"class":66},"export",[53,135,136],{"class":66}," default",[53,138,140],{"class":139},"s76I7"," class",[53,142,144],{"class":143},"sBZYL"," PriceHandler",[53,146,147],{"class":73}," {\n",[53,149,151,154,157,160,164,167,169,172,175,178],{"class":55,"line":150},6,[53,152,153],{"class":139},"  constructor",[53,155,156],{"class":73},"(",[53,158,159],{"class":139},"private",[53,161,163],{"class":162},"shDUQ"," catalog",[53,165,166],{"class":73},":",[53,168,78],{"class":143},[53,170,171],{"class":73},"\u003C",[53,173,174],{"class":143},"ProductHandler",[53,176,177],{"class":73},">)",[53,179,180],{"class":73}," {}\n",[53,182,184],{"class":55,"line":183},7,[53,185,127],{"emptyLinePlaceholder":126},[53,187,189,192,196,199,202,204,207,210],{"class":55,"line":188},8,[53,190,191],{"class":139},"  async",[53,193,195],{"class":194},"shDkW"," getTotal",[53,197,198],{"class":73},"():",[53,200,201],{"class":143}," Promise",[53,203,171],{"class":73},[53,205,206],{"class":143},"number",[53,208,209],{"class":73},">",[53,211,147],{"class":73},[53,213,215,218,221,224,227,231,234,238,240,244,248],{"class":55,"line":214},9,[53,216,217],{"class":139},"    const",[53,219,220],{"class":77}," products",[53,222,223],{"class":73}," =",[53,225,226],{"class":66}," await",[53,228,230],{"class":229},"sxG60"," this",[53,232,233],{"class":73},".",[53,235,237],{"class":236},"sy9f4","catalog",[53,239,233],{"class":73},[53,241,243],{"class":242},"s4mR9","list",[53,245,247],{"class":246},"spAFX","()",[53,249,98],{"class":73},[53,251,253],{"class":55,"line":252},10,[53,254,127],{"emptyLinePlaceholder":126},[53,256,258,261,263,265,268,270,273,275,277,280,283,286,289,293,296,299,301,303,306,308,312,314],{"class":55,"line":257},11,[53,259,260],{"class":66},"    return",[53,262,220],{"class":77},[53,264,233],{"class":73},[53,266,267],{"class":236},"items",[53,269,233],{"class":73},[53,271,272],{"class":242},"reduce",[53,274,156],{"class":246},[53,276,156],{"class":73},[53,278,279],{"class":162},"sum",[53,281,282],{"class":73},",",[53,284,285],{"class":162}," product",[53,287,288],{"class":73},")",[53,290,292],{"class":291},"scTuO"," =>",[53,294,295],{"class":77}," sum",[53,297,298],{"class":73}," +",[53,300,285],{"class":77},[53,302,233],{"class":73},[53,304,305],{"class":236},"cents",[53,307,282],{"class":73},[53,309,311],{"class":310},"s3dPA"," 0",[53,313,288],{"class":246},[53,315,98],{"class":73},[53,317,319],{"class":55,"line":318},12,[53,320,321],{"class":73},"  }\n",[53,323,325],{"class":55,"line":324},13,[53,326,327],{"class":73},"}\n",[33,329,331],{"className":47,"code":330,"language":49,"meta":41,"style":41},"\u002F\u002F fronds\u002Fcart\u002Fhandlers\u002FCartHandler.ts\nimport type { Facade } from '@fougere\u002Fcore';\nimport type PriceHandler from '@fronds\u002Fpricing\u002Fhandlers\u002FPriceHandler.js';\n\nexport default class CartHandler {\n  constructor(private pricing: Facade\u003CPriceHandler>) {}\n\n  async getSummary(): Promise\u003C{ cents: number }> {\n    return { cents: await this.pricing.getTotal() };\n  }\n}\n",[28,332,333,338,360,380,384,397,421,425,453,482,486],{"__ignoreMap":41},[53,334,335],{"class":55,"line":56},[53,336,337],{"class":59},"\u002F\u002F fronds\u002Fcart\u002Fhandlers\u002FCartHandler.ts\n",[53,339,340,342,344,346,348,350,352,354,356,358],{"class":55,"line":63},[53,341,67],{"class":66},[53,343,70],{"class":66},[53,345,74],{"class":73},[53,347,78],{"class":77},[53,349,81],{"class":73},[53,351,84],{"class":66},[53,353,88],{"class":87},[53,355,92],{"class":91},[53,357,95],{"class":87},[53,359,98],{"class":73},[53,361,362,364,366,369,371,373,376,378],{"class":55,"line":101},[53,363,67],{"class":66},[53,365,70],{"class":66},[53,367,368],{"class":77}," PriceHandler ",[53,370,111],{"class":66},[53,372,88],{"class":87},[53,374,375],{"class":91},"@fronds\u002Fpricing\u002Fhandlers\u002FPriceHandler.js",[53,377,95],{"class":87},[53,379,98],{"class":73},[53,381,382],{"class":55,"line":123},[53,383,127],{"emptyLinePlaceholder":126},[53,385,386,388,390,392,395],{"class":55,"line":130},[53,387,133],{"class":66},[53,389,136],{"class":66},[53,391,140],{"class":139},[53,393,394],{"class":143}," CartHandler",[53,396,147],{"class":73},[53,398,399,401,403,405,408,410,412,414,417,419],{"class":55,"line":150},[53,400,153],{"class":139},[53,402,156],{"class":73},[53,404,159],{"class":139},[53,406,407],{"class":162}," pricing",[53,409,166],{"class":73},[53,411,78],{"class":143},[53,413,171],{"class":73},[53,415,416],{"class":143},"PriceHandler",[53,418,177],{"class":73},[53,420,180],{"class":73},[53,422,423],{"class":55,"line":183},[53,424,127],{"emptyLinePlaceholder":126},[53,426,427,429,432,434,436,439,443,445,448,451],{"class":55,"line":188},[53,428,191],{"class":139},[53,430,431],{"class":194}," getSummary",[53,433,198],{"class":73},[53,435,201],{"class":143},[53,437,438],{"class":73},"\u003C{",[53,440,442],{"class":441},"sHtqg"," cents",[53,444,166],{"class":73},[53,446,447],{"class":143}," number",[53,449,450],{"class":73}," }>",[53,452,147],{"class":73},[53,454,455,457,459,461,463,465,467,469,472,474,477,479],{"class":55,"line":214},[53,456,260],{"class":66},[53,458,74],{"class":73},[53,460,442],{"class":441},[53,462,166],{"class":73},[53,464,226],{"class":66},[53,466,230],{"class":229},[53,468,233],{"class":73},[53,470,471],{"class":236},"pricing",[53,473,233],{"class":73},[53,475,476],{"class":242},"getTotal",[53,478,247],{"class":246},[53,480,481],{"class":73}," };\n",[53,483,484],{"class":55,"line":252},[53,485,321],{"class":73},[53,487,488],{"class":55,"line":257},[53,489,327],{"class":73},[16,491,492,495],{},[28,493,494],{},"fougere graph"," prints the three fronds and which one calls which.",[16,497,498,499],{},"→ ",[500,501,503],"a",{"href":502},"\u002Fdocs\u002Fconcepts\u002Ffrond","Frond",[20,505,507],{"id":506},"moving-a-frond","Moving a frond",[16,509,510],{},"To run the catalog in its own process, start it alone:",[33,512,516],{"className":513,"code":514,"language":515,"meta":41,"style":41},"language-bash shiki shiki-themes material-theme-lighter fougere-pastel material-theme-palenight","fougere dev catalog --port 4620       # in production: fougere build, then fougere serve\n","bash",[28,517,518],{"__ignoreMap":41},[53,519,520,524,527,529,533,536],{"class":55,"line":56},[53,521,523],{"class":522},"sV8pK","fougere",[53,525,526],{"class":91}," dev",[53,528,163],{"class":91},[53,530,532],{"class":531},"svHQO"," --port",[53,534,535],{"class":310}," 4620",[53,537,538],{"class":59},"       # in production: fougere build, then fougere serve\n",[16,540,541,542,166],{},"and give it that address in ",[28,543,544],{},"fougere.config.ts",[33,546,548],{"className":47,"code":547,"language":49,"meta":41,"style":41},"export default defineFougere({\n  fronds: { catalog: 'http:\u002F\u002F127.0.0.1:4620' },\n});\n",[28,549,550,565,588],{"__ignoreMap":41},[53,551,552,554,556,559,562],{"class":55,"line":56},[53,553,133],{"class":66},[53,555,136],{"class":66},[53,557,558],{"class":242}," defineFougere",[53,560,156],{"class":561},"srlTG",[53,563,564],{"class":73},"{\n",[53,566,567,570,572,574,576,578,580,583,585],{"class":55,"line":63},[53,568,569],{"class":441},"  fronds",[53,571,166],{"class":73},[53,573,74],{"class":73},[53,575,163],{"class":441},[53,577,166],{"class":73},[53,579,88],{"class":87},[53,581,582],{"class":91},"http:\u002F\u002F127.0.0.1:4620",[53,584,95],{"class":87},[53,586,587],{"class":73}," },\n",[53,589,590,593,595],{"class":55,"line":101},[53,591,592],{"class":73},"}",[53,594,288],{"class":561},[53,596,98],{"class":73},[16,598,599,601,602,605],{},[28,600,416],{}," keeps calling ",[28,603,604],{},"this.catalog.list()"," the same way; the call now crosses the\nnetwork. Remove the line and the catalog runs in the app's process again.",[16,607,498,608,612,613],{},[500,609,611],{"href":610},"\u002Fdocs\u002Finfra\u002Fgradient","The gradient"," · ",[500,614,616],{"href":615},"\u002Fdocs\u002Fcli","CLI",[618,619,620],"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 pre.shiki code .scTuO, html code.shiki .scTuO{--shiki-light:#9C3EDA;--shiki-default:#A3B0A5;--shiki-dark:#C792EA}html pre.shiki code .s3dPA, html code.shiki .s3dPA{--shiki-light:#F76D47;--shiki-default:#EE9F6B;--shiki-dark:#F78C6C}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 .sV8pK, html code.shiki .sV8pK{--shiki-light:#E2931D;--shiki-default:#C9B6EA;--shiki-dark:#FFCB6B}html pre.shiki code .svHQO, html code.shiki .svHQO{--shiki-light:#91B859;--shiki-default:#8FCF86;--shiki-dark:#C3E88D}html pre.shiki code .srlTG, html code.shiki .srlTG{--shiki-light:#90A4AE;--shiki-default:#A3B0A5;--shiki-dark:#BABED8}",{"title":41,"searchDepth":63,"depth":63,"links":622},[623,624],{"id":22,"depth":63,"text":23},{"id":506,"depth":63,"text":507},"The shop split into three fronds, calls between them, and one moved to its own process.","md",{},"\u002Fdocs\u002Fguides\u002Ftopology",{"title":7,"description":625},"docs\u002F1.guides\u002F3.topology","Q8CmFPAx9a9mkGezkjqGjn8eA5DCBT2HnlHryqN-PGM",[633],{"title":634,"path":635,"stem":636,"children":637,"page":-1},"Docs","\u002Fdocs","docs",[638,641,645,649,653,656,660,679,699,724,773,798],{"title":639,"path":635,"stem":640},"What is Fougere","docs\u002Findex",{"title":642,"path":643,"stem":644},"Getting started","\u002Fdocs\u002Fgetting-started","docs\u002F01.getting-started",{"title":646,"path":647,"stem":648},"An app you already have","\u002Fdocs\u002Fexisting-app","docs\u002F02.existing-app",{"title":650,"path":651,"stem":652},"Bring your schema","\u002Fdocs\u002Fbring-your-schema","docs\u002F03.bring-your-schema",{"title":654,"path":615,"stem":655},"The CLI","docs\u002F04.cli",{"title":657,"path":658,"stem":659},"Demos","\u002Fdocs\u002Fdemos","docs\u002F05.demos",{"title":661,"path":662,"stem":663,"children":664,"page":678},"Guides","\u002Fdocs\u002Fguides","docs\u002F1.guides",[665,669,673,674],{"title":666,"path":667,"stem":668},"Handle your business logic","\u002Fdocs\u002Fguides\u002Fbusiness-logic","docs\u002F1.guides\u002F1.business-logic",{"title":670,"path":671,"stem":672},"Store your data","\u002Fdocs\u002Fguides\u002Fdata","docs\u002F1.guides\u002F2.data",{"title":7,"path":628,"stem":630},{"title":675,"path":676,"stem":677},"Choose how it runs","\u002Fdocs\u002Fguides\u002Fconfig","docs\u002F1.guides\u002F4.config",false,{"title":680,"path":681,"stem":682,"children":683,"page":678},"Concepts","\u002Fdocs\u002Fconcepts","docs\u002F2.concepts",[684,688,691,695],{"title":685,"path":686,"stem":687},"Philosophy","\u002Fdocs\u002Fconcepts\u002Fphilosophy","docs\u002F2.concepts\u002F1.philosophy",{"title":689,"path":502,"stem":690},"The Frond","docs\u002F2.concepts\u002F2.frond",{"title":692,"path":693,"stem":694},"The shortest path","\u002Fdocs\u002Fconcepts\u002Fshortest-path","docs\u002F2.concepts\u002F3.shortest-path",{"title":696,"path":697,"stem":698},"The base","\u002Fdocs\u002Fconcepts\u002Fthe-base","docs\u002F2.concepts\u002F4.the-base",{"title":700,"path":701,"stem":702,"children":703,"page":678},"Schema","\u002Fdocs\u002Fschema","docs\u002F3.schema",[704,708,712,716,720],{"title":705,"path":706,"stem":707},"Entities","\u002Fdocs\u002Fschema\u002Fentities","docs\u002F3.schema\u002F1.entities",{"title":709,"path":710,"stem":711},"Views","\u002Fdocs\u002Fschema\u002Fviews","docs\u002F3.schema\u002F2.views",{"title":713,"path":714,"stem":715},"The identity card","\u002Fdocs\u002Fschema\u002Fcard","docs\u002F3.schema\u002F3.card",{"title":717,"path":718,"stem":719},"Standard Schema","\u002Fdocs\u002Fschema\u002Fstandard-schema","docs\u002F3.schema\u002F4.standard-schema",{"title":721,"path":722,"stem":723},"How a schema moves","\u002Fdocs\u002Fschema\u002Fevolution","docs\u002F3.schema\u002F5.evolution",{"title":725,"path":726,"stem":727,"children":728,"page":678},"Business","\u002Fdocs\u002Fbusiness","docs\u002F4.business",[729,733,737,741,745,749,753,757,761,765,769],{"title":730,"path":731,"stem":732},"Handlers","\u002Fdocs\u002Fbusiness\u002Fhandlers","docs\u002F4.business\u002F1.handlers",{"title":734,"path":735,"stem":736},"Ports","\u002Fdocs\u002Fbusiness\u002Fports","docs\u002F4.business\u002F10.ports",{"title":738,"path":739,"stem":740},"Caller state","\u002Fdocs\u002Fbusiness\u002Fstate","docs\u002F4.business\u002F11.state",{"title":742,"path":743,"stem":744},"Presenters","\u002Fdocs\u002Fbusiness\u002Fpresenters","docs\u002F4.business\u002F2.presenters",{"title":746,"path":747,"stem":748},"Collectors","\u002Fdocs\u002Fbusiness\u002Fcollectors","docs\u002F4.business\u002F3.collectors",{"title":750,"path":751,"stem":752},"Errors","\u002Fdocs\u002Fbusiness\u002Ferrors","docs\u002F4.business\u002F4.errors",{"title":754,"path":755,"stem":756},"Seeds","\u002Fdocs\u002Fbusiness\u002Fseeds","docs\u002F4.business\u002F5.seeds",{"title":758,"path":759,"stem":760},"Facts","\u002Fdocs\u002Fbusiness\u002Ffacts","docs\u002F4.business\u002F6.facts",{"title":762,"path":763,"stem":764},"Storage","\u002Fdocs\u002Fbusiness\u002Fstorage","docs\u002F4.business\u002F7.storage",{"title":766,"path":767,"stem":768},"Writes that stand or fall as one","\u002Fdocs\u002Fbusiness\u002Ftogether","docs\u002F4.business\u002F8.together",{"title":770,"path":771,"stem":772},"Repositories","\u002Fdocs\u002Fbusiness\u002Frepositories","docs\u002F4.business\u002F9.repositories",{"title":774,"path":775,"stem":776,"children":777,"page":678},"Client","\u002Fdocs\u002Fclient","docs\u002F5.client",[778,782,786,790,794],{"title":779,"path":780,"stem":781},"Queries & commands","\u002Fdocs\u002Fclient\u002Fqueries-commands","docs\u002F5.client\u002F1.queries-commands",{"title":783,"path":784,"stem":785},"Forms","\u002Fdocs\u002Fclient\u002Fforms","docs\u002F5.client\u002F2.forms",{"title":787,"path":788,"stem":789},"Session","\u002Fdocs\u002Fclient\u002Fsession","docs\u002F5.client\u002F3.session",{"title":791,"path":792,"stem":793},"invoke","\u002Fdocs\u002Fclient\u002Finvoke","docs\u002F5.client\u002F4.invoke",{"title":795,"path":796,"stem":797},"Back-office","\u002Fdocs\u002Fclient\u002Fadmin","docs\u002F5.client\u002F5.admin",{"title":799,"path":800,"stem":801,"children":802,"page":678},"Infrastructure","\u002Fdocs\u002Finfra","docs\u002F6.infra",[803,805,809,813,817,821,825,829,833],{"title":611,"path":610,"stem":804},"docs\u002F6.infra\u002F1.gradient",{"title":806,"path":807,"stem":808},"Surfaces — REST & GraphQL","\u002Fdocs\u002Finfra\u002Fsurfaces","docs\u002F6.infra\u002F2.surfaces",{"title":810,"path":811,"stem":812},"Deployment","\u002Fdocs\u002Finfra\u002Fdeployment","docs\u002F6.infra\u002F3.deployment",{"title":814,"path":815,"stem":816},"Hosts","\u002Fdocs\u002Finfra\u002Fhosts","docs\u002F6.infra\u002F4.hosts",{"title":818,"path":819,"stem":820},"Sources","\u002Fdocs\u002Finfra\u002Fsources","docs\u002F6.infra\u002F5.sources",{"title":822,"path":823,"stem":824},"Lifecycle","\u002Fdocs\u002Finfra\u002Flifecycle","docs\u002F6.infra\u002F6.lifecycle",{"title":826,"path":827,"stem":828},"Identity across Fronds","\u002Fdocs\u002Finfra\u002Fidentity","docs\u002F6.infra\u002F7.identity",{"title":830,"path":831,"stem":832},"Observability","\u002Fdocs\u002Finfra\u002Fobservability","docs\u002F6.infra\u002F8.observability",{"title":834,"path":835,"stem":836},"Testing","\u002Fdocs\u002Finfra\u002Ftesting","docs\u002F6.infra\u002F9.testing",1792704169800]