[{"data":1,"prerenderedAt":808},["ShallowReactive",2],{"docs-nav:en":3,"docs:\u002Fdocs\u002Fclient\u002Fqueries-commands":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":98,"body":136,"description":803,"extension":804,"meta":805,"navigation":202,"path":99,"seo":806,"stem":100,"__hash__":807},"docs_en\u002Fdocs\u002F5.client\u002F1.queries-commands.md",{"type":137,"value":138,"toc":797},"minimark",[139,143,156,363,368,420,423,557,564,667,671,698,710,714,717,721,734,759,762,781,787,793],[140,141,98],"h1",{"id":142},"queries-commands",[144,145,146,147,151,152,155],"p",{},"A page calls a Frond with a ",[148,149,150],"strong",{},"query"," for reads or a ",[148,153,154],{},"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.",[157,158,163],"pre",{"className":159,"code":160,"language":161,"meta":162,"style":162},"language-ts shiki shiki-themes material-theme-lighter github-light github-dark","import Post from '@frond\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","",[164,165,166,197,204,280,315,356],"code",{"__ignoreMap":162},[167,168,171,175,179,182,186,190,193],"span",{"class":169,"line":170},"line",1,[167,172,174],{"class":173},"sVHd0","import",[167,176,178],{"class":177},"su5hD"," Post ",[167,180,181],{"class":173},"from",[167,183,185],{"class":184},"sjJ54"," '",[167,187,189],{"class":188},"s_sjI","@frond\u002Fblog\u002Fentities\u002FPost",[167,191,192],{"class":184},"'",[167,194,196],{"class":195},"sP7_E",";\n",[167,198,200],{"class":169,"line":199},2,[167,201,203],{"emptyLinePlaceholder":202},true,"\n",[167,205,207,211,214,218,221,224,226,229,231,234,236,239,242,246,249,253,256,260,263,266,268,270,273,275,278],{"class":169,"line":206},3,[167,208,210],{"class":209},"sbsja","const",[167,212,213],{"class":195}," {",[167,215,217],{"class":216},"s_hVV"," items",[167,219,220],{"class":195},",",[167,222,223],{"class":216}," total",[167,225,220],{"class":195},[167,227,228],{"class":216}," hasMore",[167,230,220],{"class":195},[167,232,233],{"class":216}," loading",[167,235,220],{"class":195},[167,237,238],{"class":216}," error",[167,240,241],{"class":195}," }",[167,243,245],{"class":244},"smGrS"," =",[167,247,248],{"class":173}," await",[167,250,252],{"class":251},"sGLFI"," useQuery",[167,254,255],{"class":195},"\u003C",[167,257,259],{"class":258},"sbgvK","PostCard",[167,261,262],{"class":195},">",[167,264,265],{"class":177},"(Post",[167,267,220],{"class":195},[167,269,185],{"class":184},[167,271,272],{"class":188},"list",[167,274,192],{"class":184},[167,276,277],{"class":177},")",[167,279,196],{"class":195},[167,281,283,285,288,290,293,295,298,300,302,304,306,309,311,313],{"class":169,"line":282},4,[167,284,210],{"class":209},[167,286,287],{"class":216}," publish",[167,289,245],{"class":244},[167,291,292],{"class":251}," useCommand",[167,294,255],{"class":195},[167,296,297],{"class":258},"Post",[167,299,262],{"class":195},[167,301,265],{"class":177},[167,303,220],{"class":195},[167,305,185],{"class":184},[167,307,308],{"class":188},"publish",[167,310,192],{"class":184},[167,312,277],{"class":177},[167,314,196],{"class":195},[167,316,318,321,323,326,329,332,335,339,342,344,347,350,352,354],{"class":169,"line":317},5,[167,319,320],{"class":173},"await",[167,322,287],{"class":177},[167,324,325],{"class":195},".",[167,327,328],{"class":251},"execute",[167,330,331],{"class":177},"(",[167,333,334],{"class":195},"{",[167,336,338],{"class":337},"skxfh"," params",[167,340,341],{"class":195},":",[167,343,213],{"class":195},[167,345,346],{"class":177}," id ",[167,348,349],{"class":195},"}",[167,351,241],{"class":195},[167,353,277],{"class":177},[167,355,196],{"class":195},[167,357,359],{"class":169,"line":358},6,[167,360,362],{"class":361},"sutJx","\u002F\u002F → every mounted query on Post revalidates, automatically\n",[364,365,367],"h2",{"id":366},"usequery","useQuery",[157,369,371],{"className":159,"code":370,"language":161,"meta":162,"style":162},"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",[164,372,373,410,415],{"__ignoreMap":162},[167,374,375,377,379,382,384,387,389,392,394,397,400,402,405,407],{"class":169,"line":170},[167,376,367],{"class":251},[167,378,255],{"class":195},[167,380,381],{"class":258},"T",[167,383,262],{"class":195},[167,385,386],{"class":177},"(Entity",[167,388,220],{"class":195},[167,390,391],{"class":177}," op",[167,393,220],{"class":195},[167,395,396],{"class":177}," input",[167,398,399],{"class":244},"?",[167,401,220],{"class":195},[167,403,404],{"class":177}," opts",[167,406,399],{"class":244},[167,408,409],{"class":177},")\n",[167,411,412],{"class":169,"line":199},[167,413,414],{"class":361},"\u002F\u002F input: CallInput | () => CallInput      CallInput = { params?, query?, body? }\n",[167,416,417],{"class":169,"line":206},[167,418,419],{"class":361},"\u002F\u002F opts:  { immediate?: boolean }          immediate: false → don't fire on mount\n",[144,421,422],{},"Returns (all reactive):",[424,425,426,442],"table",{},[427,428,429],"thead",{},[430,431,432,436,439],"tr",{},[433,434,435],"th",{},"Key",[433,437,438],{},"Type",[433,440,441],{},"Notes",[443,444,445,469,492,510,524,542],"tbody",{},[430,446,447,453,458],{},[448,449,450],"td",{},[164,451,452],{},"data",[448,454,455],{},[164,456,457],{},"Ref\u003CT | null>",[448,459,460,461,464,465,468],{},"the raw result (single object ops: ",[164,462,463],{},"findById",", ",[164,466,467],{},"bySlug","…)",[430,470,471,476,481],{},[448,472,473],{},[164,474,475],{},"items",[448,477,478],{},[164,479,480],{},"ComputedRef\u003CT[]>",[448,482,483,484,487,488,491],{},"list normalization: a bare array ",[148,485,486],{},"or"," a ",[164,489,490],{},"ListResult"," both read as items",[430,493,494,502,507],{},[448,495,496,464,499],{},[164,497,498],{},"total",[164,500,501],{},"hasMore",[448,503,504,505],{},"from ",[164,506,490],{},[448,508,509],{},"present when the op returns one",[430,511,512,517,522],{},[448,513,514],{},[164,515,516],{},"loading",[448,518,519],{},[164,520,521],{},"Ref\u003Cboolean>",[448,523],{},[430,525,526,531,536],{},[448,527,528],{},[164,529,530],{},"error",[448,532,533],{},[164,534,535],{},"Ref\u003CFougereError | null>",[448,537,538,539,277],{},"the revived typed error (",[540,541,81],"a",{"href":82},[430,543,544,549,554],{},[448,545,546],{},[164,547,548],{},"refresh",[448,550,551],{},[164,552,553],{},"() => Promise\u003Cvoid>",[448,555,556],{},"manual revalidation — rarely needed, see the link",[144,558,559,560,563],{},"A ",[148,561,562],{},"getter input"," makes the query reactive to its arguments:",[157,565,567],{"className":159,"code":566,"language":161,"meta":162,"style":162},"const { items } = await useQuery\u003CHit>(Post, 'searchByTitle',\n  () => ({ body: { title: submitted.value } }),\n  { immediate: false });\n",[164,568,569,606,647],{"__ignoreMap":162},[167,570,571,573,575,577,579,581,583,585,587,590,592,594,596,598,601,603],{"class":169,"line":170},[167,572,210],{"class":209},[167,574,213],{"class":195},[167,576,217],{"class":216},[167,578,241],{"class":195},[167,580,245],{"class":244},[167,582,248],{"class":173},[167,584,252],{"class":251},[167,586,255],{"class":195},[167,588,589],{"class":258},"Hit",[167,591,262],{"class":195},[167,593,265],{"class":177},[167,595,220],{"class":195},[167,597,185],{"class":184},[167,599,600],{"class":188},"searchByTitle",[167,602,192],{"class":184},[167,604,605],{"class":195},",\n",[167,607,608,611,614,617,619,622,624,626,629,631,634,636,639,641,643,645],{"class":169,"line":199},[167,609,610],{"class":195},"  ()",[167,612,613],{"class":209}," =>",[167,615,616],{"class":177}," (",[167,618,334],{"class":195},[167,620,621],{"class":337}," body",[167,623,341],{"class":195},[167,625,213],{"class":195},[167,627,628],{"class":337}," title",[167,630,341],{"class":195},[167,632,633],{"class":177}," submitted",[167,635,325],{"class":195},[167,637,638],{"class":177},"value ",[167,640,349],{"class":195},[167,642,241],{"class":195},[167,644,277],{"class":177},[167,646,605],{"class":195},[167,648,649,652,655,657,661,663,665],{"class":169,"line":206},[167,650,651],{"class":195},"  {",[167,653,654],{"class":337}," immediate",[167,656,341],{"class":195},[167,658,660],{"class":659},"syTEX"," false",[167,662,241],{"class":195},[167,664,277],{"class":177},[167,666,196],{"class":195},[364,668,670],{"id":669},"usecommand","useCommand",[157,672,674],{"className":159,"code":673,"language":161,"meta":162,"style":162},"useCommand\u003CT>(Entity, op)\n\u002F\u002F → { execute(input?): Promise\u003CT>, loading: Ref\u003Cboolean>, error: Ref\u003CFougereError | null> }\n",[164,675,676,693],{"__ignoreMap":162},[167,677,678,680,682,684,686,688,690],{"class":169,"line":170},[167,679,670],{"class":251},[167,681,255],{"class":195},[167,683,381],{"class":258},[167,685,262],{"class":195},[167,687,386],{"class":177},[167,689,220],{"class":195},[167,691,692],{"class":177}," op)\n",[167,694,695],{"class":169,"line":199},[167,696,697],{"class":361},"\u002F\u002F → { execute(input?): Promise\u003CT>, loading: Ref\u003Cboolean>, error: Ref\u003CFougereError | null> }\n",[144,699,700,702,703,706,707,709],{},[164,701,328],{}," rejects with the same ",[164,704,705],{},"FougereError"," it stores in ",[164,708,530],{}," — await it in a\ntry\u002Fcatch or read the ref, either style works.",[364,711,713],{"id":712},"the-link","The link",[144,715,716],{},"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.",[364,718,720],{"id":719},"the-wire-and-ssr","The wire — and SSR",[144,722,723,724,464,727,464,730,733],{},"The browser POSTs the same JSON-RPC frame process-to-process transport uses\n(",[164,725,726],{},"POST \u002F_fougere\u002Fcall",[164,728,729],{},"method: \"post.list\"",[164,731,732],{},"params"," = the invocation).",[735,736,737],"blockquote",{},[144,738,739,740,742,743,605,745,747,748,750,751,754,755,758],{},"The documentation calls the ",[164,741,726],{}," endpoint used by ",[164,744,367],{},[164,746,670],{},", and ",[164,749,110],{}," the ",[148,752,753],{},"envelope",". The REST and GraphQL\n",[540,756,757],{"href":124},"surfaces"," translate their protocols to the same operations.",[144,760,761],{},"Two properties:",[763,764,765,772],"ul",{},[766,767,768,771],"li",{},[148,769,770],{},"During SSR",", the same call collapses to in-process execution — no network, no port.",[766,773,774,780],{},[148,775,776,777],{},"The browser does not provide ",[164,778,779],{},"state",": the server builds it from the request context,\nincluding the session.",[144,782,783,784,786],{},"The client transport does not automatically retry commands and preserves typed errors\n(",[540,785,81],{"href":82},").",[144,788,789,790,792],{},"Next: ",[540,791,102],{"href":103}," — state, validation, and submission.",[794,795,796],"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":162,"searchDepth":199,"depth":199,"links":798},[799,800,801,802],{"id":366,"depth":199,"text":367},{"id":669,"depth":199,"text":670},{"id":712,"depth":199,"text":713},{"id":719,"depth":199,"text":720},"useQuery and useCommand — exact signatures, the entity link, SSR behavior.","md",{},{"title":98,"description":803},"nq57cIIwxkvP0HdzcPB8grOvwDhqwq3Arld3bjshdPs",1786637819493]