[{"data":1,"prerenderedAt":708},["ShallowReactive",2],{"fougere:post.list:{}":3,"reference:\u002Freference\u002Fpackages\u002Fapp":6,"reference-pages":487},{"items":4,"hasMore":5},[],false,{"id":7,"title":8,"body":9,"description":19,"extension":479,"file":480,"meta":481,"navigation":482,"path":483,"seo":484,"stem":485,"__hash__":486},"reference\u002Freference\u002Fpackages\u002Fapp.md","@fougere\u002Fapp",{"type":10,"value":11,"toc":473},"minimark",[12,16,20,39,44,321,325,332],[13,14,8],"h1",{"id":15},"fougereapp",[17,18,19],"p",{},"The host-independent half of a Fougere app: boot, call envelope, REST table, form contract.",[17,21,22,23,26,27,26,30,26,33,26,36],{},"Entries: ",[24,25,8],"code",{}," · ",[24,28,29],{},"@fougere\u002Fapp\u002Fclient",[24,31,32],{},"@fougere\u002Fapp\u002Fanswer",[24,34,35],{},"@fougere\u002Fapp\u002Fweb",[24,37,38],{},"@fougere\u002Fapp\u002Fexpress",[40,41,43],"h2",{"id":42},"what-you-import","What you import",[45,46,47,59],"table",{},[48,49,50],"thead",{},[51,52,53,57],"tr",{},[54,55,56],"th",{},"name",[54,58],{},[60,61,62,77,87,97,111,121,131,140,150,159,169,179,189,199,213,227,237,247,256,266,276,294,312],"tbody",{},[51,63,64,70],{},[65,66,67],"td",{},[24,68,69],{},"configureFougere",[65,71,72,73,76],{},"Overrides the data layer ",[24,74,75],{},"sources:"," would give.",[51,78,79,84],{},[65,80,81],{},[24,82,83],{},"extendFougere",[65,85,86],{},"Add to what is already stated, instead of replacing it.",[51,88,89,94],{},[65,90,91],{},[24,92,93],{},"useFougereApp",[65,95,96],{},"The booted app: boots on first call and keeps it; a refusal is not kept.",[51,98,99,104],{},[65,100,101],{},[24,102,103],{},"useFougereConfig",[65,105,106,107,110],{},"What ",[24,108,109],{},"fougere.config.ts"," says, read once and without booting.",[51,112,113,118],{},[65,114,115],{},[24,116,117],{},"reloadFougere",[65,119,120],{},"Turn the ring.",[51,122,123,128],{},[65,124,125],{},[24,126,127],{},"useFougereAuth",[65,129,130],{},"Get the auth runtime resolved at boot. Throws when no process-local frond brought one.",[51,132,133,138],{},[65,134,135],{},[24,136,137],{},"authOf",[65,139],{},[51,141,142,147],{},[65,143,144],{},[24,145,146],{},"tableOf",[65,148,149],{},"The table, per frond.",[51,151,152,157],{},[65,153,154],{},[24,155,156],{},"prefixOf",[65,158],{},[51,160,161,166],{},[65,162,163],{},[24,164,165],{},"invokeOn",[65,167,168],{},"Calls an operation server-side, in process or over the wire as the topology says.",[51,170,171,176],{},[65,172,173],{},[24,174,175],{},"sessionOn",[65,177,178],{},"The session of the request a server renders, asked of the auth frond as a page would ask it.",[51,180,181,186],{},[65,182,183],{},[24,184,185],{},"errorsByField",[65,187,188],{},"Index validator errors by field — local validator and remote validator share this shape.",[51,190,191,196],{},[65,192,193],{},[24,194,195],{},"formFieldsOf",[65,197,198],{},"The fields a create form is made of.",[51,200,201,206],{},[65,202,203],{},[24,204,205],{},"openingOf",[65,207,208,209,212],{},"What a form opens on: ",[24,210,211],{},"initial",", else the declared defaults.",[51,214,215,220],{},[65,216,217],{},[24,218,219],{},"payloadOf",[65,221,222,223,226],{},"The body of the form's values: an empty control is ",[24,224,225],{},"null"," where the field admits it, else absent.",[51,228,229,234],{},[65,230,231],{},[24,232,233],{},"tableColumnsOf",[65,235,236],{},"The columns a list is made of.",[51,238,239,244],{},[65,240,241],{},[24,242,243],{},"Choices",[65,245,246],{},"The rows a reference field offers — a handful, and a search to reach the others.",[51,248,249,254],{},[65,250,251],{},[24,252,253],{},"SESSION_CALL",[65,255],{},[51,257,258,263],{},[65,259,260],{},[24,261,262],{},"sessionOf",[65,264,265],{},"The session, asked through the envelope a page calls everything else through.",[51,267,268,273],{},[65,269,270],{},[24,271,272],{},"stateFor",[65,274,275],{},"The request state for these headers. Empty when no auth is declared, or nobody is signed in.",[51,277,278,283],{},[65,279,280],{},[24,281,282],{},"jsonBodyOf",[65,284,285,286,289,290,293],{},"The JSON body of a request, within ",[24,287,288],{},"maxBodyBytes","; no body reads as ",[24,291,292],{},"undefined",", another type is refused.",[51,295,296,301],{},[65,297,298],{},[24,299,300],{},"graphqlSurfaceOf",[65,302,303,304,307,308,311],{},"The surface a GraphQL path selects. Ex: ",[24,305,306],{},"\u002Fgraphql\u002Fpublic"," → ",[24,309,310],{},"public",".",[51,313,314,319],{},[65,315,316],{},[24,317,318],{},"createMemoryStorage",[65,320],{},[40,322,324],{"id":323},"types","Types",[17,326,327,328,331],{},"TypeScript types only — they do not run. Import them with ",[24,329,330],{},"import type"," to type your own code: a variable, a parameter, an option object.",[45,333,334,342],{},[48,335,336],{},[51,337,338,340],{},[54,339,56],{},[54,341],{},[60,343,344,353,362,376,386,396,406,415,425,435,445,454,463],{},[51,345,346,351],{},[65,347,348],{},[24,349,350],{},"FougereServerConfig",[65,352],{},[51,354,355,360],{},[65,356,357],{},[24,358,359],{},"SchemaView",[65,361],{},[51,363,364,369],{},[65,365,366],{},[24,367,368],{},"FormRow",[65,370,371,372,375],{},"The row an entity class builds, which is what its form fills and what ",[24,373,374],{},"create"," answers.",[51,377,378,383],{},[65,379,380],{},[24,381,382],{},"FormValues",[65,384,385],{},"What the form holds — any field, none of them yet.",[51,387,388,393],{},[65,389,390],{},[24,391,392],{},"FormErrors",[65,394,395],{},"One message per refused field.",[51,397,398,403],{},[65,399,400],{},[24,401,402],{},"FormFieldName",[65,404,405],{},"A field of that row, by name.",[51,407,408,413],{},[65,409,410],{},[24,411,412],{},"FormField",[65,414],{},[51,416,417,422],{},[65,418,419],{},[24,420,421],{},"FormReference",[65,423,424],{},"The entity a reference points at, and which of its fields names one of its rows.",[51,426,427,432],{},[65,428,429],{},[24,430,431],{},"Choice",[65,433,434],{},"One row a reference may point at, as a form offers it.",[51,436,437,442],{},[65,438,439],{},[24,440,441],{},"Offer",[65,443,444],{},"What one load offers, and whether the target holds more than it — which is when a search is worth showing.",[51,446,447,452],{},[65,448,449],{},[24,450,451],{},"TableColumn",[65,453],{},[51,455,456,461],{},[65,457,458],{},[24,459,460],{},"SessionView",[65,462],{},[51,464,465,470],{},[65,466,467],{},[24,468,469],{},"GraphQLDocument",[65,471,472],{},"The GraphQL facade — declared like the others, mounted like the others. A document, its variables, and which operation of it to run.",{"title":474,"searchDepth":475,"depth":475,"links":476},"",2,[477,478],{"id":42,"depth":475,"text":43},{"id":323,"depth":475,"text":324},"md",null,{},true,"\u002Freference\u002Fpackages\u002Fapp",{"title":8,"description":19},"reference\u002Fpackages\u002Fapp","AfIjnaGZrrVSrj2kzIBmrpJXYHNHVjiwxIdGIvQlCcg",[488,493,498,502,507,512,517,522,527,532,537,542,547,552,557,562,567,572,577,582,583,588,593,598,603,608,613,618,623,628,633,638,643,648,653,658,663,668,673,678,683,688,693,698,703],{"path":489,"title":490,"description":491,"stem":492},"\u002Freference\u002Fcli","CLI","fougere new, serve, call, sync, graph — composing a workspace, hosting one frond, invoking an operation from a shell.","reference\u002F01.cli",{"path":494,"title":495,"description":496,"stem":497},"\u002Freference\u002Ferrors","Error codes","Every code an operation can refuse with, and its HTTP status.","reference\u002F02.errors",{"path":499,"title":109,"description":500,"stem":501},"\u002Freference\u002Fconfig","Every key the app config admits, and which package answers each one.","reference\u002F03.config",{"path":503,"title":504,"description":505,"stem":506},"\u002Freference\u002Ffrond-config","frond.config.ts","Every key a frond's own config admits.","reference\u002F04.frond-config",{"path":508,"title":509,"description":510,"stem":511},"\u002Freference\u002Fsources","Source types","Every type an entry of sources: may name, and the keys it admits.","reference\u002F05.sources",{"path":513,"title":514,"description":515,"stem":516},"\u002Freference\u002Fprotocols","Protocols","What protocols: may serve, and what each admits.","reference\u002F06.protocols",{"path":518,"title":519,"description":520,"stem":521},"\u002Freference\u002Fstates","State keepers","How state: may keep a caller's values.","reference\u002F07.states",{"path":523,"title":524,"description":525,"stem":526},"\u002Freference\u002Fforms","Forms","The types a frond is written with — each one read by the scan.","reference\u002F08.forms",{"path":528,"title":529,"description":530,"stem":531},"\u002Freference\u002Fports","Ports Fougere opens","The classes you stand in front of, or extend, to change what the framework does.","reference\u002F09.ports",{"path":533,"title":534,"description":535,"stem":536},"\u002Freference\u002Finterfaces","Interfaces to extend","The empty interfaces a package augments with declare module, and who augments each.","reference\u002F10.interfaces",{"path":538,"title":539,"description":540,"stem":541},"\u002Freference\u002Fdiagnostics","Boot and check diagnostics","Every code a boot, the scan or fougere check can raise, and what it says.","reference\u002F11.diagnostics",{"path":543,"title":544,"description":545,"stem":546},"\u002Freference\u002Fpackages\u002Fadapter-duckdb","@fougere\u002Fadapter-duckdb","Read across an app's sources — one SQL query over what DuckDB can attach.","reference\u002Fpackages\u002Fadapter-duckdb",{"path":548,"title":549,"description":550,"stem":551},"\u002Freference\u002Fpackages\u002Fadapter-env","@fougere\u002Fadapter-env","The process environment as a source — MEILI_URL read as Meili's url, judged at boot.","reference\u002Fpackages\u002Fadapter-env",{"path":553,"title":554,"description":555,"stem":556},"\u002Freference\u002Fpackages\u002Fadapter-file","@fougere\u002Fadapter-file","Rows as files — one JSON or YAML file per row, in a directory per entity.","reference\u002Fpackages\u002Fadapter-file",{"path":558,"title":559,"description":560,"stem":561},"\u002Freference\u002Fpackages\u002Fadapter-graphql","@fougere\u002Fadapter-graphql","Entity → GraphQL types, inputs and CRUD, through Pothos.","reference\u002Fpackages\u002Fadapter-graphql",{"path":563,"title":564,"description":565,"stem":566},"\u002Freference\u002Fpackages\u002Fadapter-memory","@fougere\u002Fadapter-memory","Rows in a Map — the source a first run meets, and the one that ships no driver.","reference\u002Fpackages\u002Fadapter-memory",{"path":568,"title":569,"description":570,"stem":571},"\u002Freference\u002Fpackages\u002Fadapter-rest","@fougere\u002Fadapter-rest","Entity → REST routes.","reference\u002Fpackages\u002Fadapter-rest",{"path":573,"title":574,"description":575,"stem":576},"\u002Freference\u002Fpackages\u002Fadapter-sql","@fougere\u002Fadapter-sql","Entity → SQL tables through Kysely (SQLite, PostgreSQL, MySQL, SQL Server).","reference\u002Fpackages\u002Fadapter-sql",{"path":578,"title":579,"description":580,"stem":581},"\u002Freference\u002Fpackages\u002Fadmin","@fougere\u002Fadmin","A back-office derived from what the app already says it hosts — a react-admin DataProvider over the Fougere wire.","reference\u002Fpackages\u002Fadmin",{"path":483,"title":8,"description":19,"stem":485},{"path":584,"title":585,"description":586,"stem":587},"\u002Freference\u002Fpackages\u002Fauth-better","@fougere\u002Fauth-better","Fougere's auth — a translation layer onto better-auth.","reference\u002Fpackages\u002Fauth-better",{"path":589,"title":590,"description":591,"stem":592},"\u002Freference\u002Fpackages\u002Fcalls","@fougere\u002Fcalls","Optional call log for Fougere: a bounded ring of every dispatch, served as an rpc operation. Read it with `fougere devtools`.","reference\u002Fpackages\u002Fcalls",{"path":594,"title":595,"description":596,"stem":597},"\u002Freference\u002Fpackages\u002Fcli","@fougere\u002Fcli","The Fougere CLI — compose a workspace, serve a frond, call an operation.","reference\u002Fpackages\u002Fcli",{"path":599,"title":600,"description":601,"stem":602},"\u002Freference\u002Fpackages\u002Fcompiler","@fougere\u002Fcompiler","The scan: Fougere reading a project's source to produce the descriptors core boots from. Needs a filesystem and a TypeScript program.","reference\u002Fpackages\u002Fcompiler",{"path":604,"title":605,"description":606,"stem":607},"\u002Freference\u002Fpackages\u002Fcontainer","@fougere\u002Fcontainer","Fougere's DI container: resolution by type, wired from the AST scan. Zero dependencies.","reference\u002Fpackages\u002Fcontainer",{"path":609,"title":610,"description":611,"stem":612},"\u002Freference\u002Fpackages\u002Fcore","@fougere\u002Fcore","The core — scan, call contract, façades, remote stand-ins.","reference\u002Fpackages\u002Fcore",{"path":614,"title":615,"description":616,"stem":617},"\u002Freference\u002Fpackages\u002Fdecorators","@fougere\u002Fdecorators","Configuration sugar (@config) — declarative, never hidden runtime.","reference\u002Fpackages\u002Fdecorators",{"path":619,"title":620,"description":621,"stem":622},"\u002Freference\u002Fpackages\u002Fdefaults","@fougere\u002Fdefaults","The conventional boot of a Fougere app — the one place storage is wired.","reference\u002Fpackages\u002Fdefaults",{"path":624,"title":625,"description":626,"stem":627},"\u002Freference\u002Fpackages\u002Fgraph","@fougere\u002Fgraph","Fougere's graph: a labelled directed multigraph, and the four questions asked of it — order, cycles, components, reach. Zero dependencies.","reference\u002Fpackages\u002Fgraph",{"path":629,"title":630,"description":631,"stem":632},"\u002Freference\u002Fpackages\u002Fhttp","@fougere\u002Fhttp","The words every HTTP door speaks — a method, an answer, the headers a state travels in.","reference\u002Fpackages\u002Fhttp",{"path":634,"title":635,"description":636,"stem":637},"\u002Freference\u002Fpackages\u002Flog","@fougere\u002Flog","Logging for Fougere: two lines for every call, in every process, and a file destination for the lines.","reference\u002Fpackages\u002Flog",{"path":639,"title":640,"description":641,"stem":642},"\u002Freference\u002Fpackages\u002Fnext","@fougere\u002Fnext","The Next.js adapter: mounting, and the one import that is genuinely Next.","reference\u002Fpackages\u002Fnext",{"path":644,"title":645,"description":646,"stem":647},"\u002Freference\u002Fpackages\u002Fnuxt","@fougere\u002Fnuxt","The Nuxt module: Fougere's client primitives and server surface.","reference\u002Fpackages\u002Fnuxt",{"path":649,"title":650,"description":651,"stem":652},"\u002Freference\u002Fpackages\u002Fobservability","@fougere\u002Fobservability","Optional observability for Fougere: one span per operation, W3C Trace Context across any transport.","reference\u002Fpackages\u002Fobservability",{"path":654,"title":655,"description":656,"stem":657},"\u002Freference\u002Fpackages\u002Foclif","@fougere\u002Foclif","A frond's operations, as a terminal: topics, flags and help derived from what it declares.","reference\u002Fpackages\u002Foclif",{"path":659,"title":660,"description":661,"stem":662},"\u002Freference\u002Fpackages\u002Freact","@fougere\u002Freact","Fougere's four primitives as React hooks — host-independent.","reference\u002Fpackages\u002Freact",{"path":664,"title":665,"description":666,"stem":667},"\u002Freference\u002Fpackages\u002Fregistry","@fougere\u002Fregistry","Fougere's registry: one answer per name, refused when a second one arrives, and a reload that says it replaces. Zero dependencies.","reference\u002Fpackages\u002Fregistry",{"path":669,"title":670,"description":671,"stem":672},"\u002Freference\u002Fpackages\u002Fschema","@fougere\u002Fschema","The entity and its 4 axes — shape, role, lifecycle, boundary. Subject-owned judgments, edge-safe.","reference\u002Fpackages\u002Fschema",{"path":674,"title":675,"description":676,"stem":677},"\u002Freference\u002Fpackages\u002Fstate-cookie","@fougere\u002Fstate-cookie","A caller's state kept in a cookie — what `state: { cart: { cookie: {} } }` names, signed by core, carried by every HTTP door.","reference\u002Fpackages\u002Fstate-cookie",{"path":679,"title":680,"description":681,"stem":682},"\u002Freference\u002Fpackages\u002Fstate-session","@fougere\u002Fstate-session","A caller's state kept in a session — what `state: { cart: { session: {} } }` names: one cookie holds a reference, the values a row in a source.","reference\u002Fpackages\u002Fstate-session",{"path":684,"title":685,"description":686,"stem":687},"\u002Freference\u002Fpackages\u002Fsvelte","@fougere\u002Fsvelte","Fougere's four primitives as Svelte stores — host-independent.","reference\u002Fpackages\u002Fsvelte",{"path":689,"title":690,"description":691,"stem":692},"\u002Freference\u002Fpackages\u002Ftesting","@fougere\u002Ftesting","Tests derived from the declaration — cases, stubs and a gradient of realities.","reference\u002Fpackages\u002Ftesting",{"path":694,"title":695,"description":696,"stem":697},"\u002Freference\u002Fpackages\u002Ftransport-http","@fougere\u002Ftransport-http","The call contract on the wire, in JSON-RPC 2.0 (server + client).","reference\u002Fpackages\u002Ftransport-http",{"path":699,"title":700,"description":701,"stem":702},"\u002Freference\u002Fpackages\u002Fvite","@fougere\u002Fvite","The Vite plugin: what any Vite-built host must know to run a Fougere app.","reference\u002Fpackages\u002Fvite",{"path":704,"title":705,"description":706,"stem":707},"\u002Freference\u002Fpackages\u002Fworkflow","@fougere\u002Fworkflow","A release that goes to the end: the journal is three entities, the sweep is an operation, and a shared journal is one line of remotes:.","reference\u002Fpackages\u002Fworkflow",1794396612888]