[{"data":1,"prerenderedAt":551},["ShallowReactive",2],{"fougere:post.list:{}":3,"reference:\u002Freference\u002Fpackages\u002Fadapter-env":6,"reference-pages":332},{"items":4,"hasMore":5},[],false,{"id":7,"title":8,"body":9,"description":19,"extension":325,"file":326,"meta":327,"navigation":138,"path":328,"seo":329,"stem":330,"__hash__":331},"reference\u002Freference\u002Fpackages\u002Fadapter-env.md","@fougere\u002Fadapter-env",{"type":10,"value":11,"toc":320},"minimark",[12,16,20,25,100,209,212,221,225,236,267,272,276,316],[13,14,8],"h1",{"id":15},"fougereadapter-env",[17,18,19],"p",{},"The process environment as a source — MEILI_URL read as Meili's url, judged at boot.",[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-env\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-env\n",[32,58,61],{"className":34,"code":59,"filename":60,"language":37,"meta":38,"style":38},"pnpm add @fougere\u002Fadapter-env\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-env\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-env\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-env';\n\nexport default defineFougere({\n  sources: { main: { type: 'env' } },\n});\n","ts",[40,106,107,113,133,140,160,198],{"__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,180,183,185,187,190,192,195],{"class":45,"line":162},5,[43,164,166],{"class":165},"sHtqg","  sources",[43,168,169],{"class":131},":",[43,171,172],{"class":131}," {",[43,174,175],{"class":165}," main",[43,177,169],{"class":131},[43,179,172],{"class":131},[43,181,182],{"class":165}," type",[43,184,169],{"class":131},[43,186,123],{"class":122},[43,188,189],{"class":52},"env",[43,191,128],{"class":122},[43,193,194],{"class":131}," }",[43,196,197],{"class":131}," },\n",[43,199,201,204,207],{"class":45,"line":200},6,[43,202,203],{"class":131},"}",[43,205,206],{"class":155},")",[43,208,132],{"class":131},[17,210,211],{},"The import is what makes the word exist: without it, the editor and the boot both refuse it.",[17,213,214,215,220],{},"Every key each one admits: ",[216,217,219],"a",{"href":218},"\u002Freference\u002Fsources","sources",".",[21,222,224],{"id":223},"what-it-extends","What it extends",[17,226,227,228,231,232,220],{},"The interfaces of Fougere this package adds its words to, with ",[40,229,230],{},"declare module"," — see ",[216,233,235],{"href":234},"\u002Freference\u002Finterfaces","Interfaces to extend",[237,238,239,252],"table",{},[240,241,242],"thead",{},[243,244,245,249],"tr",{},[246,247,248],"th",{},"interface",[246,250,251],{},"adds",[253,254,255],"tbody",{},[243,256,257,263],{},[258,259,260],"td",{},[40,261,262],{},"FougereSources",[258,264,265],{},[40,266,189],{},[17,268,269,270],{},"Entries: ",[40,271,8],{},[21,273,275],{"id":274},"what-you-import","What you import",[237,277,278,287],{},[240,279,280],{},[243,281,282,285],{},[246,283,284],{},"name",[246,286],{},[253,288,289,307],{},[243,290,291,296],{},[258,292,293],{},[40,294,295],{},"Env",[258,297,298,299,302,303,306],{},"Reads an entity off the environment: one variable per field. Ex: ",[40,300,301],{},"MEILI_KEY",", and ",[40,304,305],{},"ENTITY_KEY_FIELD"," for rows.",[243,308,309,314],{},[258,310,311],{},[40,312,313],{},"createEnvSource",[258,315],{},[317,318,319],"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}",{"title":38,"searchDepth":115,"depth":115,"links":321},[322,323,324],{"id":23,"depth":115,"text":24},{"id":223,"depth":115,"text":224},{"id":274,"depth":115,"text":275},"md",null,{},"\u002Freference\u002Fpackages\u002Fadapter-env",{"title":8,"description":19},"reference\u002Fpackages\u002Fadapter-env","1L-5sy0pt4uEHNMINqM6nTwPElSRQ2NWsAtPdXUmPtM",[333,338,343,348,353,357,362,367,372,377,380,385,390,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,531,536,541,546],{"path":334,"title":335,"description":336,"stem":337},"\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":339,"title":340,"description":341,"stem":342},"\u002Freference\u002Ferrors","Error codes","Every code an operation can refuse with, and its HTTP status.","reference\u002F02.errors",{"path":344,"title":345,"description":346,"stem":347},"\u002Freference\u002Fconfig","fougere.config.ts","Every key the app config admits, and which package answers each one.","reference\u002F03.config",{"path":349,"title":350,"description":351,"stem":352},"\u002Freference\u002Ffrond-config","frond.config.ts","Every key a frond's own config admits.","reference\u002F04.frond-config",{"path":218,"title":354,"description":355,"stem":356},"Source types","Every type an entry of sources: may name, and the keys it admits.","reference\u002F05.sources",{"path":358,"title":359,"description":360,"stem":361},"\u002Freference\u002Fprotocols","Protocols","What protocols: may serve, and what each admits.","reference\u002F06.protocols",{"path":363,"title":364,"description":365,"stem":366},"\u002Freference\u002Fstates","State keepers","How state: may keep a caller's values.","reference\u002F07.states",{"path":368,"title":369,"description":370,"stem":371},"\u002Freference\u002Fforms","Forms","The types a frond is written with — each one read by the scan.","reference\u002F08.forms",{"path":373,"title":374,"description":375,"stem":376},"\u002Freference\u002Fports","Ports Fougere opens","The classes you stand in front of, or extend, to change what the framework does.","reference\u002F09.ports",{"path":234,"title":235,"description":378,"stem":379},"The empty interfaces a package augments with declare module, and who augments each.","reference\u002F10.interfaces",{"path":381,"title":382,"description":383,"stem":384},"\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":386,"title":387,"description":388,"stem":389},"\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":328,"title":8,"description":19,"stem":330},{"path":392,"title":393,"description":394,"stem":395},"\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":397,"title":398,"description":399,"stem":400},"\u002Freference\u002Fpackages\u002Fadapter-graphql","@fougere\u002Fadapter-graphql","Entity → GraphQL types, inputs and CRUD, through Pothos.","reference\u002Fpackages\u002Fadapter-graphql",{"path":402,"title":403,"description":404,"stem":405},"\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":407,"title":408,"description":409,"stem":410},"\u002Freference\u002Fpackages\u002Fadapter-rest","@fougere\u002Fadapter-rest","Entity → REST routes.","reference\u002Fpackages\u002Fadapter-rest",{"path":412,"title":413,"description":414,"stem":415},"\u002Freference\u002Fpackages\u002Fadapter-sql","@fougere\u002Fadapter-sql","Entity → SQL tables through Kysely (SQLite, PostgreSQL, MySQL, SQL Server).","reference\u002Fpackages\u002Fadapter-sql",{"path":417,"title":418,"description":419,"stem":420},"\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":422,"title":423,"description":424,"stem":425},"\u002Freference\u002Fpackages\u002Fapp","@fougere\u002Fapp","The host-independent half of a Fougere app: boot, call envelope, REST table, form contract.","reference\u002Fpackages\u002Fapp",{"path":427,"title":428,"description":429,"stem":430},"\u002Freference\u002Fpackages\u002Fauth-better","@fougere\u002Fauth-better","Fougere's auth — a translation layer onto better-auth.","reference\u002Fpackages\u002Fauth-better",{"path":432,"title":433,"description":434,"stem":435},"\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":437,"title":438,"description":439,"stem":440},"\u002Freference\u002Fpackages\u002Fcli","@fougere\u002Fcli","The Fougere CLI — compose a workspace, serve a frond, call an operation.","reference\u002Fpackages\u002Fcli",{"path":442,"title":443,"description":444,"stem":445},"\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":447,"title":448,"description":449,"stem":450},"\u002Freference\u002Fpackages\u002Fcontainer","@fougere\u002Fcontainer","Fougere's DI container: resolution by type, wired from the AST scan. Zero dependencies.","reference\u002Fpackages\u002Fcontainer",{"path":452,"title":453,"description":454,"stem":455},"\u002Freference\u002Fpackages\u002Fcore","@fougere\u002Fcore","The core — scan, call contract, façades, remote stand-ins.","reference\u002Fpackages\u002Fcore",{"path":457,"title":458,"description":459,"stem":460},"\u002Freference\u002Fpackages\u002Fdecorators","@fougere\u002Fdecorators","Configuration sugar (@config) — declarative, never hidden runtime.","reference\u002Fpackages\u002Fdecorators",{"path":462,"title":463,"description":464,"stem":465},"\u002Freference\u002Fpackages\u002Fdefaults","@fougere\u002Fdefaults","The conventional boot of a Fougere app — the one place storage is wired.","reference\u002Fpackages\u002Fdefaults",{"path":467,"title":468,"description":469,"stem":470},"\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":472,"title":473,"description":474,"stem":475},"\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":477,"title":478,"description":479,"stem":480},"\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":482,"title":483,"description":484,"stem":485},"\u002Freference\u002Fpackages\u002Fnext","@fougere\u002Fnext","The Next.js adapter: mounting, and the one import that is genuinely Next.","reference\u002Fpackages\u002Fnext",{"path":487,"title":488,"description":489,"stem":490},"\u002Freference\u002Fpackages\u002Fnuxt","@fougere\u002Fnuxt","The Nuxt module: Fougere's client primitives and server surface.","reference\u002Fpackages\u002Fnuxt",{"path":492,"title":493,"description":494,"stem":495},"\u002Freference\u002Fpackages\u002Fobservability","@fougere\u002Fobservability","Optional observability for Fougere: one span per operation, W3C Trace Context across any transport.","reference\u002Fpackages\u002Fobservability",{"path":497,"title":498,"description":499,"stem":500},"\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":502,"title":503,"description":504,"stem":505},"\u002Freference\u002Fpackages\u002Freact","@fougere\u002Freact","Fougere's four primitives as React hooks — host-independent.","reference\u002Fpackages\u002Freact",{"path":507,"title":508,"description":509,"stem":510},"\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":512,"title":513,"description":514,"stem":515},"\u002Freference\u002Fpackages\u002Fschema","@fougere\u002Fschema","The entity and its 4 axes — shape, role, lifecycle, boundary. Subject-owned judgments, edge-safe.","reference\u002Fpackages\u002Fschema",{"path":517,"title":518,"description":519,"stem":520},"\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":522,"title":523,"description":524,"stem":525},"\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":527,"title":528,"description":529,"stem":530},"\u002Freference\u002Fpackages\u002Fsvelte","@fougere\u002Fsvelte","Fougere's four primitives as Svelte stores — host-independent.","reference\u002Fpackages\u002Fsvelte",{"path":532,"title":533,"description":534,"stem":535},"\u002Freference\u002Fpackages\u002Ftesting","@fougere\u002Ftesting","Tests derived from the declaration — cases, stubs and a gradient of realities.","reference\u002Fpackages\u002Ftesting",{"path":537,"title":538,"description":539,"stem":540},"\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":542,"title":543,"description":544,"stem":545},"\u002Freference\u002Fpackages\u002Fvite","@fougere\u002Fvite","The Vite plugin: what any Vite-built host must know to run a Fougere app.","reference\u002Fpackages\u002Fvite",{"path":547,"title":548,"description":549,"stem":550},"\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",1794396612373]