[{"data":1,"prerenderedAt":2930},["ShallowReactive",2],{"navigation_docs":3,"-apps-reference-decorators":213,"-apps-reference-decorators-surround":2925},[4,142],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":36},"Kinotic Apps","i-lucide-rocket","\u002Fapps","01.apps",[10,14,18,37,58,91,102,122,127],{"title":11,"path":12,"stem":13},"Introduction","\u002Fapps\u002Fintroduction","01.apps\u002F01.introduction",{"title":15,"path":16,"stem":17},"Quick Start","\u002Fapps\u002Fquick-start","01.apps\u002F02.quick-start",{"title":19,"icon":20,"path":21,"stem":22,"children":23,"page":36},"Application Structure","i-lucide-folder-tree","\u002Fapps\u002Fapplication-structure","01.apps\u002F03.application-structure",[24,28,32],{"title":25,"path":26,"stem":27},"Overview","\u002Fapps\u002Fapplication-structure\u002Foverview","01.apps\u002F03.application-structure\u002F01.overview",{"title":29,"path":30,"stem":31},"Applications and Projects","\u002Fapps\u002Fapplication-structure\u002Fapplications-and-projects","01.apps\u002F03.application-structure\u002F02.applications-and-projects",{"title":33,"path":34,"stem":35},"Artifact Types","\u002Fapps\u002Fapplication-structure\u002Fartifact-types","01.apps\u002F03.application-structure\u002F03.artifact-types",false,{"title":38,"icon":39,"path":40,"stem":41,"children":42,"page":36},"Services","i-lucide-network","\u002Fapps\u002Fservices","01.apps\u002F04.services",[43,46,50,54],{"title":25,"path":44,"stem":45},"\u002Fapps\u002Fservices\u002Foverview","01.apps\u002F04.services\u002F01.overview",{"title":47,"path":48,"stem":49},"Publishing Services","\u002Fapps\u002Fservices\u002Fpublishing-services","01.apps\u002F04.services\u002F02.publishing-services",{"title":51,"path":52,"stem":53},"Service Proxies","\u002Fapps\u002Fservices\u002Fservice-proxies","01.apps\u002F04.services\u002F03.service-proxies",{"title":55,"path":56,"stem":57},"Streaming","\u002Fapps\u002Fservices\u002Fstreaming","01.apps\u002F04.services\u002F04.streaming",{"title":59,"icon":60,"path":61,"stem":62,"children":63,"page":36},"Persistence","i-lucide-database","\u002Fapps\u002Fpersistence","01.apps\u002F05.persistence",[64,67,71,75,79,83,87],{"title":25,"path":65,"stem":66},"\u002Fapps\u002Fpersistence\u002Foverview","01.apps\u002F05.persistence\u002F01.overview",{"title":68,"path":69,"stem":70},"Defining Entities","\u002Fapps\u002Fpersistence\u002Fdefining-entities","01.apps\u002F05.persistence\u002F02.defining-entities",{"title":72,"path":73,"stem":74},"Entity Decorators","\u002Fapps\u002Fpersistence\u002Fentity-decorators","01.apps\u002F05.persistence\u002F03.entity-decorators",{"title":76,"path":77,"stem":78},"CRUD Operations","\u002Fapps\u002Fpersistence\u002Fcrud-operations","01.apps\u002F05.persistence\u002F04.crud-operations",{"title":80,"path":81,"stem":82},"Named Queries","\u002Fapps\u002Fpersistence\u002Fnamed-queries","01.apps\u002F05.persistence\u002F05.named-queries",{"title":84,"path":85,"stem":86},"Multi-Tenancy","\u002Fapps\u002Fpersistence\u002Fmulti-tenancy","01.apps\u002F05.persistence\u002F06.multi-tenancy",{"title":88,"path":89,"stem":90},"Migrations","\u002Fapps\u002Fpersistence\u002Fmigrations","01.apps\u002F05.persistence\u002F07.migrations",{"title":92,"icon":93,"path":94,"stem":95,"children":96,"page":36},"Security","i-lucide-shield-check","\u002Fapps\u002Fsecurity","01.apps\u002F06.security",[97],{"title":98,"path":99,"stem":100,"icon":101},"Authentication","\u002Fapps\u002Fsecurity\u002Fauthentication","01.apps\u002F06.security\u002F01.authentication","i-lucide-key-round",{"title":103,"icon":104,"path":105,"stem":106,"children":107,"page":36},"Deployment","i-lucide-cloud-upload","\u002Fapps\u002Fdeployment","01.apps\u002F07.deployment",[108,113,118],{"title":109,"path":110,"stem":111,"icon":112},"Deployment Workflow","\u002Fapps\u002Fdeployment\u002Fworkflow","01.apps\u002F07.deployment\u002F01.workflow","i-lucide-git-branch",{"title":114,"path":115,"stem":116,"icon":117},"Environments","\u002Fapps\u002Fdeployment\u002Fenvironments","01.apps\u002F07.deployment\u002F02.environments","i-lucide-server",{"title":119,"path":120,"stem":121,"icon":6},"Push to Deploy","\u002Fapps\u002Fdeployment\u002Fpush-to-deploy","01.apps\u002F07.deployment\u002F03.push-to-deploy",{"title":123,"path":124,"stem":125,"icon":126},"CLI Reference","\u002Fapps\u002Fcli-reference","01.apps\u002F08.cli-reference","i-lucide-terminal",{"title":128,"icon":129,"path":130,"stem":131,"children":132,"page":36},"Reference","i-lucide-book-open","\u002Fapps\u002Freference","01.apps\u002F09.reference",[133,138],{"title":134,"path":135,"stem":136,"icon":137},"Decorators Reference","\u002Fapps\u002Freference\u002Fdecorators","01.apps\u002F09.reference\u002F01.decorators","i-lucide-at-sign",{"title":139,"path":140,"stem":141,"icon":60},"Migration SQL Grammar","\u002Fapps\u002Freference\u002Fmigration-sql-grammar","01.apps\u002F09.reference\u002F02.migration-sql-grammar",{"title":143,"icon":117,"path":144,"stem":145,"children":146,"page":36},"Kinotic OS","\u002Fplatform","02.platform",[147,152,156,161,166,171,175,180,185,190,195],{"title":148,"path":149,"stem":150,"icon":151},"System Architecture","\u002Fplatform\u002Farchitecture","02.platform\u002F01.architecture","i-lucide-boxes",{"title":153,"path":154,"stem":155,"icon":6},"Deployment Guide","\u002Fplatform\u002Fdeployment-guide","02.platform\u002F02.deployment-guide",{"title":157,"path":158,"stem":159,"icon":160},"Configuration","\u002Fplatform\u002Fconfiguration","02.platform\u002F03.configuration","i-lucide-settings",{"title":162,"path":163,"stem":164,"icon":165},"Organization Management","\u002Fplatform\u002Forganization-management","02.platform\u002F04.organization-management","i-lucide-building",{"title":167,"path":168,"stem":169,"icon":170},"System Security","\u002Fplatform\u002Fsystem-security","02.platform\u002F05.system-security","i-lucide-shield",{"title":172,"path":173,"stem":174,"icon":93},"Defense in Depth","\u002Fplatform\u002Fdefense-in-depth","02.platform\u002F06.defense-in-depth",{"title":176,"path":177,"stem":178,"icon":179},"MCP Tools","\u002Fplatform\u002Fmcp-tools","02.platform\u002F07.mcp-tools","i-lucide-bot",{"title":181,"path":182,"stem":183,"icon":184},"Observability","\u002Fplatform\u002Fobservability","02.platform\u002F08.observability","i-lucide-activity",{"title":186,"path":187,"stem":188,"icon":189},"Contributing","\u002Fplatform\u002Fcontributing","02.platform\u002F09.contributing","i-lucide-git-pull-request",{"title":191,"path":192,"stem":193,"icon":194},"System Migrations","\u002Fplatform\u002Fsystem-migrations","02.platform\u002F10.system-migrations","i-lucide-database-zap",{"title":128,"icon":129,"path":196,"stem":197,"children":198,"page":36},"\u002Fplatform\u002Freference","02.platform\u002F11.reference",[199,204,209],{"title":200,"path":201,"stem":202,"icon":203},"CRI Format","\u002Fplatform\u002Freference\u002Fcri-format","02.platform\u002F11.reference\u002F01.cri-format","i-lucide-link",{"title":205,"path":206,"stem":207,"icon":208},"Grind Jobs","\u002Fplatform\u002Freference\u002Fgrind-jobs","02.platform\u002F11.reference\u002F02.grind-jobs","i-lucide-workflow",{"title":210,"path":211,"stem":212,"icon":151},"Project Publishing Design","\u002Fplatform\u002Freference\u002Fproject-publishing-design","02.platform\u002F11.reference\u002F03.project-publishing-design",{"id":214,"title":134,"body":215,"description":2918,"extension":2919,"links":2920,"meta":2921,"navigation":2922,"path":135,"seo":2923,"stem":136,"__hash__":2924},"docs\u002F01.apps\u002F09.reference\u002F01.decorators.md",{"type":216,"value":217,"toc":2879},"minimark",[218,222,231,238,241,435,441,469,472,476,482,493,579,585,592,667,669,673,679,682,786,792,798,903,909,912,1063,1085,1091,1094,1199,1205,1208,1327,1333,1336,1447,1449,1453,1459,1462,1591,1595,1603,1605,1609,1615,1621,1734,1736,1740,1746,1752,1876,1878,1882,1888,1894,2039,2041,2045,2051,2067,2177,2179,2183,2188,2194,2200,2394,2398,2430,2436,2454,2530,2536,2539,2620,2626,2629,2744,2750,2753,2759,2875],[219,220,72],"h2",{"id":221},"entity-decorators",[223,224,225,226,230],"p",{},"These decorators are imported from ",[227,228,229],"code",{},"@kinotic-ai\u002Fpersistence",".",[232,233,235],"h3",{"id":234},"entitymultitenancytype-entitytype",[227,236,237],{},"@Entity(multiTenancyType?, entityType?)",[223,239,240],{},"Marks a class as a Kinotic entity. Required for any class that should be persisted and managed by the entity service system.",[242,243,248],"pre",{"className":244,"code":245,"language":246,"meta":247,"style":247},"language-typescript shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { Entity, MultiTenancyType, EntityType } from '@kinotic-ai\u002Fpersistence'\n\n@Entity()\nexport class Product {\n    \u002F\u002F ...\n}\n\n@Entity(MultiTenancyType.SHARED)\nexport class TenantProduct {\n    \u002F\u002F ...\n}\n\n@Entity(MultiTenancyType.NONE, EntityType.STREAM)\nexport class SensorReading {\n    \u002F\u002F ...\n}\n","typescript","",[227,249,250,293,300,313,330,337,343,348,363,375,380,385,390,413,425,430],{"__ignoreMap":247},[251,252,255,259,263,267,270,273,275,278,281,284,287,290],"span",{"class":253,"line":254},"line",1,[251,256,258],{"class":257},"s7zQu","import",[251,260,262],{"class":261},"sMK4o"," {",[251,264,266],{"class":265},"sTEyZ"," Entity",[251,268,269],{"class":261},",",[251,271,272],{"class":265}," MultiTenancyType",[251,274,269],{"class":261},[251,276,277],{"class":265}," EntityType",[251,279,280],{"class":261}," }",[251,282,283],{"class":257}," from",[251,285,286],{"class":261}," '",[251,288,229],{"class":289},"sfazB",[251,291,292],{"class":261},"'\n",[251,294,296],{"class":253,"line":295},2,[251,297,299],{"emptyLinePlaceholder":298},true,"\n",[251,301,303,306,310],{"class":253,"line":302},3,[251,304,305],{"class":261},"@",[251,307,309],{"class":308},"s2Zo4","Entity",[251,311,312],{"class":265},"()\n",[251,314,316,319,323,327],{"class":253,"line":315},4,[251,317,318],{"class":257},"export",[251,320,322],{"class":321},"spNyl"," class",[251,324,326],{"class":325},"sBMFI"," Product",[251,328,329],{"class":261}," {\n",[251,331,333],{"class":253,"line":332},5,[251,334,336],{"class":335},"sHwdD","    \u002F\u002F ...\n",[251,338,340],{"class":253,"line":339},6,[251,341,342],{"class":261},"}\n",[251,344,346],{"class":253,"line":345},7,[251,347,299],{"emptyLinePlaceholder":298},[251,349,351,353,355,358,360],{"class":253,"line":350},8,[251,352,305],{"class":261},[251,354,309],{"class":308},[251,356,357],{"class":265},"(MultiTenancyType",[251,359,230],{"class":261},[251,361,362],{"class":265},"SHARED)\n",[251,364,366,368,370,373],{"class":253,"line":365},9,[251,367,318],{"class":257},[251,369,322],{"class":321},[251,371,372],{"class":325}," TenantProduct",[251,374,329],{"class":261},[251,376,378],{"class":253,"line":377},10,[251,379,336],{"class":335},[251,381,383],{"class":253,"line":382},11,[251,384,342],{"class":261},[251,386,388],{"class":253,"line":387},12,[251,389,299],{"emptyLinePlaceholder":298},[251,391,393,395,397,399,401,404,406,408,410],{"class":253,"line":392},13,[251,394,305],{"class":261},[251,396,309],{"class":308},[251,398,357],{"class":265},[251,400,230],{"class":261},[251,402,403],{"class":265},"NONE",[251,405,269],{"class":261},[251,407,277],{"class":265},[251,409,230],{"class":261},[251,411,412],{"class":265},"STREAM)\n",[251,414,416,418,420,423],{"class":253,"line":415},14,[251,417,318],{"class":257},[251,419,322],{"class":321},[251,421,422],{"class":325}," SensorReading",[251,424,329],{"class":261},[251,426,428],{"class":253,"line":427},15,[251,429,336],{"class":335},[251,431,433],{"class":253,"line":432},16,[251,434,342],{"class":261},[223,436,437],{},[438,439,440],"strong",{},"Parameters:",[442,443,444,458],"ul",{},[445,446,447,450,451,454,455],"li",{},[227,448,449],{},"multiTenancyType"," — ",[227,452,453],{},"MultiTenancyType.NONE"," (default) or ",[227,456,457],{},"MultiTenancyType.SHARED",[445,459,460,450,463,454,466],{},[227,461,462],{},"entityType",[227,464,465],{},"EntityType.TABLE",[227,467,468],{},"EntityType.STREAM",[470,471],"hr",{},[219,473,475],{"id":474},"id-decorators","ID Decorators",[232,477,479],{"id":478},"autogeneratedid",[227,480,481],{},"@AutoGeneratedId",[223,483,484,485,488,489,492],{},"Marks a field as a server-generated ID. The field type must be ",[227,486,487],{},"string | null"," since the ID is ",[227,490,491],{},"null"," before the entity is saved.",[242,494,496],{"className":244,"code":495,"language":246,"meta":247,"style":247},"import { Entity, AutoGeneratedId } from '@kinotic-ai\u002Fpersistence'\n\n@Entity()\nexport class Product {\n    @AutoGeneratedId\n    id: string | null = null\n}\n",[227,497,498,521,525,533,543,551,575],{"__ignoreMap":247},[251,499,500,502,504,506,508,511,513,515,517,519],{"class":253,"line":254},[251,501,258],{"class":257},[251,503,262],{"class":261},[251,505,266],{"class":265},[251,507,269],{"class":261},[251,509,510],{"class":265}," AutoGeneratedId",[251,512,280],{"class":261},[251,514,283],{"class":257},[251,516,286],{"class":261},[251,518,229],{"class":289},[251,520,292],{"class":261},[251,522,523],{"class":253,"line":295},[251,524,299],{"emptyLinePlaceholder":298},[251,526,527,529,531],{"class":253,"line":302},[251,528,305],{"class":261},[251,530,309],{"class":308},[251,532,312],{"class":265},[251,534,535,537,539,541],{"class":253,"line":315},[251,536,318],{"class":257},[251,538,322],{"class":321},[251,540,326],{"class":325},[251,542,329],{"class":261},[251,544,545,548],{"class":253,"line":332},[251,546,547],{"class":261},"    @",[251,549,550],{"class":265},"AutoGeneratedId\n",[251,552,553,557,560,563,566,569,572],{"class":253,"line":339},[251,554,556],{"class":555},"swJcz","    id",[251,558,559],{"class":261},":",[251,561,562],{"class":325}," string",[251,564,565],{"class":261}," |",[251,567,568],{"class":325}," null",[251,570,571],{"class":261}," =",[251,573,574],{"class":261}," null\n",[251,576,577],{"class":253,"line":345},[251,578,342],{"class":261},[232,580,582],{"id":581},"id",[227,583,584],{},"@Id",[223,586,587,588,591],{},"Marks a field as a manually-assigned ID. The field type is ",[227,589,590],{},"string"," since the caller is responsible for providing the value.",[242,593,595],{"className":244,"code":594,"language":246,"meta":247,"style":247},"import { Entity, Id } from '@kinotic-ai\u002Fpersistence'\n\n@Entity()\nexport class Product {\n    @Id\n    sku: string = ''\n}\n",[227,596,597,620,624,632,642,649,663],{"__ignoreMap":247},[251,598,599,601,603,605,607,610,612,614,616,618],{"class":253,"line":254},[251,600,258],{"class":257},[251,602,262],{"class":261},[251,604,266],{"class":265},[251,606,269],{"class":261},[251,608,609],{"class":265}," Id",[251,611,280],{"class":261},[251,613,283],{"class":257},[251,615,286],{"class":261},[251,617,229],{"class":289},[251,619,292],{"class":261},[251,621,622],{"class":253,"line":295},[251,623,299],{"emptyLinePlaceholder":298},[251,625,626,628,630],{"class":253,"line":302},[251,627,305],{"class":261},[251,629,309],{"class":308},[251,631,312],{"class":265},[251,633,634,636,638,640],{"class":253,"line":315},[251,635,318],{"class":257},[251,637,322],{"class":321},[251,639,326],{"class":325},[251,641,329],{"class":261},[251,643,644,646],{"class":253,"line":332},[251,645,547],{"class":261},[251,647,648],{"class":265},"Id\n",[251,650,651,654,656,658,660],{"class":253,"line":339},[251,652,653],{"class":555},"    sku",[251,655,559],{"class":261},[251,657,562],{"class":325},[251,659,571],{"class":261},[251,661,662],{"class":261}," ''\n",[251,664,665],{"class":253,"line":345},[251,666,342],{"class":261},[470,668],{},[219,670,672],{"id":671},"field-decorators","Field Decorators",[232,674,676],{"id":675},"notnull",[227,677,678],{},"@NotNull",[223,680,681],{},"Marks a field as required. The persistence layer will reject entities where this field is missing or null.",[242,683,685],{"className":244,"code":684,"language":246,"meta":247,"style":247},"import { Entity, AutoGeneratedId, NotNull } from '@kinotic-ai\u002Fpersistence'\n\n@Entity()\nexport class Product {\n    @AutoGeneratedId\n    id: string | null = null\n\n    @NotNull\n    name: string = ''\n}\n",[227,686,687,714,718,726,736,742,758,762,769,782],{"__ignoreMap":247},[251,688,689,691,693,695,697,699,701,704,706,708,710,712],{"class":253,"line":254},[251,690,258],{"class":257},[251,692,262],{"class":261},[251,694,266],{"class":265},[251,696,269],{"class":261},[251,698,510],{"class":265},[251,700,269],{"class":261},[251,702,703],{"class":265}," NotNull",[251,705,280],{"class":261},[251,707,283],{"class":257},[251,709,286],{"class":261},[251,711,229],{"class":289},[251,713,292],{"class":261},[251,715,716],{"class":253,"line":295},[251,717,299],{"emptyLinePlaceholder":298},[251,719,720,722,724],{"class":253,"line":302},[251,721,305],{"class":261},[251,723,309],{"class":308},[251,725,312],{"class":265},[251,727,728,730,732,734],{"class":253,"line":315},[251,729,318],{"class":257},[251,731,322],{"class":321},[251,733,326],{"class":325},[251,735,329],{"class":261},[251,737,738,740],{"class":253,"line":332},[251,739,547],{"class":261},[251,741,550],{"class":265},[251,743,744,746,748,750,752,754,756],{"class":253,"line":339},[251,745,556],{"class":555},[251,747,559],{"class":261},[251,749,562],{"class":325},[251,751,565],{"class":261},[251,753,568],{"class":325},[251,755,571],{"class":261},[251,757,574],{"class":261},[251,759,760],{"class":253,"line":345},[251,761,299],{"emptyLinePlaceholder":298},[251,763,764,766],{"class":253,"line":350},[251,765,547],{"class":261},[251,767,768],{"class":265},"NotNull\n",[251,770,771,774,776,778,780],{"class":253,"line":365},[251,772,773],{"class":555},"    name",[251,775,559],{"class":261},[251,777,562],{"class":325},[251,779,571],{"class":261},[251,781,662],{"class":261},[251,783,784],{"class":253,"line":377},[251,785,342],{"class":261},[232,787,789],{"id":788},"text",[227,790,791],{},"@Text",[223,793,794,795,797],{},"Enables full-text search indexing on a string field. By default, string fields are indexed as keywords (exact match only). Adding ",[227,796,791],{}," enables tokenized search.",[242,799,801],{"className":244,"code":800,"language":246,"meta":247,"style":247},"import { Entity, AutoGeneratedId, Text } from '@kinotic-ai\u002Fpersistence'\n\n@Entity()\nexport class Article {\n    @AutoGeneratedId\n    id: string | null = null\n\n    @Text\n    body: string = ''\n}\n",[227,802,803,830,834,842,853,859,875,879,886,899],{"__ignoreMap":247},[251,804,805,807,809,811,813,815,817,820,822,824,826,828],{"class":253,"line":254},[251,806,258],{"class":257},[251,808,262],{"class":261},[251,810,266],{"class":265},[251,812,269],{"class":261},[251,814,510],{"class":265},[251,816,269],{"class":261},[251,818,819],{"class":265}," Text",[251,821,280],{"class":261},[251,823,283],{"class":257},[251,825,286],{"class":261},[251,827,229],{"class":289},[251,829,292],{"class":261},[251,831,832],{"class":253,"line":295},[251,833,299],{"emptyLinePlaceholder":298},[251,835,836,838,840],{"class":253,"line":302},[251,837,305],{"class":261},[251,839,309],{"class":308},[251,841,312],{"class":265},[251,843,844,846,848,851],{"class":253,"line":315},[251,845,318],{"class":257},[251,847,322],{"class":321},[251,849,850],{"class":325}," Article",[251,852,329],{"class":261},[251,854,855,857],{"class":253,"line":332},[251,856,547],{"class":261},[251,858,550],{"class":265},[251,860,861,863,865,867,869,871,873],{"class":253,"line":339},[251,862,556],{"class":555},[251,864,559],{"class":261},[251,866,562],{"class":325},[251,868,565],{"class":261},[251,870,568],{"class":325},[251,872,571],{"class":261},[251,874,574],{"class":261},[251,876,877],{"class":253,"line":345},[251,878,299],{"emptyLinePlaceholder":298},[251,880,881,883],{"class":253,"line":350},[251,882,547],{"class":261},[251,884,885],{"class":265},"Text\n",[251,887,888,891,893,895,897],{"class":253,"line":365},[251,889,890],{"class":555},"    body",[251,892,559],{"class":261},[251,894,562],{"class":325},[251,896,571],{"class":261},[251,898,662],{"class":261},[251,900,901],{"class":253,"line":377},[251,902,342],{"class":261},[232,904,906],{"id":905},"precisionprecisiontype",[227,907,908],{},"@Precision(PrecisionType)",[223,910,911],{},"Sets the numeric precision for a number field. Controls how the value is stored in Elasticsearch.",[242,913,915],{"className":244,"code":914,"language":246,"meta":247,"style":247},"import { Entity, AutoGeneratedId, Precision, PrecisionType } from '@kinotic-ai\u002Fpersistence'\n\n@Entity()\nexport class Measurement {\n    @AutoGeneratedId\n    id: string | null = null\n\n    @Precision(PrecisionType.DOUBLE)\n    value: number = 0\n\n    @Precision(PrecisionType.LONG)\n    timestamp: number = 0\n}\n",[227,916,917,949,953,961,972,978,994,998,1013,1029,1033,1046,1059],{"__ignoreMap":247},[251,918,919,921,923,925,927,929,931,934,936,939,941,943,945,947],{"class":253,"line":254},[251,920,258],{"class":257},[251,922,262],{"class":261},[251,924,266],{"class":265},[251,926,269],{"class":261},[251,928,510],{"class":265},[251,930,269],{"class":261},[251,932,933],{"class":265}," Precision",[251,935,269],{"class":261},[251,937,938],{"class":265}," PrecisionType",[251,940,280],{"class":261},[251,942,283],{"class":257},[251,944,286],{"class":261},[251,946,229],{"class":289},[251,948,292],{"class":261},[251,950,951],{"class":253,"line":295},[251,952,299],{"emptyLinePlaceholder":298},[251,954,955,957,959],{"class":253,"line":302},[251,956,305],{"class":261},[251,958,309],{"class":308},[251,960,312],{"class":265},[251,962,963,965,967,970],{"class":253,"line":315},[251,964,318],{"class":257},[251,966,322],{"class":321},[251,968,969],{"class":325}," Measurement",[251,971,329],{"class":261},[251,973,974,976],{"class":253,"line":332},[251,975,547],{"class":261},[251,977,550],{"class":265},[251,979,980,982,984,986,988,990,992],{"class":253,"line":339},[251,981,556],{"class":555},[251,983,559],{"class":261},[251,985,562],{"class":325},[251,987,565],{"class":261},[251,989,568],{"class":325},[251,991,571],{"class":261},[251,993,574],{"class":261},[251,995,996],{"class":253,"line":345},[251,997,299],{"emptyLinePlaceholder":298},[251,999,1000,1002,1005,1008,1010],{"class":253,"line":350},[251,1001,547],{"class":261},[251,1003,1004],{"class":308},"Precision",[251,1006,1007],{"class":265},"(PrecisionType",[251,1009,230],{"class":261},[251,1011,1012],{"class":265},"DOUBLE)\n",[251,1014,1015,1018,1020,1023,1025],{"class":253,"line":365},[251,1016,1017],{"class":555},"    value",[251,1019,559],{"class":261},[251,1021,1022],{"class":325}," number",[251,1024,571],{"class":261},[251,1026,1028],{"class":1027},"sbssI"," 0\n",[251,1030,1031],{"class":253,"line":377},[251,1032,299],{"emptyLinePlaceholder":298},[251,1034,1035,1037,1039,1041,1043],{"class":253,"line":382},[251,1036,547],{"class":261},[251,1038,1004],{"class":308},[251,1040,1007],{"class":265},[251,1042,230],{"class":261},[251,1044,1045],{"class":265},"LONG)\n",[251,1047,1048,1051,1053,1055,1057],{"class":253,"line":387},[251,1049,1050],{"class":555},"    timestamp",[251,1052,559],{"class":261},[251,1054,1022],{"class":325},[251,1056,571],{"class":261},[251,1058,1028],{"class":1027},[251,1060,1061],{"class":253,"line":392},[251,1062,342],{"class":261},[223,1064,1065,1068,1069,1072,1073,1072,1076,1072,1079,1072,1082],{},[438,1066,1067],{},"Precision types:"," ",[227,1070,1071],{},"PrecisionType.INT",", ",[227,1074,1075],{},"PrecisionType.SHORT",[227,1077,1078],{},"PrecisionType.LONG",[227,1080,1081],{},"PrecisionType.FLOAT",[227,1083,1084],{},"PrecisionType.DOUBLE",[232,1086,1088],{"id":1087},"notindexed",[227,1089,1090],{},"@NotIndexed",[223,1092,1093],{},"Excludes a field from Elasticsearch indexing. The field is still stored and returned in queries, but cannot be searched or filtered on.",[242,1095,1097],{"className":244,"code":1096,"language":246,"meta":247,"style":247},"import { Entity, AutoGeneratedId, NotIndexed } from '@kinotic-ai\u002Fpersistence'\n\n@Entity()\nexport class Document {\n    @AutoGeneratedId\n    id: string | null = null\n\n    @NotIndexed\n    rawData: string = ''\n}\n",[227,1098,1099,1126,1130,1138,1149,1155,1171,1175,1182,1195],{"__ignoreMap":247},[251,1100,1101,1103,1105,1107,1109,1111,1113,1116,1118,1120,1122,1124],{"class":253,"line":254},[251,1102,258],{"class":257},[251,1104,262],{"class":261},[251,1106,266],{"class":265},[251,1108,269],{"class":261},[251,1110,510],{"class":265},[251,1112,269],{"class":261},[251,1114,1115],{"class":265}," NotIndexed",[251,1117,280],{"class":261},[251,1119,283],{"class":257},[251,1121,286],{"class":261},[251,1123,229],{"class":289},[251,1125,292],{"class":261},[251,1127,1128],{"class":253,"line":295},[251,1129,299],{"emptyLinePlaceholder":298},[251,1131,1132,1134,1136],{"class":253,"line":302},[251,1133,305],{"class":261},[251,1135,309],{"class":308},[251,1137,312],{"class":265},[251,1139,1140,1142,1144,1147],{"class":253,"line":315},[251,1141,318],{"class":257},[251,1143,322],{"class":321},[251,1145,1146],{"class":325}," Document",[251,1148,329],{"class":261},[251,1150,1151,1153],{"class":253,"line":332},[251,1152,547],{"class":261},[251,1154,550],{"class":265},[251,1156,1157,1159,1161,1163,1165,1167,1169],{"class":253,"line":339},[251,1158,556],{"class":555},[251,1160,559],{"class":261},[251,1162,562],{"class":325},[251,1164,565],{"class":261},[251,1166,568],{"class":325},[251,1168,571],{"class":261},[251,1170,574],{"class":261},[251,1172,1173],{"class":253,"line":345},[251,1174,299],{"emptyLinePlaceholder":298},[251,1176,1177,1179],{"class":253,"line":350},[251,1178,547],{"class":261},[251,1180,1181],{"class":265},"NotIndexed\n",[251,1183,1184,1187,1189,1191,1193],{"class":253,"line":365},[251,1185,1186],{"class":555},"    rawData",[251,1188,559],{"class":261},[251,1190,562],{"class":325},[251,1192,571],{"class":261},[251,1194,662],{"class":261},[251,1196,1197],{"class":253,"line":377},[251,1198,342],{"class":261},[232,1200,1202],{"id":1201},"flattened",[227,1203,1204],{},"@Flattened",[223,1206,1207],{},"Uses Elasticsearch flattened mapping for an object field. All values in the object are indexed as keywords, enabling filtering without the overhead of dynamic field mappings.",[242,1209,1211],{"className":244,"code":1210,"language":246,"meta":247,"style":247},"import { Entity, AutoGeneratedId, Flattened } from '@kinotic-ai\u002Fpersistence'\n\n@Entity()\nexport class Event {\n    @AutoGeneratedId\n    id: string | null = null\n\n    @Flattened\n    metadata: Record\u003Cstring, string> = {}\n}\n",[227,1212,1213,1240,1244,1252,1263,1269,1285,1289,1296,1323],{"__ignoreMap":247},[251,1214,1215,1217,1219,1221,1223,1225,1227,1230,1232,1234,1236,1238],{"class":253,"line":254},[251,1216,258],{"class":257},[251,1218,262],{"class":261},[251,1220,266],{"class":265},[251,1222,269],{"class":261},[251,1224,510],{"class":265},[251,1226,269],{"class":261},[251,1228,1229],{"class":265}," Flattened",[251,1231,280],{"class":261},[251,1233,283],{"class":257},[251,1235,286],{"class":261},[251,1237,229],{"class":289},[251,1239,292],{"class":261},[251,1241,1242],{"class":253,"line":295},[251,1243,299],{"emptyLinePlaceholder":298},[251,1245,1246,1248,1250],{"class":253,"line":302},[251,1247,305],{"class":261},[251,1249,309],{"class":308},[251,1251,312],{"class":265},[251,1253,1254,1256,1258,1261],{"class":253,"line":315},[251,1255,318],{"class":257},[251,1257,322],{"class":321},[251,1259,1260],{"class":325}," Event",[251,1262,329],{"class":261},[251,1264,1265,1267],{"class":253,"line":332},[251,1266,547],{"class":261},[251,1268,550],{"class":265},[251,1270,1271,1273,1275,1277,1279,1281,1283],{"class":253,"line":339},[251,1272,556],{"class":555},[251,1274,559],{"class":261},[251,1276,562],{"class":325},[251,1278,565],{"class":261},[251,1280,568],{"class":325},[251,1282,571],{"class":261},[251,1284,574],{"class":261},[251,1286,1287],{"class":253,"line":345},[251,1288,299],{"emptyLinePlaceholder":298},[251,1290,1291,1293],{"class":253,"line":350},[251,1292,547],{"class":261},[251,1294,1295],{"class":265},"Flattened\n",[251,1297,1298,1301,1303,1306,1309,1311,1313,1315,1318,1320],{"class":253,"line":365},[251,1299,1300],{"class":555},"    metadata",[251,1302,559],{"class":261},[251,1304,1305],{"class":325}," Record",[251,1307,1308],{"class":261},"\u003C",[251,1310,590],{"class":325},[251,1312,269],{"class":261},[251,1314,562],{"class":325},[251,1316,1317],{"class":261},">",[251,1319,571],{"class":261},[251,1321,1322],{"class":261}," {}\n",[251,1324,1325],{"class":253,"line":377},[251,1326,342],{"class":261},[232,1328,1330],{"id":1329},"nested",[227,1331,1332],{},"@Nested",[223,1334,1335],{},"Uses Elasticsearch nested mapping for an array of objects. Preserves the relationship between fields within each object, enabling accurate queries across object boundaries.",[242,1337,1339],{"className":244,"code":1338,"language":246,"meta":247,"style":247},"import { Entity, AutoGeneratedId, Nested } from '@kinotic-ai\u002Fpersistence'\n\n@Entity()\nexport class Order {\n    @AutoGeneratedId\n    id: string | null = null\n\n    @Nested\n    lineItems: LineItem[] = []\n}\n",[227,1340,1341,1368,1372,1380,1391,1397,1413,1417,1424,1443],{"__ignoreMap":247},[251,1342,1343,1345,1347,1349,1351,1353,1355,1358,1360,1362,1364,1366],{"class":253,"line":254},[251,1344,258],{"class":257},[251,1346,262],{"class":261},[251,1348,266],{"class":265},[251,1350,269],{"class":261},[251,1352,510],{"class":265},[251,1354,269],{"class":261},[251,1356,1357],{"class":265}," Nested",[251,1359,280],{"class":261},[251,1361,283],{"class":257},[251,1363,286],{"class":261},[251,1365,229],{"class":289},[251,1367,292],{"class":261},[251,1369,1370],{"class":253,"line":295},[251,1371,299],{"emptyLinePlaceholder":298},[251,1373,1374,1376,1378],{"class":253,"line":302},[251,1375,305],{"class":261},[251,1377,309],{"class":308},[251,1379,312],{"class":265},[251,1381,1382,1384,1386,1389],{"class":253,"line":315},[251,1383,318],{"class":257},[251,1385,322],{"class":321},[251,1387,1388],{"class":325}," Order",[251,1390,329],{"class":261},[251,1392,1393,1395],{"class":253,"line":332},[251,1394,547],{"class":261},[251,1396,550],{"class":265},[251,1398,1399,1401,1403,1405,1407,1409,1411],{"class":253,"line":339},[251,1400,556],{"class":555},[251,1402,559],{"class":261},[251,1404,562],{"class":325},[251,1406,565],{"class":261},[251,1408,568],{"class":325},[251,1410,571],{"class":261},[251,1412,574],{"class":261},[251,1414,1415],{"class":253,"line":345},[251,1416,299],{"emptyLinePlaceholder":298},[251,1418,1419,1421],{"class":253,"line":350},[251,1420,547],{"class":261},[251,1422,1423],{"class":265},"Nested\n",[251,1425,1426,1429,1431,1434,1437,1440],{"class":253,"line":365},[251,1427,1428],{"class":555},"    lineItems",[251,1430,559],{"class":261},[251,1432,1433],{"class":325}," LineItem",[251,1435,1436],{"class":265},"[] ",[251,1438,1439],{"class":261},"=",[251,1441,1442],{"class":265}," []\n",[251,1444,1445],{"class":253,"line":377},[251,1446,342],{"class":261},[470,1448],{},[219,1450,1452],{"id":1451},"relationship","Relationship",[232,1454,1456],{"id":1455},"discriminatorpropertyname",[227,1457,1458],{},"@Discriminator(propertyName)",[223,1460,1461],{},"Marks a field as a polymorphic type discriminator. Used when a field can contain different types and the system needs to determine the concrete type during deserialization.",[242,1463,1465],{"className":244,"code":1464,"language":246,"meta":247,"style":247},"import { Entity, AutoGeneratedId, Discriminator } from '@kinotic-ai\u002Fpersistence'\n\n@Entity()\nexport class Notification {\n    @AutoGeneratedId\n    id: string | null = null\n\n    @Discriminator('type')\n    payload: EmailPayload | SmsPayload | null = null\n}\n",[227,1466,1467,1494,1498,1506,1517,1523,1539,1543,1564,1587],{"__ignoreMap":247},[251,1468,1469,1471,1473,1475,1477,1479,1481,1484,1486,1488,1490,1492],{"class":253,"line":254},[251,1470,258],{"class":257},[251,1472,262],{"class":261},[251,1474,266],{"class":265},[251,1476,269],{"class":261},[251,1478,510],{"class":265},[251,1480,269],{"class":261},[251,1482,1483],{"class":265}," Discriminator",[251,1485,280],{"class":261},[251,1487,283],{"class":257},[251,1489,286],{"class":261},[251,1491,229],{"class":289},[251,1493,292],{"class":261},[251,1495,1496],{"class":253,"line":295},[251,1497,299],{"emptyLinePlaceholder":298},[251,1499,1500,1502,1504],{"class":253,"line":302},[251,1501,305],{"class":261},[251,1503,309],{"class":308},[251,1505,312],{"class":265},[251,1507,1508,1510,1512,1515],{"class":253,"line":315},[251,1509,318],{"class":257},[251,1511,322],{"class":321},[251,1513,1514],{"class":325}," Notification",[251,1516,329],{"class":261},[251,1518,1519,1521],{"class":253,"line":332},[251,1520,547],{"class":261},[251,1522,550],{"class":265},[251,1524,1525,1527,1529,1531,1533,1535,1537],{"class":253,"line":339},[251,1526,556],{"class":555},[251,1528,559],{"class":261},[251,1530,562],{"class":325},[251,1532,565],{"class":261},[251,1534,568],{"class":325},[251,1536,571],{"class":261},[251,1538,574],{"class":261},[251,1540,1541],{"class":253,"line":345},[251,1542,299],{"emptyLinePlaceholder":298},[251,1544,1545,1547,1550,1553,1556,1559,1561],{"class":253,"line":350},[251,1546,547],{"class":261},[251,1548,1549],{"class":308},"Discriminator",[251,1551,1552],{"class":265},"(",[251,1554,1555],{"class":261},"'",[251,1557,1558],{"class":289},"type",[251,1560,1555],{"class":261},[251,1562,1563],{"class":265},")\n",[251,1565,1566,1569,1571,1574,1576,1579,1581,1583,1585],{"class":253,"line":365},[251,1567,1568],{"class":555},"    payload",[251,1570,559],{"class":261},[251,1572,1573],{"class":325}," EmailPayload",[251,1575,565],{"class":261},[251,1577,1578],{"class":325}," SmsPayload",[251,1580,565],{"class":261},[251,1582,568],{"class":325},[251,1584,571],{"class":261},[251,1586,574],{"class":261},[251,1588,1589],{"class":253,"line":377},[251,1590,342],{"class":261},[223,1592,1593],{},[438,1594,440],{},[442,1596,1597],{},[445,1598,1599,1602],{},[227,1600,1601],{},"propertyName"," — The name of the property within the object that identifies its type",[470,1604],{},[219,1606,1608],{"id":1607},"multi-tenancy","Multi-tenancy",[232,1610,1612],{"id":1611},"tenantid",[227,1613,1614],{},"@TenantId",[223,1616,1617,1618,1620],{},"Marks a field as the tenant identifier. Used with ",[227,1619,457],{}," entities to partition data by tenant.",[242,1622,1624],{"className":244,"code":1623,"language":246,"meta":247,"style":247},"import { Entity, AutoGeneratedId, TenantId, MultiTenancyType } from '@kinotic-ai\u002Fpersistence'\n\n@Entity(MultiTenancyType.SHARED)\nexport class Invoice {\n    @AutoGeneratedId\n    id: string | null = null\n\n    @TenantId\n    tenantId: string = ''\n}\n",[227,1625,1626,1657,1661,1673,1684,1690,1706,1710,1717,1730],{"__ignoreMap":247},[251,1627,1628,1630,1632,1634,1636,1638,1640,1643,1645,1647,1649,1651,1653,1655],{"class":253,"line":254},[251,1629,258],{"class":257},[251,1631,262],{"class":261},[251,1633,266],{"class":265},[251,1635,269],{"class":261},[251,1637,510],{"class":265},[251,1639,269],{"class":261},[251,1641,1642],{"class":265}," TenantId",[251,1644,269],{"class":261},[251,1646,272],{"class":265},[251,1648,280],{"class":261},[251,1650,283],{"class":257},[251,1652,286],{"class":261},[251,1654,229],{"class":289},[251,1656,292],{"class":261},[251,1658,1659],{"class":253,"line":295},[251,1660,299],{"emptyLinePlaceholder":298},[251,1662,1663,1665,1667,1669,1671],{"class":253,"line":302},[251,1664,305],{"class":261},[251,1666,309],{"class":308},[251,1668,357],{"class":265},[251,1670,230],{"class":261},[251,1672,362],{"class":265},[251,1674,1675,1677,1679,1682],{"class":253,"line":315},[251,1676,318],{"class":257},[251,1678,322],{"class":321},[251,1680,1681],{"class":325}," Invoice",[251,1683,329],{"class":261},[251,1685,1686,1688],{"class":253,"line":332},[251,1687,547],{"class":261},[251,1689,550],{"class":265},[251,1691,1692,1694,1696,1698,1700,1702,1704],{"class":253,"line":339},[251,1693,556],{"class":555},[251,1695,559],{"class":261},[251,1697,562],{"class":325},[251,1699,565],{"class":261},[251,1701,568],{"class":325},[251,1703,571],{"class":261},[251,1705,574],{"class":261},[251,1707,1708],{"class":253,"line":345},[251,1709,299],{"emptyLinePlaceholder":298},[251,1711,1712,1714],{"class":253,"line":350},[251,1713,547],{"class":261},[251,1715,1716],{"class":265},"TenantId\n",[251,1718,1719,1722,1724,1726,1728],{"class":253,"line":365},[251,1720,1721],{"class":555},"    tenantId",[251,1723,559],{"class":261},[251,1725,562],{"class":325},[251,1727,571],{"class":261},[251,1729,662],{"class":261},[251,1731,1732],{"class":253,"line":377},[251,1733,342],{"class":261},[470,1735],{},[219,1737,1739],{"id":1738},"versioning","Versioning",[232,1741,1743],{"id":1742},"version",[227,1744,1745],{},"@Version",[223,1747,1748,1749,1751],{},"Enables optimistic locking for the entity. The field type must be ",[227,1750,487],{},". The persistence layer uses this field to detect concurrent modifications.",[242,1753,1755],{"className":244,"code":1754,"language":246,"meta":247,"style":247},"import { Entity, AutoGeneratedId, Version } from '@kinotic-ai\u002Fpersistence'\n\n@Entity()\nexport class Product {\n    @AutoGeneratedId\n    id: string | null = null\n\n    @Version\n    version: string | null = null\n\n    name: string = ''\n}\n",[227,1756,1757,1784,1788,1796,1806,1812,1828,1832,1839,1856,1860,1872],{"__ignoreMap":247},[251,1758,1759,1761,1763,1765,1767,1769,1771,1774,1776,1778,1780,1782],{"class":253,"line":254},[251,1760,258],{"class":257},[251,1762,262],{"class":261},[251,1764,266],{"class":265},[251,1766,269],{"class":261},[251,1768,510],{"class":265},[251,1770,269],{"class":261},[251,1772,1773],{"class":265}," Version",[251,1775,280],{"class":261},[251,1777,283],{"class":257},[251,1779,286],{"class":261},[251,1781,229],{"class":289},[251,1783,292],{"class":261},[251,1785,1786],{"class":253,"line":295},[251,1787,299],{"emptyLinePlaceholder":298},[251,1789,1790,1792,1794],{"class":253,"line":302},[251,1791,305],{"class":261},[251,1793,309],{"class":308},[251,1795,312],{"class":265},[251,1797,1798,1800,1802,1804],{"class":253,"line":315},[251,1799,318],{"class":257},[251,1801,322],{"class":321},[251,1803,326],{"class":325},[251,1805,329],{"class":261},[251,1807,1808,1810],{"class":253,"line":332},[251,1809,547],{"class":261},[251,1811,550],{"class":265},[251,1813,1814,1816,1818,1820,1822,1824,1826],{"class":253,"line":339},[251,1815,556],{"class":555},[251,1817,559],{"class":261},[251,1819,562],{"class":325},[251,1821,565],{"class":261},[251,1823,568],{"class":325},[251,1825,571],{"class":261},[251,1827,574],{"class":261},[251,1829,1830],{"class":253,"line":345},[251,1831,299],{"emptyLinePlaceholder":298},[251,1833,1834,1836],{"class":253,"line":350},[251,1835,547],{"class":261},[251,1837,1838],{"class":265},"Version\n",[251,1840,1841,1844,1846,1848,1850,1852,1854],{"class":253,"line":365},[251,1842,1843],{"class":555},"    version",[251,1845,559],{"class":261},[251,1847,562],{"class":325},[251,1849,565],{"class":261},[251,1851,568],{"class":325},[251,1853,571],{"class":261},[251,1855,574],{"class":261},[251,1857,1858],{"class":253,"line":377},[251,1859,299],{"emptyLinePlaceholder":298},[251,1861,1862,1864,1866,1868,1870],{"class":253,"line":382},[251,1863,773],{"class":555},[251,1865,559],{"class":261},[251,1867,562],{"class":325},[251,1869,571],{"class":261},[251,1871,662],{"class":261},[251,1873,1874],{"class":253,"line":387},[251,1875,342],{"class":261},[470,1877],{},[219,1879,1881],{"id":1880},"time-series","Time Series",[232,1883,1885],{"id":1884},"timereference",[227,1886,1887],{},"@TimeReference",[223,1889,1890,1891,1893],{},"Marks a field as the time reference for stream entities. Used with ",[227,1892,468],{}," to identify the timestamp field.",[242,1895,1897],{"className":244,"code":1896,"language":246,"meta":247,"style":247},"import { Entity, AutoGeneratedId, TimeReference, EntityType, MultiTenancyType } from '@kinotic-ai\u002Fpersistence'\n\n@Entity(MultiTenancyType.NONE, EntityType.STREAM)\nexport class SensorReading {\n    @AutoGeneratedId\n    id: string | null = null\n\n    @TimeReference\n    timestamp: Date = new Date()\n\n    value: number = 0\n}\n",[227,1898,1899,1934,1938,1958,1968,1974,1990,1994,2001,2019,2023,2035],{"__ignoreMap":247},[251,1900,1901,1903,1905,1907,1909,1911,1913,1916,1918,1920,1922,1924,1926,1928,1930,1932],{"class":253,"line":254},[251,1902,258],{"class":257},[251,1904,262],{"class":261},[251,1906,266],{"class":265},[251,1908,269],{"class":261},[251,1910,510],{"class":265},[251,1912,269],{"class":261},[251,1914,1915],{"class":265}," TimeReference",[251,1917,269],{"class":261},[251,1919,277],{"class":265},[251,1921,269],{"class":261},[251,1923,272],{"class":265},[251,1925,280],{"class":261},[251,1927,283],{"class":257},[251,1929,286],{"class":261},[251,1931,229],{"class":289},[251,1933,292],{"class":261},[251,1935,1936],{"class":253,"line":295},[251,1937,299],{"emptyLinePlaceholder":298},[251,1939,1940,1942,1944,1946,1948,1950,1952,1954,1956],{"class":253,"line":302},[251,1941,305],{"class":261},[251,1943,309],{"class":308},[251,1945,357],{"class":265},[251,1947,230],{"class":261},[251,1949,403],{"class":265},[251,1951,269],{"class":261},[251,1953,277],{"class":265},[251,1955,230],{"class":261},[251,1957,412],{"class":265},[251,1959,1960,1962,1964,1966],{"class":253,"line":315},[251,1961,318],{"class":257},[251,1963,322],{"class":321},[251,1965,422],{"class":325},[251,1967,329],{"class":261},[251,1969,1970,1972],{"class":253,"line":332},[251,1971,547],{"class":261},[251,1973,550],{"class":265},[251,1975,1976,1978,1980,1982,1984,1986,1988],{"class":253,"line":339},[251,1977,556],{"class":555},[251,1979,559],{"class":261},[251,1981,562],{"class":325},[251,1983,565],{"class":261},[251,1985,568],{"class":325},[251,1987,571],{"class":261},[251,1989,574],{"class":261},[251,1991,1992],{"class":253,"line":345},[251,1993,299],{"emptyLinePlaceholder":298},[251,1995,1996,1998],{"class":253,"line":350},[251,1997,547],{"class":261},[251,1999,2000],{"class":265},"TimeReference\n",[251,2002,2003,2005,2007,2010,2012,2015,2017],{"class":253,"line":365},[251,2004,1050],{"class":555},[251,2006,559],{"class":261},[251,2008,2009],{"class":325}," Date",[251,2011,571],{"class":261},[251,2013,2014],{"class":261}," new",[251,2016,2009],{"class":555},[251,2018,312],{"class":265},[251,2020,2021],{"class":253,"line":377},[251,2022,299],{"emptyLinePlaceholder":298},[251,2024,2025,2027,2029,2031,2033],{"class":253,"line":382},[251,2026,1017],{"class":555},[251,2028,559],{"class":261},[251,2030,1022],{"class":325},[251,2032,571],{"class":261},[251,2034,1028],{"class":1027},[251,2036,2037],{"class":253,"line":387},[251,2038,342],{"class":261},[470,2040],{},[219,2042,2044],{"id":2043},"query","Query",[232,2046,2048],{"id":2047},"querystatement",[227,2049,2050],{},"@Query(statement)",[223,2052,2053,2054,2058,2059,2062,2063,2066],{},"Method decorator that defines a ",[2055,2056,2057],"a",{"href":81},"named query"," on a repository class. The statement uses a SQL-like syntax with ",[227,2060,2061],{},":paramName"," parameter binding, and the method body is left empty -- ",[227,2064,2065],{},"kinotic generate"," fills in the implementation. Declare the method on the repository subclass that extends the generated base class (the subclass is generated once and never overwritten). Currently only aggregate queries (COUNT, SUM, AVG, MIN, MAX) are supported.",[242,2068,2070],{"className":244,"code":2069,"language":246,"meta":247,"style":247},"import { Query } from '@kinotic-ai\u002Fpersistence'\n\nexport class ProductRepository extends BaseProductRepository {\n\n    @Query('SELECT COUNT(*) FROM Product WHERE category = :category')\n    countByCategory(category: string): Promise\u003Cnumber> {\n        \u002F\u002F Implementation is generated by the CLI\n    }\n}\n",[227,2071,2072,2091,2095,2112,2116,2133,2163,2168,2173],{"__ignoreMap":247},[251,2073,2074,2076,2078,2081,2083,2085,2087,2089],{"class":253,"line":254},[251,2075,258],{"class":257},[251,2077,262],{"class":261},[251,2079,2080],{"class":265}," Query",[251,2082,280],{"class":261},[251,2084,283],{"class":257},[251,2086,286],{"class":261},[251,2088,229],{"class":289},[251,2090,292],{"class":261},[251,2092,2093],{"class":253,"line":295},[251,2094,299],{"emptyLinePlaceholder":298},[251,2096,2097,2099,2101,2104,2107,2110],{"class":253,"line":302},[251,2098,318],{"class":257},[251,2100,322],{"class":321},[251,2102,2103],{"class":325}," ProductRepository",[251,2105,2106],{"class":321}," extends",[251,2108,2109],{"class":325}," BaseProductRepository",[251,2111,329],{"class":261},[251,2113,2114],{"class":253,"line":315},[251,2115,299],{"emptyLinePlaceholder":298},[251,2117,2118,2120,2122,2124,2126,2129,2131],{"class":253,"line":332},[251,2119,547],{"class":261},[251,2121,2044],{"class":308},[251,2123,1552],{"class":265},[251,2125,1555],{"class":261},[251,2127,2128],{"class":289},"SELECT COUNT(*) FROM Product WHERE category = :category",[251,2130,1555],{"class":261},[251,2132,1563],{"class":265},[251,2134,2135,2138,2140,2144,2146,2148,2151,2154,2156,2159,2161],{"class":253,"line":339},[251,2136,2137],{"class":555},"    countByCategory",[251,2139,1552],{"class":261},[251,2141,2143],{"class":2142},"sHdIc","category",[251,2145,559],{"class":261},[251,2147,562],{"class":325},[251,2149,2150],{"class":261},"):",[251,2152,2153],{"class":325}," Promise",[251,2155,1308],{"class":261},[251,2157,2158],{"class":325},"number",[251,2160,1317],{"class":261},[251,2162,329],{"class":261},[251,2164,2165],{"class":253,"line":345},[251,2166,2167],{"class":335},"        \u002F\u002F Implementation is generated by the CLI\n",[251,2169,2170],{"class":253,"line":350},[251,2171,2172],{"class":261},"    }\n",[251,2174,2175],{"class":253,"line":365},[251,2176,342],{"class":261},[470,2178],{},[219,2180,2182],{"id":2181},"service-decorators","Service Decorators",[223,2184,225,2185,230],{},[227,2186,2187],{},"@kinotic-ai\u002Fcore",[232,2189,2191],{"id":2190},"publishnamespace-name-advertise",[227,2192,2193],{},"@Publish(namespace?, name?, advertise?)",[223,2195,2196,2197,2199],{},"Publishes a class as a remotely accessible service. The service becomes available to clients via the RPC gateway, addressed inside the client's zone (see ",[2055,2198,200],{"href":201},").",[242,2201,2203],{"className":244,"code":2202,"language":246,"meta":247,"style":247},"import { Publish } from '@kinotic-ai\u002Fcore'\n\n@Publish('com.example')\nclass UserService {\n    async findUser(id: string): Promise\u003CUser> {\n        \u002F\u002F ...\n    }\n}\n\n@Publish('com.example', 'CustomName')\nclass MyService {\n    \u002F\u002F Published as com.example.CustomName\n}\n\n@Publish('com.example', undefined, true)\nclass OrderService {\n    \u002F\u002F Also advertised in the service directory\n}\n",[227,2204,2205,2224,2228,2246,2256,2285,2290,2294,2298,2302,2327,2336,2341,2345,2349,2374,2383,2389],{"__ignoreMap":247},[251,2206,2207,2209,2211,2214,2216,2218,2220,2222],{"class":253,"line":254},[251,2208,258],{"class":257},[251,2210,262],{"class":261},[251,2212,2213],{"class":265}," Publish",[251,2215,280],{"class":261},[251,2217,283],{"class":257},[251,2219,286],{"class":261},[251,2221,2187],{"class":289},[251,2223,292],{"class":261},[251,2225,2226],{"class":253,"line":295},[251,2227,299],{"emptyLinePlaceholder":298},[251,2229,2230,2232,2235,2237,2239,2242,2244],{"class":253,"line":302},[251,2231,305],{"class":261},[251,2233,2234],{"class":308},"Publish",[251,2236,1552],{"class":265},[251,2238,1555],{"class":261},[251,2240,2241],{"class":289},"com.example",[251,2243,1555],{"class":261},[251,2245,1563],{"class":265},[251,2247,2248,2251,2254],{"class":253,"line":315},[251,2249,2250],{"class":321},"class",[251,2252,2253],{"class":325}," UserService",[251,2255,329],{"class":261},[251,2257,2258,2261,2264,2266,2268,2270,2272,2274,2276,2278,2281,2283],{"class":253,"line":332},[251,2259,2260],{"class":321},"    async",[251,2262,2263],{"class":555}," findUser",[251,2265,1552],{"class":261},[251,2267,581],{"class":2142},[251,2269,559],{"class":261},[251,2271,562],{"class":325},[251,2273,2150],{"class":261},[251,2275,2153],{"class":325},[251,2277,1308],{"class":261},[251,2279,2280],{"class":325},"User",[251,2282,1317],{"class":261},[251,2284,329],{"class":261},[251,2286,2287],{"class":253,"line":339},[251,2288,2289],{"class":335},"        \u002F\u002F ...\n",[251,2291,2292],{"class":253,"line":345},[251,2293,2172],{"class":261},[251,2295,2296],{"class":253,"line":350},[251,2297,342],{"class":261},[251,2299,2300],{"class":253,"line":365},[251,2301,299],{"emptyLinePlaceholder":298},[251,2303,2304,2306,2308,2310,2312,2314,2316,2318,2320,2323,2325],{"class":253,"line":377},[251,2305,305],{"class":261},[251,2307,2234],{"class":308},[251,2309,1552],{"class":265},[251,2311,1555],{"class":261},[251,2313,2241],{"class":289},[251,2315,1555],{"class":261},[251,2317,269],{"class":261},[251,2319,286],{"class":261},[251,2321,2322],{"class":289},"CustomName",[251,2324,1555],{"class":261},[251,2326,1563],{"class":265},[251,2328,2329,2331,2334],{"class":253,"line":382},[251,2330,2250],{"class":321},[251,2332,2333],{"class":325}," MyService",[251,2335,329],{"class":261},[251,2337,2338],{"class":253,"line":387},[251,2339,2340],{"class":335},"    \u002F\u002F Published as com.example.CustomName\n",[251,2342,2343],{"class":253,"line":392},[251,2344,342],{"class":261},[251,2346,2347],{"class":253,"line":415},[251,2348,299],{"emptyLinePlaceholder":298},[251,2350,2351,2353,2355,2357,2359,2361,2363,2365,2368,2372],{"class":253,"line":427},[251,2352,305],{"class":261},[251,2354,2234],{"class":308},[251,2356,1552],{"class":265},[251,2358,1555],{"class":261},[251,2360,2241],{"class":289},[251,2362,1555],{"class":261},[251,2364,269],{"class":261},[251,2366,2367],{"class":261}," undefined,",[251,2369,2371],{"class":2370},"sfNiH"," true",[251,2373,1563],{"class":265},[251,2375,2376,2378,2381],{"class":253,"line":432},[251,2377,2250],{"class":321},[251,2379,2380],{"class":325}," OrderService",[251,2382,329],{"class":261},[251,2384,2386],{"class":253,"line":2385},17,[251,2387,2388],{"class":335},"    \u002F\u002F Also advertised in the service directory\n",[251,2390,2392],{"class":253,"line":2391},18,[251,2393,342],{"class":261},[223,2395,2396],{},[438,2397,440],{},[442,2399,2400,2410,2416],{},[445,2401,2402,2405,2406,2409],{},[227,2403,2404],{},"namespace"," — Optional service namespace (e.g., ",[227,2407,2408],{},"'com.example'",")",[445,2411,2412,2415],{},[227,2413,2414],{},"name"," — Optional custom service name. Defaults to the class name.",[445,2417,2418,2421,2422,2425,2426,2429],{},[227,2419,2420],{},"advertise"," — When ",[227,2423,2424],{},"true",", the service advertises itself in the platform service directory, so it appears in directory listings for browsing and invocation. Defaults to ",[227,2427,2428],{},"false",": the service is callable over RPC but not listed.",[232,2431,2433],{"id":2432},"zonezone",[227,2434,2435],{},"@Zone(zone)",[223,2437,2438,2439,2442,2443,2446,2447,1068,2450,2453],{},"Declares the zone a service is addressable in, relative to the client's ",[227,2440,2441],{},"Kinotic.zonePrefix",". When absent, ",[227,2444,2445],{},"Kinotic.defaultZone"," (typically loaded from the project ",[227,2448,2449],{},"package.json",[227,2451,2452],{},"kinotic.zone"," field) applies. The zone is one or more dot-separated labels of lowercase letters, digits, and interior dashes.",[242,2455,2457],{"className":244,"code":2456,"language":246,"meta":247,"style":247},"import { Publish, Zone } from '@kinotic-ai\u002Fcore'\n\n@Zone('billing')\n@Publish()\nclass InvoiceService {\n    \u002F\u002F With zonePrefix app.acme-org.orders-app → srv:\u002F\u002Fapp.acme-org.orders-app.billing~InvoiceService\n}\n",[227,2458,2459,2482,2486,2504,2512,2521,2526],{"__ignoreMap":247},[251,2460,2461,2463,2465,2467,2469,2472,2474,2476,2478,2480],{"class":253,"line":254},[251,2462,258],{"class":257},[251,2464,262],{"class":261},[251,2466,2213],{"class":265},[251,2468,269],{"class":261},[251,2470,2471],{"class":265}," Zone",[251,2473,280],{"class":261},[251,2475,283],{"class":257},[251,2477,286],{"class":261},[251,2479,2187],{"class":289},[251,2481,292],{"class":261},[251,2483,2484],{"class":253,"line":295},[251,2485,299],{"emptyLinePlaceholder":298},[251,2487,2488,2490,2493,2495,2497,2500,2502],{"class":253,"line":302},[251,2489,305],{"class":261},[251,2491,2492],{"class":308},"Zone",[251,2494,1552],{"class":265},[251,2496,1555],{"class":261},[251,2498,2499],{"class":289},"billing",[251,2501,1555],{"class":261},[251,2503,1563],{"class":265},[251,2505,2506,2508,2510],{"class":253,"line":315},[251,2507,305],{"class":261},[251,2509,2234],{"class":308},[251,2511,312],{"class":265},[251,2513,2514,2516,2519],{"class":253,"line":332},[251,2515,2250],{"class":321},[251,2517,2518],{"class":325}," InvoiceService",[251,2520,329],{"class":261},[251,2522,2523],{"class":253,"line":339},[251,2524,2525],{"class":335},"    \u002F\u002F With zonePrefix app.acme-org.orders-app → srv:\u002F\u002Fapp.acme-org.orders-app.billing~InvoiceService\n",[251,2527,2528],{"class":253,"line":345},[251,2529,342],{"class":261},[232,2531,2533],{"id":2532},"versionversion",[227,2534,2535],{},"@Version(version)",[223,2537,2538],{},"Sets the semantic version for a published service. Enables versioned service routing.",[242,2540,2542],{"className":244,"code":2541,"language":246,"meta":247,"style":247},"import { Publish, Version } from '@kinotic-ai\u002Fcore'\n\n@Publish('com.example')\n@Version('2.0.0')\nclass UserService {\n    \u002F\u002F ...\n}\n",[227,2543,2544,2566,2570,2586,2604,2612,2616],{"__ignoreMap":247},[251,2545,2546,2548,2550,2552,2554,2556,2558,2560,2562,2564],{"class":253,"line":254},[251,2547,258],{"class":257},[251,2549,262],{"class":261},[251,2551,2213],{"class":265},[251,2553,269],{"class":261},[251,2555,1773],{"class":265},[251,2557,280],{"class":261},[251,2559,283],{"class":257},[251,2561,286],{"class":261},[251,2563,2187],{"class":289},[251,2565,292],{"class":261},[251,2567,2568],{"class":253,"line":295},[251,2569,299],{"emptyLinePlaceholder":298},[251,2571,2572,2574,2576,2578,2580,2582,2584],{"class":253,"line":302},[251,2573,305],{"class":261},[251,2575,2234],{"class":308},[251,2577,1552],{"class":265},[251,2579,1555],{"class":261},[251,2581,2241],{"class":289},[251,2583,1555],{"class":261},[251,2585,1563],{"class":265},[251,2587,2588,2590,2593,2595,2597,2600,2602],{"class":253,"line":315},[251,2589,305],{"class":261},[251,2591,2592],{"class":308},"Version",[251,2594,1552],{"class":265},[251,2596,1555],{"class":261},[251,2598,2599],{"class":289},"2.0.0",[251,2601,1555],{"class":261},[251,2603,1563],{"class":265},[251,2605,2606,2608,2610],{"class":253,"line":332},[251,2607,2250],{"class":321},[251,2609,2253],{"class":325},[251,2611,329],{"class":261},[251,2613,2614],{"class":253,"line":339},[251,2615,336],{"class":335},[251,2617,2618],{"class":253,"line":345},[251,2619,342],{"class":261},[232,2621,2623],{"id":2622},"scope",[227,2624,2625],{},"@Scope",[223,2627,2628],{},"Marks the getter or method that provides the scope for service routing. Scope targets requests at one specific instance of a service, such as the copy running on a particular node.",[242,2630,2632],{"className":244,"code":2631,"language":246,"meta":247,"style":247},"import { Publish, Scope } from '@kinotic-ai\u002Fcore'\n\n@Publish('com.example')\nclass NodeManager {\n    nodeId: string = ''\n\n    @Scope\n    get scope(): string {\n        return this.nodeId\n    }\n}\n",[227,2633,2634,2657,2661,2677,2686,2699,2703,2710,2725,2736,2740],{"__ignoreMap":247},[251,2635,2636,2638,2640,2642,2644,2647,2649,2651,2653,2655],{"class":253,"line":254},[251,2637,258],{"class":257},[251,2639,262],{"class":261},[251,2641,2213],{"class":265},[251,2643,269],{"class":261},[251,2645,2646],{"class":265}," Scope",[251,2648,280],{"class":261},[251,2650,283],{"class":257},[251,2652,286],{"class":261},[251,2654,2187],{"class":289},[251,2656,292],{"class":261},[251,2658,2659],{"class":253,"line":295},[251,2660,299],{"emptyLinePlaceholder":298},[251,2662,2663,2665,2667,2669,2671,2673,2675],{"class":253,"line":302},[251,2664,305],{"class":261},[251,2666,2234],{"class":308},[251,2668,1552],{"class":265},[251,2670,1555],{"class":261},[251,2672,2241],{"class":289},[251,2674,1555],{"class":261},[251,2676,1563],{"class":265},[251,2678,2679,2681,2684],{"class":253,"line":315},[251,2680,2250],{"class":321},[251,2682,2683],{"class":325}," NodeManager",[251,2685,329],{"class":261},[251,2687,2688,2691,2693,2695,2697],{"class":253,"line":332},[251,2689,2690],{"class":555},"    nodeId",[251,2692,559],{"class":261},[251,2694,562],{"class":325},[251,2696,571],{"class":261},[251,2698,662],{"class":261},[251,2700,2701],{"class":253,"line":339},[251,2702,299],{"emptyLinePlaceholder":298},[251,2704,2705,2707],{"class":253,"line":345},[251,2706,547],{"class":261},[251,2708,2709],{"class":265},"Scope\n",[251,2711,2712,2715,2718,2721,2723],{"class":253,"line":350},[251,2713,2714],{"class":321},"    get",[251,2716,2717],{"class":555}," scope",[251,2719,2720],{"class":261},"():",[251,2722,562],{"class":325},[251,2724,329],{"class":261},[251,2726,2727,2730,2733],{"class":253,"line":365},[251,2728,2729],{"class":257},"        return",[251,2731,2732],{"class":261}," this.",[251,2734,2735],{"class":265},"nodeId\n",[251,2737,2738],{"class":253,"line":377},[251,2739,2172],{"class":261},[251,2741,2742],{"class":253,"line":382},[251,2743,342],{"class":261},[232,2745,2747],{"id":2746},"context",[227,2748,2749],{},"@Context",[223,2751,2752],{},"Marks a method that receives the request context, which carries metadata about the current request.",[223,2754,2755,2758],{},[438,2756,2757],{},"The context parameter must be the method's final parameter."," Callers never pass it — the platform appends it after the caller-supplied arguments, so a context parameter anywhere else will receive a caller argument instead.",[242,2760,2762],{"className":244,"code":2761,"language":246,"meta":247,"style":247},"import { Publish, Context } from '@kinotic-ai\u002Fcore'\n\n@Publish('com.example')\nclass AuditService {\n    @Context\n    async logAction(action: string, context: any): Promise\u003Cvoid> {\n        \u002F\u002F context contains request metadata\n    }\n}\n",[227,2763,2764,2787,2791,2807,2816,2823,2862,2867,2871],{"__ignoreMap":247},[251,2765,2766,2768,2770,2772,2774,2777,2779,2781,2783,2785],{"class":253,"line":254},[251,2767,258],{"class":257},[251,2769,262],{"class":261},[251,2771,2213],{"class":265},[251,2773,269],{"class":261},[251,2775,2776],{"class":265}," Context",[251,2778,280],{"class":261},[251,2780,283],{"class":257},[251,2782,286],{"class":261},[251,2784,2187],{"class":289},[251,2786,292],{"class":261},[251,2788,2789],{"class":253,"line":295},[251,2790,299],{"emptyLinePlaceholder":298},[251,2792,2793,2795,2797,2799,2801,2803,2805],{"class":253,"line":302},[251,2794,305],{"class":261},[251,2796,2234],{"class":308},[251,2798,1552],{"class":265},[251,2800,1555],{"class":261},[251,2802,2241],{"class":289},[251,2804,1555],{"class":261},[251,2806,1563],{"class":265},[251,2808,2809,2811,2814],{"class":253,"line":315},[251,2810,2250],{"class":321},[251,2812,2813],{"class":325}," AuditService",[251,2815,329],{"class":261},[251,2817,2818,2820],{"class":253,"line":332},[251,2819,547],{"class":261},[251,2821,2822],{"class":265},"Context\n",[251,2824,2825,2827,2830,2832,2835,2837,2839,2841,2844,2846,2849,2851,2853,2855,2858,2860],{"class":253,"line":339},[251,2826,2260],{"class":321},[251,2828,2829],{"class":555}," logAction",[251,2831,1552],{"class":261},[251,2833,2834],{"class":2142},"action",[251,2836,559],{"class":261},[251,2838,562],{"class":325},[251,2840,269],{"class":261},[251,2842,2843],{"class":2142}," context",[251,2845,559],{"class":261},[251,2847,2848],{"class":325}," any",[251,2850,2150],{"class":261},[251,2852,2153],{"class":325},[251,2854,1308],{"class":261},[251,2856,2857],{"class":325},"void",[251,2859,1317],{"class":261},[251,2861,329],{"class":261},[251,2863,2864],{"class":253,"line":345},[251,2865,2866],{"class":335},"        \u002F\u002F context contains request metadata\n",[251,2868,2869],{"class":253,"line":350},[251,2870,2172],{"class":261},[251,2872,2873],{"class":253,"line":365},[251,2874,342],{"class":261},[2876,2877,2878],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}",{"title":247,"searchDepth":295,"depth":295,"links":2880},[2881,2884,2888,2896,2899,2902,2905,2908,2911],{"id":221,"depth":295,"text":72,"children":2882},[2883],{"id":234,"depth":302,"text":237},{"id":474,"depth":295,"text":475,"children":2885},[2886,2887],{"id":478,"depth":302,"text":481},{"id":581,"depth":302,"text":584},{"id":671,"depth":295,"text":672,"children":2889},[2890,2891,2892,2893,2894,2895],{"id":675,"depth":302,"text":678},{"id":788,"depth":302,"text":791},{"id":905,"depth":302,"text":908},{"id":1087,"depth":302,"text":1090},{"id":1201,"depth":302,"text":1204},{"id":1329,"depth":302,"text":1332},{"id":1451,"depth":295,"text":1452,"children":2897},[2898],{"id":1455,"depth":302,"text":1458},{"id":1607,"depth":295,"text":1608,"children":2900},[2901],{"id":1611,"depth":302,"text":1614},{"id":1738,"depth":295,"text":1739,"children":2903},[2904],{"id":1742,"depth":302,"text":1745},{"id":1880,"depth":295,"text":1881,"children":2906},[2907],{"id":1884,"depth":302,"text":1887},{"id":2043,"depth":295,"text":2044,"children":2909},[2910],{"id":2047,"depth":302,"text":2050},{"id":2181,"depth":295,"text":2182,"children":2912},[2913,2914,2915,2916,2917],{"id":2190,"depth":302,"text":2193},{"id":2432,"depth":302,"text":2435},{"id":2532,"depth":302,"text":2535},{"id":2622,"depth":302,"text":2625},{"id":2746,"depth":302,"text":2749},"Complete reference for all Kinotic decorators.","md",null,{},{"icon":137},{"title":134,"description":2918},"TzVAXTN9sX2eOnC6Q7ZvDc5pOd9n2LAPrUu313Rkmj4",[2926,2928],{"title":123,"path":124,"stem":125,"description":2927,"icon":126,"children":-1},"Command reference for the Kinotic CLI.",{"title":139,"path":140,"stem":141,"description":2929,"icon":60,"children":-1},"Complete SQL grammar reference for migration scripts.",1788549866943]