[{"data":1,"prerenderedAt":839},["ShallowReactive",2],{"fougere:post.list:{}":3,"reference:\u002Freference\u002Fpackages\u002Fadapter-rest":6,"reference-pages":620},{"items":4,"hasMore":5},[],false,{"id":7,"title":8,"body":9,"description":19,"extension":613,"file":614,"meta":615,"navigation":138,"path":616,"seo":617,"stem":618,"__hash__":619},"reference\u002Freference\u002Fpackages\u002Fadapter-rest.md","@fougere\u002Fadapter-rest",{"type":10,"value":11,"toc":607},"minimark",[12,16,20,25,100,195,198,287,296,300,311,365,370,374,495,499,506,603],[13,14,8],"h1",{"id":15},"fougereadapter-rest",[17,18,19],"p",{},"Entity → REST routes.",[21,22,24],"h2",{"id":23},"use-it","Use it",[26,27,31,57,72,86],"code-group",{"className":28,"sync":30},[29],"managers","pm",[32,33,39],"pre",{"className":34,"code":35,"filename":36,"language":37,"meta":38,"style":38},"language-bash shiki shiki-themes material-theme-lighter fougere-pastel material-theme-palenight","npm install @fougere\u002Fadapter-rest\n","npm","bash","",[40,41,42],"code",{"__ignoreMap":38},[43,44,47,50,54],"span",{"class":45,"line":46},"line",1,[43,48,36],{"class":49},"sV8pK",[43,51,53],{"class":52},"sN-8n"," install",[43,55,56],{"class":52}," @fougere\u002Fadapter-rest\n",[32,58,61],{"className":34,"code":59,"filename":60,"language":37,"meta":38,"style":38},"pnpm add @fougere\u002Fadapter-rest\n","pnpm",[40,62,63],{"__ignoreMap":38},[43,64,65,67,70],{"class":45,"line":46},[43,66,60],{"class":49},[43,68,69],{"class":52}," add",[43,71,56],{"class":52},[32,73,76],{"className":34,"code":74,"filename":75,"language":37,"meta":38,"style":38},"bun add @fougere\u002Fadapter-rest\n","bun",[40,77,78],{"__ignoreMap":38},[43,79,80,82,84],{"class":45,"line":46},[43,81,75],{"class":49},[43,83,69],{"class":52},[43,85,56],{"class":52},[32,87,90],{"className":34,"code":88,"filename":89,"language":37,"meta":38,"style":38},"yarn add @fougere\u002Fadapter-rest\n","yarn",[40,91,92],{"__ignoreMap":38},[43,93,94,96,98],{"class":45,"line":46},[43,95,89],{"class":49},[43,97,69],{"class":52},[43,99,56],{"class":52},[32,101,105],{"className":102,"code":103,"language":104,"meta":38,"style":38},"language-ts shiki shiki-themes material-theme-lighter fougere-pastel material-theme-palenight","\u002F\u002F fougere.config.ts\nimport '@fougere\u002Fadapter-rest';\n\nexport default defineFougere({\n  protocols: { rest: {} },\n});\n","ts",[40,106,107,113,133,140,160,184],{"__ignoreMap":38},[43,108,109],{"class":45,"line":46},[43,110,112],{"class":111},"skXKP","\u002F\u002F fougere.config.ts\n",[43,114,116,120,124,126,129],{"class":45,"line":115},2,[43,117,119],{"class":118},"sK6XW","import",[43,121,123],{"class":122},"sDDC1"," '",[43,125,8],{"class":52},[43,127,128],{"class":122},"'",[43,130,132],{"class":131},"s15xx",";\n",[43,134,136],{"class":45,"line":135},3,[43,137,139],{"emptyLinePlaceholder":138},true,"\n",[43,141,143,146,149,153,157],{"class":45,"line":142},4,[43,144,145],{"class":118},"export",[43,147,148],{"class":118}," default",[43,150,152],{"class":151},"s4mR9"," defineFougere",[43,154,156],{"class":155},"srlTG","(",[43,158,159],{"class":131},"{\n",[43,161,163,167,170,173,176,178,181],{"class":45,"line":162},5,[43,164,166],{"class":165},"sHtqg","  protocols",[43,168,169],{"class":131},":",[43,171,172],{"class":131}," {",[43,174,175],{"class":165}," rest",[43,177,169],{"class":131},[43,179,180],{"class":131}," {}",[43,182,183],{"class":131}," },\n",[43,185,187,190,193],{"class":45,"line":186},6,[43,188,189],{"class":131},"}",[43,191,192],{"class":155},")",[43,194,132],{"class":131},[17,196,197],{},"The import is what makes the word exist: without it, the editor and the boot both refuse it.",[32,199,201],{"className":102,"code":200,"language":104,"meta":38,"style":38},"\u002F\u002F fronds\u002Fblog\u002Ffrond.config.ts\nexport default defineFrond({\n  operations: { 'post.list': { rest: { … } } },\n  protocols: { rest: { … } },\n});\n",[40,202,203,208,221,259,279],{"__ignoreMap":38},[43,204,205],{"class":45,"line":46},[43,206,207],{"class":111},"\u002F\u002F fronds\u002Fblog\u002Ffrond.config.ts\n",[43,209,210,212,214,217,219],{"class":45,"line":115},[43,211,145],{"class":118},[43,213,148],{"class":118},[43,215,216],{"class":151}," defineFrond",[43,218,156],{"class":155},[43,220,159],{"class":131},[43,222,223,226,228,230,232,236,238,240,242,244,246,248,252,254,257],{"class":45,"line":135},[43,224,225],{"class":165},"  operations",[43,227,169],{"class":131},[43,229,172],{"class":131},[43,231,123],{"class":122},[43,233,235],{"class":234},"sK7Y8","post.list",[43,237,128],{"class":122},[43,239,169],{"class":131},[43,241,172],{"class":131},[43,243,175],{"class":165},[43,245,169],{"class":131},[43,247,172],{"class":131},[43,249,251],{"class":250},"sPEhv"," … ",[43,253,189],{"class":131},[43,255,256],{"class":131}," }",[43,258,183],{"class":131},[43,260,261,263,265,267,269,271,273,275,277],{"class":45,"line":142},[43,262,166],{"class":165},[43,264,169],{"class":131},[43,266,172],{"class":131},[43,268,175],{"class":165},[43,270,169],{"class":131},[43,272,172],{"class":131},[43,274,251],{"class":250},[43,276,189],{"class":131},[43,278,183],{"class":131},[43,280,281,283,285],{"class":45,"line":162},[43,282,189],{"class":131},[43,284,192],{"class":155},[43,286,132],{"class":131},[17,288,289,290,295],{},"Every key each one admits: ",[291,292,294],"a",{"href":293},"\u002Freference\u002Fprotocols","protocols",".",[21,297,299],{"id":298},"what-it-extends","What it extends",[17,301,302,303,306,307,295],{},"The interfaces of Fougere this package adds its words to, with ",[40,304,305],{},"declare module"," — see ",[291,308,310],{"href":309},"\u002Freference\u002Finterfaces","Interfaces to extend",[312,313,314,327],"table",{},[315,316,317],"thead",{},[318,319,320,324],"tr",{},[321,322,323],"th",{},"interface",[321,325,326],{},"adds",[328,329,330,343,354],"tbody",{},[318,331,332,338],{},[333,334,335],"td",{},[40,336,337],{},"FougereProtocols",[333,339,340],{},[40,341,342],{},"rest",[318,344,345,350],{},[333,346,347],{},[40,348,349],{},"FougereOperationProtocols",[333,351,352],{},[40,353,342],{},[318,355,356,361],{},[333,357,358],{},[40,359,360],{},"FougereFrondProtocols",[333,362,363],{},[40,364,342],{},[17,366,367,368],{},"Entries: ",[40,369,8],{},[21,371,373],{"id":372},"what-you-import","What you import",[312,375,376,385],{},[315,377,378],{},[318,379,380,383],{},[321,381,382],{},"name",[321,384],{},[328,386,387,397,406,415,425,450,463,485],{},[318,388,389,394],{},[333,390,391],{},[40,392,393],{},"generateRoutes",[333,395,396],{},"Generate REST route definitions from a fougere App — one route per operation, per address served.",[318,398,399,404],{},[333,400,401],{},[40,402,403],{},"PREFIX",[333,405],{},[318,407,408,413],{},[333,409,410],{},[40,411,412],{},"prefixOf",[333,414],{},[318,416,417,422],{},[333,418,419],{},[40,420,421],{},"openApiOf",[333,423,424],{},"What this process serves on REST, as OpenAPI 3.1, read off its routes.",[318,426,427,432],{},[333,428,429],{},[40,430,431],{},"describedAt",[333,433,434,435,438,439,442,443,446,447,295],{},"What REST publishes of itself when ",[40,436,437],{},"protocols:"," says so, or ",[40,440,441],{},"undefined"," for any other request. Ex: ",[40,444,445],{},"{prefix}\u002Fopenapi.json",", ",[40,448,449],{},"{prefix}\u002Fdocs",[318,451,452,457],{},[333,453,454],{},[40,455,456],{},"describedPaths",[333,458,459,460,462],{},"The paths ",[40,461,431],{}," answers, for a router that mounts each one.",[318,464,465,470],{},[333,466,467],{},[40,468,469],{},"Rest",[333,471,472,473,476,477,480,481,484],{},"The port REST's links stand in front of; a link throwing before ",[40,474,475],{},"inner.answer"," refuses the request. Ex: ",[40,478,479],{},"implements Partial\u003CRest>"," for a frond, ",[40,482,483],{},"extends Rest\u003CNoteHandler>"," for a handler.",[318,486,487,492],{},[333,488,489],{},[40,490,491],{},"restDoor",[333,493,494],{},"REST's door for one route: the one place a status is decided, read off the contract.",[21,496,498],{"id":497},"types","Types",[17,500,501,502,505],{},"TypeScript types only — they do not run. Import them with ",[40,503,504],{},"import type"," to type your own code: a variable, a parameter, an option object.",[312,507,508,516],{},[315,509,510],{},[318,511,512,514],{},[321,513,382],{},[321,515],{},[328,517,518,527,536,545,554,564,573,583,593],{},[318,519,520,525],{},[333,521,522],{},[40,523,524],{},"RouteDefinition",[333,526],{},[318,528,529,534],{},[333,530,531],{},[40,532,533],{},"HttpMethod",[333,535],{},[318,537,538,543],{},[333,539,540],{},[40,541,542],{},"ResponseResult",[333,544],{},[318,546,547,552],{},[333,548,549],{},[40,550,551],{},"RestRoute",[333,553],{},[318,555,556,561],{},[333,557,558],{},[40,559,560],{},"OpenApiDocument",[333,562,563],{},"OpenAPI 3.1 — the part of it this writes.",[318,565,566,571],{},[333,567,568],{},[40,569,570],{},"DocsPage",[333,572],{},[318,574,575,580],{},[333,576,577],{},[40,578,579],{},"RestRequest",[333,581,582],{},"What a host hands the REST door for one matched route — the body still to read, so the door reads it.",[318,584,585,590],{},[333,586,587],{},[40,588,589],{},"RestInvocation",[333,591,592],{},"What a route's op is called with.",[318,594,595,600],{},[333,596,597],{},[40,598,599],{},"RestResponse",[333,601,602],{},"An answer a link at REST's door may give in the op's place, declared in its return type.",[604,605,606],"style",{},"html pre.shiki code .sV8pK, html code.shiki .sV8pK{--shiki-light:#E2931D;--shiki-default:#C9B6EA;--shiki-dark:#FFCB6B}html pre.shiki code .sN-8n, html code.shiki .sN-8n{--shiki-light:#91B859;--shiki-default:#EE9F6B;--shiki-dark:#C3E88D}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 .skXKP, html code.shiki .skXKP{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#7D8C80;--shiki-default-font-style:inherit;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sK6XW, html code.shiki .sK6XW{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#8FCF86;--shiki-default-font-style:inherit;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sDDC1, html code.shiki .sDDC1{--shiki-light:#39ADB5;--shiki-default:#EE9F6B;--shiki-dark:#89DDFF}html pre.shiki code .s15xx, html code.shiki .s15xx{--shiki-light:#39ADB5;--shiki-default:#A3B0A5;--shiki-dark:#89DDFF}html pre.shiki code .s4mR9, html code.shiki .s4mR9{--shiki-light:#6182B8;--shiki-default:#C9B6EA;--shiki-dark:#82AAFF}html pre.shiki code .srlTG, html code.shiki .srlTG{--shiki-light:#90A4AE;--shiki-default:#A3B0A5;--shiki-dark:#BABED8}html pre.shiki code .sHtqg, html code.shiki .sHtqg{--shiki-light:#E53935;--shiki-default:#93CFC0;--shiki-dark:#F07178}html pre.shiki code .sK7Y8, html code.shiki .sK7Y8{--shiki-light:#E53935;--shiki-default:#EE9F6B;--shiki-dark:#F07178}html pre.shiki code .sPEhv, html code.shiki .sPEhv{--shiki-light:#90A4AE;--shiki-default:#DDE5DA;--shiki-dark:#BABED8}",{"title":38,"searchDepth":115,"depth":115,"links":608},[609,610,611,612],{"id":23,"depth":115,"text":24},{"id":298,"depth":115,"text":299},{"id":372,"depth":115,"text":373},{"id":497,"depth":115,"text":498},"md",null,{},"\u002Freference\u002Fpackages\u002Fadapter-rest",{"title":8,"description":19},"reference\u002Fpackages\u002Fadapter-rest","KAA9_SSAVNYDDYMKMz3gP58NvT5hgf8_lfWpvdZMmx8",[621,626,631,636,641,646,650,655,660,665,668,673,678,683,688,693,698,699,704,709,714,719,724,729,734,739,744,749,754,759,764,769,774,779,784,789,794,799,804,809,814,819,824,829,834],{"path":622,"title":623,"description":624,"stem":625},"\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":627,"title":628,"description":629,"stem":630},"\u002Freference\u002Ferrors","Error codes","Every code an operation can refuse with, and its HTTP status.","reference\u002F02.errors",{"path":632,"title":633,"description":634,"stem":635},"\u002Freference\u002Fconfig","fougere.config.ts","Every key the app config admits, and which package answers each one.","reference\u002F03.config",{"path":637,"title":638,"description":639,"stem":640},"\u002Freference\u002Ffrond-config","frond.config.ts","Every key a frond's own config admits.","reference\u002F04.frond-config",{"path":642,"title":643,"description":644,"stem":645},"\u002Freference\u002Fsources","Source types","Every type an entry of sources: may name, and the keys it admits.","reference\u002F05.sources",{"path":293,"title":647,"description":648,"stem":649},"Protocols","What protocols: may serve, and what each admits.","reference\u002F06.protocols",{"path":651,"title":652,"description":653,"stem":654},"\u002Freference\u002Fstates","State keepers","How state: may keep a caller's values.","reference\u002F07.states",{"path":656,"title":657,"description":658,"stem":659},"\u002Freference\u002Fforms","Forms","The types a frond is written with — each one read by the scan.","reference\u002F08.forms",{"path":661,"title":662,"description":663,"stem":664},"\u002Freference\u002Fports","Ports Fougere opens","The classes you stand in front of, or extend, to change what the framework does.","reference\u002F09.ports",{"path":309,"title":310,"description":666,"stem":667},"The empty interfaces a package augments with declare module, and who augments each.","reference\u002F10.interfaces",{"path":669,"title":670,"description":671,"stem":672},"\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":674,"title":675,"description":676,"stem":677},"\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":679,"title":680,"description":681,"stem":682},"\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":684,"title":685,"description":686,"stem":687},"\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":689,"title":690,"description":691,"stem":692},"\u002Freference\u002Fpackages\u002Fadapter-graphql","@fougere\u002Fadapter-graphql","Entity → GraphQL types, inputs and CRUD, through Pothos.","reference\u002Fpackages\u002Fadapter-graphql",{"path":694,"title":695,"description":696,"stem":697},"\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":616,"title":8,"description":19,"stem":618},{"path":700,"title":701,"description":702,"stem":703},"\u002Freference\u002Fpackages\u002Fadapter-sql","@fougere\u002Fadapter-sql","Entity → SQL tables through Kysely (SQLite, PostgreSQL, MySQL, SQL Server).","reference\u002Fpackages\u002Fadapter-sql",{"path":705,"title":706,"description":707,"stem":708},"\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":710,"title":711,"description":712,"stem":713},"\u002Freference\u002Fpackages\u002Fapp","@fougere\u002Fapp","The host-independent half of a Fougere app: boot, call envelope, REST table, form contract.","reference\u002Fpackages\u002Fapp",{"path":715,"title":716,"description":717,"stem":718},"\u002Freference\u002Fpackages\u002Fauth-better","@fougere\u002Fauth-better","Fougere's auth — a translation layer onto better-auth.","reference\u002Fpackages\u002Fauth-better",{"path":720,"title":721,"description":722,"stem":723},"\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":725,"title":726,"description":727,"stem":728},"\u002Freference\u002Fpackages\u002Fcli","@fougere\u002Fcli","The Fougere CLI — compose a workspace, serve a frond, call an operation.","reference\u002Fpackages\u002Fcli",{"path":730,"title":731,"description":732,"stem":733},"\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":735,"title":736,"description":737,"stem":738},"\u002Freference\u002Fpackages\u002Fcontainer","@fougere\u002Fcontainer","Fougere's DI container: resolution by type, wired from the AST scan. Zero dependencies.","reference\u002Fpackages\u002Fcontainer",{"path":740,"title":741,"description":742,"stem":743},"\u002Freference\u002Fpackages\u002Fcore","@fougere\u002Fcore","The core — scan, call contract, façades, remote stand-ins.","reference\u002Fpackages\u002Fcore",{"path":745,"title":746,"description":747,"stem":748},"\u002Freference\u002Fpackages\u002Fdecorators","@fougere\u002Fdecorators","Configuration sugar (@config) — declarative, never hidden runtime.","reference\u002Fpackages\u002Fdecorators",{"path":750,"title":751,"description":752,"stem":753},"\u002Freference\u002Fpackages\u002Fdefaults","@fougere\u002Fdefaults","The conventional boot of a Fougere app — the one place storage is wired.","reference\u002Fpackages\u002Fdefaults",{"path":755,"title":756,"description":757,"stem":758},"\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":760,"title":761,"description":762,"stem":763},"\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":765,"title":766,"description":767,"stem":768},"\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":770,"title":771,"description":772,"stem":773},"\u002Freference\u002Fpackages\u002Fnext","@fougere\u002Fnext","The Next.js adapter: mounting, and the one import that is genuinely Next.","reference\u002Fpackages\u002Fnext",{"path":775,"title":776,"description":777,"stem":778},"\u002Freference\u002Fpackages\u002Fnuxt","@fougere\u002Fnuxt","The Nuxt module: Fougere's client primitives and server surface.","reference\u002Fpackages\u002Fnuxt",{"path":780,"title":781,"description":782,"stem":783},"\u002Freference\u002Fpackages\u002Fobservability","@fougere\u002Fobservability","Optional observability for Fougere: one span per operation, W3C Trace Context across any transport.","reference\u002Fpackages\u002Fobservability",{"path":785,"title":786,"description":787,"stem":788},"\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":790,"title":791,"description":792,"stem":793},"\u002Freference\u002Fpackages\u002Freact","@fougere\u002Freact","Fougere's four primitives as React hooks — host-independent.","reference\u002Fpackages\u002Freact",{"path":795,"title":796,"description":797,"stem":798},"\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":800,"title":801,"description":802,"stem":803},"\u002Freference\u002Fpackages\u002Fschema","@fougere\u002Fschema","The entity and its 4 axes — shape, role, lifecycle, boundary. Subject-owned judgments, edge-safe.","reference\u002Fpackages\u002Fschema",{"path":805,"title":806,"description":807,"stem":808},"\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":810,"title":811,"description":812,"stem":813},"\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":815,"title":816,"description":817,"stem":818},"\u002Freference\u002Fpackages\u002Fsvelte","@fougere\u002Fsvelte","Fougere's four primitives as Svelte stores — host-independent.","reference\u002Fpackages\u002Fsvelte",{"path":820,"title":821,"description":822,"stem":823},"\u002Freference\u002Fpackages\u002Ftesting","@fougere\u002Ftesting","Tests derived from the declaration — cases, stubs and a gradient of realities.","reference\u002Fpackages\u002Ftesting",{"path":825,"title":826,"description":827,"stem":828},"\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":830,"title":831,"description":832,"stem":833},"\u002Freference\u002Fpackages\u002Fvite","@fougere\u002Fvite","The Vite plugin: what any Vite-built host must know to run a Fougere app.","reference\u002Fpackages\u002Fvite",{"path":835,"title":836,"description":837,"stem":838},"\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",1794396612864]