[{"data":1,"prerenderedAt":860},["ShallowReactive",2],{"docs-nav:en":3,"docs:\u002Fdocs\u002Fclient\u002Fqueries-commands":186},[4],{"title":5,"path":6,"stem":7,"children":8},"Docs","\u002Fdocs","docs",[9,12,16,20,24,28,50,75,120,145],{"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},"An app you already have","\u002Fdocs\u002Fexisting-app","docs\u002F02.existing-app",{"title":21,"path":22,"stem":23},"Bring your schema","\u002Fdocs\u002Fbring-your-schema","docs\u002F03.bring-your-schema",{"title":25,"path":26,"stem":27},"The CLI","\u002Fdocs\u002Fcli","docs\u002F04.cli",{"title":29,"path":30,"stem":31,"children":32,"page":49},"Concepts","\u002Fdocs\u002Fconcepts","docs\u002F2.concepts",[33,37,41,45],{"title":34,"path":35,"stem":36},"Philosophy","\u002Fdocs\u002Fconcepts\u002Fphilosophy","docs\u002F2.concepts\u002F1.philosophy",{"title":38,"path":39,"stem":40},"The Frond","\u002Fdocs\u002Fconcepts\u002Ffrond","docs\u002F2.concepts\u002F2.frond",{"title":42,"path":43,"stem":44},"The shortest path","\u002Fdocs\u002Fconcepts\u002Fshortest-path","docs\u002F2.concepts\u002F3.shortest-path",{"title":46,"path":47,"stem":48},"The base","\u002Fdocs\u002Fconcepts\u002Fthe-base","docs\u002F2.concepts\u002F4.the-base",false,{"title":51,"path":52,"stem":53,"children":54,"page":49},"Schema","\u002Fdocs\u002Fschema","docs\u002F3.schema",[55,59,63,67,71],{"title":56,"path":57,"stem":58},"Entities","\u002Fdocs\u002Fschema\u002Fentities","docs\u002F3.schema\u002F1.entities",{"title":60,"path":61,"stem":62},"Views","\u002Fdocs\u002Fschema\u002Fviews","docs\u002F3.schema\u002F2.views",{"title":64,"path":65,"stem":66},"The identity card","\u002Fdocs\u002Fschema\u002Fcard","docs\u002F3.schema\u002F3.card",{"title":68,"path":69,"stem":70},"Standard Schema","\u002Fdocs\u002Fschema\u002Fstandard-schema","docs\u002F3.schema\u002F4.standard-schema",{"title":72,"path":73,"stem":74},"How a schema moves","\u002Fdocs\u002Fschema\u002Fevolution","docs\u002F3.schema\u002F5.evolution",{"title":76,"path":77,"stem":78,"children":79,"page":49},"Business","\u002Fdocs\u002Fbusiness","docs\u002F4.business",[80,84,88,92,96,100,104,108,112,116],{"title":81,"path":82,"stem":83},"Handlers","\u002Fdocs\u002Fbusiness\u002Fhandlers","docs\u002F4.business\u002F1.handlers",{"title":85,"path":86,"stem":87},"Ports","\u002Fdocs\u002Fbusiness\u002Fports","docs\u002F4.business\u002F10.ports",{"title":89,"path":90,"stem":91},"Presenters","\u002Fdocs\u002Fbusiness\u002Fpresenters","docs\u002F4.business\u002F2.presenters",{"title":93,"path":94,"stem":95},"Collectors","\u002Fdocs\u002Fbusiness\u002Fcollectors","docs\u002F4.business\u002F3.collectors",{"title":97,"path":98,"stem":99},"Errors","\u002Fdocs\u002Fbusiness\u002Ferrors","docs\u002F4.business\u002F4.errors",{"title":101,"path":102,"stem":103},"Seeds","\u002Fdocs\u002Fbusiness\u002Fseeds","docs\u002F4.business\u002F5.seeds",{"title":105,"path":106,"stem":107},"Facts","\u002Fdocs\u002Fbusiness\u002Ffacts","docs\u002F4.business\u002F6.facts",{"title":109,"path":110,"stem":111},"Storage","\u002Fdocs\u002Fbusiness\u002Fstorage","docs\u002F4.business\u002F7.storage",{"title":113,"path":114,"stem":115},"Writes that stand or fall as one","\u002Fdocs\u002Fbusiness\u002Ftogether","docs\u002F4.business\u002F8.together",{"title":117,"path":118,"stem":119},"Repositories","\u002Fdocs\u002Fbusiness\u002Frepositories","docs\u002F4.business\u002F9.repositories",{"title":121,"path":122,"stem":123,"children":124,"page":49},"Client","\u002Fdocs\u002Fclient","docs\u002F5.client",[125,129,133,137,141],{"title":126,"path":127,"stem":128},"Queries & commands","\u002Fdocs\u002Fclient\u002Fqueries-commands","docs\u002F5.client\u002F1.queries-commands",{"title":130,"path":131,"stem":132},"Forms","\u002Fdocs\u002Fclient\u002Fforms","docs\u002F5.client\u002F2.forms",{"title":134,"path":135,"stem":136},"Session","\u002Fdocs\u002Fclient\u002Fsession","docs\u002F5.client\u002F3.session",{"title":138,"path":139,"stem":140},"invoke","\u002Fdocs\u002Fclient\u002Finvoke","docs\u002F5.client\u002F4.invoke",{"title":142,"path":143,"stem":144},"Back-office","\u002Fdocs\u002Fclient\u002Fadmin","docs\u002F5.client\u002F5.admin",{"title":146,"path":147,"stem":148,"children":149,"page":49},"Infrastructure","\u002Fdocs\u002Finfra","docs\u002F6.infra",[150,154,158,162,166,170,174,178,182],{"title":151,"path":152,"stem":153},"The gradient","\u002Fdocs\u002Finfra\u002Fgradient","docs\u002F6.infra\u002F1.gradient",{"title":155,"path":156,"stem":157},"Surfaces — REST & GraphQL","\u002Fdocs\u002Finfra\u002Fsurfaces","docs\u002F6.infra\u002F2.surfaces",{"title":159,"path":160,"stem":161},"Deployment","\u002Fdocs\u002Finfra\u002Fdeployment","docs\u002F6.infra\u002F3.deployment",{"title":163,"path":164,"stem":165},"Hosts","\u002Fdocs\u002Finfra\u002Fhosts","docs\u002F6.infra\u002F4.hosts",{"title":167,"path":168,"stem":169},"Sources","\u002Fdocs\u002Finfra\u002Fsources","docs\u002F6.infra\u002F5.sources",{"title":171,"path":172,"stem":173},"Lifecycle","\u002Fdocs\u002Finfra\u002Flifecycle","docs\u002F6.infra\u002F6.lifecycle",{"title":175,"path":176,"stem":177},"Identity across Fronds","\u002Fdocs\u002Finfra\u002Fidentity","docs\u002F6.infra\u002F7.identity",{"title":179,"path":180,"stem":181},"Observability","\u002Fdocs\u002Finfra\u002Fobservability","docs\u002F6.infra\u002F8.observability",{"title":183,"path":184,"stem":185},"Testing","\u002Fdocs\u002Finfra\u002Ftesting","docs\u002F6.infra\u002F9.testing",{"id":187,"title":126,"body":188,"description":855,"extension":856,"meta":857,"navigation":254,"path":127,"seo":858,"stem":128,"__hash__":859},"docs_en\u002Fdocs\u002F5.client\u002F1.queries-commands.md",{"type":189,"value":190,"toc":849},"minimark",[191,195,208,415,420,472,475,609,616,719,723,750,762,766,769,773,786,811,814,833,839,845],[192,193,126],"h1",{"id":194},"queries-commands",[196,197,198,199,203,204,207],"p",{},"A page calls a Frond with a ",[200,201,202],"strong",{},"query"," for reads or a ",[200,205,206],{},"command"," for writes. A call is\nidentified by the entity class and operation name. The class carries the metadata and its\nname is used as the registration key.",[209,210,215],"pre",{"className":211,"code":212,"language":213,"meta":214,"style":214},"language-ts shiki shiki-themes material-theme-lighter github-light github-dark","import Post from '@fronds\u002Fblog\u002Fentities\u002FPost';\n\nconst { items, total, hasMore, loading, error } = await useQuery\u003CPostCard>(Post, 'list');\nconst publish = useCommand\u003CPost>(Post, 'publish');\nawait publish.execute({ params: { id } });\n\u002F\u002F → every mounted query on Post revalidates, automatically\n","ts","",[216,217,218,249,256,332,367,408],"code",{"__ignoreMap":214},[219,220,223,227,231,234,238,242,245],"span",{"class":221,"line":222},"line",1,[219,224,226],{"class":225},"sVHd0","import",[219,228,230],{"class":229},"su5hD"," Post ",[219,232,233],{"class":225},"from",[219,235,237],{"class":236},"sjJ54"," '",[219,239,241],{"class":240},"s_sjI","@fronds\u002Fblog\u002Fentities\u002FPost",[219,243,244],{"class":236},"'",[219,246,248],{"class":247},"sP7_E",";\n",[219,250,252],{"class":221,"line":251},2,[219,253,255],{"emptyLinePlaceholder":254},true,"\n",[219,257,259,263,266,270,273,276,278,281,283,286,288,291,294,298,301,305,308,312,315,318,320,322,325,327,330],{"class":221,"line":258},3,[219,260,262],{"class":261},"sbsja","const",[219,264,265],{"class":247}," {",[219,267,269],{"class":268},"s_hVV"," items",[219,271,272],{"class":247},",",[219,274,275],{"class":268}," total",[219,277,272],{"class":247},[219,279,280],{"class":268}," hasMore",[219,282,272],{"class":247},[219,284,285],{"class":268}," loading",[219,287,272],{"class":247},[219,289,290],{"class":268}," error",[219,292,293],{"class":247}," }",[219,295,297],{"class":296},"smGrS"," =",[219,299,300],{"class":225}," await",[219,302,304],{"class":303},"sGLFI"," useQuery",[219,306,307],{"class":247},"\u003C",[219,309,311],{"class":310},"sbgvK","PostCard",[219,313,314],{"class":247},">",[219,316,317],{"class":229},"(Post",[219,319,272],{"class":247},[219,321,237],{"class":236},[219,323,324],{"class":240},"list",[219,326,244],{"class":236},[219,328,329],{"class":229},")",[219,331,248],{"class":247},[219,333,335,337,340,342,345,347,350,352,354,356,358,361,363,365],{"class":221,"line":334},4,[219,336,262],{"class":261},[219,338,339],{"class":268}," publish",[219,341,297],{"class":296},[219,343,344],{"class":303}," useCommand",[219,346,307],{"class":247},[219,348,349],{"class":310},"Post",[219,351,314],{"class":247},[219,353,317],{"class":229},[219,355,272],{"class":247},[219,357,237],{"class":236},[219,359,360],{"class":240},"publish",[219,362,244],{"class":236},[219,364,329],{"class":229},[219,366,248],{"class":247},[219,368,370,373,375,378,381,384,387,391,394,396,399,402,404,406],{"class":221,"line":369},5,[219,371,372],{"class":225},"await",[219,374,339],{"class":229},[219,376,377],{"class":247},".",[219,379,380],{"class":303},"execute",[219,382,383],{"class":229},"(",[219,385,386],{"class":247},"{",[219,388,390],{"class":389},"skxfh"," params",[219,392,393],{"class":247},":",[219,395,265],{"class":247},[219,397,398],{"class":229}," id ",[219,400,401],{"class":247},"}",[219,403,293],{"class":247},[219,405,329],{"class":229},[219,407,248],{"class":247},[219,409,411],{"class":221,"line":410},6,[219,412,414],{"class":413},"sutJx","\u002F\u002F → every mounted query on Post revalidates, automatically\n",[416,417,419],"h2",{"id":418},"usequery","useQuery",[209,421,423],{"className":211,"code":422,"language":213,"meta":214,"style":214},"useQuery\u003CT>(Entity, op, input?, opts?)\n\u002F\u002F input: CallInput | () => CallInput      CallInput = { params?, query?, body? }\n\u002F\u002F opts:  { immediate?: boolean }          immediate: false → don't fire on mount\n",[216,424,425,462,467],{"__ignoreMap":214},[219,426,427,429,431,434,436,439,441,444,446,449,452,454,457,459],{"class":221,"line":222},[219,428,419],{"class":303},[219,430,307],{"class":247},[219,432,433],{"class":310},"T",[219,435,314],{"class":247},[219,437,438],{"class":229},"(Entity",[219,440,272],{"class":247},[219,442,443],{"class":229}," op",[219,445,272],{"class":247},[219,447,448],{"class":229}," input",[219,450,451],{"class":296},"?",[219,453,272],{"class":247},[219,455,456],{"class":229}," opts",[219,458,451],{"class":296},[219,460,461],{"class":229},")\n",[219,463,464],{"class":221,"line":251},[219,465,466],{"class":413},"\u002F\u002F input: CallInput | () => CallInput      CallInput = { params?, query?, body? }\n",[219,468,469],{"class":221,"line":258},[219,470,471],{"class":413},"\u002F\u002F opts:  { immediate?: boolean }          immediate: false → don't fire on mount\n",[196,473,474],{},"Returns (all reactive):",[476,477,478,494],"table",{},[479,480,481],"thead",{},[482,483,484,488,491],"tr",{},[485,486,487],"th",{},"Key",[485,489,490],{},"Type",[485,492,493],{},"Notes",[495,496,497,521,544,562,576,594],"tbody",{},[482,498,499,505,510],{},[500,501,502],"td",{},[216,503,504],{},"data",[500,506,507],{},[216,508,509],{},"Ref\u003CT | null>",[500,511,512,513,516,517,520],{},"the raw result (single object ops: ",[216,514,515],{},"findById",", ",[216,518,519],{},"findBySlug","…)",[482,522,523,528,533],{},[500,524,525],{},[216,526,527],{},"items",[500,529,530],{},[216,531,532],{},"ComputedRef\u003CT[]>",[500,534,535,536,539,540,543],{},"list normalization: a bare array ",[200,537,538],{},"or"," a ",[216,541,542],{},"ListResult"," both read as items",[482,545,546,554,559],{},[500,547,548,516,551],{},[216,549,550],{},"total",[216,552,553],{},"hasMore",[500,555,556,557],{},"from ",[216,558,542],{},[500,560,561],{},"present when the op returns one",[482,563,564,569,574],{},[500,565,566],{},[216,567,568],{},"loading",[500,570,571],{},[216,572,573],{},"Ref\u003Cboolean>",[500,575],{},[482,577,578,583,588],{},[500,579,580],{},[216,581,582],{},"error",[500,584,585],{},[216,586,587],{},"Ref\u003CFougereError | null>",[500,589,590,591,329],{},"the revived typed error (",[592,593,97],"a",{"href":98},[482,595,596,601,606],{},[500,597,598],{},[216,599,600],{},"refresh",[500,602,603],{},[216,604,605],{},"() => Promise\u003Cvoid>",[500,607,608],{},"manual revalidation — rarely needed, see the link",[196,610,611,612,615],{},"A ",[200,613,614],{},"getter input"," makes the query reactive to its arguments:",[209,617,619],{"className":211,"code":618,"language":213,"meta":214,"style":214},"const { items } = await useQuery\u003CHit>(Post, 'searchByTitle',\n  () => ({ body: { title: submitted.value } }),\n  { immediate: false });\n",[216,620,621,658,699],{"__ignoreMap":214},[219,622,623,625,627,629,631,633,635,637,639,642,644,646,648,650,653,655],{"class":221,"line":222},[219,624,262],{"class":261},[219,626,265],{"class":247},[219,628,269],{"class":268},[219,630,293],{"class":247},[219,632,297],{"class":296},[219,634,300],{"class":225},[219,636,304],{"class":303},[219,638,307],{"class":247},[219,640,641],{"class":310},"Hit",[219,643,314],{"class":247},[219,645,317],{"class":229},[219,647,272],{"class":247},[219,649,237],{"class":236},[219,651,652],{"class":240},"searchByTitle",[219,654,244],{"class":236},[219,656,657],{"class":247},",\n",[219,659,660,663,666,669,671,674,676,678,681,683,686,688,691,693,695,697],{"class":221,"line":251},[219,661,662],{"class":247},"  ()",[219,664,665],{"class":261}," =>",[219,667,668],{"class":229}," (",[219,670,386],{"class":247},[219,672,673],{"class":389}," body",[219,675,393],{"class":247},[219,677,265],{"class":247},[219,679,680],{"class":389}," title",[219,682,393],{"class":247},[219,684,685],{"class":229}," submitted",[219,687,377],{"class":247},[219,689,690],{"class":229},"value ",[219,692,401],{"class":247},[219,694,293],{"class":247},[219,696,329],{"class":229},[219,698,657],{"class":247},[219,700,701,704,707,709,713,715,717],{"class":221,"line":258},[219,702,703],{"class":247},"  {",[219,705,706],{"class":389}," immediate",[219,708,393],{"class":247},[219,710,712],{"class":711},"syTEX"," false",[219,714,293],{"class":247},[219,716,329],{"class":229},[219,718,248],{"class":247},[416,720,722],{"id":721},"usecommand","useCommand",[209,724,726],{"className":211,"code":725,"language":213,"meta":214,"style":214},"useCommand\u003CT>(Entity, op)\n\u002F\u002F → { execute(input?): Promise\u003CT>, loading: Ref\u003Cboolean>, error: Ref\u003CFougereError | null> }\n",[216,727,728,745],{"__ignoreMap":214},[219,729,730,732,734,736,738,740,742],{"class":221,"line":222},[219,731,722],{"class":303},[219,733,307],{"class":247},[219,735,433],{"class":310},[219,737,314],{"class":247},[219,739,438],{"class":229},[219,741,272],{"class":247},[219,743,744],{"class":229}," op)\n",[219,746,747],{"class":221,"line":251},[219,748,749],{"class":413},"\u002F\u002F → { execute(input?): Promise\u003CT>, loading: Ref\u003Cboolean>, error: Ref\u003CFougereError | null> }\n",[196,751,752,754,755,758,759,761],{},[216,753,380],{}," rejects with the same ",[216,756,757],{},"FougereError"," it stores in ",[216,760,582],{}," — await it in a\ntry\u002Fcatch or read the ref, either style works.",[416,763,765],{"id":764},"the-link","The link",[196,767,768],{},"A successful command on an entity revalidates active queries for that entity. After a post\nis published, post lists are therefore refreshed. Clearing this cache does not change\noperation results, but causes new reads.",[416,770,772],{"id":771},"the-wire-and-ssr","The wire — and SSR",[196,774,775,776,516,779,516,782,785],{},"The browser POSTs the same JSON-RPC frame process-to-process transport uses\n(",[216,777,778],{},"POST \u002F_fougere\u002Fcall",[216,780,781],{},"method: \"post.list\"",[216,783,784],{},"params"," = the invocation).",[787,788,789],"blockquote",{},[196,790,791,792,794,795,657,797,799,800,802,803,806,807,810],{},"The documentation calls the ",[216,793,778],{}," endpoint used by ",[216,796,419],{},[216,798,722],{},", and ",[216,801,138],{}," the ",[200,804,805],{},"envelope",". The REST and GraphQL\n",[592,808,809],{"href":156},"surfaces"," translate their protocols to the same operations.",[196,812,813],{},"Two properties:",[815,816,817,824],"ul",{},[818,819,820,823],"li",{},[200,821,822],{},"During SSR",", the same call collapses to in-process execution — no network, no port.",[818,825,826,832],{},[200,827,828,829],{},"The browser does not provide ",[216,830,831],{},"state",": the server builds it from the request context,\nincluding the session.",[196,834,835,836,838],{},"The client transport does not automatically retry commands and preserves typed errors\n(",[592,837,97],{"href":98},").",[196,840,841,842,844],{},"Next: ",[592,843,130],{"href":131}," — state, validation, and submission.",[846,847,848],"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 .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 .sP7_E, html code.shiki .sP7_E{--shiki-light:#39ADB5;--shiki-default:#24292E;--shiki-dark:#E1E4E8}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 .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .skxfh, html code.shiki .skxfh{--shiki-light:#E53935;--shiki-default:#24292E;--shiki-dark:#E1E4E8}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 .syTEX, html code.shiki .syTEX{--shiki-light:#FF5370;--shiki-default:#005CC5;--shiki-dark:#79B8FF}",{"title":214,"searchDepth":251,"depth":251,"links":850},[851,852,853,854],{"id":418,"depth":251,"text":419},{"id":721,"depth":251,"text":722},{"id":764,"depth":251,"text":765},{"id":771,"depth":251,"text":772},"useQuery and useCommand — exact signatures, the entity link, SSR behavior.","md",{},{"title":126,"description":855},"iFCwSSr5q5AQPfIZLwE3TxnrmgeZq_Hywk2Cw-b3zD0",1788560230789]