[{"data":1,"prerenderedAt":2064},["ShallowReactive",2],{"docs-nav:en":3,"docs:\u002Fdocs\u002Fschema\u002Fcard":134},[4],{"title":5,"path":6,"stem":7,"children":8},"Docs","\u002Fdocs","docs",[9,12,16,20,24,42,63,92,113],{"title":10,"path":6,"stem":11},"What is Fougere","docs\u002Findex",{"title":13,"path":14,"stem":15},"Getting started","\u002Fdocs\u002Fgetting-started","docs\u002F01.getting-started",{"title":17,"path":18,"stem":19},"Existing Nuxt app","\u002Fdocs\u002Fexisting-app","docs\u002F02.existing-app",{"title":21,"path":22,"stem":23},"The CLI","\u002Fdocs\u002Fcli","docs\u002F03.cli",{"title":25,"path":26,"stem":27,"children":28,"page":41},"Concepts","\u002Fdocs\u002Fconcepts","docs\u002F2.concepts",[29,33,37],{"title":30,"path":31,"stem":32},"Philosophy","\u002Fdocs\u002Fconcepts\u002Fphilosophy","docs\u002F2.concepts\u002F1.philosophy",{"title":34,"path":35,"stem":36},"The Frond","\u002Fdocs\u002Fconcepts\u002Ffrond","docs\u002F2.concepts\u002F2.frond",{"title":38,"path":39,"stem":40},"The shortest path","\u002Fdocs\u002Fconcepts\u002Fshortest-path","docs\u002F2.concepts\u002F3.shortest-path",false,{"title":43,"path":44,"stem":45,"children":46,"page":41},"Schema","\u002Fdocs\u002Fschema","docs\u002F3.schema",[47,51,55,59],{"title":48,"path":49,"stem":50},"Entities","\u002Fdocs\u002Fschema\u002Fentities","docs\u002F3.schema\u002F1.entities",{"title":52,"path":53,"stem":54},"Views","\u002Fdocs\u002Fschema\u002Fviews","docs\u002F3.schema\u002F2.views",{"title":56,"path":57,"stem":58},"The identity card","\u002Fdocs\u002Fschema\u002Fcard","docs\u002F3.schema\u002F3.card",{"title":60,"path":61,"stem":62},"Standard Schema","\u002Fdocs\u002Fschema\u002Fstandard-schema","docs\u002F3.schema\u002F4.standard-schema",{"title":64,"path":65,"stem":66,"children":67,"page":41},"Business","\u002Fdocs\u002Fbusiness","docs\u002F4.business",[68,72,76,80,84,88],{"title":69,"path":70,"stem":71},"Handlers","\u002Fdocs\u002Fbusiness\u002Fhandlers","docs\u002F4.business\u002F1.handlers",{"title":73,"path":74,"stem":75},"Presenters","\u002Fdocs\u002Fbusiness\u002Fpresenters","docs\u002F4.business\u002F2.presenters",{"title":77,"path":78,"stem":79},"Collectors","\u002Fdocs\u002Fbusiness\u002Fcollectors","docs\u002F4.business\u002F3.collectors",{"title":81,"path":82,"stem":83},"Errors","\u002Fdocs\u002Fbusiness\u002Ferrors","docs\u002F4.business\u002F4.errors",{"title":85,"path":86,"stem":87},"Seeds","\u002Fdocs\u002Fbusiness\u002Fseeds","docs\u002F4.business\u002F5.seeds",{"title":89,"path":90,"stem":91},"Facts","\u002Fdocs\u002Fbusiness\u002Ffacts","docs\u002F4.business\u002F6.facts",{"title":93,"path":94,"stem":95,"children":96,"page":41},"Client","\u002Fdocs\u002Fclient","docs\u002F5.client",[97,101,105,109],{"title":98,"path":99,"stem":100},"Queries & commands","\u002Fdocs\u002Fclient\u002Fqueries-commands","docs\u002F5.client\u002F1.queries-commands",{"title":102,"path":103,"stem":104},"Forms","\u002Fdocs\u002Fclient\u002Fforms","docs\u002F5.client\u002F2.forms",{"title":106,"path":107,"stem":108},"Session","\u002Fdocs\u002Fclient\u002Fsession","docs\u002F5.client\u002F3.session",{"title":110,"path":111,"stem":112},"invoke","\u002Fdocs\u002Fclient\u002Finvoke","docs\u002F5.client\u002F4.invoke",{"title":114,"path":115,"stem":116,"children":117,"page":41},"Infrastructure","\u002Fdocs\u002Finfra","docs\u002F6.infra",[118,122,126,130],{"title":119,"path":120,"stem":121},"The gradient","\u002Fdocs\u002Finfra\u002Fgradient","docs\u002F6.infra\u002F1.gradient",{"title":123,"path":124,"stem":125},"Surfaces — REST & GraphQL","\u002Fdocs\u002Finfra\u002Fsurfaces","docs\u002F6.infra\u002F2.surfaces",{"title":127,"path":128,"stem":129},"Deployment","\u002Fdocs\u002Finfra\u002Fdeployment","docs\u002F6.infra\u002F3.deployment",{"title":131,"path":132,"stem":133},"Hosts","\u002Fdocs\u002Finfra\u002Fhosts","docs\u002F6.infra\u002F4.hosts",{"id":135,"title":56,"body":136,"description":2059,"extension":2060,"meta":2061,"navigation":228,"path":57,"seo":2062,"stem":58,"__hash__":2063},"docs_en\u002Fdocs\u002F3.schema\u002F3.card.md",{"type":137,"value":138,"toc":2045},"minimark",[139,143,152,171,278,288,302,353,358,373,972,989,995,1001,1167,1176,1187,1211,1217,1223,1246,1252,1256,1270,1343,1357,1361,1364,1391,1394,1401,1411,1866,1901,1914,1919,1925,1943,1952,1962,1966,1969,2023,2026,2035,2041],[140,141,56],"h1",{"id":142},"the-identity-card",[144,145,146,147,151],"p",{},"A TypeScript class cannot be serialized directly. Its ",[148,149,150],"strong",{},"card"," is a JSON document that\ndescribes the schema and lets a consumer rebuild a validation class.",[144,153,154,155,162,163,166,167,170],{},"The two are duals. ",[156,157,158],"a",{"href":61},[159,160,161],"code",{},"~standard"," hands the ",[148,164,165],{},"live"," judge to\na library in the same process; the card is the ",[148,168,169],{},"serializable"," description of the same\ndeclaration, for exchanges across processes or languages.",[172,173,178],"pre",{"className":174,"code":175,"language":176,"meta":177,"style":177},"language-ts shiki shiki-themes material-theme-lighter github-light github-dark","import { describe, reconstruct } from '@fougere\u002Fschema';\n\nconst card = describe(Post);       \u002F\u002F schema → JSON document\nconst Rebuilt = reconstruct(card); \u002F\u002F document → living schema (validate + from)\n","ts","",[159,179,180,223,230,258],{"__ignoreMap":177},[181,182,185,189,193,197,200,203,206,209,213,217,220],"span",{"class":183,"line":184},"line",1,[181,186,188],{"class":187},"sVHd0","import",[181,190,192],{"class":191},"sP7_E"," {",[181,194,196],{"class":195},"su5hD"," describe",[181,198,199],{"class":191},",",[181,201,202],{"class":195}," reconstruct",[181,204,205],{"class":191}," }",[181,207,208],{"class":187}," from",[181,210,212],{"class":211},"sjJ54"," '",[181,214,216],{"class":215},"s_sjI","@fougere\u002Fschema",[181,218,219],{"class":211},"'",[181,221,222],{"class":191},";\n",[181,224,226],{"class":183,"line":225},2,[181,227,229],{"emptyLinePlaceholder":228},true,"\n",[181,231,233,237,241,245,248,251,254],{"class":183,"line":232},3,[181,234,236],{"class":235},"sbsja","const",[181,238,240],{"class":239},"s_hVV"," card",[181,242,244],{"class":243},"smGrS"," =",[181,246,196],{"class":247},"sGLFI",[181,249,250],{"class":195},"(Post)",[181,252,253],{"class":191},";",[181,255,257],{"class":256},"sutJx","       \u002F\u002F schema → JSON document\n",[181,259,261,263,266,268,270,273,275],{"class":183,"line":260},4,[181,262,236],{"class":235},[181,264,265],{"class":239}," Rebuilt",[181,267,244],{"class":243},[181,269,202],{"class":247},[181,271,272],{"class":195},"(card)",[181,274,253],{"class":191},[181,276,277],{"class":256}," \u002F\u002F document → living schema (validate + from)\n",[144,279,280,283,284,287],{},[159,281,282],{},"describe"," produces the canonical document used by adapters. ",[159,285,286],{},"reconstruct"," rebuilds the\nschema at the consumer, which can then validate data locally.",[144,289,290,291,294,295,301],{},"State the shape of a row and the rebuilt schema is a class in the full sense — one name\ncarrying the judge and the type of what it judges, exactly like ",[159,292,293],{},"class Post extends entity({…}) {}",". This is what ",[156,296,298],{"href":297},"\u002Fdocs\u002Fcli#fougere-sync--consume-a-remote-frond",[159,299,300],{},"fougere sync","\nwrites:",[172,303,305],{"className":174,"code":304,"language":176,"meta":177,"style":177},"class Post extends reconstruct\u003C{ id: string; title: string }>(card) {}\n",[159,306,307],{"__ignoreMap":177},[181,308,309,312,316,319,321,324,328,331,335,337,340,342,344,347,350],{"class":183,"line":184},[181,310,311],{"class":235},"class",[181,313,315],{"class":314},"sbgvK"," Post",[181,317,318],{"class":235}," extends",[181,320,202],{"class":247},[181,322,323],{"class":191},"\u003C{",[181,325,327],{"class":326},"sucvu"," id",[181,329,330],{"class":243},":",[181,332,334],{"class":333},"sZMiF"," string",[181,336,253],{"class":191},[181,338,339],{"class":326}," title",[181,341,330],{"class":243},[181,343,334],{"class":333},[181,345,346],{"class":191}," }>",[181,348,349],{"class":195},"(card) ",[181,351,352],{"class":191},"{}\n",[354,355,357],"h2",{"id":356},"the-structure","The structure",[144,359,360,361,364,365,368,369,372],{},"The card is a valid JSON Schema document. The ",[159,362,363],{},"shape"," axis ",[148,366,367],{},"is"," that vocabulary, so its\nkeywords sit at the field's top level; the three other axes live under the ",[159,370,371],{},"x-fougere","\nextension key.",[172,374,378],{"className":375,"code":376,"language":377,"meta":177,"style":177},"language-jsonc shiki shiki-themes material-theme-lighter github-light github-dark","{\n  \"title\": \"post\",\n  \"type\": \"object\",\n  \"properties\": {\n    \"id\": {\n      \"type\": \"string\",\n      \"x-fougere\": {\n        \"role\": { \"primary\": true },\n        \"lifecycle\": { \"create\": { \"generate\": \"cuid2\" } }\n      }\n    },\n    \"title\": { \"type\": \"string\", \"minLength\": 3, \"maxLength\": 120 },\n    \"status\": { \"type\": \"string\", \"enum\": [\"draft\", \"published\"] },\n    \"publishedAt\": {\n      \"type\": [\"string\", \"null\"],\n      \"format\": \"date-time\",\n      \"x-fougere\": { \"lifecycle\": { \"update\": \"forbidden\" } }\n    },\n    \"secret\": { \"type\": \"string\", \"x-fougere\": { \"boundary\": { \"out\": \"closed\" } } }\n  },\n  \"required\": [\"title\", \"status\"],\n  \"x-fougere-version\": 1,\n  \"x-fougere-vendor\": \"fougere\"\n}\n","jsonc",[159,379,380,385,411,431,445,460,482,495,527,574,580,586,643,706,720,751,772,815,820,893,899,929,946,966],{"__ignoreMap":177},[181,381,382],{"class":183,"line":184},[181,383,384],{"class":191},"{\n",[181,386,387,391,395,398,400,403,406,408],{"class":183,"line":225},[181,388,390],{"class":389},"s39Yj","  \"",[181,392,394],{"class":393},"sseR_","title",[181,396,397],{"class":389},"\"",[181,399,330],{"class":191},[181,401,402],{"class":211}," \"",[181,404,405],{"class":215},"post",[181,407,397],{"class":211},[181,409,410],{"class":191},",\n",[181,412,413,415,418,420,422,424,427,429],{"class":183,"line":232},[181,414,390],{"class":389},[181,416,417],{"class":393},"type",[181,419,397],{"class":389},[181,421,330],{"class":191},[181,423,402],{"class":211},[181,425,426],{"class":215},"object",[181,428,397],{"class":211},[181,430,410],{"class":191},[181,432,433,435,438,440,442],{"class":183,"line":260},[181,434,390],{"class":389},[181,436,437],{"class":393},"properties",[181,439,397],{"class":389},[181,441,330],{"class":191},[181,443,444],{"class":191}," {\n",[181,446,448,451,454,456,458],{"class":183,"line":447},5,[181,449,450],{"class":389},"    \"",[181,452,453],{"class":333},"id",[181,455,397],{"class":389},[181,457,330],{"class":191},[181,459,444],{"class":191},[181,461,463,466,469,471,473,475,478,480],{"class":183,"line":462},6,[181,464,465],{"class":389},"      \"",[181,467,417],{"class":468},"srdBf",[181,470,397],{"class":389},[181,472,330],{"class":191},[181,474,402],{"class":211},[181,476,477],{"class":215},"string",[181,479,397],{"class":211},[181,481,410],{"class":191},[181,483,485,487,489,491,493],{"class":183,"line":484},7,[181,486,465],{"class":389},[181,488,371],{"class":468},[181,490,397],{"class":389},[181,492,330],{"class":191},[181,494,444],{"class":191},[181,496,498,501,505,507,509,511,513,517,519,521,524],{"class":183,"line":497},8,[181,499,500],{"class":389},"        \"",[181,502,504],{"class":503},"swQdS","role",[181,506,397],{"class":389},[181,508,330],{"class":191},[181,510,192],{"class":191},[181,512,402],{"class":389},[181,514,516],{"class":515},"sAQsV","primary",[181,518,397],{"class":389},[181,520,330],{"class":191},[181,522,523],{"class":389}," true",[181,525,526],{"class":191}," },\n",[181,528,530,532,535,537,539,541,543,546,548,550,552,554,558,560,562,564,567,569,571],{"class":183,"line":529},9,[181,531,500],{"class":389},[181,533,534],{"class":503},"lifecycle",[181,536,397],{"class":389},[181,538,330],{"class":191},[181,540,192],{"class":191},[181,542,402],{"class":389},[181,544,545],{"class":515},"create",[181,547,397],{"class":389},[181,549,330],{"class":191},[181,551,192],{"class":191},[181,553,402],{"class":389},[181,555,557],{"class":556},"sptTA","generate",[181,559,397],{"class":389},[181,561,330],{"class":191},[181,563,402],{"class":211},[181,565,566],{"class":215},"cuid2",[181,568,397],{"class":211},[181,570,205],{"class":191},[181,572,573],{"class":191}," }\n",[181,575,577],{"class":183,"line":576},10,[181,578,579],{"class":191},"      }\n",[181,581,583],{"class":183,"line":582},11,[181,584,585],{"class":191},"    },\n",[181,587,589,591,593,595,597,599,601,603,605,607,609,611,613,615,617,620,622,624,627,629,631,634,636,638,641],{"class":183,"line":588},12,[181,590,450],{"class":389},[181,592,394],{"class":333},[181,594,397],{"class":389},[181,596,330],{"class":191},[181,598,192],{"class":191},[181,600,402],{"class":389},[181,602,417],{"class":468},[181,604,397],{"class":389},[181,606,330],{"class":191},[181,608,402],{"class":211},[181,610,477],{"class":215},[181,612,397],{"class":211},[181,614,199],{"class":191},[181,616,402],{"class":389},[181,618,619],{"class":468},"minLength",[181,621,397],{"class":389},[181,623,330],{"class":191},[181,625,626],{"class":468}," 3",[181,628,199],{"class":191},[181,630,402],{"class":389},[181,632,633],{"class":468},"maxLength",[181,635,397],{"class":389},[181,637,330],{"class":191},[181,639,640],{"class":468}," 120",[181,642,526],{"class":191},[181,644,646,648,651,653,655,657,659,661,663,665,667,669,671,673,675,678,680,682,685,687,690,692,694,696,699,701,704],{"class":183,"line":645},13,[181,647,450],{"class":389},[181,649,650],{"class":333},"status",[181,652,397],{"class":389},[181,654,330],{"class":191},[181,656,192],{"class":191},[181,658,402],{"class":389},[181,660,417],{"class":468},[181,662,397],{"class":389},[181,664,330],{"class":191},[181,666,402],{"class":211},[181,668,477],{"class":215},[181,670,397],{"class":211},[181,672,199],{"class":191},[181,674,402],{"class":389},[181,676,677],{"class":468},"enum",[181,679,397],{"class":389},[181,681,330],{"class":191},[181,683,684],{"class":191}," [",[181,686,397],{"class":211},[181,688,689],{"class":215},"draft",[181,691,397],{"class":211},[181,693,199],{"class":191},[181,695,402],{"class":211},[181,697,698],{"class":215},"published",[181,700,397],{"class":211},[181,702,703],{"class":191},"]",[181,705,526],{"class":191},[181,707,709,711,714,716,718],{"class":183,"line":708},14,[181,710,450],{"class":389},[181,712,713],{"class":333},"publishedAt",[181,715,397],{"class":389},[181,717,330],{"class":191},[181,719,444],{"class":191},[181,721,723,725,727,729,731,733,735,737,739,741,743,746,748],{"class":183,"line":722},15,[181,724,465],{"class":389},[181,726,417],{"class":468},[181,728,397],{"class":389},[181,730,330],{"class":191},[181,732,684],{"class":191},[181,734,397],{"class":211},[181,736,477],{"class":215},[181,738,397],{"class":211},[181,740,199],{"class":191},[181,742,402],{"class":211},[181,744,745],{"class":215},"null",[181,747,397],{"class":211},[181,749,750],{"class":191},"],\n",[181,752,754,756,759,761,763,765,768,770],{"class":183,"line":753},16,[181,755,465],{"class":389},[181,757,758],{"class":468},"format",[181,760,397],{"class":389},[181,762,330],{"class":191},[181,764,402],{"class":211},[181,766,767],{"class":215},"date-time",[181,769,397],{"class":211},[181,771,410],{"class":191},[181,773,775,777,779,781,783,785,787,789,791,793,795,797,800,802,804,806,809,811,813],{"class":183,"line":774},17,[181,776,465],{"class":389},[181,778,371],{"class":468},[181,780,397],{"class":389},[181,782,330],{"class":191},[181,784,192],{"class":191},[181,786,402],{"class":389},[181,788,534],{"class":503},[181,790,397],{"class":389},[181,792,330],{"class":191},[181,794,192],{"class":191},[181,796,402],{"class":389},[181,798,799],{"class":515},"update",[181,801,397],{"class":389},[181,803,330],{"class":191},[181,805,402],{"class":211},[181,807,808],{"class":215},"forbidden",[181,810,397],{"class":211},[181,812,205],{"class":191},[181,814,573],{"class":191},[181,816,818],{"class":183,"line":817},18,[181,819,585],{"class":191},[181,821,823,825,828,830,832,834,836,838,840,842,844,846,848,850,852,854,856,858,860,862,865,867,869,871,873,876,878,880,882,885,887,889,891],{"class":183,"line":822},19,[181,824,450],{"class":389},[181,826,827],{"class":333},"secret",[181,829,397],{"class":389},[181,831,330],{"class":191},[181,833,192],{"class":191},[181,835,402],{"class":389},[181,837,417],{"class":468},[181,839,397],{"class":389},[181,841,330],{"class":191},[181,843,402],{"class":211},[181,845,477],{"class":215},[181,847,397],{"class":211},[181,849,199],{"class":191},[181,851,402],{"class":389},[181,853,371],{"class":468},[181,855,397],{"class":389},[181,857,330],{"class":191},[181,859,192],{"class":191},[181,861,402],{"class":389},[181,863,864],{"class":503},"boundary",[181,866,397],{"class":389},[181,868,330],{"class":191},[181,870,192],{"class":191},[181,872,402],{"class":389},[181,874,875],{"class":515},"out",[181,877,397],{"class":389},[181,879,330],{"class":191},[181,881,402],{"class":211},[181,883,884],{"class":215},"closed",[181,886,397],{"class":211},[181,888,205],{"class":191},[181,890,205],{"class":191},[181,892,573],{"class":191},[181,894,896],{"class":183,"line":895},20,[181,897,898],{"class":191},"  },\n",[181,900,902,904,907,909,911,913,915,917,919,921,923,925,927],{"class":183,"line":901},21,[181,903,390],{"class":389},[181,905,906],{"class":393},"required",[181,908,397],{"class":389},[181,910,330],{"class":191},[181,912,684],{"class":191},[181,914,397],{"class":211},[181,916,394],{"class":215},[181,918,397],{"class":211},[181,920,199],{"class":191},[181,922,402],{"class":211},[181,924,650],{"class":215},[181,926,397],{"class":211},[181,928,750],{"class":191},[181,930,932,934,937,939,941,944],{"class":183,"line":931},22,[181,933,390],{"class":389},[181,935,936],{"class":393},"x-fougere-version",[181,938,397],{"class":389},[181,940,330],{"class":191},[181,942,943],{"class":468}," 1",[181,945,410],{"class":191},[181,947,949,951,954,956,958,960,963],{"class":183,"line":948},23,[181,950,390],{"class":389},[181,952,953],{"class":393},"x-fougere-vendor",[181,955,397],{"class":389},[181,957,330],{"class":191},[181,959,402],{"class":211},[181,961,962],{"class":215},"fougere",[181,964,965],{"class":211},"\"\n",[181,967,969],{"class":183,"line":968},24,[181,970,971],{"class":191},"}\n",[144,973,974,975,978,979,982,983,985,986,988],{},"A nullable field folds into the union ",[159,976,977],{},"type: [\"T\", \"null\"]"," — nullability is shape, hence\nplain JSON Schema. An embedded object (",[159,980,981],{},"json(Entity)",") carries its nested ",[159,984,437],{}," and\n",[159,987,906],{},", themselves shape-only.",[354,990,992,993],{"id":991},"the-three-axes-under-x-fougere","The three axes under ",[159,994,371],{},[144,996,997,998,1000],{},"The values under ",[159,999,371],{}," are names and JSON structures. No separate descriptor is\nrequired.",[1002,1003,1004,1020],"table",{},[1005,1006,1007],"thead",{},[1008,1009,1010,1014,1017],"tr",{},[1011,1012,1013],"th",{},"key",[1011,1015,1016],{},"values",[1011,1018,1019],{},"what it states",[1021,1022,1023,1039,1054,1068,1090,1115,1132,1150],"tbody",{},[1008,1024,1025,1031,1036],{},[1026,1027,1028],"td",{},[159,1029,1030],{},"role.primary",[1026,1032,1033],{},[159,1034,1035],{},"true",[1026,1037,1038],{},"identity — the system owns it",[1008,1040,1041,1046,1051],{},[1026,1042,1043],{},[159,1044,1045],{},"role.unique",[1026,1047,1048],{},[159,1049,1050],{},"[[\"slug\"], [\"listId\",\"docId\"]]",[1026,1052,1053],{},"the unique constraints this field is a member of — one member list each, members named. A lone field is the degenerate case: a constraint of one. The DDL emits them",[1008,1055,1056,1061,1065],{},[1026,1057,1058],{},[159,1059,1060],{},"role.index",[1026,1062,1063],{},[159,1064,1035],{},[1026,1066,1067],{},"storage constraint — the DDL emits it",[1008,1069,1070,1075,1080],{},[1026,1071,1072],{},[159,1073,1074],{},"role.relation",[1026,1076,1077],{},[159,1078,1079],{},"{ to, kind: 'one'|'many', onDelete? }",[1026,1081,1082,1085,1086,1089],{},[159,1083,1084],{},"to"," is a ",[148,1087,1088],{},"name",", not an inlined schema",[1008,1091,1092,1097,1112],{},[1026,1093,1094],{},[159,1095,1096],{},"lifecycle.create",[1026,1098,1099,1102,1103,1102,1106,1102,1109],{},[159,1100,1101],{},"{ value }"," | ",[159,1104,1105],{},"'now'",[159,1107,1108],{},"{ generate }",[159,1110,1111],{},"'optional'",[1026,1113,1114],{},"who writes at creation, and when",[1008,1116,1117,1122,1129],{},[1026,1118,1119],{},[159,1120,1121],{},"lifecycle.update",[1026,1123,1124,1102,1126],{},[159,1125,1105],{},[159,1127,1128],{},"'forbidden'",[1026,1130,1131],{},"who writes on update",[1008,1133,1134,1139,1147],{},[1026,1135,1136],{},[159,1137,1138],{},"boundary.in",[1026,1140,1141,1102,1144],{},[159,1142,1143],{},"'closed'",[159,1145,1146],{},"{ decode }",[1026,1148,1149],{},"read-only, or a named inbound conversion",[1008,1151,1152,1157,1164],{},[1026,1153,1154],{},[159,1155,1156],{},"boundary.out",[1026,1158,1159,1102,1161],{},[159,1160,1143],{},[159,1162,1163],{},"{ encode }",[1026,1165,1166],{},"write-only, or a named outbound conversion",[144,1168,1169,1170,1172,1173,1175],{},"An absent key means open: no ",[159,1171,1096],{}," means the caller must supply the value; no\n",[159,1174,864],{}," means identity in both directions.",[144,1177,1178,1179,1182,1183,1186],{},"Only an explicitly declared boundary is emitted. Behaviour inferred from the shape, such\nas decoding a ",[159,1180,1181],{},"format: date-time"," field into a ",[159,1184,1185],{},"Date",", is derived again during\nreconstruction.",[144,1188,1189,1191,1192,1195,1196,1199,1200,1202,1203,1206,1207,1210],{},[159,1190,1045],{}," always names its members in the document, including a single-field constraint\n(",[159,1193,1194],{},"[[\"slug\"]]","). In memory a lone ",[159,1197,1198],{},"unique()"," does not yet know its key; ",[159,1201,282],{}," resolves\nit from the object passed to ",[159,1204,1205],{},"entity({...})",". A compound constraint such as\n",[159,1208,1209],{},"(listId, docId)"," appears in full on each member.",[354,1212,1214,1216],{"id":1213},"required-semantics",[159,1215,906],{}," semantics",[144,1218,1219,1220,1222],{},"In a Fougere card, ",[159,1221,906],{}," has a narrower meaning than in JSON Schema alone.",[144,1224,1225,1227,1228,1231,1232,1234,1235,1238,1239,1242,1243,1245],{},[159,1226,906],{}," lists ",[148,1229,1230],{},"the names a caller must supply at creation"," — those no ",[159,1233,1096],{},"\nrule answers the absence of, and that are not a ",[159,1236,1237],{},"many"," relation (absent → ",[159,1240,1241],{},"[]","). It is\nnarrower than JSON Schema's ",[159,1244,906],{},", which is context-free and answers \"what is always\npresent when read?\".",[144,1247,1248,1249,1251],{},"A nullable field therefore remains required: the caller may supply ",[159,1250,745],{},", but may not\nomit the key. Presence and nullability remain separate concepts.",[354,1253,1255],{"id":1254},"the-bundle-several-entities-relations-included","The bundle — several entities, relations included",[144,1257,1258,1261,1262,1265,1266,1269],{},[159,1259,1260],{},"describeSet"," produces a self-contained ",[159,1263,1264],{},"$defs"," document. Each entity uses its lowercased\nname, matching the value carried by ",[159,1267,1268],{},"relation.to",".",[172,1271,1273],{"className":174,"code":1272,"language":176,"meta":177,"style":177},"const bundle = describeSet({ post: Post, author: Author });\nconst { post, author } = reconstructSet(bundle);\n",[159,1274,1275,1319],{"__ignoreMap":177},[181,1276,1277,1279,1282,1284,1287,1290,1293,1297,1299,1301,1303,1306,1308,1311,1314,1317],{"class":183,"line":184},[181,1278,236],{"class":235},[181,1280,1281],{"class":239}," bundle",[181,1283,244],{"class":243},[181,1285,1286],{"class":247}," describeSet",[181,1288,1289],{"class":195},"(",[181,1291,1292],{"class":191},"{",[181,1294,1296],{"class":1295},"skxfh"," post",[181,1298,330],{"class":191},[181,1300,315],{"class":195},[181,1302,199],{"class":191},[181,1304,1305],{"class":1295}," author",[181,1307,330],{"class":191},[181,1309,1310],{"class":195}," Author ",[181,1312,1313],{"class":191},"}",[181,1315,1316],{"class":195},")",[181,1318,222],{"class":191},[181,1320,1321,1323,1325,1327,1329,1331,1333,1335,1338,1341],{"class":183,"line":225},[181,1322,236],{"class":235},[181,1324,192],{"class":191},[181,1326,1296],{"class":239},[181,1328,199],{"class":191},[181,1330,1305],{"class":239},[181,1332,205],{"class":191},[181,1334,244],{"class":243},[181,1336,1337],{"class":247}," reconstructSet",[181,1339,1340],{"class":195},"(bundle)",[181,1342,222],{"class":191},[144,1344,1345,1346,1349,1350,1352,1353,1356],{},"A relation is a pointer rather than an inlined sub-schema: ",[159,1347,1348],{},"Post → Author → Post"," produces\ntwo references instead of recursive nesting. ",[159,1351,286],{}," keeps the names;\n",[159,1354,1355],{},"reconstructSet"," resolves them to the target entities expected by adapters.",[354,1358,1360],{"id":1359},"serialization-limits","Serialization limits",[144,1362,1363],{},"A card can contain only serializable data:",[1365,1366,1367,1381],"ul",{},[1368,1369,1370,1373,1374,1376,1377,1380],"li",{},[148,1371,1372],{},"a relation becomes a name."," ",[159,1375,1355],{}," can resolve the ",[159,1378,1379],{},"() => Author"," thunk\nwithin a bundle.",[1368,1382,1383,1386,1387,1390],{},[148,1384,1385],{},"a custom generator or conversion is referenced by name",", then resolved against the\nconsumer's registry. An unknown name produces a local ",[159,1388,1389],{},"unknown generator"," error.",[144,1392,1393],{},"The axes therefore do not accept JavaScript closures, which cannot be serialized.",[354,1395,1397,1400],{"id":1396},"rpcdiscover-a-whole-apps-card",[159,1398,1399],{},"rpc.discover"," — a whole app's card",[144,1402,1403,1404,1406,1407,1410],{},"A host answers the reserved ",[159,1405,1399],{}," operation with what it hosts. Each frond\npublishes ",[148,1408,1409],{},"two lists, and they are duals",": what you may call, and what leaves on its own.",[172,1412,1414],{"className":375,"code":1413,"language":377,"meta":177,"style":177},"{\n  \"fronds\": [{\n    \"name\": \"blog\",\n    \"doors\": [{\n      \"name\": \"post\",\n      \"ops\": [\n        { \"name\": \"list\",     \"kind\": \"query\",   \"output\": { \u002F* a card *\u002F } },\n        { \"name\": \"findById\", \"kind\": \"query\",   \"output\": { \u002F* a card *\u002F } },\n        { \"name\": \"create\",   \"kind\": \"command\", \"input\": { \u002F* a card *\u002F },\n                                                 \"output\": { \u002F* a card *\u002F } },\n        { \"name\": \"delete\",   \"kind\": \"command\" },\n        { \"name\": \"publish\",  \"kind\": \"command\", \"description\": \"Make the post public.\" }\n      ],\n      \"schema\": { \u002F* a card *\u002F }\n    }],\n    \"facts\": [\n      { \"name\": \"postPublished\", \"schema\": { \u002F* a card *\u002F } }\n    ]\n  }]\n}\n",[159,1415,1416,1420,1434,1453,1466,1484,1498,1558,1611,1663,1682,1719,1774,1779,1796,1801,1814,1852,1857,1862],{"__ignoreMap":177},[181,1417,1418],{"class":183,"line":184},[181,1419,384],{"class":191},[181,1421,1422,1424,1427,1429,1431],{"class":183,"line":225},[181,1423,390],{"class":389},[181,1425,1426],{"class":393},"fronds",[181,1428,397],{"class":389},[181,1430,330],{"class":191},[181,1432,1433],{"class":191}," [{\n",[181,1435,1436,1438,1440,1442,1444,1446,1449,1451],{"class":183,"line":232},[181,1437,450],{"class":389},[181,1439,1088],{"class":333},[181,1441,397],{"class":389},[181,1443,330],{"class":191},[181,1445,402],{"class":211},[181,1447,1448],{"class":215},"blog",[181,1450,397],{"class":211},[181,1452,410],{"class":191},[181,1454,1455,1457,1460,1462,1464],{"class":183,"line":260},[181,1456,450],{"class":389},[181,1458,1459],{"class":333},"doors",[181,1461,397],{"class":389},[181,1463,330],{"class":191},[181,1465,1433],{"class":191},[181,1467,1468,1470,1472,1474,1476,1478,1480,1482],{"class":183,"line":447},[181,1469,465],{"class":389},[181,1471,1088],{"class":468},[181,1473,397],{"class":389},[181,1475,330],{"class":191},[181,1477,402],{"class":211},[181,1479,405],{"class":215},[181,1481,397],{"class":211},[181,1483,410],{"class":191},[181,1485,1486,1488,1491,1493,1495],{"class":183,"line":462},[181,1487,465],{"class":389},[181,1489,1490],{"class":468},"ops",[181,1492,397],{"class":389},[181,1494,330],{"class":191},[181,1496,1497],{"class":191}," [\n",[181,1499,1500,1503,1505,1507,1509,1511,1513,1516,1518,1520,1523,1526,1528,1530,1532,1535,1537,1539,1542,1545,1547,1549,1551,1554,1556],{"class":183,"line":484},[181,1501,1502],{"class":191},"        {",[181,1504,402],{"class":389},[181,1506,1088],{"class":503},[181,1508,397],{"class":389},[181,1510,330],{"class":191},[181,1512,402],{"class":211},[181,1514,1515],{"class":215},"list",[181,1517,397],{"class":211},[181,1519,199],{"class":191},[181,1521,1522],{"class":389},"     \"",[181,1524,1525],{"class":503},"kind",[181,1527,397],{"class":389},[181,1529,330],{"class":191},[181,1531,402],{"class":211},[181,1533,1534],{"class":215},"query",[181,1536,397],{"class":211},[181,1538,199],{"class":191},[181,1540,1541],{"class":389},"   \"",[181,1543,1544],{"class":503},"output",[181,1546,397],{"class":389},[181,1548,330],{"class":191},[181,1550,192],{"class":191},[181,1552,1553],{"class":256}," \u002F* a card *\u002F",[181,1555,205],{"class":191},[181,1557,526],{"class":191},[181,1559,1560,1562,1564,1566,1568,1570,1572,1575,1577,1579,1581,1583,1585,1587,1589,1591,1593,1595,1597,1599,1601,1603,1605,1607,1609],{"class":183,"line":497},[181,1561,1502],{"class":191},[181,1563,402],{"class":389},[181,1565,1088],{"class":503},[181,1567,397],{"class":389},[181,1569,330],{"class":191},[181,1571,402],{"class":211},[181,1573,1574],{"class":215},"findById",[181,1576,397],{"class":211},[181,1578,199],{"class":191},[181,1580,402],{"class":389},[181,1582,1525],{"class":503},[181,1584,397],{"class":389},[181,1586,330],{"class":191},[181,1588,402],{"class":211},[181,1590,1534],{"class":215},[181,1592,397],{"class":211},[181,1594,199],{"class":191},[181,1596,1541],{"class":389},[181,1598,1544],{"class":503},[181,1600,397],{"class":389},[181,1602,330],{"class":191},[181,1604,192],{"class":191},[181,1606,1553],{"class":256},[181,1608,205],{"class":191},[181,1610,526],{"class":191},[181,1612,1613,1615,1617,1619,1621,1623,1625,1627,1629,1631,1633,1635,1637,1639,1641,1644,1646,1648,1650,1653,1655,1657,1659,1661],{"class":183,"line":529},[181,1614,1502],{"class":191},[181,1616,402],{"class":389},[181,1618,1088],{"class":503},[181,1620,397],{"class":389},[181,1622,330],{"class":191},[181,1624,402],{"class":211},[181,1626,545],{"class":215},[181,1628,397],{"class":211},[181,1630,199],{"class":191},[181,1632,1541],{"class":389},[181,1634,1525],{"class":503},[181,1636,397],{"class":389},[181,1638,330],{"class":191},[181,1640,402],{"class":211},[181,1642,1643],{"class":215},"command",[181,1645,397],{"class":211},[181,1647,199],{"class":191},[181,1649,402],{"class":389},[181,1651,1652],{"class":503},"input",[181,1654,397],{"class":389},[181,1656,330],{"class":191},[181,1658,192],{"class":191},[181,1660,1553],{"class":256},[181,1662,526],{"class":191},[181,1664,1665,1668,1670,1672,1674,1676,1678,1680],{"class":183,"line":576},[181,1666,1667],{"class":389},"                                                 \"",[181,1669,1544],{"class":503},[181,1671,397],{"class":389},[181,1673,330],{"class":191},[181,1675,192],{"class":191},[181,1677,1553],{"class":256},[181,1679,205],{"class":191},[181,1681,526],{"class":191},[181,1683,1684,1686,1688,1690,1692,1694,1696,1699,1701,1703,1705,1707,1709,1711,1713,1715,1717],{"class":183,"line":582},[181,1685,1502],{"class":191},[181,1687,402],{"class":389},[181,1689,1088],{"class":503},[181,1691,397],{"class":389},[181,1693,330],{"class":191},[181,1695,402],{"class":211},[181,1697,1698],{"class":215},"delete",[181,1700,397],{"class":211},[181,1702,199],{"class":191},[181,1704,1541],{"class":389},[181,1706,1525],{"class":503},[181,1708,397],{"class":389},[181,1710,330],{"class":191},[181,1712,402],{"class":211},[181,1714,1643],{"class":215},[181,1716,397],{"class":211},[181,1718,526],{"class":191},[181,1720,1721,1723,1725,1727,1729,1731,1733,1736,1738,1740,1742,1744,1746,1748,1750,1752,1754,1756,1758,1761,1763,1765,1767,1770,1772],{"class":183,"line":588},[181,1722,1502],{"class":191},[181,1724,402],{"class":389},[181,1726,1088],{"class":503},[181,1728,397],{"class":389},[181,1730,330],{"class":191},[181,1732,402],{"class":211},[181,1734,1735],{"class":215},"publish",[181,1737,397],{"class":211},[181,1739,199],{"class":191},[181,1741,390],{"class":389},[181,1743,1525],{"class":503},[181,1745,397],{"class":389},[181,1747,330],{"class":191},[181,1749,402],{"class":211},[181,1751,1643],{"class":215},[181,1753,397],{"class":211},[181,1755,199],{"class":191},[181,1757,402],{"class":389},[181,1759,1760],{"class":503},"description",[181,1762,397],{"class":389},[181,1764,330],{"class":191},[181,1766,402],{"class":211},[181,1768,1769],{"class":215},"Make the post public.",[181,1771,397],{"class":211},[181,1773,573],{"class":191},[181,1775,1776],{"class":183,"line":645},[181,1777,1778],{"class":191},"      ],\n",[181,1780,1781,1783,1786,1788,1790,1792,1794],{"class":183,"line":708},[181,1782,465],{"class":389},[181,1784,1785],{"class":468},"schema",[181,1787,397],{"class":389},[181,1789,330],{"class":191},[181,1791,192],{"class":191},[181,1793,1553],{"class":256},[181,1795,573],{"class":191},[181,1797,1798],{"class":183,"line":722},[181,1799,1800],{"class":191},"    }],\n",[181,1802,1803,1805,1808,1810,1812],{"class":183,"line":753},[181,1804,450],{"class":389},[181,1806,1807],{"class":333},"facts",[181,1809,397],{"class":389},[181,1811,330],{"class":191},[181,1813,1497],{"class":191},[181,1815,1816,1819,1821,1823,1825,1827,1829,1832,1834,1836,1838,1840,1842,1844,1846,1848,1850],{"class":183,"line":774},[181,1817,1818],{"class":191},"      {",[181,1820,402],{"class":389},[181,1822,1088],{"class":468},[181,1824,397],{"class":389},[181,1826,330],{"class":191},[181,1828,402],{"class":211},[181,1830,1831],{"class":215},"postPublished",[181,1833,397],{"class":211},[181,1835,199],{"class":191},[181,1837,402],{"class":389},[181,1839,1785],{"class":468},[181,1841,397],{"class":389},[181,1843,330],{"class":191},[181,1845,192],{"class":191},[181,1847,1553],{"class":256},[181,1849,205],{"class":191},[181,1851,573],{"class":191},[181,1853,1854],{"class":183,"line":817},[181,1855,1856],{"class":191},"    ]\n",[181,1858,1859],{"class":183,"line":822},[181,1860,1861],{"class":191},"  }]\n",[181,1863,1864],{"class":183,"line":895},[181,1865,971],{"class":191},[144,1867,1868,1869,1871,1872,1874,1875,1877,1878,1880,1881,1884,1885,1888,1889,1891,1892,1894,1895,1897,1898,1900],{},"An operation always says its ",[159,1870,1088],{}," and its ",[159,1873,1525],{}," — ",[159,1876,1534],{}," reads, ",[159,1879,1643],{}," writes, which\nis the same call REST turns into ",[159,1882,1883],{},"GET"," versus ",[159,1886,1887],{},"POST",". The rest is present when there is\nsomething to say: ",[159,1890,1652],{}," and ",[159,1893,1544],{}," when the contract names a view, and ",[159,1896,1760],{},"\nwhen the method carries a doc sentence. ",[159,1899,1698],{}," names neither view above because a boolean\nis not a shape.",[144,1902,1903,1905,1906,1909,1910,1913],{},[159,1904,1785],{}," is optional on both lists, and its absence says something different on each. A\n",[148,1907,1908],{},"door"," with no schema stores nothing — a health check, a computation, a search across\nseveral shapes. A ",[148,1911,1912],{},"fact"," with no schema announces a type the host does not store.",[1915,1916,1918],"h3",{"id":1917},"why-facts-are-a-separate-list","Why facts are a separate list",[144,1920,1921,1922,1924],{},"Hosting means answering: an entity with no façade is deliberately absent from ",[159,1923,1459],{},", or\nthe card would publish the shape of tables nobody can reach — the auth tables, typically.",[144,1926,1927,1928,1930,1931,1934,1935,1938,1939,1942],{},"A ",[156,1929,1912],{"href":90}," is the opposite case. It carries no operation either, but\nsomeone ",[148,1932,1933],{},"wrote"," that it leaves (",[159,1936,1937],{},"Emit\u003CPostPublished>","), so publishing its shape honours a statement instead of\nleaking one. Without this list a fact stopped at the repository boundary: colocation gives\nthe contract, ",[159,1940,1941],{},"remotes:"," gives only the location, and across two repositories there is no\ncolocation. The subscriber had to hand-copy the emitter's declaration.",[144,1944,1945,1947,1948,1951],{},[159,1946,1807],{}," is the same on every ",[156,1949,1950],{"href":124},"surface"," — a door has an audience, a\nfact does not.",[144,1953,1954,1955,1957,1958,1961],{},"The doublure router reads ",[159,1956,1459],{}," only, and uses them to associate entities with the\naddresses declared in ",[159,1959,1960],{},"remotes",". A fact is not routable: nobody calls it, it arrives.",[354,1963,1965],{"id":1964},"writing-a-frond-elsewhere","Writing a Frond elsewhere",[144,1967,1968],{},"None of this assumes TypeScript. A frond written in another language joins the topology if\nit honours three things:",[1970,1971,1972,1987,1998],"ol",{},[1368,1973,1974,1874,1977,1980,1981,1984,1985,1269],{},[148,1975,1976],{},"the wire",[159,1978,1979],{},"POST \u002F_fougere\u002Fcall",", JSON-RPC 2.0, ",[159,1982,1983],{},"method = \"entity.op\"",";\nsee ",[156,1986,119],{"href":120},[1368,1988,1989,1874,1992,1994,1995,1269],{},[148,1990,1991],{},"the card",[159,1993,1399],{}," returns the envelope above, ",[159,1996,1997],{},"x-fougere-version: 1",[1368,1999,2000,2003,2004,2007,2008,2011,2012,2014,2015,2018,2019,2022],{},[148,2001,2002],{},"the error vocabulary"," — a whole ",[159,2005,2006],{},"FougereError"," in ",[159,2009,2010],{},"error.data",", its ",[159,2013,159],{}," a\n",[156,2016,2017],{"href":82},"semantic code","; the ",[159,2020,2021],{},"-32000"," integer stays the JSON-RPC spec's.",[144,2024,2025],{},"The consumer then rebuilds the schema and validates data locally with the same rules.",[144,2027,2028,2031,2032,2034],{},[159,2029,2030],{},"demos\u002Frust-frond\u002F"," is one, in Rust — one entity, three operations, no ",[159,2033,1205],{},"\nclass anywhere.",[144,2036,2037,2038,2040],{},"Next: ",[156,2039,69],{"href":70}," — operations, binding rules, output scoping.",[2042,2043,2044],"style",{},"html pre.shiki code .sVHd0, html code.shiki .sVHd0{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#D73A49;--shiki-default-font-style:inherit;--shiki-dark:#F97583;--shiki-dark-font-style:inherit}html pre.shiki code .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .su5hD, html code.shiki .su5hD{--shiki-light:#90A4AE;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sjJ54, html code.shiki .sjJ54{--shiki-light:#39ADB5;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s_sjI, html code.shiki .s_sjI{--shiki-light:#91B859;--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .smGrS, html code.shiki .smGrS{--shiki-light:#39ADB5;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sGLFI, html code.shiki .sGLFI{--shiki-light:#6182B8;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sutJx, html code.shiki .sutJx{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#6A737D;--shiki-default-font-style:inherit;--shiki-dark:#6A737D;--shiki-dark-font-style:inherit}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 .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sucvu, html code.shiki .sucvu{--shiki-light:#E53935;--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sZMiF, html code.shiki .sZMiF{--shiki-light:#E2931D;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .skxfh, html code.shiki .skxfh{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .s39Yj, html code.shiki .s39Yj{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sseR_, html code.shiki .sseR_{--shiki-light:#9C3EDA;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .srdBf, html code.shiki .srdBf{--shiki-light:#F76D47;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .swQdS, html code.shiki .swQdS{--shiki-light:#E53935;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sAQsV, html code.shiki .sAQsV{--shiki-light:#916B53;--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sptTA, html code.shiki .sptTA{--shiki-light:#6182B8;--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":177,"searchDepth":225,"depth":225,"links":2046},[2047,2048,2050,2052,2053,2054,2058],{"id":356,"depth":225,"text":357},{"id":991,"depth":225,"text":2049},"The three axes under x-fougere",{"id":1213,"depth":225,"text":2051},"required semantics",{"id":1254,"depth":225,"text":1255},{"id":1359,"depth":225,"text":1360},{"id":1396,"depth":225,"text":2055,"children":2056},"rpc.discover — a whole app's card",[2057],{"id":1917,"depth":232,"text":1918},{"id":1964,"depth":225,"text":1965},"The portable JSON format for a Fougere schema and its x-fougere extensions.","md",{},{"title":56,"description":2059},"dL0_1xVmQ6VkUstgocY7wjH6t7fY3yiHpVfnJXZKOOw",1786637819533]