[{"data":1,"prerenderedAt":531},["ShallowReactive",2],{"fougere:post.list:{}":3,"reference:\u002Freference\u002Ffrond-config":6,"reference-pages":309},{"items":4,"hasMore":5},[],false,{"id":7,"title":8,"body":9,"description":257,"extension":258,"file":259,"meta":304,"navigation":285,"path":305,"seo":306,"stem":307,"__hash__":308},"reference\u002Freference\u002F04.frond-config.md","frond.config.ts",{"type":10,"value":11,"toc":236},"minimark",[12,16,20,23,30,36,39,44,49,52,57,62,65,70,75,78,83,88,95,100,105,111,116,125,131,136,141,146,153,158,163,166,171,176,182,187,191,194,199,204,211,216,221,224,229,233],[13,14,8],"h1",{"id":15},"frondconfigts",[17,18,19],"p",{},"What one frond decides for itself, and wins for its own scope.",[21,22],"reference-annotated-file",{},[24,25,27],"h3",{"id":26},"expose",[28,29,26],"code",{},[17,31,32,35],{},[28,33,34],{},"(NameOf\u003C'handler'> | NameOf\u003C'entity'>)[]"," · optional",[17,37,38],{},"Class names exposed as the frond's public contract (all surfaces).",[24,40,42],{"id":41},"reads",[28,43,41],{},[17,45,46,35],{},[28,47,48],{},"NameOf\u003C'entity'>[]",[17,50,51],{},"The entities this frond may read ACROSS sources, by name.",[24,53,55],{"id":54},"surfaces",[28,56,54],{},[17,58,59,35],{},[28,60,61],{},"Record\u003Cstring, NameOf\u003C'entity'>[]>",[17,63,64],{},"Per-surface entity lists. Overrides default deduction for each named surface.",[24,66,68],{"id":67},"pipes",[28,69,67],{},[17,71,72,35],{},[28,73,74],{},"Record\u003CNameOf\u003C'entity'>, NameOf\u003C'handler'>[]>",[17,76,77],{},"The ops that finish a fact, in the order they run, keyed by fact; declared by the fact's owner.",[24,79,81],{"id":80},"ports",[28,82,80],{},[17,84,85,35],{},[28,86,87],{},"Record\u003Cstring, string | readonly string[]>",[17,89,90,91,94],{},"The order this frond's links stand in front of a port, outside in.\nEx: ",[28,92,93],{},"ports: { Dispatcher: ['Timing', 'Audit'] }",".",[24,96,98],{"id":97},"protocols",[28,99,97],{},[17,101,102,35],{},[28,103,104],{},"FougereFrondProtocols",[17,106,107,108,94],{},"What the frond says to each protocol about itself — ",[28,109,110],{},"rest: { path: '\u002Fjournal' }",[24,112,114],{"id":113},"operations",[28,115,113],{},[17,117,118,121,122,35],{},[28,119,120],{},"Record\u003C","${string}.${string}",[28,123,124],{},", OperationOverride>",[17,126,127,128,94],{},"Per-operation overrides, keyed the way an op is named: ",[28,129,130],{},"post.list",[132,133,135],"h2",{"id":134},"per-operation","Per operation",[24,137,139],{"id":138},"kind",[28,140,138],{},[17,142,143,35],{},[28,144,145],{},"OperationKind",[17,147,148,149,152],{},"Force operation kind, over the naming convention (",[28,150,151],{},"isReadOp",").",[24,154,156],{"id":155},"handler",[28,157,155],{},[17,159,160,35],{},[28,161,162],{},"Ctor",[17,164,165],{},"The handler class to delegate to, resolved by its name.",[24,167,169],{"id":168},"method",[28,170,168],{},[17,172,173,35],{},[28,174,175],{},"string",[17,177,178,179,181],{},"Method name on ",[28,180,155],{}," (defaults to the operation name).",[24,183,185],{"id":184},"policy",[28,186,184],{},[17,188,189,35],{},[28,190,175],{},[17,192,193],{},"CASL ability check (e.g.",[24,195,197],{"id":196},"input",[28,198,196],{},[17,200,201,35],{},[28,202,203],{},"SchemaView",[17,205,206,207,210],{},"What validates the input. The view carries its own mode (",[28,208,209],{},"partial()"," → patch).",[24,212,214],{"id":213},"binding",[28,215,213],{},[17,217,218,35],{},[28,219,220],{},"BindingPlan",[17,222,223],{},"Where each argument is read from; an empty array means the op takes nothing.",[24,225,227],{"id":226},"output",[28,228,226],{},[17,230,231,35],{},[28,232,203],{},[17,234,235],{},"Per-operation output view, below prefab declarations and above handler\u002Fentity defaults.",{"title":237,"searchDepth":238,"depth":238,"links":239},"",2,[240,242,243,244,245,246,247,248],{"id":26,"depth":241,"text":26},3,{"id":41,"depth":241,"text":41},{"id":54,"depth":241,"text":54},{"id":67,"depth":241,"text":67},{"id":80,"depth":241,"text":80},{"id":97,"depth":241,"text":97},{"id":113,"depth":241,"text":113},{"id":134,"depth":238,"text":135,"children":249},[250,251,252,253,254,255,256],{"id":138,"depth":241,"text":138},{"id":155,"depth":241,"text":155},{"id":168,"depth":241,"text":168},{"id":184,"depth":241,"text":184},{"id":196,"depth":241,"text":196},{"id":213,"depth":241,"text":213},{"id":226,"depth":241,"text":226},"Every key a frond's own config admits.","md",{"name":260,"lines":261,"notes":283},"fronds\u002Fblog\u002Ffrond.config.ts",[262,264,265,267,269,271,273,275,277,279,281],{"text":263},"import { defineFrond } from '@fougere\u002Fcore\u002Fnode';",{"text":237},{"text":266},"export default defineFrond({",{"text":268,"key":26},"  expose: [ … ],",{"text":270,"key":41},"  reads: [ … ],",{"text":272,"key":54},"  surfaces: { … },",{"text":274,"key":67},"  pipes: { … },",{"text":276,"key":80},"  ports: { … },",{"text":278,"key":97},"  protocols: { … },",{"text":280,"key":113},"  operations: { … },",{"text":282},"});",{"expose":284,"reads":287,"surfaces":289,"pipes":292,"ports":294,"protocols":297,"operations":300},{"type":34,"optional":285,"doc":38,"links":286},true,[],{"type":48,"optional":285,"doc":51,"links":288},[],{"type":61,"optional":285,"doc":290,"links":291},"Per-surface entity lists.",[],{"type":74,"optional":285,"doc":77,"links":293},[],{"type":87,"optional":285,"doc":295,"links":296},"The order this frond's links stand in front of a port, outside in.",[],{"type":104,"optional":285,"doc":298,"links":299},"What the frond says to each protocol about itself — `rest: { path: '\u002Fjournal' }`.",[],{"type":301,"optional":285,"doc":302,"links":303},"Record\u003C`${string}.${string}`, OperationOverride>","Per-operation overrides, keyed the way an op is named: `post.list`.",[],{},"\u002Freference\u002Ffrond-config",{"title":8,"description":257},"reference\u002F04.frond-config","KV3h9PrXs3x8mSWVSkKQP8KuoyTmwjOIi501gzP3Go8",[310,315,320,325,326,331,336,341,346,351,356,361,366,371,376,381,386,391,396,401,406,411,416,421,426,431,436,441,446,451,456,461,466,471,476,481,486,491,496,501,506,511,516,521,526],{"path":311,"title":312,"description":313,"stem":314},"\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":316,"title":317,"description":318,"stem":319},"\u002Freference\u002Ferrors","Error codes","Every code an operation can refuse with, and its HTTP status.","reference\u002F02.errors",{"path":321,"title":322,"description":323,"stem":324},"\u002Freference\u002Fconfig","fougere.config.ts","Every key the app config admits, and which package answers each one.","reference\u002F03.config",{"path":305,"title":8,"description":257,"stem":307},{"path":327,"title":328,"description":329,"stem":330},"\u002Freference\u002Fsources","Source types","Every type an entry of sources: may name, and the keys it admits.","reference\u002F05.sources",{"path":332,"title":333,"description":334,"stem":335},"\u002Freference\u002Fprotocols","Protocols","What protocols: may serve, and what each admits.","reference\u002F06.protocols",{"path":337,"title":338,"description":339,"stem":340},"\u002Freference\u002Fstates","State keepers","How state: may keep a caller's values.","reference\u002F07.states",{"path":342,"title":343,"description":344,"stem":345},"\u002Freference\u002Fforms","Forms","The types a frond is written with — each one read by the scan.","reference\u002F08.forms",{"path":347,"title":348,"description":349,"stem":350},"\u002Freference\u002Fports","Ports Fougere opens","The classes you stand in front of, or extend, to change what the framework does.","reference\u002F09.ports",{"path":352,"title":353,"description":354,"stem":355},"\u002Freference\u002Finterfaces","Interfaces to extend","The empty interfaces a package augments with declare module, and who augments each.","reference\u002F10.interfaces",{"path":357,"title":358,"description":359,"stem":360},"\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":362,"title":363,"description":364,"stem":365},"\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":367,"title":368,"description":369,"stem":370},"\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":372,"title":373,"description":374,"stem":375},"\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":377,"title":378,"description":379,"stem":380},"\u002Freference\u002Fpackages\u002Fadapter-graphql","@fougere\u002Fadapter-graphql","Entity → GraphQL types, inputs and CRUD, through Pothos.","reference\u002Fpackages\u002Fadapter-graphql",{"path":382,"title":383,"description":384,"stem":385},"\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":387,"title":388,"description":389,"stem":390},"\u002Freference\u002Fpackages\u002Fadapter-rest","@fougere\u002Fadapter-rest","Entity → REST routes.","reference\u002Fpackages\u002Fadapter-rest",{"path":392,"title":393,"description":394,"stem":395},"\u002Freference\u002Fpackages\u002Fadapter-sql","@fougere\u002Fadapter-sql","Entity → SQL tables through Kysely (SQLite, PostgreSQL, MySQL, SQL Server).","reference\u002Fpackages\u002Fadapter-sql",{"path":397,"title":398,"description":399,"stem":400},"\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":402,"title":403,"description":404,"stem":405},"\u002Freference\u002Fpackages\u002Fapp","@fougere\u002Fapp","The host-independent half of a Fougere app: boot, call envelope, REST table, form contract.","reference\u002Fpackages\u002Fapp",{"path":407,"title":408,"description":409,"stem":410},"\u002Freference\u002Fpackages\u002Fauth-better","@fougere\u002Fauth-better","Fougere's auth — a translation layer onto better-auth.","reference\u002Fpackages\u002Fauth-better",{"path":412,"title":413,"description":414,"stem":415},"\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":417,"title":418,"description":419,"stem":420},"\u002Freference\u002Fpackages\u002Fcli","@fougere\u002Fcli","The Fougere CLI — compose a workspace, serve a frond, call an operation.","reference\u002Fpackages\u002Fcli",{"path":422,"title":423,"description":424,"stem":425},"\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":427,"title":428,"description":429,"stem":430},"\u002Freference\u002Fpackages\u002Fcontainer","@fougere\u002Fcontainer","Fougere's DI container: resolution by type, wired from the AST scan. Zero dependencies.","reference\u002Fpackages\u002Fcontainer",{"path":432,"title":433,"description":434,"stem":435},"\u002Freference\u002Fpackages\u002Fcore","@fougere\u002Fcore","The core — scan, call contract, façades, remote stand-ins.","reference\u002Fpackages\u002Fcore",{"path":437,"title":438,"description":439,"stem":440},"\u002Freference\u002Fpackages\u002Fdecorators","@fougere\u002Fdecorators","Configuration sugar (@config) — declarative, never hidden runtime.","reference\u002Fpackages\u002Fdecorators",{"path":442,"title":443,"description":444,"stem":445},"\u002Freference\u002Fpackages\u002Fdefaults","@fougere\u002Fdefaults","The conventional boot of a Fougere app — the one place storage is wired.","reference\u002Fpackages\u002Fdefaults",{"path":447,"title":448,"description":449,"stem":450},"\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":452,"title":453,"description":454,"stem":455},"\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":457,"title":458,"description":459,"stem":460},"\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":462,"title":463,"description":464,"stem":465},"\u002Freference\u002Fpackages\u002Fnext","@fougere\u002Fnext","The Next.js adapter: mounting, and the one import that is genuinely Next.","reference\u002Fpackages\u002Fnext",{"path":467,"title":468,"description":469,"stem":470},"\u002Freference\u002Fpackages\u002Fnuxt","@fougere\u002Fnuxt","The Nuxt module: Fougere's client primitives and server surface.","reference\u002Fpackages\u002Fnuxt",{"path":472,"title":473,"description":474,"stem":475},"\u002Freference\u002Fpackages\u002Fobservability","@fougere\u002Fobservability","Optional observability for Fougere: one span per operation, W3C Trace Context across any transport.","reference\u002Fpackages\u002Fobservability",{"path":477,"title":478,"description":479,"stem":480},"\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":482,"title":483,"description":484,"stem":485},"\u002Freference\u002Fpackages\u002Freact","@fougere\u002Freact","Fougere's four primitives as React hooks — host-independent.","reference\u002Fpackages\u002Freact",{"path":487,"title":488,"description":489,"stem":490},"\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":492,"title":493,"description":494,"stem":495},"\u002Freference\u002Fpackages\u002Fschema","@fougere\u002Fschema","The entity and its 4 axes — shape, role, lifecycle, boundary. Subject-owned judgments, edge-safe.","reference\u002Fpackages\u002Fschema",{"path":497,"title":498,"description":499,"stem":500},"\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":502,"title":503,"description":504,"stem":505},"\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":507,"title":508,"description":509,"stem":510},"\u002Freference\u002Fpackages\u002Fsvelte","@fougere\u002Fsvelte","Fougere's four primitives as Svelte stores — host-independent.","reference\u002Fpackages\u002Fsvelte",{"path":512,"title":513,"description":514,"stem":515},"\u002Freference\u002Fpackages\u002Ftesting","@fougere\u002Ftesting","Tests derived from the declaration — cases, stubs and a gradient of realities.","reference\u002Fpackages\u002Ftesting",{"path":517,"title":518,"description":519,"stem":520},"\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":522,"title":523,"description":524,"stem":525},"\u002Freference\u002Fpackages\u002Fvite","@fougere\u002Fvite","The Vite plugin: what any Vite-built host must know to run a Fougere app.","reference\u002Fpackages\u002Fvite",{"path":527,"title":528,"description":529,"stem":530},"\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]