[{"data":1,"prerenderedAt":792},["ShallowReactive",2],{"fougere:post.list:{}":3,"docs:\u002Fdocs\u002Fconcepts\u002Ffacade":6,"docs-uses":482,"docs-nav":654},{"items":4,"hasMore":5},[],false,{"id":7,"title":8,"body":9,"description":473,"extension":474,"forms":475,"kind":476,"meta":477,"navigation":104,"path":478,"seo":479,"stem":480,"step":108,"uses":475,"__hash__":481},"docs\u002Fdocs\u002F1.concepts\u002F5.facade.md","Facade",{"type":10,"value":11,"toc":467},"minimark",[12,21,299,306,311,363,366,370,379,415,423,427,441,445,457,463],[13,14,15,16,20],"p",{},"A frond never imports another frond's code. It asks for the other frond's handler by type —\n",[17,18,19],"code",{},"Facade\u003CPostHandler>"," — and calls its methods. Whether that frond runs in this process or in another\none is said by the config, never by this line.",[22,23,28],"pre",{"className":24,"code":25,"language":26,"meta":27,"style":27},"language-ts shiki shiki-themes material-theme-lighter fougere-pastel material-theme-palenight","\u002F\u002F fronds\u002Fmail\u002Fhandlers\u002FDigestHandler.ts\nimport type { Facade } from '@fougere\u002Fcore';\nimport type PostHandler from '@fronds\u002Fblog\u002Fhandlers\u002FPostHandler.js';\n\nexport default class DigestHandler {\n  constructor(private posts: Facade\u003CPostHandler>) {}\n\n  \u002F** The titles of the week's digest. *\u002F\n  async titles(): Promise\u003Cstring[]> {\n    const page = await this.posts.list();\n\n    return page.items.map((post) => post.title);\n  }\n}\n","ts","",[17,29,30,39,77,99,106,126,159,164,170,200,238,243,287,293],{"__ignoreMap":27},[31,32,35],"span",{"class":33,"line":34},"line",1,[31,36,38],{"class":37},"skXKP","\u002F\u002F fronds\u002Fmail\u002Fhandlers\u002FDigestHandler.ts\n",[31,40,42,46,49,53,57,60,63,67,71,74],{"class":33,"line":41},2,[31,43,45],{"class":44},"sK6XW","import",[31,47,48],{"class":44}," type",[31,50,52],{"class":51},"s15xx"," {",[31,54,56],{"class":55},"sPEhv"," Facade",[31,58,59],{"class":51}," }",[31,61,62],{"class":44}," from",[31,64,66],{"class":65},"sDDC1"," '",[31,68,70],{"class":69},"sN-8n","@fougere\u002Fcore",[31,72,73],{"class":65},"'",[31,75,76],{"class":51},";\n",[31,78,80,82,84,87,90,92,95,97],{"class":33,"line":79},3,[31,81,45],{"class":44},[31,83,48],{"class":44},[31,85,86],{"class":55}," PostHandler ",[31,88,89],{"class":44},"from",[31,91,66],{"class":65},[31,93,94],{"class":69},"@fronds\u002Fblog\u002Fhandlers\u002FPostHandler.js",[31,96,73],{"class":65},[31,98,76],{"class":51},[31,100,102],{"class":33,"line":101},4,[31,103,105],{"emptyLinePlaceholder":104},true,"\n",[31,107,109,112,115,119,123],{"class":33,"line":108},5,[31,110,111],{"class":44},"export",[31,113,114],{"class":44}," default",[31,116,118],{"class":117},"s76I7"," class",[31,120,122],{"class":121},"sBZYL"," DigestHandler",[31,124,125],{"class":51}," {\n",[31,127,129,132,135,138,142,145,147,150,153,156],{"class":33,"line":128},6,[31,130,131],{"class":117},"  constructor",[31,133,134],{"class":51},"(",[31,136,137],{"class":117},"private",[31,139,141],{"class":140},"shDUQ"," posts",[31,143,144],{"class":51},":",[31,146,56],{"class":121},[31,148,149],{"class":51},"\u003C",[31,151,152],{"class":121},"PostHandler",[31,154,155],{"class":51},">)",[31,157,158],{"class":51}," {}\n",[31,160,162],{"class":33,"line":161},7,[31,163,105],{"emptyLinePlaceholder":104},[31,165,167],{"class":33,"line":166},8,[31,168,169],{"class":37},"  \u002F** The titles of the week's digest. *\u002F\n",[31,171,173,176,180,183,186,188,191,195,198],{"class":33,"line":172},9,[31,174,175],{"class":117},"  async",[31,177,179],{"class":178},"shDkW"," titles",[31,181,182],{"class":51},"():",[31,184,185],{"class":121}," Promise",[31,187,149],{"class":51},[31,189,190],{"class":121},"string",[31,192,194],{"class":193},"srlTG","[]",[31,196,197],{"class":51},">",[31,199,125],{"class":51},[31,201,203,206,209,212,215,219,222,226,228,232,236],{"class":33,"line":202},10,[31,204,205],{"class":117},"    const",[31,207,208],{"class":55}," page",[31,210,211],{"class":51}," =",[31,213,214],{"class":44}," await",[31,216,218],{"class":217},"sxG60"," this",[31,220,221],{"class":51},".",[31,223,225],{"class":224},"sy9f4","posts",[31,227,221],{"class":51},[31,229,231],{"class":230},"s4mR9","list",[31,233,235],{"class":234},"spAFX","()",[31,237,76],{"class":51},[31,239,241],{"class":33,"line":240},11,[31,242,105],{"emptyLinePlaceholder":104},[31,244,246,249,251,253,256,258,261,263,265,268,271,275,278,280,283,285],{"class":33,"line":245},12,[31,247,248],{"class":44},"    return",[31,250,208],{"class":55},[31,252,221],{"class":51},[31,254,255],{"class":224},"items",[31,257,221],{"class":51},[31,259,260],{"class":230},"map",[31,262,134],{"class":234},[31,264,134],{"class":51},[31,266,267],{"class":140},"post",[31,269,270],{"class":51},")",[31,272,274],{"class":273},"scTuO"," =>",[31,276,277],{"class":55}," post",[31,279,221],{"class":51},[31,281,282],{"class":224},"title",[31,284,270],{"class":234},[31,286,76],{"class":51},[31,288,290],{"class":33,"line":289},13,[31,291,292],{"class":51},"  }\n",[31,294,296],{"class":33,"line":295},14,[31,297,298],{"class":51},"}\n",[13,300,301,302,305],{},"The import is ",[17,303,304],{},"import type",": the mail frond holds no code of the blog, only its type.",[307,308,310],"h2",{"id":309},"what-the-type-checks","What the type checks",[312,313,314,330,336,349],"ul",{},[315,316,317,321,322,325,326,329],"li",{},[318,319,320],"strong",{},"The same arguments."," ",[17,323,324],{},"posts.publish(id, user)"," takes what ",[17,327,328],{},"PostHandler.publish"," takes, checked\nby TypeScript.",[315,331,332,335],{},[318,333,334],{},"Always a promise."," The call may cross a network, so every method answers one.",[315,337,338,341,342,344,345,348],{},[318,339,340],{},"Only operations."," A ",[17,343,137],{}," or ",[17,346,347],{},"protected"," method is not an operation, and the facade does not\noffer it.",[315,350,351,354,355,358,359,362],{},[318,352,353],{},"No placement."," The same type is the local facade or a stand-in for a remote process. Adding\n",[17,356,357],{},"blog: { remote: '…' }"," to ",[17,360,361],{},"fronds:"," changes nothing here.",[13,364,365],{},"A call through a facade runs what a call from outside runs: the checks of the input, the links\naround the calls, and the answer checked on its way out.",[307,367,369],{"id":368},"pass-everything-the-user-included","Pass everything, the user included",[13,371,372,373,378],{},"A ",[374,375,377],"a",{"href":376},"\u002Fdocs\u002Faccess\u002Fauthentication#know-who-calls","collector"," reads a request, and code calling a facade\nhas none. It already holds the user, so it passes it like any other argument:",[22,380,382],{"className":24,"code":381,"language":26,"meta":27,"style":27},"await this.posts.publish(id, user);\n",[17,383,384],{"__ignoreMap":27},[31,385,386,389,391,393,395,397,400,402,405,408,411,413],{"class":33,"line":34},[31,387,388],{"class":44},"await",[31,390,218],{"class":217},[31,392,221],{"class":51},[31,394,225],{"class":224},[31,396,221],{"class":51},[31,398,399],{"class":230},"publish",[31,401,134],{"class":193},[31,403,404],{"class":55},"id",[31,406,407],{"class":51},",",[31,409,410],{"class":55}," user",[31,412,270],{"class":193},[31,414,76],{"class":51},[13,416,417,418,422],{},"Leave it out and the operation receives no user. For the same reason a\n",[374,419,421],{"href":420},"\u002Fdocs\u002Fdata\u002Fcomputed-field","presenter"," adds nothing to what a facade answers: you get the rows the\nhandler returned. Collectors and presenters belong to the doors — REST, GraphQL, a page — which\nreceive a request from outside.",[307,424,426],{"id":425},"not-the-handler-itself","Not the handler itself",[13,428,429,430,433,434,437,438,440],{},"Asking another frond for its class — ",[17,431,432],{},"constructor(private posts: PostHandler)"," — would skip the\nchecks, the links and the placement, and break the day the blog moves. The boot warns\n",[17,435,436],{},"cross-frond-dependency"," and names the facade to ask for instead. Inside its own frond, a class\nasking for ",[17,439,152],{}," gets the instance its facade calls.",[307,442,444],{"id":443},"when-nobody-should-be-named","When nobody should be named",[13,446,447,448,452,453,221],{},"A facade names one recipient. When the blog should not know who cares that a post was published,\nit announces a ",[374,449,451],{"href":450},"\u002Fdocs\u002Fconcepts\u002Ffact","fact"," instead, and whoever accepts it is called. When two writes\nmust land together, see ",[374,454,456],{"href":455},"\u002Fdocs\u002Fdata\u002Ftogether","Writes that stand or fall as one",[13,458,459,462],{},[17,460,461],{},"fougere graph"," prints the fronds and which one calls which.",[464,465,466],"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 .srlTG, html code.shiki .srlTG{--shiki-light:#90A4AE;--shiki-default:#A3B0A5;--shiki-dark:#BABED8}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 .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);}",{"title":27,"searchDepth":41,"depth":41,"links":468},[469,470,471,472],{"id":309,"depth":41,"text":310},{"id":368,"depth":41,"text":369},{"id":425,"depth":41,"text":426},{"id":443,"depth":41,"text":444},"How one frond calls another: by type, the same call in one process or across a wire.","md",null,"concept",{},"\u002Fdocs\u002Fconcepts\u002Ffacade",{"title":8,"description":473},"docs\u002F1.concepts\u002F5.facade","_iB4DmYpW3xyDD7JOVR595pnN5eEuegL24G3AzwCyjQ",[483,486,489,492,495,496,498,501,504,510,516,521,525,528,532,536,540,545,548,552,556,560,565,569,573,577,581,585,589,593,597,601,605,609,613,617,621,624,627,630,633,636,639,642,645,648,651],{"path":484,"title":485,"uses":475},"\u002Fdocs\u002Fconcepts\u002Fentity","Entity",{"path":487,"title":488,"uses":475},"\u002Fdocs\u002Fconcepts\u002Fhandler","Handler",{"path":490,"title":491,"uses":475},"\u002Fdocs\u002Fconcepts\u002Frepository","Repository",{"path":493,"title":494,"uses":475},"\u002Fdocs\u002Fconcepts\u002Ffrond","Frond",{"path":478,"title":8,"uses":475},{"path":450,"title":497,"uses":475},"Fact",{"path":499,"title":500,"uses":475},"\u002Fdocs\u002Fconcepts\u002Fport","Port",{"path":502,"title":503,"uses":475},"\u002Fdocs\u002Fconcepts\u002Fconfiguration","Configuration",{"path":505,"title":506,"uses":507},"\u002Fdocs\u002Faccess\u002Fauthentication","Authentication",[508,509],"port","frond",{"path":511,"title":512,"uses":513},"\u002Fdocs\u002Faccess\u002Fstate","Keep a caller's state",[514,515],"configuration","handler",{"path":517,"title":518,"uses":519},"\u002Fdocs\u002Fdata\u002Fsql","SQLite or Postgres",[520,514],"entity",{"path":522,"title":523,"uses":524},"\u002Fdocs\u002Fdata\u002Fseveral-databases","Several databases",[514,520],{"path":420,"title":526,"uses":527},"A computed field",[520,508],{"path":529,"title":530,"uses":531},"\u002Fdocs\u002Fdata\u002Fevolve","Evolve a schema",[520],{"path":533,"title":534,"uses":535},"\u002Fdocs\u002Fdata\u002Fseeds","Seed data",[520],{"path":537,"title":538,"uses":539},"\u002Fdocs\u002Fdata\u002Fvalues","Read settings and secrets",[520,514],{"path":541,"title":542,"uses":543},"\u002Fdocs\u002Fdata\u002Fmirror","Mirror a source you cannot query",[544],"repository",{"path":455,"title":546,"uses":547},"Two writes as one",[544],{"path":549,"title":550,"uses":551},"\u002Fdocs\u002Fbehaviour\u002Faround-every-call","Around every call",[508,509],{"path":553,"title":554,"uses":555},"\u002Fdocs\u002Fbehaviour\u002Ffinish-a-fact","Finish a fact",[451],{"path":557,"title":558,"uses":559},"\u002Fdocs\u002Fserve\u002Frest-graphql","REST, OpenAPI, GraphQL",[515,514],{"path":561,"title":562,"uses":563},"\u002Fdocs\u002Fserve\u002Fpages","Pages: queries and commands",[515,564],"facade",{"path":566,"title":567,"uses":568},"\u002Fdocs\u002Fserve\u002Fforms","A form",[520],{"path":570,"title":571,"uses":572},"\u002Fdocs\u002Fserve\u002Fadmin","An admin panel",[515],{"path":574,"title":575,"uses":576},"\u002Fdocs\u002Frun\u002Fdeploy","Deploy a split",[514,509],{"path":578,"title":579,"uses":580},"\u002Fdocs\u002Frun\u002Fsecure","Secure calls between processes",[514,509],{"path":582,"title":583,"uses":584},"\u002Fdocs\u002Frun\u002Flifecycle","Reload and shut down",[514],{"path":586,"title":587,"uses":588},"\u002Fdocs\u002Frun\u002Fobserve","Observe",[514,515],{"path":590,"title":591,"uses":592},"\u002Fdocs\u002Frun\u002Fdev-panel","The dev panel",[515],{"path":594,"title":595,"uses":596},"\u002Fdocs\u002Frun\u002Ftest","Test",[520,508],{"path":598,"title":599,"uses":600},"\u002Fdocs\u002Fadopt\u002Fnew-project","Start a project",[509,514],{"path":602,"title":603,"uses":604},"\u002Fdocs\u002Fadopt\u002Fexisting-app","Add Fougere to an existing app",[509,514],{"path":606,"title":607,"uses":608},"\u002Fdocs\u002Fadopt\u002Fbring-your-schema","Bring your schema",[520],{"path":610,"title":611,"uses":612},"\u002Fdocs\u002Fadopt\u002Fhosts","Pick a host",[514],{"path":614,"title":615,"uses":616},"\u002Fdocs\u002Fadopt\u002Fanother-repository","A frond from another repository",[564,509],{"path":618,"title":619,"uses":620},"\u002Fdocs\u002Fadopt\u002Fdemos","Demos",[],{"path":622,"title":623,"uses":475},"\u002Fdocs\u002Fextending\u002Fscan","How the scan reads a project",{"path":625,"title":626,"uses":475},"\u002Fdocs\u002Fextending\u002Fwithout-compiler","Boot without the compiler",{"path":628,"title":629,"uses":475},"\u002Fdocs\u002Fextending\u002Fboot","The boot, step by step",{"path":631,"title":632,"uses":475},"\u002Fdocs\u002Fextending\u002Fcard-and-wire","The card and the wire",{"path":634,"title":635,"uses":475},"\u002Fdocs\u002Fextending\u002Fextension-points","Registries and extension points",{"path":637,"title":638,"uses":475},"\u002Fdocs\u002Fextending\u002Fvocabulary","Teach a word",{"path":640,"title":641,"uses":475},"\u002Fdocs\u002Fextending\u002Fextensions","Run code at boot and shutdown",{"path":643,"title":644,"uses":475},"\u002Fdocs\u002Fextending\u002Fsource-adapter","Write a source adapter",{"path":646,"title":647,"uses":475},"\u002Fdocs\u002Fextending\u002Fsurface","Write a surface",{"path":649,"title":650,"uses":475},"\u002Fdocs\u002Fextending\u002Fforeign-frond","A frond in another language",{"path":652,"title":653,"uses":475},"\u002Fdocs","What is Fougere",[655],{"title":656,"path":652,"stem":657,"children":658,"page":-1},"Docs","docs",[659,661,681,690,711,720,733,750,767],{"title":653,"path":652,"stem":660},"docs\u002Findex",{"title":662,"path":663,"stem":664,"children":665,"page":5},"Concepts","\u002Fdocs\u002Fconcepts","docs\u002F1.concepts",[666,668,670,672,674,675,677,679],{"title":485,"path":484,"stem":667},"docs\u002F1.concepts\u002F1.entity",{"title":488,"path":487,"stem":669},"docs\u002F1.concepts\u002F2.handler",{"title":491,"path":490,"stem":671},"docs\u002F1.concepts\u002F3.repository",{"title":494,"path":493,"stem":673},"docs\u002F1.concepts\u002F4.frond",{"title":8,"path":478,"stem":480},{"title":497,"path":450,"stem":676},"docs\u002F1.concepts\u002F6.fact",{"title":500,"path":499,"stem":678},"docs\u002F1.concepts\u002F7.port",{"title":503,"path":502,"stem":680},"docs\u002F1.concepts\u002F8.configuration",{"title":682,"path":683,"stem":684,"children":685,"page":5},"Access","\u002Fdocs\u002Faccess","docs\u002F2.access",[686,688],{"title":506,"path":505,"stem":687},"docs\u002F2.access\u002F1.authentication",{"title":512,"path":511,"stem":689},"docs\u002F2.access\u002F2.state",{"title":691,"path":692,"stem":693,"children":694,"page":5},"Data","\u002Fdocs\u002Fdata","docs\u002F3.data",[695,697,699,701,703,705,707,709],{"title":518,"path":517,"stem":696},"docs\u002F3.data\u002F1.sql",{"title":523,"path":522,"stem":698},"docs\u002F3.data\u002F2.several-databases",{"title":526,"path":420,"stem":700},"docs\u002F3.data\u002F3.computed-field",{"title":530,"path":529,"stem":702},"docs\u002F3.data\u002F4.evolve",{"title":534,"path":533,"stem":704},"docs\u002F3.data\u002F5.seeds",{"title":538,"path":537,"stem":706},"docs\u002F3.data\u002F6.values",{"title":542,"path":541,"stem":708},"docs\u002F3.data\u002F7.mirror",{"title":546,"path":455,"stem":710},"docs\u002F3.data\u002F8.together",{"title":712,"path":713,"stem":714,"children":715,"page":5},"Behaviour","\u002Fdocs\u002Fbehaviour","docs\u002F4.behaviour",[716,718],{"title":550,"path":549,"stem":717},"docs\u002F4.behaviour\u002F1.around-every-call",{"title":554,"path":553,"stem":719},"docs\u002F4.behaviour\u002F2.finish-a-fact",{"title":721,"path":722,"stem":723,"children":724,"page":5},"Serve","\u002Fdocs\u002Fserve","docs\u002F5.serve",[725,727,729,731],{"title":558,"path":557,"stem":726},"docs\u002F5.serve\u002F1.rest-graphql",{"title":562,"path":561,"stem":728},"docs\u002F5.serve\u002F2.pages",{"title":567,"path":566,"stem":730},"docs\u002F5.serve\u002F3.forms",{"title":571,"path":570,"stem":732},"docs\u002F5.serve\u002F4.admin",{"title":734,"path":735,"stem":736,"children":737,"page":5},"Run","\u002Fdocs\u002Frun","docs\u002F6.run",[738,740,742,744,746,748],{"title":575,"path":574,"stem":739},"docs\u002F6.run\u002F1.deploy",{"title":579,"path":578,"stem":741},"docs\u002F6.run\u002F2.secure",{"title":583,"path":582,"stem":743},"docs\u002F6.run\u002F3.lifecycle",{"title":587,"path":586,"stem":745},"docs\u002F6.run\u002F4.observe",{"title":591,"path":590,"stem":747},"docs\u002F6.run\u002F5.dev-panel",{"title":595,"path":594,"stem":749},"docs\u002F6.run\u002F6.test",{"title":751,"path":752,"stem":753,"children":754,"page":5},"Adopt","\u002Fdocs\u002Fadopt","docs\u002F7.adopt",[755,757,759,761,763,765],{"title":599,"path":598,"stem":756},"docs\u002F7.adopt\u002F1.new-project",{"title":603,"path":602,"stem":758},"docs\u002F7.adopt\u002F2.existing-app",{"title":607,"path":606,"stem":760},"docs\u002F7.adopt\u002F3.bring-your-schema",{"title":611,"path":610,"stem":762},"docs\u002F7.adopt\u002F4.hosts",{"title":615,"path":614,"stem":764},"docs\u002F7.adopt\u002F5.another-repository",{"title":619,"path":618,"stem":766},"docs\u002F7.adopt\u002F6.demos",{"title":768,"path":769,"stem":770,"children":771,"page":5},"Extending","\u002Fdocs\u002Fextending","docs\u002F8.extending",[772,774,776,778,780,782,784,786,788,790],{"title":623,"path":622,"stem":773},"docs\u002F8.extending\u002F1.scan",{"title":626,"path":625,"stem":775},"docs\u002F8.extending\u002F10.without-compiler",{"title":629,"path":628,"stem":777},"docs\u002F8.extending\u002F2.boot",{"title":632,"path":631,"stem":779},"docs\u002F8.extending\u002F3.card-and-wire",{"title":635,"path":634,"stem":781},"docs\u002F8.extending\u002F4.extension-points",{"title":638,"path":637,"stem":783},"docs\u002F8.extending\u002F5.vocabulary",{"title":641,"path":640,"stem":785},"docs\u002F8.extending\u002F6.extensions",{"title":644,"path":643,"stem":787},"docs\u002F8.extending\u002F7.source-adapter",{"title":647,"path":646,"stem":789},"docs\u002F8.extending\u002F8.surface",{"title":650,"path":649,"stem":791},"docs\u002F8.extending\u002F9.foreign-frond",1794396614063]