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