[{"data":1,"prerenderedAt":1118},["ShallowReactive",2],{"fougere:post.list:{}":3,"reference:\u002Freference\u002Fpackages\u002Fadapter-sql":6,"reference-pages":899},{"items":4,"hasMore":5},[],false,{"id":7,"title":8,"body":9,"description":19,"extension":892,"file":893,"meta":894,"navigation":138,"path":895,"seo":896,"stem":897,"__hash__":898},"reference\u002Freference\u002Fpackages\u002Fadapter-sql.md","@fougere\u002Fadapter-sql",{"type":10,"value":11,"toc":886},"minimark",[12,16,20,25,100,248,251,317,326,330,341,397,402,406,722,726,733,882],[13,14,8],"h1",{"id":15},"fougereadapter-sql",[17,18,19],"p",{},"Entity → SQL tables through Kysely (SQLite, PostgreSQL, MySQL, SQL Server).",[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-sql\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-sql\n",[32,58,61],{"className":34,"code":59,"filename":60,"language":37,"meta":38,"style":38},"pnpm add @fougere\u002Fadapter-sql\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-sql\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-sql\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-sql';\n\nexport default defineFougere({\n  sources: { main: { type: 'sqlite', path: '…' } },\n  \u002F\u002F   or main: { type: 'pg', url: '…' }\n  \u002F\u002F   or main: { type: 'mysql', url: '…' }\n  \u002F\u002F   or main: { type: 'mssql', url: '…' }\n  \u002F\u002F   or main: { type: 'd1', binding: '…' }\n});\n","ts",[40,106,107,113,133,140,160,213,219,225,231,237],{"__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,198,200,202,205,207,210],{"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},"sqlite",[43,191,128],{"class":122},[43,193,194],{"class":131},",",[43,196,197],{"class":165}," path",[43,199,169],{"class":131},[43,201,123],{"class":122},[43,203,204],{"class":52},"…",[43,206,128],{"class":122},[43,208,209],{"class":131}," }",[43,211,212],{"class":131}," },\n",[43,214,216],{"class":45,"line":215},6,[43,217,218],{"class":111},"  \u002F\u002F   or main: { type: 'pg', url: '…' }\n",[43,220,222],{"class":45,"line":221},7,[43,223,224],{"class":111},"  \u002F\u002F   or main: { type: 'mysql', url: '…' }\n",[43,226,228],{"class":45,"line":227},8,[43,229,230],{"class":111},"  \u002F\u002F   or main: { type: 'mssql', url: '…' }\n",[43,232,234],{"class":45,"line":233},9,[43,235,236],{"class":111},"  \u002F\u002F   or main: { type: 'd1', binding: '…' }\n",[43,238,240,243,246],{"class":45,"line":239},10,[43,241,242],{"class":131},"}",[43,244,245],{"class":155},")",[43,247,132],{"class":131},[17,249,250],{},"The import is what makes the word exist: without it, the editor and the boot both refuse it.",[32,252,254],{"className":102,"code":253,"language":104,"meta":38,"style":38},"export default class Post extends entity({ … }, { adapters: { sql: { … } } }) {}\n",[40,255,256],{"__ignoreMap":38},[43,257,258,260,262,266,270,273,276,278,281,285,288,290,293,295,297,300,302,304,306,308,310,312,314],{"class":45,"line":46},[43,259,145],{"class":118},[43,261,148],{"class":118},[43,263,265],{"class":264},"s76I7"," class",[43,267,269],{"class":268},"sBZYL"," Post",[43,271,272],{"class":264}," extends",[43,274,275],{"class":151}," entity",[43,277,156],{"class":155},[43,279,280],{"class":131},"{",[43,282,284],{"class":283},"sPEhv"," … ",[43,286,287],{"class":131},"},",[43,289,172],{"class":131},[43,291,292],{"class":165}," adapters",[43,294,169],{"class":131},[43,296,172],{"class":131},[43,298,299],{"class":165}," sql",[43,301,169],{"class":131},[43,303,172],{"class":131},[43,305,284],{"class":283},[43,307,242],{"class":131},[43,309,209],{"class":131},[43,311,209],{"class":131},[43,313,245],{"class":155},[43,315,316],{"class":131}," {}\n",[17,318,319,320,325],{},"Every key each one admits: ",[321,322,324],"a",{"href":323},"\u002Freference\u002Fsources","sources",".",[21,327,329],{"id":328},"what-it-extends","What it extends",[17,331,332,333,336,337,325],{},"The interfaces of Fougere this package adds its words to, with ",[40,334,335],{},"declare module"," — see ",[321,338,340],{"href":339},"\u002Freference\u002Finterfaces","Interfaces to extend",[342,343,344,357],"table",{},[345,346,347],"thead",{},[348,349,350,354],"tr",{},[351,352,353],"th",{},"interface",[351,355,356],{},"adds",[358,359,360,385],"tbody",{},[348,361,362,368],{},[363,364,365],"td",{},[40,366,367],{},"FougereSources",[363,369,370,372,373,372,376,372,379,372,382],{},[40,371,189],{},", ",[40,374,375],{},"pg",[40,377,378],{},"mysql",[40,380,381],{},"mssql",[40,383,384],{},"d1",[348,386,387,392],{},[363,388,389],{},[40,390,391],{},"FougereEntityAdapters",[363,393,394],{},[40,395,396],{},"sql",[17,398,399,400],{},"Entries: ",[40,401,8],{},[21,403,405],{"id":404},"what-you-import","What you import",[342,407,408,417],{},[345,409,410],{},[348,411,412,415],{},[351,413,414],{},"name",[351,416],{},[358,418,419,429,439,453,465,475,485,495,512,522,536,546,555,564,574,584,594,603,612,622,632,642,652,662,672,682,692,702,712],{},[348,420,421,426],{},[363,422,423],{},[40,424,425],{},"autoMigrate",[363,427,428],{},"Create every missing table.",[348,430,431,436],{},[363,432,433],{},[40,434,435],{},"compiler",[363,437,438],{},"A Kysely bound to a dialect's compiler but to no connection — renders SQL only.",[348,440,441,446],{},[363,442,443],{},[40,444,445],{},"createTableSQL",[363,447,448,449,452],{},"Render ",[40,450,451],{},"CREATE TABLE"," for one described table.",[348,454,455,460],{},[363,456,457],{},[40,458,459],{},"generateSQL",[363,461,462,464],{},[40,463,451],{}," for every entity a source holds.",[348,466,467,472],{},[363,468,469],{},[40,470,471],{},"onQuery",[363,473,474],{},"Be told about every statement this process runs, and get the unsubscription back.",[348,476,477,482],{},[363,478,479],{},[40,480,481],{},"toSnakeCase",[363,483,484],{},"camelCase → snake_case",[348,486,487,492],{},[363,488,489],{},[40,490,491],{},"toTable",[363,493,494],{},"Describe one entity as a table — the single reader of the axes.",[348,496,497,502],{},[363,498,499],{},[40,500,501],{},"toTableName",[363,503,504,507,508,511],{},[40,505,506],{},"orderItem"," → ",[40,509,510],{},"order_items",": the plural, then snake_case.",[348,513,514,519],{},[363,515,516],{},[40,517,518],{},"toTables",[363,520,521],{},"Every entity an app hosts, as tables aware of their foreign keys.",[348,523,524,529],{},[363,525,526],{},[40,527,528],{},"orderTables",[363,530,531,532,535],{},"Tables ordered so a ",[40,533,534],{},"ref()","'s target exists before the table pointing at it.",[348,537,538,543],{},[363,539,540],{},[40,541,542],{},"columnTypeFor",[363,544,545],{},"The type a column is emitted with: what the entity stated for this engine, else the shape's answer.",[348,547,548,553],{},[363,549,550],{},[40,551,552],{},"dialects",[363,554],{},[348,556,557,562],{},[363,558,559],{},[40,560,561],{},"SqlStorage",[363,563],{},[348,565,566,571],{},[363,567,568],{},[40,569,570],{},"createStorageFactory",[363,572,573],{},"Create a StorageFactory backed by Kysely — same call shape on every engine.",[348,575,576,581],{},[363,577,578],{},[40,579,580],{},"codecsOf",[363,582,583],{},"Field name → codec, for every column that needs one. Identity columns are omitted.",[348,585,586,591],{},[363,587,588],{},[40,589,590],{},"createKyselySource",[363,592,593],{},"Wrap any Kysely dialect — Postgres, MySQL, SQL Server.",[348,595,596,601],{},[363,597,598],{},[40,599,600],{},"createSqliteSource",[363,602],{},[348,604,605,610],{},[363,606,607],{},[40,608,609],{},"createD1Source",[363,611],{},[348,613,614,619],{},[363,615,616],{},[40,617,618],{},"drift",[363,620,621],{},"What a live table holds that differs from its declaration, which a migration leaves alone.",[348,623,624,629],{},[363,625,626],{},[40,627,628],{},"actualState",[363,630,631],{},"Read the live schema. Only names are needed — an additive pass never inspects types.",[348,633,634,639],{},[363,635,636],{},[40,637,638],{},"changeSQL",[363,640,641],{},"Render one change.",[348,643,644,649],{},[363,645,646],{},[40,647,648],{},"delta",[363,650,651],{},"Compare the two states. Pure — the only place that decides what is missing.",[348,653,654,659],{},[363,655,656],{},[40,657,658],{},"desiredTables",[363,660,661],{},"Project a source's entities into the tables they ask for.",[348,663,664,669],{},[363,665,666],{},[40,667,668],{},"migrate",[363,670,671],{},"Bring the database up to what the entities describe — additively.",[348,673,674,679],{},[363,675,676],{},[40,677,678],{},"pendingOf",[363,680,681],{},"The tables and columns the database lacks, read and never written.",[348,683,684,689],{},[363,685,686],{},[40,687,688],{},"undeclaredColumns",[363,690,691],{},"The columns a live table keeps that no field declares, for the tables that also gain one.",[348,693,694,699],{},[363,695,696],{},[40,697,698],{},"applyStep",[363,700,701],{},"Runs a step, or refuses it whole when the plan holds a refusal.",[348,703,704,709],{},[363,705,706],{},[40,707,708],{},"collapseChain",[363,710,711],{},"Collapse a chain of steps into one, following each field through its renames.",[348,713,714,719],{},[363,715,716],{},[40,717,718],{},"planStep",[363,720,721],{},"Turn a frozen step into what the tables must do, and what nobody may decide for you.",[21,723,725],{"id":724},"types","Types",[17,727,728,729,732],{},"TypeScript types only — they do not run. Import them with ",[40,730,731],{},"import type"," to type your own code: a variable, a parameter, an option object.",[342,734,735,743],{},[345,736,737],{},[348,738,739,741],{},[351,740,414],{},[351,742],{},[358,744,745,755,764,774,783,792,802,811,820,834,844,853,863,872],{},[348,746,747,752],{},[363,748,749],{},[40,750,751],{},"QueryEvent",[363,753,754],{},"One statement this process ran, and what it cost.",[348,756,757,762],{},[363,758,759],{},[40,760,761],{},"QuerySink",[363,763],{},[348,765,766,771],{},[363,767,768],{},[40,769,770],{},"EntityEntry",[363,772,773],{},"A live class in-process, or one rebuilt from the card of a frond that never crossed.",[348,775,776,781],{},[363,777,778],{},[40,779,780],{},"Dialect",[363,782],{},[348,784,785,790],{},[363,786,787],{},[40,788,789],{},"SqlField",[363,791],{},[348,793,794,799],{},[363,795,796],{},[40,797,798],{},"SqlFields",[363,800,801],{},"What sql holds, addressed by field — the shape every augmentation of the registry takes.",[348,803,804,809],{},[363,805,806],{},[40,807,808],{},"SqliteSource",[363,810],{},[348,812,813,818],{},[363,814,815],{},[40,816,817],{},"SqliteSourceOptions",[363,819],{},[348,821,822,827],{},[363,823,824],{},[40,825,826],{},"SqlSource",[363,828,829,830,833],{},"A ",[40,831,832],{},"Source"," realized by SQL — and the three members that are SQL's, not the routing's.",[348,835,836,841],{},[363,837,838],{},[40,839,840],{},"Drift",[363,842,843],{},"One column whose declaration moved and whose table did not follow.",[348,845,846,851],{},[363,847,848],{},[40,849,850],{},"Change",[363,852],{},[348,854,855,860],{},[363,856,857],{},[40,858,859],{},"SchemaState",[363,861,862],{},"What the database actually holds: column names per table.",[348,864,865,870],{},[363,866,867],{},[40,868,869],{},"Plan",[363,871],{},[348,873,874,879],{},[363,875,876],{},[40,877,878],{},"StepChange",[363,880,881],{},"What a step asks of the tables — beyond what an additive pass already covers.",[883,884,885],"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 .s76I7, html code.shiki .s76I7{--shiki-light:#9C3EDA;--shiki-default:#8FCF86;--shiki-dark:#C792EA}html pre.shiki code .sBZYL, html code.shiki .sBZYL{--shiki-light:#E2931D;--shiki-default:#EFCD8F;--shiki-dark:#FFCB6B}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":887},[888,889,890,891],{"id":23,"depth":115,"text":24},{"id":328,"depth":115,"text":329},{"id":404,"depth":115,"text":405},{"id":724,"depth":115,"text":725},"md",null,{},"\u002Freference\u002Fpackages\u002Fadapter-sql",{"title":8,"description":19},"reference\u002Fpackages\u002Fadapter-sql","ZBNDECIEUbwdPSpa7MeQ4MpcKOb3_d9PuKGGC006cko",[900,905,910,915,920,924,929,934,939,944,947,952,957,962,967,972,977,982,983,988,993,998,1003,1008,1013,1018,1023,1028,1033,1038,1043,1048,1053,1058,1063,1068,1073,1078,1083,1088,1093,1098,1103,1108,1113],{"path":901,"title":902,"description":903,"stem":904},"\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":906,"title":907,"description":908,"stem":909},"\u002Freference\u002Ferrors","Error codes","Every code an operation can refuse with, and its HTTP status.","reference\u002F02.errors",{"path":911,"title":912,"description":913,"stem":914},"\u002Freference\u002Fconfig","fougere.config.ts","Every key the app config admits, and which package answers each one.","reference\u002F03.config",{"path":916,"title":917,"description":918,"stem":919},"\u002Freference\u002Ffrond-config","frond.config.ts","Every key a frond's own config admits.","reference\u002F04.frond-config",{"path":323,"title":921,"description":922,"stem":923},"Source types","Every type an entry of sources: may name, and the keys it admits.","reference\u002F05.sources",{"path":925,"title":926,"description":927,"stem":928},"\u002Freference\u002Fprotocols","Protocols","What protocols: may serve, and what each admits.","reference\u002F06.protocols",{"path":930,"title":931,"description":932,"stem":933},"\u002Freference\u002Fstates","State keepers","How state: may keep a caller's values.","reference\u002F07.states",{"path":935,"title":936,"description":937,"stem":938},"\u002Freference\u002Fforms","Forms","The types a frond is written with — each one read by the scan.","reference\u002F08.forms",{"path":940,"title":941,"description":942,"stem":943},"\u002Freference\u002Fports","Ports Fougere opens","The classes you stand in front of, or extend, to change what the framework does.","reference\u002F09.ports",{"path":339,"title":340,"description":945,"stem":946},"The empty interfaces a package augments with declare module, and who augments each.","reference\u002F10.interfaces",{"path":948,"title":949,"description":950,"stem":951},"\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":953,"title":954,"description":955,"stem":956},"\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":958,"title":959,"description":960,"stem":961},"\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":963,"title":964,"description":965,"stem":966},"\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":968,"title":969,"description":970,"stem":971},"\u002Freference\u002Fpackages\u002Fadapter-graphql","@fougere\u002Fadapter-graphql","Entity → GraphQL types, inputs and CRUD, through Pothos.","reference\u002Fpackages\u002Fadapter-graphql",{"path":973,"title":974,"description":975,"stem":976},"\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":978,"title":979,"description":980,"stem":981},"\u002Freference\u002Fpackages\u002Fadapter-rest","@fougere\u002Fadapter-rest","Entity → REST routes.","reference\u002Fpackages\u002Fadapter-rest",{"path":895,"title":8,"description":19,"stem":897},{"path":984,"title":985,"description":986,"stem":987},"\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":989,"title":990,"description":991,"stem":992},"\u002Freference\u002Fpackages\u002Fapp","@fougere\u002Fapp","The host-independent half of a Fougere app: boot, call envelope, REST table, form contract.","reference\u002Fpackages\u002Fapp",{"path":994,"title":995,"description":996,"stem":997},"\u002Freference\u002Fpackages\u002Fauth-better","@fougere\u002Fauth-better","Fougere's auth — a translation layer onto better-auth.","reference\u002Fpackages\u002Fauth-better",{"path":999,"title":1000,"description":1001,"stem":1002},"\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":1004,"title":1005,"description":1006,"stem":1007},"\u002Freference\u002Fpackages\u002Fcli","@fougere\u002Fcli","The Fougere CLI — compose a workspace, serve a frond, call an operation.","reference\u002Fpackages\u002Fcli",{"path":1009,"title":1010,"description":1011,"stem":1012},"\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":1014,"title":1015,"description":1016,"stem":1017},"\u002Freference\u002Fpackages\u002Fcontainer","@fougere\u002Fcontainer","Fougere's DI container: resolution by type, wired from the AST scan. Zero dependencies.","reference\u002Fpackages\u002Fcontainer",{"path":1019,"title":1020,"description":1021,"stem":1022},"\u002Freference\u002Fpackages\u002Fcore","@fougere\u002Fcore","The core — scan, call contract, façades, remote stand-ins.","reference\u002Fpackages\u002Fcore",{"path":1024,"title":1025,"description":1026,"stem":1027},"\u002Freference\u002Fpackages\u002Fdecorators","@fougere\u002Fdecorators","Configuration sugar (@config) — declarative, never hidden runtime.","reference\u002Fpackages\u002Fdecorators",{"path":1029,"title":1030,"description":1031,"stem":1032},"\u002Freference\u002Fpackages\u002Fdefaults","@fougere\u002Fdefaults","The conventional boot of a Fougere app — the one place storage is wired.","reference\u002Fpackages\u002Fdefaults",{"path":1034,"title":1035,"description":1036,"stem":1037},"\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":1039,"title":1040,"description":1041,"stem":1042},"\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":1044,"title":1045,"description":1046,"stem":1047},"\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":1049,"title":1050,"description":1051,"stem":1052},"\u002Freference\u002Fpackages\u002Fnext","@fougere\u002Fnext","The Next.js adapter: mounting, and the one import that is genuinely Next.","reference\u002Fpackages\u002Fnext",{"path":1054,"title":1055,"description":1056,"stem":1057},"\u002Freference\u002Fpackages\u002Fnuxt","@fougere\u002Fnuxt","The Nuxt module: Fougere's client primitives and server surface.","reference\u002Fpackages\u002Fnuxt",{"path":1059,"title":1060,"description":1061,"stem":1062},"\u002Freference\u002Fpackages\u002Fobservability","@fougere\u002Fobservability","Optional observability for Fougere: one span per operation, W3C Trace Context across any transport.","reference\u002Fpackages\u002Fobservability",{"path":1064,"title":1065,"description":1066,"stem":1067},"\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":1069,"title":1070,"description":1071,"stem":1072},"\u002Freference\u002Fpackages\u002Freact","@fougere\u002Freact","Fougere's four primitives as React hooks — host-independent.","reference\u002Fpackages\u002Freact",{"path":1074,"title":1075,"description":1076,"stem":1077},"\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":1079,"title":1080,"description":1081,"stem":1082},"\u002Freference\u002Fpackages\u002Fschema","@fougere\u002Fschema","The entity and its 4 axes — shape, role, lifecycle, boundary. Subject-owned judgments, edge-safe.","reference\u002Fpackages\u002Fschema",{"path":1084,"title":1085,"description":1086,"stem":1087},"\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":1089,"title":1090,"description":1091,"stem":1092},"\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":1094,"title":1095,"description":1096,"stem":1097},"\u002Freference\u002Fpackages\u002Fsvelte","@fougere\u002Fsvelte","Fougere's four primitives as Svelte stores — host-independent.","reference\u002Fpackages\u002Fsvelte",{"path":1099,"title":1100,"description":1101,"stem":1102},"\u002Freference\u002Fpackages\u002Ftesting","@fougere\u002Ftesting","Tests derived from the declaration — cases, stubs and a gradient of realities.","reference\u002Fpackages\u002Ftesting",{"path":1104,"title":1105,"description":1106,"stem":1107},"\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":1109,"title":1110,"description":1111,"stem":1112},"\u002Freference\u002Fpackages\u002Fvite","@fougere\u002Fvite","The Vite plugin: what any Vite-built host must know to run a Fougere app.","reference\u002Fpackages\u002Fvite",{"path":1114,"title":1115,"description":1116,"stem":1117},"\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",1794396612871]