[{"data":1,"prerenderedAt":518},["ShallowReactive",2],{"navigation":3,"\u002Fguides\u002Ffield-visibility":103,"\u002Fguides\u002Ffield-visibility-surround":513},[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":53,"body":105,"description":506,"extension":507,"links":508,"meta":509,"navigation":510,"path":54,"seo":511,"stem":55,"__hash__":512},"docs\u002F03.guides\u002Ffield-visibility.md",{"type":106,"value":107,"toc":502},"minimark",[108,112,117,261,288,292,391,394,486,489,498],[109,110,111],"p",{},"Visibility controls serialization, not storage. Validators, hooks and the\ndatabase adapter still receive complete entities; callers receive filtered ones.",[113,114,116],"h2",{"id":115},"always-hidden","Always hidden",[118,119,124],"pre",{"className":120,"code":121,"language":122,"meta":123,"style":123},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  name: 'password',\n  columnName: 'password',\n  type: 'string',\n  nullable: false,\n  primaryKey: false,\n  unique: false,\n  hidden: true,\n  validators: []\n}\n","ts","",[125,126,127,136,159,175,192,206,218,230,243,255],"code",{"__ignoreMap":123},[128,129,132],"span",{"class":130,"line":131},"line",1,[128,133,135],{"class":134},"sMK4o","{\n",[128,137,139,143,146,149,153,156],{"class":130,"line":138},2,[128,140,142],{"class":141},"sBMFI","  name",[128,144,145],{"class":134},":",[128,147,148],{"class":134}," '",[128,150,152],{"class":151},"sfazB","password",[128,154,155],{"class":134},"'",[128,157,158],{"class":134},",\n",[128,160,162,165,167,169,171,173],{"class":130,"line":161},3,[128,163,164],{"class":141},"  columnName",[128,166,145],{"class":134},[128,168,148],{"class":134},[128,170,152],{"class":151},[128,172,155],{"class":134},[128,174,158],{"class":134},[128,176,178,181,183,185,188,190],{"class":130,"line":177},4,[128,179,180],{"class":141},"  type",[128,182,145],{"class":134},[128,184,148],{"class":134},[128,186,187],{"class":151},"string",[128,189,155],{"class":134},[128,191,158],{"class":134},[128,193,195,198,200,204],{"class":130,"line":194},5,[128,196,197],{"class":141},"  nullable",[128,199,145],{"class":134},[128,201,203],{"class":202},"sfNiH"," false",[128,205,158],{"class":134},[128,207,209,212,214,216],{"class":130,"line":208},6,[128,210,211],{"class":141},"  primaryKey",[128,213,145],{"class":134},[128,215,203],{"class":202},[128,217,158],{"class":134},[128,219,221,224,226,228],{"class":130,"line":220},7,[128,222,223],{"class":141},"  unique",[128,225,145],{"class":134},[128,227,203],{"class":202},[128,229,158],{"class":134},[128,231,233,236,238,241],{"class":130,"line":232},8,[128,234,235],{"class":141},"  hidden",[128,237,145],{"class":134},[128,239,240],{"class":202}," true",[128,242,158],{"class":134},[128,244,246,249,251],{"class":130,"line":245},9,[128,247,248],{"class":141},"  validators",[128,250,145],{"class":134},[128,252,254],{"class":253},"swJcz"," []\n",[128,256,258],{"class":130,"line":257},10,[128,259,260],{"class":134},"}\n",[109,262,263,266,267,270,271,270,274,270,277,158,280,283,284,287],{},[125,264,265],{},"hidden"," fields are removed from ",[125,268,269],{},"findMany",", ",[125,272,273],{},"findOne",[125,275,276],{},"findPage",[125,278,279],{},"create",[125,281,282],{},"updateOne"," and ",[125,285,286],{},"updateMany",". They are also removed inside populated relations.\nType inference excludes them from returned entities.",[113,289,291],{"id":290},"contextual-visibility","Contextual visibility",[118,293,295],{"className":120,"code":294,"language":122,"meta":123,"style":123},"{\n  name: 'salary',\n  \u002F\u002F ...\n  visibility({ user, entity, tenantId }) {\n    return canViewSalary(user, entity, tenantId)\n  }\n}\n",[125,296,297,301,316,322,357,382,387],{"__ignoreMap":123},[128,298,299],{"class":130,"line":131},[128,300,135],{"class":134},[128,302,303,305,307,309,312,314],{"class":130,"line":138},[128,304,142],{"class":141},[128,306,145],{"class":134},[128,308,148],{"class":134},[128,310,311],{"class":151},"salary",[128,313,155],{"class":134},[128,315,158],{"class":134},[128,317,318],{"class":130,"line":161},[128,319,321],{"class":320},"sHwdD","  \u002F\u002F ...\n",[128,323,324,328,331,334,338,341,344,346,349,352,355],{"class":130,"line":177},[128,325,327],{"class":326},"s2Zo4","  visibility",[128,329,330],{"class":253},"(",[128,332,333],{"class":134},"{",[128,335,337],{"class":336},"sTEyZ"," user",[128,339,340],{"class":134},",",[128,342,343],{"class":336}," entity",[128,345,340],{"class":134},[128,347,348],{"class":336}," tenantId",[128,350,351],{"class":134}," }",[128,353,354],{"class":253},") ",[128,356,135],{"class":134},[128,358,359,363,366,368,371,373,375,377,379],{"class":130,"line":194},[128,360,362],{"class":361},"s7zQu","    return",[128,364,365],{"class":326}," canViewSalary",[128,367,330],{"class":253},[128,369,370],{"class":336},"user",[128,372,340],{"class":134},[128,374,343],{"class":336},[128,376,340],{"class":134},[128,378,348],{"class":336},[128,380,381],{"class":253},")\n",[128,383,384],{"class":130,"line":208},[128,385,386],{"class":134},"  }\n",[128,388,389],{"class":130,"line":220},[128,390,260],{"class":134},[109,392,393],{},"Pass the visibility context on reads:",[118,395,397],{"className":120,"code":396,"language":122,"meta":123,"style":123},"const employee = await engine.findOne('employees', {\n  where: byId(id),\n  context: { user: actor, tenantId, requestId }\n})\n",[125,398,399,436,451,479],{"__ignoreMap":123},[128,400,401,405,408,411,414,417,420,422,424,426,429,431,433],{"class":130,"line":131},[128,402,404],{"class":403},"spNyl","const",[128,406,407],{"class":336}," employee ",[128,409,410],{"class":134},"=",[128,412,413],{"class":361}," await",[128,415,416],{"class":336}," engine",[128,418,419],{"class":134},".",[128,421,273],{"class":326},[128,423,330],{"class":336},[128,425,155],{"class":134},[128,427,428],{"class":151},"employees",[128,430,155],{"class":134},[128,432,340],{"class":134},[128,434,435],{"class":134}," {\n",[128,437,438,441,443,446,449],{"class":130,"line":138},[128,439,440],{"class":253},"  where",[128,442,145],{"class":134},[128,444,445],{"class":326}," byId",[128,447,448],{"class":336},"(id)",[128,450,158],{"class":134},[128,452,453,456,458,461,463,465,468,470,472,474,477],{"class":130,"line":161},[128,454,455],{"class":253},"  context",[128,457,145],{"class":134},[128,459,460],{"class":134}," {",[128,462,337],{"class":253},[128,464,145],{"class":134},[128,466,467],{"class":336}," actor",[128,469,340],{"class":134},[128,471,348],{"class":336},[128,473,340],{"class":134},[128,475,476],{"class":336}," requestId ",[128,478,260],{"class":134},[128,480,481,484],{"class":130,"line":177},[128,482,483],{"class":134},"}",[128,485,381],{"class":336},[109,487,488],{},"Resolvers run per entity and may be asynchronous. Dynamically visible fields\nare optional in the inferred result because their presence depends on context.",[490,491,495],"callout",{"color":492,"icon":493,"variant":494},"warning","i-tabler-shield-exclamation","subtle",[109,496,497],{},"Visibility is not write authorization. A hidden field can still be written.\nUse hooks or a dedicated authorization layer to control mutations.",[499,500,501],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}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 pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}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 .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 pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}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 .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}",{"title":123,"searchDepth":131,"depth":138,"links":503},[504,505],{"id":115,"depth":138,"text":116},{"id":290,"depth":138,"text":291},"Remove hidden and context-sensitive fields from every engine result.","md",null,{},{"icon":56},{"title":53,"description":506},"4A4xquIxn8fe7sht8H2TfGrAAPu6mLsxMbalU1ZWDVM",[514,516],{"title":48,"path":49,"stem":50,"description":515,"icon":51,"children":-1},"Persist typed business events atomically and publish them from an outbox.",{"title":58,"path":59,"stem":60,"description":517,"icon":61,"children":-1},"Run ordered domain behavior around transactional mutations.",1783784235117]