[{"data":1,"prerenderedAt":1417},["ShallowReactive",2],{"navigation":3,"\u002Fgetting-started":103,"\u002Fgetting-started-surround":1414},[4,9,31,87,98],{"title":5,"path":6,"stem":7,"icon":8},"Getting started","\u002Fgetting-started","01.getting-started","i-tabler-rocket",{"title":10,"icon":11,"path":12,"stem":13,"children":14,"page":30},"Concepts","i-tabler-code","\u002Fconcepts","02.concepts",[15,20,25],{"title":16,"path":17,"stem":18,"icon":19},"Architecture","\u002Fconcepts\u002Farchitecture","02.concepts\u002Farchitecture","i-tabler-sitemap",{"title":21,"path":22,"stem":23,"icon":24},"Metadata and registry","\u002Fconcepts\u002Fmetadata-and-registry","02.concepts\u002Fmetadata-and-registry","i-tabler-schema",{"title":26,"path":27,"stem":28,"icon":29},"Query Engine","\u002Fconcepts\u002Fquery-engine","02.concepts\u002Fquery-engine","i-tabler-engine",false,{"title":32,"icon":33,"path":34,"stem":35,"children":36,"page":30},"Guide","i-tabler-arrow-ramp-right","\u002Fguides","03.guides",[37,42,47,52,57,62,67,72,77,82],{"title":38,"path":39,"stem":40,"icon":41},"Audit Log","\u002Fguides\u002Faudit-log","03.guides\u002Faudit-log","i-tabler-history",{"title":43,"path":44,"stem":45,"icon":46},"Cursor pagination","\u002Fguides\u002Fcursor-pagination","03.guides\u002Fcursor-pagination","i-tabler-arrow-bar-to-down",{"title":48,"path":49,"stem":50,"icon":51},"Domain Events","\u002Fguides\u002Fdomain-events","03.guides\u002Fdomain-events","i-tabler-broadcast",{"title":53,"path":54,"stem":55,"icon":56},"Field visibility","\u002Fguides\u002Ffield-visibility","03.guides\u002Ffield-visibility","i-tabler-eye-off",{"title":58,"path":59,"stem":60,"icon":61},"Lifecycle hooks","\u002Fguides\u002Flifecycle-hooks","03.guides\u002Flifecycle-hooks","i-tabler-arrows-split",{"title":63,"path":64,"stem":65,"icon":66},"Production playground","\u002Fguides\u002Fplayground","03.guides\u002Fplayground","i-tabler-flask",{"title":68,"path":69,"stem":70,"icon":71},"Queries and filters","\u002Fguides\u002Fqueries-and-filters","03.guides\u002Fqueries-and-filters","i-tabler-filter",{"title":73,"path":74,"stem":75,"icon":76},"Relations","\u002Fguides\u002Frelations","03.guides\u002Frelations","i-tabler-link",{"title":78,"path":79,"stem":80,"icon":81},"Schema consistency","\u002Fguides\u002Fschema-consistency","03.guides\u002Fschema-consistency","i-tabler-database-search",{"title":83,"path":84,"stem":85,"icon":86},"Validation","\u002Fguides\u002Fvalidation","03.guides\u002Fvalidation","i-tabler-checkup-list",{"title":88,"icon":89,"path":90,"stem":91,"children":92,"page":30},"Adapters","i-tabler-plug","\u002Fadapters","04.adapters",[93],{"title":94,"path":95,"stem":96,"icon":97},"Drizzle adapter","\u002Fadapters\u002Fdrizzle","04.adapters\u002Fdrizzle","i-simple-icons-drizzle",{"title":99,"path":100,"stem":101,"icon":102},"Current limitations","\u002Fcurrent-limitations","05.current-limitations","i-tabler-circle-dashed-x",{"id":104,"title":5,"body":105,"description":1407,"extension":1408,"links":1409,"meta":1410,"navigation":1411,"path":6,"seo":1412,"stem":7,"__hash__":1413},"docs\u002F01.getting-started.md",{"type":106,"value":107,"toc":1400},"minimark",[108,113,159,163,167,178,845,849,1071,1077,1080,1130,1134,1321,1328,1377,1381,1396],[109,110,112],"h2",{"id":111},"install","Install",[114,115,121],"pre",{"className":116,"code":117,"filename":118,"language":119,"meta":120,"style":120},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","pnpm add @opensya\u002Fpersistence drizzle-orm pg\npnpm add -D @types\u002Fpg\n","Terminal","bash","",[122,123,124,146],"code",{"__ignoreMap":120},[125,126,129,133,137,140,143],"span",{"class":127,"line":128},"line",1,[125,130,132],{"class":131},"sBMFI","pnpm",[125,134,136],{"class":135},"sfazB"," add",[125,138,139],{"class":135}," @opensya\u002Fpersistence",[125,141,142],{"class":135}," drizzle-orm",[125,144,145],{"class":135}," pg\n",[125,147,149,151,153,156],{"class":127,"line":148},2,[125,150,132],{"class":131},[125,152,136],{"class":135},[125,154,155],{"class":135}," -D",[125,157,158],{"class":135}," @types\u002Fpg\n",[160,161,162],"p",{},"Persistence currently ships a Drizzle PostgreSQL adapter. Your physical tables\nmust already exist through migrations.",[109,164,166],{"id":165},"define-a-table","Define a table",[160,168,169,170,173,174,177],{},"Use ",[122,171,172],{},"defineTable()"," instead of annotating the object with ",[122,175,176],{},"TableMetadata",". The\nhelper validates the shape while preserving literal names for type inference.",[114,179,184],{"className":180,"code":181,"filename":182,"language":183,"meta":120,"style":120},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { defineTable } from '@opensya\u002Fpersistence'\n\nexport const usersMetadata = defineTable({\n  name: 'users',\n  collectionName: 'users',\n  columns: [\n    {\n      name: 'id',\n      columnName: 'id',\n      type: 'uuid',\n      nullable: false,\n      primaryKey: true,\n      unique: true,\n      default: () => crypto.randomUUID(),\n      validators: []\n    },\n    {\n      name: 'email',\n      columnName: 'email',\n      type: 'string',\n      nullable: false,\n      primaryKey: false,\n      unique: true,\n      validators: [\n        {\n          name: 'email-format',\n          validate(value) {\n            return typeof value === 'string' && value.includes('@')\n              ? { valid: true }\n              : { valid: false, message: 'Enter a valid email address.' }\n          }\n        }\n      ]\n    },\n    {\n      name: 'createdAt',\n      columnName: 'created_at',\n      type: 'timestamp',\n      nullable: false,\n      primaryKey: false,\n      unique: false,\n      default: () => new Date(),\n      validators: []\n    }\n  ],\n  relations: [],\n  tableValidators: []\n})\n","users.metadata.ts","ts",[122,185,186,215,221,246,267,283,294,300,317,333,350,364,377,389,417,428,434,439,455,470,486,497,508,519,528,534,551,569,612,630,661,667,673,679,684,689,705,721,737,748,759,770,791,800,806,814,827,837],{"__ignoreMap":120},[125,187,188,192,196,200,203,206,209,212],{"class":127,"line":128},[125,189,191],{"class":190},"s7zQu","import",[125,193,195],{"class":194},"sMK4o"," {",[125,197,199],{"class":198},"sTEyZ"," defineTable",[125,201,202],{"class":194}," }",[125,204,205],{"class":190}," from",[125,207,208],{"class":194}," '",[125,210,211],{"class":135},"@opensya\u002Fpersistence",[125,213,214],{"class":194},"'\n",[125,216,217],{"class":127,"line":148},[125,218,220],{"emptyLinePlaceholder":219},true,"\n",[125,222,224,227,231,234,237,240,243],{"class":127,"line":223},3,[125,225,226],{"class":190},"export",[125,228,230],{"class":229},"spNyl"," const",[125,232,233],{"class":198}," usersMetadata ",[125,235,236],{"class":194},"=",[125,238,199],{"class":239},"s2Zo4",[125,241,242],{"class":198},"(",[125,244,245],{"class":194},"{\n",[125,247,249,253,256,258,261,264],{"class":127,"line":248},4,[125,250,252],{"class":251},"swJcz","  name",[125,254,255],{"class":194},":",[125,257,208],{"class":194},[125,259,260],{"class":135},"users",[125,262,263],{"class":194},"'",[125,265,266],{"class":194},",\n",[125,268,270,273,275,277,279,281],{"class":127,"line":269},5,[125,271,272],{"class":251},"  collectionName",[125,274,255],{"class":194},[125,276,208],{"class":194},[125,278,260],{"class":135},[125,280,263],{"class":194},[125,282,266],{"class":194},[125,284,286,289,291],{"class":127,"line":285},6,[125,287,288],{"class":251},"  columns",[125,290,255],{"class":194},[125,292,293],{"class":198}," [\n",[125,295,297],{"class":127,"line":296},7,[125,298,299],{"class":194},"    {\n",[125,301,303,306,308,310,313,315],{"class":127,"line":302},8,[125,304,305],{"class":251},"      name",[125,307,255],{"class":194},[125,309,208],{"class":194},[125,311,312],{"class":135},"id",[125,314,263],{"class":194},[125,316,266],{"class":194},[125,318,320,323,325,327,329,331],{"class":127,"line":319},9,[125,321,322],{"class":251},"      columnName",[125,324,255],{"class":194},[125,326,208],{"class":194},[125,328,312],{"class":135},[125,330,263],{"class":194},[125,332,266],{"class":194},[125,334,336,339,341,343,346,348],{"class":127,"line":335},10,[125,337,338],{"class":251},"      type",[125,340,255],{"class":194},[125,342,208],{"class":194},[125,344,345],{"class":135},"uuid",[125,347,263],{"class":194},[125,349,266],{"class":194},[125,351,353,356,358,362],{"class":127,"line":352},11,[125,354,355],{"class":251},"      nullable",[125,357,255],{"class":194},[125,359,361],{"class":360},"sfNiH"," false",[125,363,266],{"class":194},[125,365,367,370,372,375],{"class":127,"line":366},12,[125,368,369],{"class":251},"      primaryKey",[125,371,255],{"class":194},[125,373,374],{"class":360}," true",[125,376,266],{"class":194},[125,378,380,383,385,387],{"class":127,"line":379},13,[125,381,382],{"class":251},"      unique",[125,384,255],{"class":194},[125,386,374],{"class":360},[125,388,266],{"class":194},[125,390,392,395,397,400,403,406,409,412,415],{"class":127,"line":391},14,[125,393,394],{"class":239},"      default",[125,396,255],{"class":194},[125,398,399],{"class":194}," ()",[125,401,402],{"class":229}," =>",[125,404,405],{"class":198}," crypto",[125,407,408],{"class":194},".",[125,410,411],{"class":239},"randomUUID",[125,413,414],{"class":198},"()",[125,416,266],{"class":194},[125,418,420,423,425],{"class":127,"line":419},15,[125,421,422],{"class":251},"      validators",[125,424,255],{"class":194},[125,426,427],{"class":198}," []\n",[125,429,431],{"class":127,"line":430},16,[125,432,433],{"class":194},"    },\n",[125,435,437],{"class":127,"line":436},17,[125,438,299],{"class":194},[125,440,442,444,446,448,451,453],{"class":127,"line":441},18,[125,443,305],{"class":251},[125,445,255],{"class":194},[125,447,208],{"class":194},[125,449,450],{"class":135},"email",[125,452,263],{"class":194},[125,454,266],{"class":194},[125,456,458,460,462,464,466,468],{"class":127,"line":457},19,[125,459,322],{"class":251},[125,461,255],{"class":194},[125,463,208],{"class":194},[125,465,450],{"class":135},[125,467,263],{"class":194},[125,469,266],{"class":194},[125,471,473,475,477,479,482,484],{"class":127,"line":472},20,[125,474,338],{"class":251},[125,476,255],{"class":194},[125,478,208],{"class":194},[125,480,481],{"class":135},"string",[125,483,263],{"class":194},[125,485,266],{"class":194},[125,487,489,491,493,495],{"class":127,"line":488},21,[125,490,355],{"class":251},[125,492,255],{"class":194},[125,494,361],{"class":360},[125,496,266],{"class":194},[125,498,500,502,504,506],{"class":127,"line":499},22,[125,501,369],{"class":251},[125,503,255],{"class":194},[125,505,361],{"class":360},[125,507,266],{"class":194},[125,509,511,513,515,517],{"class":127,"line":510},23,[125,512,382],{"class":251},[125,514,255],{"class":194},[125,516,374],{"class":360},[125,518,266],{"class":194},[125,520,522,524,526],{"class":127,"line":521},24,[125,523,422],{"class":251},[125,525,255],{"class":194},[125,527,293],{"class":198},[125,529,531],{"class":127,"line":530},25,[125,532,533],{"class":194},"        {\n",[125,535,537,540,542,544,547,549],{"class":127,"line":536},26,[125,538,539],{"class":251},"          name",[125,541,255],{"class":194},[125,543,208],{"class":194},[125,545,546],{"class":135},"email-format",[125,548,263],{"class":194},[125,550,266],{"class":194},[125,552,554,557,559,563,566],{"class":127,"line":553},27,[125,555,556],{"class":251},"          validate",[125,558,242],{"class":194},[125,560,562],{"class":561},"sHdIc","value",[125,564,565],{"class":194},")",[125,567,568],{"class":194}," {\n",[125,570,572,575,578,581,584,586,588,590,593,595,597,600,602,604,607,609],{"class":127,"line":571},28,[125,573,574],{"class":190},"            return",[125,576,577],{"class":194}," typeof",[125,579,580],{"class":198}," value",[125,582,583],{"class":194}," ===",[125,585,208],{"class":194},[125,587,481],{"class":135},[125,589,263],{"class":194},[125,591,592],{"class":194}," &&",[125,594,580],{"class":198},[125,596,408],{"class":194},[125,598,599],{"class":239},"includes",[125,601,242],{"class":251},[125,603,263],{"class":194},[125,605,606],{"class":135},"@",[125,608,263],{"class":194},[125,610,611],{"class":251},")\n",[125,613,615,618,620,623,625,627],{"class":127,"line":614},29,[125,616,617],{"class":194},"              ?",[125,619,195],{"class":194},[125,621,622],{"class":251}," valid",[125,624,255],{"class":194},[125,626,374],{"class":360},[125,628,629],{"class":194}," }\n",[125,631,633,636,638,640,642,644,647,650,652,654,657,659],{"class":127,"line":632},30,[125,634,635],{"class":194},"              :",[125,637,195],{"class":194},[125,639,622],{"class":251},[125,641,255],{"class":194},[125,643,361],{"class":360},[125,645,646],{"class":194},",",[125,648,649],{"class":251}," message",[125,651,255],{"class":194},[125,653,208],{"class":194},[125,655,656],{"class":135},"Enter a valid email address.",[125,658,263],{"class":194},[125,660,629],{"class":194},[125,662,664],{"class":127,"line":663},31,[125,665,666],{"class":194},"          }\n",[125,668,670],{"class":127,"line":669},32,[125,671,672],{"class":194},"        }\n",[125,674,676],{"class":127,"line":675},33,[125,677,678],{"class":198},"      ]\n",[125,680,682],{"class":127,"line":681},34,[125,683,433],{"class":194},[125,685,687],{"class":127,"line":686},35,[125,688,299],{"class":194},[125,690,692,694,696,698,701,703],{"class":127,"line":691},36,[125,693,305],{"class":251},[125,695,255],{"class":194},[125,697,208],{"class":194},[125,699,700],{"class":135},"createdAt",[125,702,263],{"class":194},[125,704,266],{"class":194},[125,706,708,710,712,714,717,719],{"class":127,"line":707},37,[125,709,322],{"class":251},[125,711,255],{"class":194},[125,713,208],{"class":194},[125,715,716],{"class":135},"created_at",[125,718,263],{"class":194},[125,720,266],{"class":194},[125,722,724,726,728,730,733,735],{"class":127,"line":723},38,[125,725,338],{"class":251},[125,727,255],{"class":194},[125,729,208],{"class":194},[125,731,732],{"class":135},"timestamp",[125,734,263],{"class":194},[125,736,266],{"class":194},[125,738,740,742,744,746],{"class":127,"line":739},39,[125,741,355],{"class":251},[125,743,255],{"class":194},[125,745,361],{"class":360},[125,747,266],{"class":194},[125,749,751,753,755,757],{"class":127,"line":750},40,[125,752,369],{"class":251},[125,754,255],{"class":194},[125,756,361],{"class":360},[125,758,266],{"class":194},[125,760,762,764,766,768],{"class":127,"line":761},41,[125,763,382],{"class":251},[125,765,255],{"class":194},[125,767,361],{"class":360},[125,769,266],{"class":194},[125,771,773,775,777,779,781,784,787,789],{"class":127,"line":772},42,[125,774,394],{"class":239},[125,776,255],{"class":194},[125,778,399],{"class":194},[125,780,402],{"class":229},[125,782,783],{"class":194}," new",[125,785,786],{"class":239}," Date",[125,788,414],{"class":198},[125,790,266],{"class":194},[125,792,794,796,798],{"class":127,"line":793},43,[125,795,422],{"class":251},[125,797,255],{"class":194},[125,799,427],{"class":198},[125,801,803],{"class":127,"line":802},44,[125,804,805],{"class":194},"    }\n",[125,807,809,812],{"class":127,"line":808},45,[125,810,811],{"class":198},"  ]",[125,813,266],{"class":194},[125,815,817,820,822,825],{"class":127,"line":816},46,[125,818,819],{"class":251},"  relations",[125,821,255],{"class":194},[125,823,824],{"class":198}," []",[125,826,266],{"class":194},[125,828,830,833,835],{"class":127,"line":829},47,[125,831,832],{"class":251},"  tableValidators",[125,834,255],{"class":194},[125,836,427],{"class":198},[125,838,840,843],{"class":127,"line":839},48,[125,841,842],{"class":194},"}",[125,844,611],{"class":198},[109,846,848],{"id":847},"create-the-runtime","Create the runtime",[114,850,853],{"className":180,"code":851,"filename":852,"language":183,"meta":120,"style":120},"import {\n  createDrizzleAdapter,\n  createHooksRegistry,\n  createMetadataRegistry,\n  createQueryEngine\n} from '@opensya\u002Fpersistence'\nimport { usersMetadata } from '.\u002Fusers.metadata.js'\n\nconst registry = createMetadataRegistry(usersMetadata)\nregistry.lock()\n\nconst adapter = createDrizzleAdapter(db)\n\nfor (const table of registry.getAll()) {\n  adapter.buildTable(table)\n}\n\nconst hooks = createHooksRegistry()\nexport const engine = createQueryEngine(registry, adapter, hooks)\n","persistence.ts",[122,854,855,861,868,875,882,887,899,919,923,939,952,956,971,975,1004,1021,1026,1030,1044],{"__ignoreMap":120},[125,856,857,859],{"class":127,"line":128},[125,858,191],{"class":190},[125,860,568],{"class":194},[125,862,863,866],{"class":127,"line":148},[125,864,865],{"class":198},"  createDrizzleAdapter",[125,867,266],{"class":194},[125,869,870,873],{"class":127,"line":223},[125,871,872],{"class":198},"  createHooksRegistry",[125,874,266],{"class":194},[125,876,877,880],{"class":127,"line":248},[125,878,879],{"class":198},"  createMetadataRegistry",[125,881,266],{"class":194},[125,883,884],{"class":127,"line":269},[125,885,886],{"class":198},"  createQueryEngine\n",[125,888,889,891,893,895,897],{"class":127,"line":285},[125,890,842],{"class":194},[125,892,205],{"class":190},[125,894,208],{"class":194},[125,896,211],{"class":135},[125,898,214],{"class":194},[125,900,901,903,905,908,910,912,914,917],{"class":127,"line":296},[125,902,191],{"class":190},[125,904,195],{"class":194},[125,906,907],{"class":198}," usersMetadata",[125,909,202],{"class":194},[125,911,205],{"class":190},[125,913,208],{"class":194},[125,915,916],{"class":135},".\u002Fusers.metadata.js",[125,918,214],{"class":194},[125,920,921],{"class":127,"line":302},[125,922,220],{"emptyLinePlaceholder":219},[125,924,925,928,931,933,936],{"class":127,"line":319},[125,926,927],{"class":229},"const",[125,929,930],{"class":198}," registry ",[125,932,236],{"class":194},[125,934,935],{"class":239}," createMetadataRegistry",[125,937,938],{"class":198},"(usersMetadata)\n",[125,940,941,944,946,949],{"class":127,"line":335},[125,942,943],{"class":198},"registry",[125,945,408],{"class":194},[125,947,948],{"class":239},"lock",[125,950,951],{"class":198},"()\n",[125,953,954],{"class":127,"line":352},[125,955,220],{"emptyLinePlaceholder":219},[125,957,958,960,963,965,968],{"class":127,"line":366},[125,959,927],{"class":229},[125,961,962],{"class":198}," adapter ",[125,964,236],{"class":194},[125,966,967],{"class":239}," createDrizzleAdapter",[125,969,970],{"class":198},"(db)\n",[125,972,973],{"class":127,"line":379},[125,974,220],{"emptyLinePlaceholder":219},[125,976,977,980,983,985,988,991,994,996,999,1002],{"class":127,"line":391},[125,978,979],{"class":190},"for",[125,981,982],{"class":198}," (",[125,984,927],{"class":229},[125,986,987],{"class":198}," table ",[125,989,990],{"class":194},"of",[125,992,993],{"class":198}," registry",[125,995,408],{"class":194},[125,997,998],{"class":239},"getAll",[125,1000,1001],{"class":198},"()) ",[125,1003,245],{"class":194},[125,1005,1006,1009,1011,1014,1016,1019],{"class":127,"line":419},[125,1007,1008],{"class":198},"  adapter",[125,1010,408],{"class":194},[125,1012,1013],{"class":239},"buildTable",[125,1015,242],{"class":251},[125,1017,1018],{"class":198},"table",[125,1020,611],{"class":251},[125,1022,1023],{"class":127,"line":430},[125,1024,1025],{"class":194},"}\n",[125,1027,1028],{"class":127,"line":436},[125,1029,220],{"emptyLinePlaceholder":219},[125,1031,1032,1034,1037,1039,1042],{"class":127,"line":441},[125,1033,927],{"class":229},[125,1035,1036],{"class":198}," hooks ",[125,1038,236],{"class":194},[125,1040,1041],{"class":239}," createHooksRegistry",[125,1043,951],{"class":198},[125,1045,1046,1048,1050,1053,1055,1058,1061,1063,1066,1068],{"class":127,"line":457},[125,1047,226],{"class":190},[125,1049,230],{"class":229},[125,1051,1052],{"class":198}," engine ",[125,1054,236],{"class":194},[125,1056,1057],{"class":239}," createQueryEngine",[125,1059,1060],{"class":198},"(registry",[125,1062,646],{"class":194},[125,1064,1065],{"class":198}," adapter",[125,1067,646],{"class":194},[125,1069,1070],{"class":198}," hooks)\n",[160,1072,1073,1076],{},[122,1074,1075],{},"buildTable()"," builds the runtime Drizzle objects. It does not execute DDL.",[160,1078,1079],{},"You can also keep registration chainable:",[114,1081,1083],{"className":180,"code":1082,"language":183,"meta":120,"style":120},"const registry = createMetadataRegistry()\n  .register(usersMetadata)\n  .register(postsMetadata)\n\nregistry.lock()\n",[122,1084,1085,1097,1107,1116,1120],{"__ignoreMap":120},[125,1086,1087,1089,1091,1093,1095],{"class":127,"line":128},[125,1088,927],{"class":229},[125,1090,930],{"class":198},[125,1092,236],{"class":194},[125,1094,935],{"class":239},[125,1096,951],{"class":198},[125,1098,1099,1102,1105],{"class":127,"line":148},[125,1100,1101],{"class":194},"  .",[125,1103,1104],{"class":239},"register",[125,1106,938],{"class":198},[125,1108,1109,1111,1113],{"class":127,"line":223},[125,1110,1101],{"class":194},[125,1112,1104],{"class":239},[125,1114,1115],{"class":198},"(postsMetadata)\n",[125,1117,1118],{"class":127,"line":248},[125,1119,220],{"emptyLinePlaceholder":219},[125,1121,1122,1124,1126,1128],{"class":127,"line":269},[125,1123,943],{"class":198},[125,1125,408],{"class":194},[125,1127,948],{"class":239},[125,1129,951],{"class":198},[109,1131,1133],{"id":1132},"execute-typed-operations","Execute typed operations",[114,1135,1138],{"className":180,"code":1136,"filename":1137,"language":183,"meta":120,"style":120},"const user = await engine.create('users', {\n  email: 'john@example.com'\n})\n\n\u002F\u002F user is inferred as:\n\u002F\u002F { id: string; email: string; createdAt: Date }\n\nconst saved = await engine.findOne('users', {\n  where: {\n    conditions: [\n      { field: 'id', operator: 'eq', value: user.id }\n    ]\n  }\n})\n","users.service.ts",[122,1139,1140,1172,1186,1192,1196,1202,1207,1211,1241,1250,1259,1305,1310,1315],{"__ignoreMap":120},[125,1141,1142,1144,1147,1149,1152,1155,1157,1160,1162,1164,1166,1168,1170],{"class":127,"line":128},[125,1143,927],{"class":229},[125,1145,1146],{"class":198}," user ",[125,1148,236],{"class":194},[125,1150,1151],{"class":190}," await",[125,1153,1154],{"class":198}," engine",[125,1156,408],{"class":194},[125,1158,1159],{"class":239},"create",[125,1161,242],{"class":198},[125,1163,263],{"class":194},[125,1165,260],{"class":135},[125,1167,263],{"class":194},[125,1169,646],{"class":194},[125,1171,568],{"class":194},[125,1173,1174,1177,1179,1181,1184],{"class":127,"line":148},[125,1175,1176],{"class":251},"  email",[125,1178,255],{"class":194},[125,1180,208],{"class":194},[125,1182,1183],{"class":135},"john@example.com",[125,1185,214],{"class":194},[125,1187,1188,1190],{"class":127,"line":223},[125,1189,842],{"class":194},[125,1191,611],{"class":198},[125,1193,1194],{"class":127,"line":248},[125,1195,220],{"emptyLinePlaceholder":219},[125,1197,1198],{"class":127,"line":269},[125,1199,1201],{"class":1200},"sHwdD","\u002F\u002F user is inferred as:\n",[125,1203,1204],{"class":127,"line":285},[125,1205,1206],{"class":1200},"\u002F\u002F { id: string; email: string; createdAt: Date }\n",[125,1208,1209],{"class":127,"line":296},[125,1210,220],{"emptyLinePlaceholder":219},[125,1212,1213,1215,1218,1220,1222,1224,1226,1229,1231,1233,1235,1237,1239],{"class":127,"line":302},[125,1214,927],{"class":229},[125,1216,1217],{"class":198}," saved ",[125,1219,236],{"class":194},[125,1221,1151],{"class":190},[125,1223,1154],{"class":198},[125,1225,408],{"class":194},[125,1227,1228],{"class":239},"findOne",[125,1230,242],{"class":198},[125,1232,263],{"class":194},[125,1234,260],{"class":135},[125,1236,263],{"class":194},[125,1238,646],{"class":194},[125,1240,568],{"class":194},[125,1242,1243,1246,1248],{"class":127,"line":319},[125,1244,1245],{"class":251},"  where",[125,1247,255],{"class":194},[125,1249,568],{"class":194},[125,1251,1252,1255,1257],{"class":127,"line":335},[125,1253,1254],{"class":251},"    conditions",[125,1256,255],{"class":194},[125,1258,293],{"class":198},[125,1260,1261,1264,1267,1269,1271,1273,1275,1277,1280,1282,1284,1287,1289,1291,1293,1295,1298,1300,1303],{"class":127,"line":352},[125,1262,1263],{"class":194},"      {",[125,1265,1266],{"class":251}," field",[125,1268,255],{"class":194},[125,1270,208],{"class":194},[125,1272,312],{"class":135},[125,1274,263],{"class":194},[125,1276,646],{"class":194},[125,1278,1279],{"class":251}," operator",[125,1281,255],{"class":194},[125,1283,208],{"class":194},[125,1285,1286],{"class":135},"eq",[125,1288,263],{"class":194},[125,1290,646],{"class":194},[125,1292,580],{"class":251},[125,1294,255],{"class":194},[125,1296,1297],{"class":198}," user",[125,1299,408],{"class":194},[125,1301,1302],{"class":198},"id ",[125,1304,1025],{"class":194},[125,1306,1307],{"class":127,"line":366},[125,1308,1309],{"class":198},"    ]\n",[125,1311,1312],{"class":127,"line":379},[125,1313,1314],{"class":194},"  }\n",[125,1316,1317,1319],{"class":127,"line":391},[125,1318,842],{"class":194},[125,1320,611],{"class":198},[160,1322,1323,1324,1327],{},"No ",[122,1325,1326],{},"User"," interface or explicit generic is required. If an application needs a\ncustom projection, explicit generics remain supported.",[114,1329,1331],{"className":180,"code":1330,"language":183,"meta":120,"style":120},"const user = await engine.findOne\u003CPublicUser>('users', { where })\n",[122,1332,1333],{"__ignoreMap":120},[125,1334,1335,1337,1339,1341,1343,1345,1347,1349,1352,1355,1358,1360,1362,1364,1366,1368,1370,1373,1375],{"class":127,"line":128},[125,1336,927],{"class":229},[125,1338,1146],{"class":198},[125,1340,236],{"class":194},[125,1342,1151],{"class":190},[125,1344,1154],{"class":198},[125,1346,408],{"class":194},[125,1348,1228],{"class":239},[125,1350,1351],{"class":194},"\u003C",[125,1353,1354],{"class":131},"PublicUser",[125,1356,1357],{"class":194},">",[125,1359,242],{"class":198},[125,1361,263],{"class":194},[125,1363,260],{"class":135},[125,1365,263],{"class":194},[125,1367,646],{"class":194},[125,1369,195],{"class":194},[125,1371,1372],{"class":198}," where ",[125,1374,842],{"class":194},[125,1376,611],{"class":198},[109,1378,1380],{"id":1379},"next","Next",[1382,1383,1386,1390,1393],"u-page-grid",{"className":1384},[1385],"gap-3",[1387,1388],"u-page-card",{"description":1389,"icon":24,"title":21,"to":22},"Learn inference, indexes, audit settings and registry rules.",[1387,1391],{"description":1392,"icon":71,"title":68,"to":69},"Compose filters, sorting and safe mutations.",[1387,1394],{"description":1395,"icon":66,"title":63,"to":64},"Run the complete package against PostgreSQL.",[1397,1398,1399],"style",{},"html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}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 .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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}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 .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}",{"title":120,"searchDepth":128,"depth":148,"links":1401},[1402,1403,1404,1405,1406],{"id":111,"depth":148,"text":112},{"id":165,"depth":148,"text":166},{"id":847,"depth":148,"text":848},{"id":1132,"depth":148,"text":1133},{"id":1379,"depth":148,"text":1380},"Create a typed OpenSya Persistence runtime with PostgreSQL and Drizzle.","md",null,{},{"icon":8},{"title":5,"description":1407},"kqruwVa8CmLO3T-kulM44a46HmDtzh0puWfsfq7O5hU",[1409,1415],{"title":16,"path":17,"stem":18,"description":1416,"icon":19,"children":-1},"How metadata, execution services, and database adapters work together.",1783784235117]