[{"data":1,"prerenderedAt":1029},["ShallowReactive",2],{"docs-nav:en":3,"docs:\u002Fdocs\u002Fbusiness\u002Fpresenters":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":73,"body":136,"description":1024,"extension":1025,"meta":1026,"navigation":268,"path":74,"seo":1027,"stem":75,"__hash__":1028},"docs_en\u002Fdocs\u002F4.business\u002F2.presenters.md",{"type":137,"value":138,"toc":1018},"minimark",[139,143,152,780,791,796,809,812,816,829,895,903,907,910,943,950,954,1008,1014],[140,141,73],"h1",{"id":142},"presenters",[144,145,146,147,151],"p",{},"A presenter adds ",[148,149,150],"strong",{},"computed fields"," to an entity's output. Each method defines one field.\nIt receives every row in the response and returns one value per row.",[153,154,159],"pre",{"className":155,"code":156,"language":157,"meta":158,"style":158},"language-ts shiki shiki-themes material-theme-lighter github-light github-dark","import { Presenter } from '@fougere\u002Fcore';\nimport type { EntityOrm } from '@fougere\u002Fcore';\nimport Post from '..\u002Fentities\u002FPost.js';\nimport Author from '..\u002Fentities\u002FAuthor.js';\n\n\u002F** Typed alias — DI resolves by TYPE name, and `AuthorOrm` is the container's key. *\u002F\ntype AuthorOrm = EntityOrm\u003CAuthor>;\n\nexport default class PostPresenter extends Presenter(Post) {\n  constructor(private authorOrm: AuthorOrm) { super(); }\n\n  excerpt(posts: Post[]): string[] {\n    return posts.map((post) => post.body.slice(0, 200));\n  }\n\n  \u002F** One read for the page, not one per row — which is why the page is the argument. *\u002F\n  async authorName(posts: Post[]): Promise\u003Cstring[]> {\n    const ids = [...new Set(posts.map((p) => p.authorId))];\n    const authors = await Promise.all(ids.map((id) => this.authorOrm.findById(id)));\n    const byId = new Map(authors.filter(Boolean).map((a) => [a!.id, a!.name]));\n    return posts.map((post) => byId.get(post.authorId) ?? 'Anonymous');\n  }\n}\n","ts","",[160,161,162,199,224,244,263,270,277,303,308,335,375,380,413,470,476,481,487,526,577,640,716,769,774],"code",{"__ignoreMap":158},[163,164,167,171,175,179,182,185,189,193,196],"span",{"class":165,"line":166},"line",1,[163,168,170],{"class":169},"sVHd0","import",[163,172,174],{"class":173},"sP7_E"," {",[163,176,178],{"class":177},"su5hD"," Presenter",[163,180,181],{"class":173}," }",[163,183,184],{"class":169}," from",[163,186,188],{"class":187},"sjJ54"," '",[163,190,192],{"class":191},"s_sjI","@fougere\u002Fcore",[163,194,195],{"class":187},"'",[163,197,198],{"class":173},";\n",[163,200,202,204,207,209,212,214,216,218,220,222],{"class":165,"line":201},2,[163,203,170],{"class":169},[163,205,206],{"class":169}," type",[163,208,174],{"class":173},[163,210,211],{"class":177}," EntityOrm",[163,213,181],{"class":173},[163,215,184],{"class":169},[163,217,188],{"class":187},[163,219,192],{"class":191},[163,221,195],{"class":187},[163,223,198],{"class":173},[163,225,227,229,232,235,237,240,242],{"class":165,"line":226},3,[163,228,170],{"class":169},[163,230,231],{"class":177}," Post ",[163,233,234],{"class":169},"from",[163,236,188],{"class":187},[163,238,239],{"class":191},"..\u002Fentities\u002FPost.js",[163,241,195],{"class":187},[163,243,198],{"class":173},[163,245,247,249,252,254,256,259,261],{"class":165,"line":246},4,[163,248,170],{"class":169},[163,250,251],{"class":177}," Author ",[163,253,234],{"class":169},[163,255,188],{"class":187},[163,257,258],{"class":191},"..\u002Fentities\u002FAuthor.js",[163,260,195],{"class":187},[163,262,198],{"class":173},[163,264,266],{"class":165,"line":265},5,[163,267,269],{"emptyLinePlaceholder":268},true,"\n",[163,271,273],{"class":165,"line":272},6,[163,274,276],{"class":275},"sutJx","\u002F** Typed alias — DI resolves by TYPE name, and `AuthorOrm` is the container's key. *\u002F\n",[163,278,280,284,288,292,294,297,300],{"class":165,"line":279},7,[163,281,283],{"class":282},"sbsja","type",[163,285,287],{"class":286},"sbgvK"," AuthorOrm",[163,289,291],{"class":290},"smGrS"," =",[163,293,211],{"class":286},[163,295,296],{"class":173},"\u003C",[163,298,299],{"class":286},"Author",[163,301,302],{"class":173},">;\n",[163,304,306],{"class":165,"line":305},8,[163,307,269],{"emptyLinePlaceholder":268},[163,309,311,314,317,320,323,326,329,332],{"class":165,"line":310},9,[163,312,313],{"class":169},"export",[163,315,316],{"class":169}," default",[163,318,319],{"class":282}," class",[163,321,322],{"class":286}," PostPresenter",[163,324,325],{"class":282}," extends",[163,327,178],{"class":328},"sGLFI",[163,330,331],{"class":177},"(Post) ",[163,333,334],{"class":173},"{\n",[163,336,338,341,344,347,351,354,356,359,361,365,369,372],{"class":165,"line":337},10,[163,339,340],{"class":282},"  constructor",[163,342,343],{"class":173},"(",[163,345,346],{"class":282},"private",[163,348,350],{"class":349},"s99_P"," authorOrm",[163,352,353],{"class":290},":",[163,355,287],{"class":286},[163,357,358],{"class":173},")",[163,360,174],{"class":173},[163,362,364],{"class":363},"s_hVV"," super",[163,366,368],{"class":367},"skxfh","()",[163,370,371],{"class":173},";",[163,373,374],{"class":173}," }\n",[163,376,378],{"class":165,"line":377},11,[163,379,269],{"emptyLinePlaceholder":268},[163,381,383,387,389,392,394,397,400,402,404,408,411],{"class":165,"line":382},12,[163,384,386],{"class":385},"sVXei","  excerpt",[163,388,343],{"class":173},[163,390,391],{"class":349},"posts",[163,393,353],{"class":290},[163,395,396],{"class":286}," Post",[163,398,399],{"class":177},"[]",[163,401,358],{"class":173},[163,403,353],{"class":290},[163,405,407],{"class":406},"sZMiF"," string",[163,409,410],{"class":177},"[] ",[163,412,334],{"class":173},[163,414,416,419,422,425,428,430,432,435,437,440,443,445,448,450,453,455,459,462,465,468],{"class":165,"line":415},13,[163,417,418],{"class":169},"    return",[163,420,421],{"class":177}," posts",[163,423,424],{"class":173},".",[163,426,427],{"class":328},"map",[163,429,343],{"class":367},[163,431,343],{"class":173},[163,433,434],{"class":349},"post",[163,436,358],{"class":173},[163,438,439],{"class":282}," =>",[163,441,442],{"class":177}," post",[163,444,424],{"class":173},[163,446,447],{"class":177},"body",[163,449,424],{"class":173},[163,451,452],{"class":328},"slice",[163,454,343],{"class":367},[163,456,458],{"class":457},"srdBf","0",[163,460,461],{"class":173},",",[163,463,464],{"class":457}," 200",[163,466,467],{"class":367},"))",[163,469,198],{"class":173},[163,471,473],{"class":165,"line":472},14,[163,474,475],{"class":173},"  }\n",[163,477,479],{"class":165,"line":478},15,[163,480,269],{"emptyLinePlaceholder":268},[163,482,484],{"class":165,"line":483},16,[163,485,486],{"class":275},"  \u002F** One read for the page, not one per row — which is why the page is the argument. *\u002F\n",[163,488,490,493,496,498,500,502,504,506,508,510,513,515,518,520,523],{"class":165,"line":489},17,[163,491,492],{"class":282},"  async",[163,494,495],{"class":385}," authorName",[163,497,343],{"class":173},[163,499,391],{"class":349},[163,501,353],{"class":290},[163,503,396],{"class":286},[163,505,399],{"class":177},[163,507,358],{"class":173},[163,509,353],{"class":290},[163,511,512],{"class":286}," Promise",[163,514,296],{"class":173},[163,516,517],{"class":406},"string",[163,519,399],{"class":177},[163,521,522],{"class":173},">",[163,524,525],{"class":173}," {\n",[163,527,529,532,535,537,540,543,546,548,550,552,554,556,558,560,562,564,567,569,572,575],{"class":165,"line":528},18,[163,530,531],{"class":282},"    const",[163,533,534],{"class":363}," ids",[163,536,291],{"class":290},[163,538,539],{"class":367}," [",[163,541,542],{"class":290},"...new",[163,544,545],{"class":328}," Set",[163,547,343],{"class":367},[163,549,391],{"class":177},[163,551,424],{"class":173},[163,553,427],{"class":328},[163,555,343],{"class":367},[163,557,343],{"class":173},[163,559,144],{"class":349},[163,561,358],{"class":173},[163,563,439],{"class":282},[163,565,566],{"class":177}," p",[163,568,424],{"class":173},[163,570,571],{"class":177},"authorId",[163,573,574],{"class":367},"))]",[163,576,198],{"class":173},[163,578,580,582,585,587,590,592,594,597,599,602,604,606,608,610,613,615,617,621,623,626,628,631,633,635,638],{"class":165,"line":579},19,[163,581,531],{"class":282},[163,583,584],{"class":363}," authors",[163,586,291],{"class":290},[163,588,589],{"class":169}," await",[163,591,512],{"class":406},[163,593,424],{"class":173},[163,595,596],{"class":328},"all",[163,598,343],{"class":367},[163,600,601],{"class":177},"ids",[163,603,424],{"class":173},[163,605,427],{"class":328},[163,607,343],{"class":367},[163,609,343],{"class":173},[163,611,612],{"class":349},"id",[163,614,358],{"class":173},[163,616,439],{"class":282},[163,618,620],{"class":619},"s39Yj"," this",[163,622,424],{"class":173},[163,624,625],{"class":177},"authorOrm",[163,627,424],{"class":173},[163,629,630],{"class":328},"findById",[163,632,343],{"class":367},[163,634,612],{"class":177},[163,636,637],{"class":367},")))",[163,639,198],{"class":173},[163,641,643,645,648,650,653,656,658,661,663,666,668,671,673,675,677,679,681,684,686,688,690,692,695,697,699,701,704,706,708,711,714],{"class":165,"line":642},20,[163,644,531],{"class":282},[163,646,647],{"class":363}," byId",[163,649,291],{"class":290},[163,651,652],{"class":290}," new",[163,654,655],{"class":328}," Map",[163,657,343],{"class":367},[163,659,660],{"class":177},"authors",[163,662,424],{"class":173},[163,664,665],{"class":328},"filter",[163,667,343],{"class":367},[163,669,670],{"class":177},"Boolean",[163,672,358],{"class":367},[163,674,424],{"class":173},[163,676,427],{"class":328},[163,678,343],{"class":367},[163,680,343],{"class":173},[163,682,683],{"class":349},"a",[163,685,358],{"class":173},[163,687,439],{"class":282},[163,689,539],{"class":367},[163,691,683],{"class":177},[163,693,694],{"class":290},"!",[163,696,424],{"class":173},[163,698,612],{"class":177},[163,700,461],{"class":173},[163,702,703],{"class":177}," a",[163,705,694],{"class":290},[163,707,424],{"class":173},[163,709,710],{"class":177},"name",[163,712,713],{"class":367},"]))",[163,715,198],{"class":173},[163,717,719,721,723,725,727,729,731,733,735,737,739,741,744,746,748,750,752,755,758,760,763,765,767],{"class":165,"line":718},21,[163,720,418],{"class":169},[163,722,421],{"class":177},[163,724,424],{"class":173},[163,726,427],{"class":328},[163,728,343],{"class":367},[163,730,343],{"class":173},[163,732,434],{"class":349},[163,734,358],{"class":173},[163,736,439],{"class":282},[163,738,647],{"class":177},[163,740,424],{"class":173},[163,742,743],{"class":328},"get",[163,745,343],{"class":367},[163,747,434],{"class":177},[163,749,424],{"class":173},[163,751,571],{"class":177},[163,753,754],{"class":367},") ",[163,756,757],{"class":290},"??",[163,759,188],{"class":187},[163,761,762],{"class":191},"Anonymous",[163,764,195],{"class":187},[163,766,358],{"class":367},[163,768,198],{"class":173},[163,770,772],{"class":165,"line":771},22,[163,773,475],{"class":173},[163,775,777],{"class":165,"line":776},23,[163,778,779],{"class":173},"}\n",[144,781,782,783,786,787,790],{},"Place the class in the Frond's ",[160,784,785],{},"presenters\u002F"," directory. The scan registers it as\n",[160,788,789],{},"PostPresenter",". Methods may be synchronous or asynchronous, and constructor dependencies\nare resolved by type.",[792,793,795],"h2",{"id":794},"why-it-is-not-a-field-on-the-entity","Why it is not a field on the entity",[144,797,798,801,802,804,805,808],{},[160,799,800],{},"excerpt"," is computed from ",[160,803,447],{}," and does not need to be stored. ",[160,806,807],{},"authorName"," comes from\nanother entity; computing it at read time avoids duplicating the value when an author is\nrenamed.",[144,810,811],{},"Use a presenter when the calculation needs I\u002FO, another entity, or both. It is a class so\nthat dependencies such as an ORM can be injected.",[792,813,815],{"id":814},"application-across-surfaces","Application across surfaces",[144,817,818,819,822,823,822,826,828],{},"A computed field is added to the entity's output on all four surfaces: the envelope\n(",[160,820,821],{},"useQuery",", ",[160,824,825],{},"useCommand",[160,827,110],{},"), the REST catch-all, a standalone REST host, and\nGraphQL. No additional configuration is required.",[153,830,832],{"className":155,"code":831,"language":157,"meta":158,"style":158},"const { items } = await useQuery\u003CPost>(Post, 'list');\nitems[0].excerpt;      \u002F\u002F ← present, exactly as in a GraphQL query\n",[160,833,834,876],{"__ignoreMap":158},[163,835,836,839,841,844,846,848,850,853,855,858,860,863,865,867,870,872,874],{"class":165,"line":166},[163,837,838],{"class":282},"const",[163,840,174],{"class":173},[163,842,843],{"class":363}," items",[163,845,181],{"class":173},[163,847,291],{"class":290},[163,849,589],{"class":169},[163,851,852],{"class":328}," useQuery",[163,854,296],{"class":173},[163,856,857],{"class":286},"Post",[163,859,522],{"class":173},[163,861,862],{"class":177},"(Post",[163,864,461],{"class":173},[163,866,188],{"class":187},[163,868,869],{"class":191},"list",[163,871,195],{"class":187},[163,873,358],{"class":177},[163,875,198],{"class":173},[163,877,878,881,883,886,888,890,892],{"class":165,"line":201},[163,879,880],{"class":177},"items[",[163,882,458],{"class":457},[163,884,885],{"class":177},"]",[163,887,424],{"class":173},[163,889,800],{"class":177},[163,891,371],{"class":173},[163,893,894],{"class":275},"      \u002F\u002F ← present, exactly as in a GraphQL query\n",[896,897,898],"blockquote",{},[144,899,900,901,424],{},"Enrichment is now applied in the shared façade. Earlier versions applied it separately\nin the REST and GraphQL projections, and not in ",[160,902,821],{},[792,904,906],{"id":905},"where-it-stops-a-named-view","Where it stops: a named view",[144,908,909],{},"When an operation names an output view, only fields in that view are returned. A computed\nfield not listed there is excluded:",[153,911,913],{"className":155,"code":912,"language":157,"meta":158,"style":158},"Crud(Post, { list: PostCard })   \u002F\u002F list emits PostCard, and only PostCard\n",[160,914,915],{"__ignoreMap":158},[163,916,917,920,922,924,926,929,931,934,937,940],{"class":165,"line":166},[163,918,919],{"class":328},"Crud",[163,921,862],{"class":177},[163,923,461],{"class":173},[163,925,174],{"class":173},[163,927,928],{"class":367}," list",[163,930,353],{"class":173},[163,932,933],{"class":177}," PostCard ",[163,935,936],{"class":173},"}",[163,938,939],{"class":177},")   ",[163,941,942],{"class":275},"\u002F\u002F list emits PostCard, and only PostCard\n",[144,944,945,946,949],{},"Without a named view, computed fields are added to the entity's output. The ",[683,947,948],{"href":49},"boundary\naxis"," still applies to the entity's own fields.",[792,951,953],{"id":952},"what-it-is-not","What it is not",[955,956,957,975,989,998],"ul",{},[958,959,960,963,964,967,968,971,972,424],"li",{},[148,961,962],{},"Not a serializer."," What may leave at all is the ",[160,965,966],{},"boundary"," axis; what a given\naudience sees is a ",[683,969,970],{"href":53},"view",". A presenter only ",[148,973,974],{},"adds",[958,976,977,980,981,984,985,424],{},[148,978,979],{},"Not a place for business rules."," A computed field is a read. A transition\n(",[160,982,983],{},"publish",") is ",[683,986,988],{"href":987},"\u002Fdocs\u002Fbusiness\u002Fhandlers#a-state-changes-through-an-operation-never-through-a-field-write","an operation, not a field\nwrite",[958,990,991,994,995,997],{},[148,992,993],{},"Not automatically optimized."," A method receives the whole page, which allows reads\nto be batched. Calling ",[160,996,630],{}," in each iteration still produces N reads.",[958,999,1000,1003,1004,1007],{},[148,1001,1002],{},"No silent failures."," An error in a computed field produces ",[160,1005,1006],{},"INTERNAL_ERROR"," and names\nthe affected field.",[144,1009,1010,1011,1013],{},"Next: ",[683,1012,77],{"href":78}," — resolving parameters by type.",[1015,1016,1017],"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 .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 pre.shiki code .sbsja, html code.shiki .sbsja{--shiki-light:#9C3EDA;--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sbgvK, html code.shiki .sbgvK{--shiki-light:#E2931D;--shiki-default:#6F42C1;--shiki-dark:#B392F0}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 .s99_P, html code.shiki .s99_P{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#E36209;--shiki-default-font-style:inherit;--shiki-dark:#FFAB70;--shiki-dark-font-style:inherit}html pre.shiki code .s_hVV, html code.shiki .s_hVV{--shiki-light:#90A4AE;--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 .sVXei, html code.shiki .sVXei{--shiki-light:#E53935;--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZMiF, html code.shiki .sZMiF{--shiki-light:#E2931D;--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 .s39Yj, html code.shiki .s39Yj{--shiki-light:#39ADB5;--shiki-default:#005CC5;--shiki-dark:#79B8FF}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);}",{"title":158,"searchDepth":201,"depth":201,"links":1019},[1020,1021,1022,1023],{"id":794,"depth":201,"text":795},{"id":814,"depth":201,"text":815},{"id":905,"depth":201,"text":906},{"id":952,"depth":201,"text":953},"Add computed fields to entity outputs with dependency injection and batch processing.","md",{},{"title":73,"description":1024},"Lc0eeeq_zH0ealIhVKnnPFkSbnGQUnUR2dLvhtAsJqQ",1786637819130]