[{"data":1,"prerenderedAt":466},["ShallowReactive",2],{"fougere:post.list:{}":3,"reference:\u002Freference\u002Fforms":6,"reference-pages":245},{"items":4,"hasMore":5},[],false,{"id":7,"title":8,"body":9,"description":236,"extension":237,"file":238,"meta":239,"navigation":240,"path":241,"seo":242,"stem":243,"__hash__":244},"reference\u002Freference\u002F08.forms.md","Forms",{"type":10,"value":11,"toc":221},"minimark",[12,16,31,38,44,68,74,79,82,88,92,99,105,109,112,118,122,125,131,135,148,154,158,164,170,175,181,187,191,201,207,211],[13,14,8],"h1",{"id":15},"forms",[17,18,19,20,24,25,30],"p",{},"You write these in a signature or after ",[21,22,23],"code",{},"extends","; the scan reads them and wires what they say. See ",[26,27,29],"a",{"href":28},"\u002Fdocs","What is Fougere",".",[32,33,35],"h3",{"id":34},"repository",[21,36,37],{},"Repository",[17,39,40,41],{},"class · ",[21,42,43],{},"@fougere\u002Fcore",[17,45,46,47,50,51,50,54,50,57,50,60,63,64,67],{},"The rows of an entity; extended by a handler, it serves ",[21,48,49],{},"list",", ",[21,52,53],{},"findById",[21,55,56],{},"create",[21,58,59],{},"update",[21,61,62],{},"delete",".\nEx: ",[21,65,66],{},"Repository\u003CAccount, Ledger>"," owns both tables and forwards nothing.",[32,69,71],{"id":70},"facade",[21,72,73],{},"Facade",[17,75,76,77],{},"type · ",[21,78,43],{},[17,80,81],{},"The facade in front of a handler: it takes what the handler takes, and always answers a promise.",[32,83,85],{"id":84},"emit",[21,86,87],{},"Emit",[17,89,76,90],{},[21,91,43],{},[17,93,94,95,98],{},"What an emitter injects; partial, because announcing fills the fact's ",[21,96,97],{},"created()"," fields.",[32,100,102],{"id":101},"fact",[21,103,104],{},"Fact",[17,106,76,107],{},[21,108,43],{},[17,110,111],{},"What a subscriber accepts; what it answers reaches only an announcer that waits.",[32,113,115],{"id":114},"pipe",[21,116,117],{},"Pipe",[17,119,76,120],{},[21,121,43],{},[17,123,124],{},"The same fact before it is final: an op taking one answers what every subscriber then receives.",[32,126,128],{"id":127},"collect",[21,129,130],{},"Collect",[17,132,40,133],{},[21,134,43],{},[17,136,137,140,141,143,144,147],{},[21,138,139],{},"Collect\u003CUser>",": ",[21,142,127],{}," fills a parameter of that type, ",[21,145,146],{},"missing"," refuses when a required one found nothing.",[32,149,151],{"id":150},"present",[21,152,153],{},"Present",[17,155,40,156],{},[21,157,43],{},[17,159,160,163],{},[21,161,162],{},"Present\u003COrder>",": each method is a computed field, handed the page and answering one value per row.",[32,165,167],{"id":166},"together",[21,168,169],{},"Together",[17,171,172,173],{},"interface · ",[21,174,43],{},[17,176,177,180],{},[21,178,179],{},"Together\u003C[Account, Ledger]>"," — writes that stand or fall as one.",[32,182,184],{"id":183},"state",[21,185,186],{},"State",[17,188,40,189],{},[21,190,43],{},[17,192,193,194,197,198,30],{},"The caller's state, read and written by the names ",[21,195,196],{},"state:"," declares; signed before it leaves.\nEx: ",[21,199,200],{},"addToCart(id: Product['id'], state: State)",[32,202,204],{"id":203},"mirror",[21,205,206],{},"Mirror",[17,208,40,209],{},[21,210,43],{},[17,212,213,214,50,217,220],{},"A repository that fills itself from a source it cannot query: its author writes ",[21,215,216],{},"pull",[21,218,219],{},"refresh(since)"," writes every page.",{"title":222,"searchDepth":223,"depth":223,"links":224},"",2,[225,227,228,229,230,231,232,233,234,235],{"id":34,"depth":226,"text":37},3,{"id":70,"depth":226,"text":73},{"id":84,"depth":226,"text":87},{"id":101,"depth":226,"text":104},{"id":114,"depth":226,"text":117},{"id":127,"depth":226,"text":130},{"id":150,"depth":226,"text":153},{"id":166,"depth":226,"text":169},{"id":183,"depth":226,"text":186},{"id":203,"depth":226,"text":206},"The types a frond is written with — each one read by the scan.","md",null,{},true,"\u002Freference\u002Fforms",{"title":8,"description":236},"reference\u002F08.forms","_unCBU2peS4ptOvZ-EIyVtNVcJ8g1zs1sAVE5C6ReGM",[246,251,256,261,266,271,276,281,282,287,292,297,302,307,312,317,322,327,332,337,342,347,352,357,362,367,371,376,381,386,391,396,401,406,411,416,421,426,431,436,441,446,451,456,461],{"path":247,"title":248,"description":249,"stem":250},"\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":252,"title":253,"description":254,"stem":255},"\u002Freference\u002Ferrors","Error codes","Every code an operation can refuse with, and its HTTP status.","reference\u002F02.errors",{"path":257,"title":258,"description":259,"stem":260},"\u002Freference\u002Fconfig","fougere.config.ts","Every key the app config admits, and which package answers each one.","reference\u002F03.config",{"path":262,"title":263,"description":264,"stem":265},"\u002Freference\u002Ffrond-config","frond.config.ts","Every key a frond's own config admits.","reference\u002F04.frond-config",{"path":267,"title":268,"description":269,"stem":270},"\u002Freference\u002Fsources","Source types","Every type an entry of sources: may name, and the keys it admits.","reference\u002F05.sources",{"path":272,"title":273,"description":274,"stem":275},"\u002Freference\u002Fprotocols","Protocols","What protocols: may serve, and what each admits.","reference\u002F06.protocols",{"path":277,"title":278,"description":279,"stem":280},"\u002Freference\u002Fstates","State keepers","How state: may keep a caller's values.","reference\u002F07.states",{"path":241,"title":8,"description":236,"stem":243},{"path":283,"title":284,"description":285,"stem":286},"\u002Freference\u002Fports","Ports Fougere opens","The classes you stand in front of, or extend, to change what the framework does.","reference\u002F09.ports",{"path":288,"title":289,"description":290,"stem":291},"\u002Freference\u002Finterfaces","Interfaces to extend","The empty interfaces a package augments with declare module, and who augments each.","reference\u002F10.interfaces",{"path":293,"title":294,"description":295,"stem":296},"\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":298,"title":299,"description":300,"stem":301},"\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":303,"title":304,"description":305,"stem":306},"\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":308,"title":309,"description":310,"stem":311},"\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":313,"title":314,"description":315,"stem":316},"\u002Freference\u002Fpackages\u002Fadapter-graphql","@fougere\u002Fadapter-graphql","Entity → GraphQL types, inputs and CRUD, through Pothos.","reference\u002Fpackages\u002Fadapter-graphql",{"path":318,"title":319,"description":320,"stem":321},"\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":323,"title":324,"description":325,"stem":326},"\u002Freference\u002Fpackages\u002Fadapter-rest","@fougere\u002Fadapter-rest","Entity → REST routes.","reference\u002Fpackages\u002Fadapter-rest",{"path":328,"title":329,"description":330,"stem":331},"\u002Freference\u002Fpackages\u002Fadapter-sql","@fougere\u002Fadapter-sql","Entity → SQL tables through Kysely (SQLite, PostgreSQL, MySQL, SQL Server).","reference\u002Fpackages\u002Fadapter-sql",{"path":333,"title":334,"description":335,"stem":336},"\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":338,"title":339,"description":340,"stem":341},"\u002Freference\u002Fpackages\u002Fapp","@fougere\u002Fapp","The host-independent half of a Fougere app: boot, call envelope, REST table, form contract.","reference\u002Fpackages\u002Fapp",{"path":343,"title":344,"description":345,"stem":346},"\u002Freference\u002Fpackages\u002Fauth-better","@fougere\u002Fauth-better","Fougere's auth — a translation layer onto better-auth.","reference\u002Fpackages\u002Fauth-better",{"path":348,"title":349,"description":350,"stem":351},"\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":353,"title":354,"description":355,"stem":356},"\u002Freference\u002Fpackages\u002Fcli","@fougere\u002Fcli","The Fougere CLI — compose a workspace, serve a frond, call an operation.","reference\u002Fpackages\u002Fcli",{"path":358,"title":359,"description":360,"stem":361},"\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":363,"title":364,"description":365,"stem":366},"\u002Freference\u002Fpackages\u002Fcontainer","@fougere\u002Fcontainer","Fougere's DI container: resolution by type, wired from the AST scan. Zero dependencies.","reference\u002Fpackages\u002Fcontainer",{"path":368,"title":43,"description":369,"stem":370},"\u002Freference\u002Fpackages\u002Fcore","The core — scan, call contract, façades, remote stand-ins.","reference\u002Fpackages\u002Fcore",{"path":372,"title":373,"description":374,"stem":375},"\u002Freference\u002Fpackages\u002Fdecorators","@fougere\u002Fdecorators","Configuration sugar (@config) — declarative, never hidden runtime.","reference\u002Fpackages\u002Fdecorators",{"path":377,"title":378,"description":379,"stem":380},"\u002Freference\u002Fpackages\u002Fdefaults","@fougere\u002Fdefaults","The conventional boot of a Fougere app — the one place storage is wired.","reference\u002Fpackages\u002Fdefaults",{"path":382,"title":383,"description":384,"stem":385},"\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":387,"title":388,"description":389,"stem":390},"\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":392,"title":393,"description":394,"stem":395},"\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":397,"title":398,"description":399,"stem":400},"\u002Freference\u002Fpackages\u002Fnext","@fougere\u002Fnext","The Next.js adapter: mounting, and the one import that is genuinely Next.","reference\u002Fpackages\u002Fnext",{"path":402,"title":403,"description":404,"stem":405},"\u002Freference\u002Fpackages\u002Fnuxt","@fougere\u002Fnuxt","The Nuxt module: Fougere's client primitives and server surface.","reference\u002Fpackages\u002Fnuxt",{"path":407,"title":408,"description":409,"stem":410},"\u002Freference\u002Fpackages\u002Fobservability","@fougere\u002Fobservability","Optional observability for Fougere: one span per operation, W3C Trace Context across any transport.","reference\u002Fpackages\u002Fobservability",{"path":412,"title":413,"description":414,"stem":415},"\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":417,"title":418,"description":419,"stem":420},"\u002Freference\u002Fpackages\u002Freact","@fougere\u002Freact","Fougere's four primitives as React hooks — host-independent.","reference\u002Fpackages\u002Freact",{"path":422,"title":423,"description":424,"stem":425},"\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":427,"title":428,"description":429,"stem":430},"\u002Freference\u002Fpackages\u002Fschema","@fougere\u002Fschema","The entity and its 4 axes — shape, role, lifecycle, boundary. Subject-owned judgments, edge-safe.","reference\u002Fpackages\u002Fschema",{"path":432,"title":433,"description":434,"stem":435},"\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":437,"title":438,"description":439,"stem":440},"\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":442,"title":443,"description":444,"stem":445},"\u002Freference\u002Fpackages\u002Fsvelte","@fougere\u002Fsvelte","Fougere's four primitives as Svelte stores — host-independent.","reference\u002Fpackages\u002Fsvelte",{"path":447,"title":448,"description":449,"stem":450},"\u002Freference\u002Fpackages\u002Ftesting","@fougere\u002Ftesting","Tests derived from the declaration — cases, stubs and a gradient of realities.","reference\u002Fpackages\u002Ftesting",{"path":452,"title":453,"description":454,"stem":455},"\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":457,"title":458,"description":459,"stem":460},"\u002Freference\u002Fpackages\u002Fvite","@fougere\u002Fvite","The Vite plugin: what any Vite-built host must know to run a Fougere app.","reference\u002Fpackages\u002Fvite",{"path":462,"title":463,"description":464,"stem":465},"\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",1794396612306]