[{"data":1,"prerenderedAt":924},["ShallowReactive",2],{"docs-nav:en":3,"docs:\u002Fdocs\u002Finfra\u002Fsurfaces":134},[4],{"title":5,"path":6,"stem":7,"children":8},"Docs","\u002Fdocs","docs",[9,12,16,20,24,42,63,92,113],{"title":10,"path":6,"stem":11},"What is Fougere","docs\u002Findex",{"title":13,"path":14,"stem":15},"Getting started","\u002Fdocs\u002Fgetting-started","docs\u002F01.getting-started",{"title":17,"path":18,"stem":19},"Existing Nuxt app","\u002Fdocs\u002Fexisting-app","docs\u002F02.existing-app",{"title":21,"path":22,"stem":23},"The CLI","\u002Fdocs\u002Fcli","docs\u002F03.cli",{"title":25,"path":26,"stem":27,"children":28,"page":41},"Concepts","\u002Fdocs\u002Fconcepts","docs\u002F2.concepts",[29,33,37],{"title":30,"path":31,"stem":32},"Philosophy","\u002Fdocs\u002Fconcepts\u002Fphilosophy","docs\u002F2.concepts\u002F1.philosophy",{"title":34,"path":35,"stem":36},"The Frond","\u002Fdocs\u002Fconcepts\u002Ffrond","docs\u002F2.concepts\u002F2.frond",{"title":38,"path":39,"stem":40},"The shortest path","\u002Fdocs\u002Fconcepts\u002Fshortest-path","docs\u002F2.concepts\u002F3.shortest-path",false,{"title":43,"path":44,"stem":45,"children":46,"page":41},"Schema","\u002Fdocs\u002Fschema","docs\u002F3.schema",[47,51,55,59],{"title":48,"path":49,"stem":50},"Entities","\u002Fdocs\u002Fschema\u002Fentities","docs\u002F3.schema\u002F1.entities",{"title":52,"path":53,"stem":54},"Views","\u002Fdocs\u002Fschema\u002Fviews","docs\u002F3.schema\u002F2.views",{"title":56,"path":57,"stem":58},"The identity card","\u002Fdocs\u002Fschema\u002Fcard","docs\u002F3.schema\u002F3.card",{"title":60,"path":61,"stem":62},"Standard Schema","\u002Fdocs\u002Fschema\u002Fstandard-schema","docs\u002F3.schema\u002F4.standard-schema",{"title":64,"path":65,"stem":66,"children":67,"page":41},"Business","\u002Fdocs\u002Fbusiness","docs\u002F4.business",[68,72,76,80,84,88],{"title":69,"path":70,"stem":71},"Handlers","\u002Fdocs\u002Fbusiness\u002Fhandlers","docs\u002F4.business\u002F1.handlers",{"title":73,"path":74,"stem":75},"Presenters","\u002Fdocs\u002Fbusiness\u002Fpresenters","docs\u002F4.business\u002F2.presenters",{"title":77,"path":78,"stem":79},"Collectors","\u002Fdocs\u002Fbusiness\u002Fcollectors","docs\u002F4.business\u002F3.collectors",{"title":81,"path":82,"stem":83},"Errors","\u002Fdocs\u002Fbusiness\u002Ferrors","docs\u002F4.business\u002F4.errors",{"title":85,"path":86,"stem":87},"Seeds","\u002Fdocs\u002Fbusiness\u002Fseeds","docs\u002F4.business\u002F5.seeds",{"title":89,"path":90,"stem":91},"Facts","\u002Fdocs\u002Fbusiness\u002Ffacts","docs\u002F4.business\u002F6.facts",{"title":93,"path":94,"stem":95,"children":96,"page":41},"Client","\u002Fdocs\u002Fclient","docs\u002F5.client",[97,101,105,109],{"title":98,"path":99,"stem":100},"Queries & commands","\u002Fdocs\u002Fclient\u002Fqueries-commands","docs\u002F5.client\u002F1.queries-commands",{"title":102,"path":103,"stem":104},"Forms","\u002Fdocs\u002Fclient\u002Fforms","docs\u002F5.client\u002F2.forms",{"title":106,"path":107,"stem":108},"Session","\u002Fdocs\u002Fclient\u002Fsession","docs\u002F5.client\u002F3.session",{"title":110,"path":111,"stem":112},"invoke","\u002Fdocs\u002Fclient\u002Finvoke","docs\u002F5.client\u002F4.invoke",{"title":114,"path":115,"stem":116,"children":117,"page":41},"Infrastructure","\u002Fdocs\u002Finfra","docs\u002F6.infra",[118,122,126,130],{"title":119,"path":120,"stem":121},"The gradient","\u002Fdocs\u002Finfra\u002Fgradient","docs\u002F6.infra\u002F1.gradient",{"title":123,"path":124,"stem":125},"Surfaces — REST & GraphQL","\u002Fdocs\u002Finfra\u002Fsurfaces","docs\u002F6.infra\u002F2.surfaces",{"title":127,"path":128,"stem":129},"Deployment","\u002Fdocs\u002Finfra\u002Fdeployment","docs\u002F6.infra\u002F3.deployment",{"title":131,"path":132,"stem":133},"Hosts","\u002Fdocs\u002Finfra\u002Fhosts","docs\u002F6.infra\u002F4.hosts",{"id":135,"title":123,"body":136,"description":919,"extension":920,"meta":921,"navigation":620,"path":124,"seo":922,"stem":125,"__hash__":923},"docs_en\u002Fdocs\u002F6.infra\u002F2.surfaces.md",{"type":137,"value":138,"toc":908},"minimark",[139,144,160,165,173,203,284,287,292,307,318,326,330,345,435,476,479,519,523,537,544,748,765,775,778,876,885,888,892,898,904],[140,141,143],"h1",{"id":142},"surfaces","Surfaces",[145,146,147,148,152,153,159],"p",{},"A ",[149,150,151],"strong",{},"surface"," adapts a protocol to Frond operations in three steps: parse the request, call\n",[154,155,156],"em",{},[157,158,110],"a",{"href":111},", then format the response. Business logic remains in the\nhandlers.",[161,162,164],"h2",{"id":163},"the-framework-is-not-the-process","The framework is not the process",[145,166,167,168,172],{},"Fougere opens no socket. ",[169,170,171],"code",{},"@fougere\u002Fcore"," depends on the container, the schema and\nTypeScript — on no server. An operation is a function; HTTP is one projection among\nseveral, not the place it lives.",[145,174,175,178,179,182,183,186,187,190,191,194,195,198,199,202],{},[169,176,177],{},"@fougere\u002Fhttp"," declares an interface, ",[169,180,181],{},"HttpRouter",", and has ",[149,184,185],{},"no dependencies",", not even\npeer ones. You build your Hono or your Fastify, hand it to ",[169,188,189],{},"createHonoRouter(app)"," or\n",[169,192,193],{},"createFastifyRouter(app)",", and the surfaces program against the interface.\n",[169,196,197],{},"RequestContext.request"," is a Web Standard ",[169,200,201],{},"Request",".",[204,205,206,219],"table",{},[207,208,209],"thead",{},[210,211,212,216],"tr",{},[213,214,215],"th",{},"What you bring",[213,217,218],{},"What Fougere plugs into it",[220,221,222,238,249,257,272],"tbody",{},[210,223,224,228],{},[225,226,227],"td",{},"Hono, Fastify",[225,229,230,233,234,237],{},[169,231,232],{},"createHonoRouter"," \u002F ",[169,235,236],{},"createFastifyRouter",", then REST",[210,239,240,243],{},[225,241,242],{},"your GraphQL server (Apollo, Yoga…)",[225,244,245,248],{},[169,246,247],{},"registerAll(builder, app)"," returns a Pothos schema",[210,250,251,254],{},[225,252,253],{},"Nuxt \u002F Nitro",[225,255,256],{},"the module mounts the envelope and the REST catch-all",[210,258,259,262],{},[225,260,261],{},"nothing at all",[225,263,264,267,268,271],{},[169,265,266],{},"fougere serve"," exposes the Frond over JSON-RPC, ",[169,269,270],{},"fougere call"," invokes it from a shell",[210,273,274,277],{},[225,275,276],{},"your own loop",[225,278,279,283],{},[157,280,281],{"href":111},[169,282,110],{}," — a call is a value, not a request",[145,285,286],{},"Two practical consequences. Changing HTTP server moves your routes, not your handlers. And\na test calls the operation directly, without opening a port.",[288,289,291],"h3",{"id":290},"and-the-judge-goes-wherever-javascript-goes","And the judge goes wherever JavaScript goes",[145,293,294,295,298,299,302,303,306],{},"The same declaration runs on both sides of the network. The validation engine\n(",[169,296,297],{},"@cfworker\u002Fjson-schema",") was chosen to run in edge environments, and\n",[169,300,301],{},"@fougere\u002Fcore\u002Fcontract"," ships as a subpath with no Node builtin in its import graph. The\njudge refusing a form in the browser is therefore ",[154,304,305],{},"the same object"," as the one refusing the\nbody at the façade — not a rule copied faithfully, the class itself.",[145,308,309,310,313,314,317],{},"One caveat, because the nuance matters: it is the ",[149,311,312],{},"contract"," that is ubiquitous, not the\napp. Boot reads a Frond's sources with the TypeScript compiler API and jiti, from\n",[169,315,316],{},"process.cwd()"," — that requires Node. What travels to a browser or a worker is the\ndeclaration, its validation and the call format.",[145,319,320,321,325],{},"The ",[157,322,324],{"href":323},"\u002Fdocs\u002Fclient\u002Fqueries-commands#the-wire-and-ssr","envelope"," transmits the call value\ndirectly. REST translates verbs and paths; GraphQL translates a query. These surfaces then\ncall the same façade.",[161,327,329],{"id":328},"rest-mounted","REST — mounted",[145,331,332,333,336,337,340,341,344],{},"The Nuxt module mounts a REST catch-all under ",[169,334,335],{},"\u002Fapi\u002F{frond}\u002F{plural}"," — the plural is\nderived from the entity name (",[169,338,339],{},"post → posts",", ",[169,342,343],{},"category → categories","):",[204,346,347,357],{},[207,348,349],{},[210,350,351,354],{},[213,352,353],{},"Route",[213,355,356],{},"Operation",[220,358,359,371,383,395,407,419],{},[210,360,361,366],{},[225,362,363],{},[169,364,365],{},"GET \u002Fapi\u002Fblog\u002Fposts",[225,367,368],{},[169,369,370],{},"post.list",[210,372,373,378],{},[225,374,375],{},[169,376,377],{},"POST \u002Fapi\u002Fblog\u002Fposts",[225,379,380],{},[169,381,382],{},"post.create",[210,384,385,390],{},[225,386,387],{},[169,388,389],{},"GET \u002Fapi\u002Fblog\u002Fposts\u002F{id}",[225,391,392],{},[169,393,394],{},"post.findById",[210,396,397,402],{},[225,398,399],{},[169,400,401],{},"PUT · PATCH \u002Fapi\u002Fblog\u002Fposts\u002F{id}",[225,403,404],{},[169,405,406],{},"post.update",[210,408,409,414],{},[225,410,411],{},[169,412,413],{},"DELETE \u002Fapi\u002Fblog\u002Fposts\u002F{id}",[225,415,416],{},[169,417,418],{},"post.delete",[210,420,421,426],{},[225,422,423],{},[169,424,425],{},"POST \u002Fapi\u002Fblog\u002Fposts\u002Fby-slug",[225,427,428,431,432],{},[169,429,430],{},"post.bySlug"," — kebab-case → camelCase; a named operation wins over ",[169,433,434],{},"{id}",[145,436,437,438,441,442,445,446,449,450,340,453,340,456,459,460,463,464,467,468,471,472,475],{},"The verb is not decorative: the routes above are the canonical table ",[169,439,440],{},"@fougere\u002Fadapter-rest","\nderives, and this door matches against it rather than deriving a second one. A path served\nunder another verb answers ",[169,443,444],{},"405"," with an ",[169,447,448],{},"Allow"," list — it never falls through to a\ndifferent operation. An operation's verb follows its name (",[169,451,452],{},"list…",[169,454,455],{},"find…",[169,457,458],{},"get…"," and the\nother read prefixes are ",[169,461,462],{},"GET",", the rest are ",[169,465,466],{},"POST","), and ",[169,469,470],{},"operations: { bySlug: { kind: 'query' } }"," in ",[169,473,474],{},"frond.config.ts"," states it outright.",[145,477,478],{},"Three properties worth knowing:",[480,481,482,489,506],"ul",{},[483,484,485,488],"li",{},[149,486,487],{},"Same façade."," A REST body uses the same validation, unknown-key rejection, and\ncollectors as the envelope.",[483,490,491,494,495,498,499,502,503,202],{},[149,492,493],{},"Same errors."," Failures project through ",[169,496,497],{},"toHttpError",": the real HTTP status from the\n",[157,500,501],{"href":82},"code table",", the full typed value in ",[169,504,505],{},"data",[483,507,508,511,512,515,516,202],{},[149,509,510],{},"List shape."," ",[169,513,514],{},"list"," results serialize as ",[169,517,518],{},"{ items, total, hasMore, endCursor }",[161,520,522],{"id":521},"graphql-a-standalone-projection","GraphQL — a standalone projection",[145,524,525,528,529,532,533,536],{},[169,526,527],{},"@fougere\u002Fadapter-graphql"," derives Pothos types, inputs and CRUD operations from the same\n",[169,530,531],{},"getFields()"," metadata every other adapter reads. It is ",[149,534,535],{},"not mounted by the Nuxt module"," —\nit ships as a projection you hand to the GraphQL server of your choice.",[288,538,540,543],{"id":539},"registerall-the-whole-schema-one-call",[169,541,542],{},"registerAll"," — the whole schema, one call",[545,546,551],"pre",{"className":547,"code":548,"language":549,"meta":550,"style":550},"language-ts shiki shiki-themes material-theme-lighter github-light github-dark","import SchemaBuilder from '@pothos\u002Fcore';\nimport { registerAll, registerGraphQL } from '@fougere\u002Fadapter-graphql';\n\nconst builder = new SchemaBuilder({});\nbuilder.queryType({});\nbuilder.mutationType({});\n\nregisterAll(builder, app);          \u002F\u002F ← every entity, every op, every relation\n\nregisterGraphQL(router, builder.toSchema());   \u002F\u002F mount it on \u002Fgraphql\n","ts","",[169,552,553,584,615,622,655,674,692,697,717,722],{"__ignoreMap":550},[554,555,558,562,566,569,573,577,580],"span",{"class":556,"line":557},"line",1,[554,559,561],{"class":560},"sVHd0","import",[554,563,565],{"class":564},"su5hD"," SchemaBuilder ",[554,567,568],{"class":560},"from",[554,570,572],{"class":571},"sjJ54"," '",[554,574,576],{"class":575},"s_sjI","@pothos\u002Fcore",[554,578,579],{"class":571},"'",[554,581,583],{"class":582},"sP7_E",";\n",[554,585,587,589,592,595,598,601,604,607,609,611,613],{"class":556,"line":586},2,[554,588,561],{"class":560},[554,590,591],{"class":582}," {",[554,593,594],{"class":564}," registerAll",[554,596,597],{"class":582},",",[554,599,600],{"class":564}," registerGraphQL",[554,602,603],{"class":582}," }",[554,605,606],{"class":560}," from",[554,608,572],{"class":571},[554,610,527],{"class":575},[554,612,579],{"class":571},[554,614,583],{"class":582},[554,616,618],{"class":556,"line":617},3,[554,619,621],{"emptyLinePlaceholder":620},true,"\n",[554,623,625,629,633,637,640,644,647,650,653],{"class":556,"line":624},4,[554,626,628],{"class":627},"sbsja","const",[554,630,632],{"class":631},"s_hVV"," builder",[554,634,636],{"class":635},"smGrS"," =",[554,638,639],{"class":635}," new",[554,641,643],{"class":642},"sGLFI"," SchemaBuilder",[554,645,646],{"class":564},"(",[554,648,649],{"class":582},"{}",[554,651,652],{"class":564},")",[554,654,583],{"class":582},[554,656,658,661,663,666,668,670,672],{"class":556,"line":657},5,[554,659,660],{"class":564},"builder",[554,662,202],{"class":582},[554,664,665],{"class":642},"queryType",[554,667,646],{"class":564},[554,669,649],{"class":582},[554,671,652],{"class":564},[554,673,583],{"class":582},[554,675,677,679,681,684,686,688,690],{"class":556,"line":676},6,[554,678,660],{"class":564},[554,680,202],{"class":582},[554,682,683],{"class":642},"mutationType",[554,685,646],{"class":564},[554,687,649],{"class":582},[554,689,652],{"class":564},[554,691,583],{"class":582},[554,693,695],{"class":556,"line":694},7,[554,696,621],{"emptyLinePlaceholder":620},[554,698,700,702,705,707,710,713],{"class":556,"line":699},8,[554,701,542],{"class":642},[554,703,704],{"class":564},"(builder",[554,706,597],{"class":582},[554,708,709],{"class":564}," app)",[554,711,712],{"class":582},";",[554,714,716],{"class":715},"sutJx","          \u002F\u002F ← every entity, every op, every relation\n",[554,718,720],{"class":556,"line":719},9,[554,721,621],{"emptyLinePlaceholder":620},[554,723,725,728,731,733,735,737,740,743,745],{"class":556,"line":724},10,[554,726,727],{"class":642},"registerGraphQL",[554,729,730],{"class":564},"(router",[554,732,597],{"class":582},[554,734,632],{"class":564},[554,736,202],{"class":582},[554,738,739],{"class":642},"toSchema",[554,741,742],{"class":564},"())",[554,744,712],{"class":582},[554,746,747],{"class":715},"   \u002F\u002F mount it on \u002Fgraphql\n",[145,749,750,752,753,756,757,760,761,764],{},[169,751,542],{}," walks the scanned Fronds. For each entity with a handler, it registers its\ntype, inputs, and one field per exposed operation. ",[169,754,755],{},"ref"," and ",[169,758,759],{},"many"," relations connect the\nregistered types; computed fields from a ",[157,762,763],{"href":74},"Presenter"," become\nresolvers.",[145,766,767,768,756,771,774],{},"Each generated resolver calls the handler façade and therefore keeps its validation,\nunknown-key rejection, and collectors. A custom resolver that calls the ORM directly must\napply those rules itself. Use ",[169,769,770],{},"registerType",[169,772,773],{},"registerOperations"," for fields the\nprojection cannot derive.",[145,776,777],{},"Two options, both rarely needed:",[545,779,781],{"className":547,"code":780,"language":549,"meta":550,"style":550},"registerAll(builder, app, { surface: 'graphql' });   \u002F\u002F honour frond.config.ts surfaces\nregisterAll(builder, app, { filter: (entity) => entity.name !== 'auditLog' });\n",[169,782,783,821],{"__ignoreMap":550},[554,784,785,787,789,791,794,796,798,802,805,807,810,812,814,816,818],{"class":556,"line":557},[554,786,542],{"class":642},[554,788,704],{"class":564},[554,790,597],{"class":582},[554,792,793],{"class":564}," app",[554,795,597],{"class":582},[554,797,591],{"class":582},[554,799,801],{"class":800},"skxfh"," surface",[554,803,804],{"class":582},":",[554,806,572],{"class":571},[554,808,809],{"class":575},"graphql",[554,811,579],{"class":571},[554,813,603],{"class":582},[554,815,652],{"class":564},[554,817,712],{"class":582},[554,819,820],{"class":715},"   \u002F\u002F honour frond.config.ts surfaces\n",[554,822,823,825,827,829,831,833,835,838,840,843,847,849,852,855,857,860,863,865,868,870,872,874],{"class":556,"line":586},[554,824,542],{"class":642},[554,826,704],{"class":564},[554,828,597],{"class":582},[554,830,793],{"class":564},[554,832,597],{"class":582},[554,834,591],{"class":582},[554,836,837],{"class":642}," filter",[554,839,804],{"class":582},[554,841,842],{"class":582}," (",[554,844,846],{"class":845},"s99_P","entity",[554,848,652],{"class":582},[554,850,851],{"class":627}," =>",[554,853,854],{"class":564}," entity",[554,856,202],{"class":582},[554,858,859],{"class":564},"name ",[554,861,862],{"class":635},"!==",[554,864,572],{"class":571},[554,866,867],{"class":575},"auditLog",[554,869,579],{"class":571},[554,871,603],{"class":582},[554,873,652],{"class":564},[554,875,583],{"class":582},[145,877,878,881,882,202],{},[169,879,880],{},"demos\u002Fschema-ecommerce"," runs exactly this under Apollo Server on ",[169,883,884],{},":4000",[145,886,887],{},"The GraphQL projection and its demo are available. The Nuxt module does not yet mount a\nGraphQL endpoint automatically as it does for REST.",[161,889,891],{"id":890},"writing-your-own","Writing your own",[145,893,894,895,897],{},"A custom surface such as RSS, webhook, or CLI follows the same sequence. The\n",[157,896,110],{"href":111}," page includes a complete RSS example.",[145,899,900,901,903],{},"Next: ",[157,902,127],{"href":128}," — what a Fougere app needs at runtime.",[905,906,907],"style",{},"html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}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 .skxfh, html code.shiki .skxfh{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s99_P, html code.shiki .s99_P{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#E36209;--shiki-default-font-style:inherit;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit}",{"title":550,"searchDepth":586,"depth":586,"links":909},[910,913,914,918],{"id":163,"depth":586,"text":164,"children":911},[912],{"id":290,"depth":617,"text":291},{"id":328,"depth":586,"text":329},{"id":521,"depth":586,"text":522,"children":915},[916],{"id":539,"depth":617,"text":917},"registerAll — the whole schema, one call",{"id":890,"depth":586,"text":891},"Expose Fougere operations through REST, GraphQL, or a custom adapter.","md",{},{"title":123,"description":919},"ekVYboGtwsqOFEhjUzOKxeB0Udd-rK8SfvBTKXoj6aY",1786637819516]