[{"data":1,"prerenderedAt":4835},["ShallowReactive",2],{"navigation":3,"\u002Fservices\u002Flookup":927,"mdc--r90ic6-key":4725,"mdc-3hd12e-key":4780,"mdc--r7pkvy-key":4819},[4,40,114,446,474,498,596,903],{"title":5,"path":6,"stem":7,"children":8},"Architecture","\u002Farchitecture","architecture",[9,14,28,32,36],{"title":10,"path":6,"stem":11,"access":12,"icon":13},"Overview","architecture\u002Findex","public","i-lucide-network",{"title":10,"path":15,"stem":16,"children":17,"access":12,"icon":19},"\u002Farchitecture\u002Fkernel","architecture\u002F1.kernel\u002Findex",[18,20,24],{"title":10,"path":15,"stem":16,"access":12,"icon":19},"i-lucide-box",{"title":21,"path":22,"stem":23,"access":12},"Enclave","\u002Farchitecture\u002Fkernel\u002Fenclave","architecture\u002F1.kernel\u002Fenclave",{"title":25,"path":26,"stem":27,"access":12},"Forking the enclave","\u002Farchitecture\u002Fkernel\u002Fforking-the-enclave","architecture\u002F1.kernel\u002Fforking-the-enclave",{"title":29,"path":30,"stem":31,"access":12},"Ports","\u002Farchitecture\u002Fports","architecture\u002F2.ports",{"title":33,"path":34,"stem":35,"access":12},"Service layers","\u002Farchitecture\u002Fservice-layers","architecture\u002F3.service-layers",{"title":37,"path":38,"stem":39,"access":12},"Families","\u002Farchitecture\u002Ffamilies","architecture\u002F4.families",{"title":41,"path":42,"stem":43,"children":44},"Core","\u002Fcore","core",[45,47,50,53,56,88,97],{"title":10,"path":42,"stem":46,"access":12,"icon":19},"core\u002Findex",{"title":10,"path":48,"stem":49,"access":12},"\u002Fcore\u002F01-overview","core\u002F01-overview",{"title":10,"path":51,"stem":52,"access":12},"\u002Fcore\u002F05-stores","core\u002F05-stores",{"title":10,"path":54,"stem":55,"access":12},"\u002Fcore\u002F06-permissions-and-keyring","core\u002F06-permissions-and-keyring",{"title":10,"path":57,"stem":58,"children":59,"access":12},"\u002Fcore\u002Fnoydb","core\u002F2.noydb\u002Findex",[60,61,65,68,72,76,80,84],{"title":10,"path":57,"stem":58,"access":12},{"title":62,"path":63,"stem":64,"access":12},"Noydb","\u002Fcore\u002Fnoydb\u002Fmethods","core\u002F2.noydb\u002F1.methods",{"title":21,"path":66,"stem":67,"access":12},"\u002Fcore\u002Fnoydb\u002Fenclave","core\u002F2.noydb\u002F2.enclave",{"title":69,"path":70,"stem":71,"access":12},"Secret & keyring","\u002Fcore\u002Fnoydb\u002Fkeyring","core\u002F2.noydb\u002F3.keyring",{"title":73,"path":74,"stem":75,"access":12},"Authentication","\u002Fcore\u002Fnoydb\u002Fauthentication","core\u002F2.noydb\u002F4.authentication",{"title":77,"path":78,"stem":79,"access":12},"Auth recovery","\u002Fcore\u002Fnoydb\u002Frecovery","core\u002F2.noydb\u002F5.recovery",{"title":81,"path":82,"stem":83,"access":12},"Configuration","\u002Fcore\u002Fnoydb\u002Fconfiguration","core\u002F2.noydb\u002F6.configuration",{"title":85,"path":86,"stem":87,"access":12},"Strategies","\u002Fcore\u002Fnoydb\u002Fstrategies","core\u002F2.noydb\u002F7.strategies",{"title":10,"path":89,"stem":90,"children":91,"access":12},"\u002Fcore\u002Fvault","core\u002F3.vault\u002Findex",[92,93],{"title":10,"path":89,"stem":90,"access":12},{"title":94,"path":95,"stem":96,"access":12},"Vault","\u002Fcore\u002Fvault\u002Fmethods","core\u002F3.vault\u002F1.methods",{"title":10,"path":98,"stem":99,"children":100,"access":12},"\u002Fcore\u002Fcollection","core\u002F4.collection\u002Findex",[101,102,106,110],{"title":10,"path":98,"stem":99,"access":12},{"title":103,"path":104,"stem":105,"access":12},"Collection","\u002Fcore\u002Fcollection\u002Fmethods","core\u002F4.collection\u002F1.methods",{"title":107,"path":108,"stem":109,"access":12},"Querying","\u002Fcore\u002Fcollection\u002Fquerying","core\u002F4.collection\u002F2.querying",{"title":111,"path":112,"stem":113,"access":12},"Schema","\u002Fcore\u002Fcollection\u002Fschema","core\u002F4.collection\u002F3.schema",{"title":37,"path":115,"stem":116,"children":117},"\u002Ffamilies","families",[118,121,168,194,208,212,216,294,340],{"title":10,"path":115,"stem":119,"access":12,"icon":120},"families\u002Findex","i-lucide-plug",{"title":122,"path":123,"stem":124,"children":125,"access":12,"icon":127},"as-Exports","\u002Ffamilies\u002Fas","families\u002Fas\u002Findex",[126,128,132,136,140,144,148,152,156,160,164],{"title":122,"path":123,"stem":124,"access":12,"icon":127},"i-lucide-book-open",{"title":129,"path":130,"stem":131,"access":12},"aws-s3","\u002Ffamilies\u002Fas\u002Faws-s3","families\u002Fas\u002Faws-s3",{"title":133,"path":134,"stem":135,"access":12},"blob","\u002Ffamilies\u002Fas\u002Fblob","families\u002Fas\u002Fblob",{"title":137,"path":138,"stem":139,"access":12},"csv","\u002Ffamilies\u002Fas\u002Fcsv","families\u002Fas\u002Fcsv",{"title":141,"path":142,"stem":143,"access":12},"json","\u002Ffamilies\u002Fas\u002Fjson","families\u002Fas\u002Fjson",{"title":145,"path":146,"stem":147,"access":12},"ndjson","\u002Ffamilies\u002Fas\u002Fndjson","families\u002Fas\u002Fndjson",{"title":149,"path":150,"stem":151,"access":12},"noydb","\u002Ffamilies\u002Fas\u002Fnoydb","families\u002Fas\u002Fnoydb",{"title":153,"path":154,"stem":155,"access":12},"sql","\u002Ffamilies\u002Fas\u002Fsql","families\u002Fas\u002Fsql",{"title":157,"path":158,"stem":159,"access":12},"xlsx","\u002Ffamilies\u002Fas\u002Fxlsx","families\u002Fas\u002Fxlsx",{"title":161,"path":162,"stem":163,"access":12},"xml","\u002Ffamilies\u002Fas\u002Fxml","families\u002Fas\u002Fxml",{"title":165,"path":166,"stem":167,"access":12},"zip","\u002Ffamilies\u002Fas\u002Fzip","families\u002Fas\u002Fzip",{"title":169,"path":170,"stem":171,"children":172,"access":12,"icon":127},"at-Seals","\u002Ffamilies\u002Fat","families\u002Fat\u002Findex",[173,174,178,182,186,190],{"title":169,"path":170,"stem":171,"access":12,"icon":127},{"title":175,"path":176,"stem":177,"access":12},"aws-kms","\u002Ffamilies\u002Fat\u002Faws-kms","families\u002Fat\u002Faws-kms",{"title":179,"path":180,"stem":181,"access":12},"azure-keyvault","\u002Ffamilies\u002Fat\u002Fazure-keyvault","families\u002Fat\u002Fazure-keyvault",{"title":183,"path":184,"stem":185,"access":12},"env","\u002Ffamilies\u002Fat\u002Fenv","families\u002Fat\u002Fenv",{"title":187,"path":188,"stem":189,"access":12},"gcp-kms","\u002Ffamilies\u002Fat\u002Fgcp-kms","families\u002Fat\u002Fgcp-kms",{"title":191,"path":192,"stem":193,"access":12},"macos-keychain","\u002Ffamilies\u002Fat\u002Fmacos-keychain","families\u002Fat\u002Fmacos-keychain",{"title":195,"path":196,"stem":197,"children":198,"access":12,"icon":127},"by-Sessions","\u002Ffamilies\u002Fby","families\u002Fby\u002Findex",[199,200,204],{"title":195,"path":196,"stem":197,"access":12,"icon":127},{"title":201,"path":202,"stem":203,"access":12},"peer","\u002Ffamilies\u002Fby\u002Fpeer","families\u002Fby\u002Fpeer",{"title":205,"path":206,"stem":207,"access":12},"tabs","\u002Ffamilies\u002Fby\u002Ftabs","families\u002Fby\u002Ftabs",{"title":209,"path":210,"stem":211,"access":12},"Classifying a package","\u002Ffamilies\u002Fclassification","families\u002Fclassification",{"title":213,"path":214,"stem":215,"access":12},"Command-line tools","\u002Ffamilies\u002Fcli","families\u002Fcli",{"title":217,"path":218,"stem":219,"children":220,"access":12,"icon":127},"in-Frameworks","\u002Ffamilies\u002Fin","families\u002Fin\u002Findex",[221,222,226,230,234,238,242,246,250,254,258,262,266,270,274,278,282,286,290],{"title":217,"path":218,"stem":219,"access":12,"icon":127},{"title":223,"path":224,"stem":225,"access":12},"ai","\u002Ffamilies\u002Fin\u002Fai","families\u002Fin\u002Fai",{"title":227,"path":228,"stem":229,"access":12},"devtools","\u002Ffamilies\u002Fin\u002Fdevtools","families\u002Fin\u002Fdevtools",{"title":231,"path":232,"stem":233,"access":12},"devtools-tui","\u002Ffamilies\u002Fin\u002Fdevtools-tui","families\u002Fin\u002Fdevtools-tui",{"title":235,"path":236,"stem":237,"access":12},"liff","\u002Ffamilies\u002Fin\u002Fliff","families\u002Fin\u002Fliff",{"title":239,"path":240,"stem":241,"access":12},"nextjs","\u002Ffamilies\u002Fin\u002Fnextjs","families\u002Fin\u002Fnextjs",{"title":243,"path":244,"stem":245,"access":12},"nuxt","\u002Ffamilies\u002Fin\u002Fnuxt","families\u002Fin\u002Fnuxt",{"title":247,"path":248,"stem":249,"access":12},"pinia","\u002Ffamilies\u002Fin\u002Fpinia","families\u002Fin\u002Fpinia",{"title":251,"path":252,"stem":253,"access":12},"pwa","\u002Ffamilies\u002Fin\u002Fpwa","families\u002Fin\u002Fpwa",{"title":255,"path":256,"stem":257,"access":12},"react","\u002Ffamilies\u002Fin\u002Freact","families\u002Fin\u002Freact",{"title":259,"path":260,"stem":261,"access":12},"relay","\u002Ffamilies\u002Fin\u002Frelay","families\u002Fin\u002Frelay",{"title":263,"path":264,"stem":265,"access":12},"rest","\u002Ffamilies\u002Fin\u002Frest","families\u002Fin\u002Frest",{"title":267,"path":268,"stem":269,"access":12},"solid","\u002Ffamilies\u002Fin\u002Fsolid","families\u002Fin\u002Fsolid",{"title":271,"path":272,"stem":273,"access":12},"svelte","\u002Ffamilies\u002Fin\u002Fsvelte","families\u002Fin\u002Fsvelte",{"title":275,"path":276,"stem":277,"access":12},"tanstack-query","\u002Ffamilies\u002Fin\u002Ftanstack-query","families\u002Fin\u002Ftanstack-query",{"title":279,"path":280,"stem":281,"access":12},"tanstack-table","\u002Ffamilies\u002Fin\u002Ftanstack-table","families\u002Fin\u002Ftanstack-table",{"title":283,"path":284,"stem":285,"access":12},"vue","\u002Ffamilies\u002Fin\u002Fvue","families\u002Fin\u002Fvue",{"title":287,"path":288,"stem":289,"access":12},"yjs","\u002Ffamilies\u002Fin\u002Fyjs","families\u002Fin\u002Fyjs",{"title":291,"path":292,"stem":293,"access":12},"zustand","\u002Ffamilies\u002Fin\u002Fzustand","families\u002Fin\u002Fzustand",{"title":295,"path":296,"stem":297,"children":298,"access":12,"icon":127},"on-Auth","\u002Ffamilies\u002Fon","families\u002Fon\u002Findex",[299,300,304,308,312,316,320,324,328,332,336],{"title":295,"path":296,"stem":297,"access":12,"icon":127},{"title":301,"path":302,"stem":303,"access":12},"email-otp","\u002Ffamilies\u002Fon\u002Femail-otp","families\u002Fon\u002Femail-otp",{"title":305,"path":306,"stem":307,"access":12},"magic-link","\u002Ffamilies\u002Fon\u002Fmagic-link","families\u002Fon\u002Fmagic-link",{"title":309,"path":310,"stem":311,"access":12},"oidc","\u002Ffamilies\u002Fon\u002Foidc","families\u002Fon\u002Foidc",{"title":313,"path":314,"stem":315,"access":12},"password","\u002Ffamilies\u002Fon\u002Fpassword","families\u002Fon\u002Fpassword",{"title":317,"path":318,"stem":319,"access":12},"pin","\u002Ffamilies\u002Fon\u002Fpin","families\u002Fon\u002Fpin",{"title":321,"path":322,"stem":323,"access":12},"recovery","\u002Ffamilies\u002Fon\u002Frecovery","families\u002Fon\u002Frecovery",{"title":325,"path":326,"stem":327,"access":12},"shamir","\u002Ffamilies\u002Fon\u002Fshamir","families\u002Fon\u002Fshamir",{"title":329,"path":330,"stem":331,"access":12},"threat","\u002Ffamilies\u002Fon\u002Fthreat","families\u002Fon\u002Fthreat",{"title":333,"path":334,"stem":335,"access":12},"totp","\u002Ffamilies\u002Fon\u002Ftotp","families\u002Fon\u002Ftotp",{"title":337,"path":338,"stem":339,"access":12},"webauthn","\u002Ffamilies\u002Fon\u002Fwebauthn","families\u002Fon\u002Fwebauthn",{"title":341,"path":342,"stem":343,"children":344,"access":12,"icon":127},"to-Stores","\u002Ffamilies\u002Fto","families\u002Fto\u002Findex",[345,346,350,353,357,361,365,370,374,378,382,386,390,394,398,402,406,410,414,417,421,425,429,434,438,442],{"title":341,"path":342,"stem":343,"access":12,"icon":127},{"title":347,"path":348,"stem":349,"access":12},"aws-dynamo","\u002Ffamilies\u002Fto\u002Faws-dynamo","families\u002Fto\u002Faws-dynamo",{"title":129,"path":351,"stem":352,"access":12},"\u002Ffamilies\u002Fto\u002Faws-s3","families\u002Fto\u002Faws-s3",{"title":354,"path":355,"stem":356,"access":12},"browser-fs","\u002Ffamilies\u002Fto\u002Fbrowser-fs","families\u002Fto\u002Fbrowser-fs",{"title":358,"path":359,"stem":360,"access":12},"browser-idb","\u002Ffamilies\u002Fto\u002Fbrowser-idb","families\u002Fto\u002Fbrowser-idb",{"title":362,"path":363,"stem":364,"access":12},"browser-local","\u002Ffamilies\u002Fto\u002Fbrowser-local","families\u002Fto\u002Fbrowser-local",{"title":366,"path":367,"stem":368,"access":12,"icon":369},"Choosing a store","\u002Ffamilies\u002Fto\u002Fchoosing-a-store","families\u002Fto\u002Fchoosing-a-store","i-lucide-split",{"title":371,"path":372,"stem":373,"access":12},"cloudflare-d1","\u002Ffamilies\u002Fto\u002Fcloudflare-d1","families\u002Fto\u002Fcloudflare-d1",{"title":375,"path":376,"stem":377,"access":12},"cloudflare-r2","\u002Ffamilies\u002Fto\u002Fcloudflare-r2","families\u002Fto\u002Fcloudflare-r2",{"title":379,"path":380,"stem":381,"access":12},"drive","\u002Ffamilies\u002Fto\u002Fdrive","families\u002Fto\u002Fdrive",{"title":383,"path":384,"stem":385,"access":12},"file","\u002Ffamilies\u002Fto\u002Ffile","families\u002Fto\u002Ffile",{"title":387,"path":388,"stem":389,"access":12},"icloud","\u002Ffamilies\u002Fto\u002Ficloud","families\u002Fto\u002Ficloud",{"title":391,"path":392,"stem":393,"access":12},"memory","\u002Ffamilies\u002Fto\u002Fmemory","families\u002Fto\u002Fmemory",{"title":395,"path":396,"stem":397,"access":12},"meter","\u002Ffamilies\u002Fto\u002Fmeter","families\u002Fto\u002Fmeter",{"title":399,"path":400,"stem":401,"access":12},"mysql","\u002Ffamilies\u002Fto\u002Fmysql","families\u002Fto\u002Fmysql",{"title":403,"path":404,"stem":405,"access":12},"nfs","\u002Ffamilies\u002Fto\u002Fnfs","families\u002Fto\u002Fnfs",{"title":407,"path":408,"stem":409,"access":12},"postgres","\u002Ffamilies\u002Fto\u002Fpostgres","families\u002Fto\u002Fpostgres",{"title":411,"path":412,"stem":413,"access":12},"probe","\u002Ffamilies\u002Fto\u002Fprobe","families\u002Fto\u002Fprobe",{"title":263,"path":415,"stem":416,"access":12},"\u002Ffamilies\u002Fto\u002Frest","families\u002Fto\u002Frest",{"title":418,"path":419,"stem":420,"access":12},"smb","\u002Ffamilies\u002Fto\u002Fsmb","families\u002Fto\u002Fsmb",{"title":422,"path":423,"stem":424,"access":12},"sqlite","\u002Ffamilies\u002Fto\u002Fsqlite","families\u002Fto\u002Fsqlite",{"title":426,"path":427,"stem":428,"access":12},"ssh","\u002Ffamilies\u002Fto\u002Fssh","families\u002Fto\u002Fssh",{"title":430,"path":431,"stem":432,"access":12,"icon":433},"Store-locator descriptors","\u002Ffamilies\u002Fto\u002Fstore-locator","families\u002Fto\u002Fstore-locator","i-lucide-map-pin",{"title":435,"path":436,"stem":437,"access":12},"supabase","\u002Ffamilies\u002Fto\u002Fsupabase","families\u002Fto\u002Fsupabase",{"title":439,"path":440,"stem":441,"access":12},"turso","\u002Ffamilies\u002Fto\u002Fturso","families\u002Fto\u002Fturso",{"title":443,"path":444,"stem":445,"access":12},"webdav","\u002Ffamilies\u002Fto\u002Fwebdav","families\u002Fto\u002Fwebdav",{"title":447,"path":448,"stem":449,"children":450},"Faq","\u002Ffaq","faq",[451,454,458,462,466,470],{"title":10,"path":448,"stem":452,"access":12,"icon":453},"faq\u002Findex","i-lucide-circle-help",{"title":455,"path":456,"stem":457,"access":12},"Where can noy-db run?","\u002Ffaq\u002Fwhere-can-noy-db-run","faq\u002F1.where-can-noy-db-run",{"title":459,"path":460,"stem":461,"access":12},"Native mobile & PWA","\u002Ffaq\u002Fmobile-and-pwa","faq\u002F2.mobile-and-pwa",{"title":463,"path":464,"stem":465,"access":12},"Threat model","\u002Ffaq\u002Fthreat-model","faq\u002F3.threat-model",{"title":467,"path":468,"stem":469,"access":12},"Community & ecosystem","\u002Ffaq\u002Fcommunity-and-ecosystem","faq\u002F4.community-and-ecosystem",{"title":471,"path":472,"stem":473,"access":12},"Licensing","\u002Ffaq\u002Flicensing","faq\u002F5.licensing",{"title":475,"path":476,"stem":477,"children":478},"Glossary","\u002Fglossary","glossary",[479,482,486,490,494],{"title":10,"path":476,"stem":480,"access":12,"icon":481},"glossary\u002Findex","i-lucide-book-a",{"title":483,"path":484,"stem":485,"access":12},"Core vocabulary","\u002Fglossary\u002Fcore-vocabulary","glossary\u002Fcore-vocabulary",{"title":487,"path":488,"stem":489,"access":12},"Deletion vocabulary","\u002Fglossary\u002Fdeletion","glossary\u002Fdeletion",{"title":491,"path":492,"stem":493,"access":12},"Satellite collection vocabulary","\u002Fglossary\u002Fsatellite-collections","glossary\u002Fsatellite-collections",{"title":495,"path":496,"stem":497,"access":12},"Schema migration vocabulary","\u002Fglossary\u002Fschema-migration","glossary\u002Fschema-migration",{"title":499,"path":500,"stem":501,"children":502},"Recipes","\u002Frecipes","recipes",[503,506,510,514,518,522,526,530,534,538,542,546,550,554,558,562,567,571,575,580,584,588,592],{"title":10,"path":500,"stem":504,"access":12,"icon":505},"recipes\u002Findex","i-lucide-play",{"title":507,"path":508,"stem":509,"access":12},"Accounting app","\u002Frecipes\u002Faccounting-app","recipes\u002Faccounting-app",{"title":511,"path":512,"stem":513,"access":12},"Analytics app","\u002Frecipes\u002Fanalytics-app","recipes\u002Fanalytics-app",{"title":515,"path":516,"stem":517,"access":12},"Attestation verifier","\u002Frecipes\u002Fattestation-verifier","recipes\u002Fattestation-verifier",{"title":519,"path":520,"stem":521,"access":12},"AWS-KMS attestation","\u002Frecipes\u002Faws-kms-pdf-attestation","recipes\u002Faws-kms-pdf-attestation",{"title":523,"path":524,"stem":525,"access":12},"Browser durability","\u002Frecipes\u002Fbrowser-durability","recipes\u002Fbrowser-durability",{"title":527,"path":528,"stem":529,"access":12},"Production cloud store","\u002Frecipes\u002Fcloud-store","recipes\u002Fcloud-store",{"title":531,"path":532,"stem":533,"access":12},"Compose your own setup","\u002Frecipes\u002Fcompose-your-own","recipes\u002Fcompose-your-own",{"title":535,"path":536,"stem":537,"access":12},"Confidential HR records","\u002Frecipes\u002Fconfidential-hr","recipes\u002Fconfidential-hr",{"title":539,"path":540,"stem":541,"access":12},"Composing an echo secret","\u002Frecipes\u002Fecho-secret-enrollment","recipes\u002Fecho-secret-enrollment",{"title":543,"path":544,"stem":545,"access":12},"Email archive","\u002Frecipes\u002Femail-archive","recipes\u002Femail-archive",{"title":547,"path":548,"stem":549,"access":12},"Email archive — threads & revisions","\u002Frecipes\u002Femail-archive-threads-revisions","recipes\u002Femail-archive-threads-revisions",{"title":551,"path":552,"stem":553,"access":12},"Export & portability","\u002Frecipes\u002Fexport-portability","recipes\u002Fexport-portability",{"title":555,"path":556,"stem":557,"access":12},"Passwordless OIDC (AWS Cognito)","\u002Frecipes\u002Fpasswordless-oidc","recipes\u002Fpasswordless-oidc",{"title":559,"path":560,"stem":561,"access":12},"Personal notebook","\u002Frecipes\u002Fpersonal-notebook","recipes\u002Fpersonal-notebook",{"title":563,"path":564,"stem":565,"access":12,"icon":566},"Playgrounds","\u002Frecipes\u002Fplaygrounds","recipes\u002Fplaygrounds","i-lucide-gamepad-2",{"title":568,"path":569,"stem":570,"access":12},"React invoice app","\u002Frecipes\u002Freact-invoices","recipes\u002Freact-invoices",{"title":572,"path":573,"stem":574,"access":12},"Collaborative app","\u002Frecipes\u002Frealtime-crdt-app","recipes\u002Frealtime-crdt-app",{"title":576,"path":577,"stem":578,"access":12,"icon":579},"Run the showcases","\u002Frecipes\u002Frun-the-showcases","recipes\u002Frun-the-showcases","i-lucide-flask-conical",{"title":581,"path":582,"stem":583,"access":12},"Search & RAG","\u002Frecipes\u002Fsearch-rag","recipes\u002Fsearch-rag",{"title":585,"path":586,"stem":587,"access":12},"Team vault topology","\u002Frecipes\u002Fteam-vault-topology","recipes\u002Fteam-vault-topology",{"title":589,"path":590,"stem":591,"access":12},"Unlock ceremonies","\u002Frecipes\u002Funlock-ceremonies","recipes\u002Funlock-ceremonies",{"title":593,"path":594,"stem":595,"access":12},"User preferences","\u002Frecipes\u002Fuser-preferences","recipes\u002Fuser-preferences",{"title":597,"path":598,"stem":599,"children":600},"Services","\u002Fservices","services",[601,604,608,612,616,620,624,628,632,636,640,644,648,652,656,660,664,668,672,676,680,684,688,692,696,700,704,710,714,718,722,726,730,734,738,742,746,750,755,759,763,767,771,775,779,783,787,791,795,799,803,807,811,815,819,823,827,831,835,839,843,847,851,855,859,863,867,871,875,879,883,887,891,895,899],{"title":10,"path":598,"stem":602,"access":12,"icon":603},"services\u002Findex","i-lucide-layers",{"title":605,"path":606,"stem":607,"access":12},"archive","\u002Fservices\u002Farchive","services\u002Farchive",{"title":609,"path":610,"stem":611,"access":12},"attestation","\u002Fservices\u002Fattestation","services\u002Fattestation",{"title":613,"path":614,"stem":615,"access":12},"auth-introspection","\u002Fservices\u002Fauth-introspection","services\u002Fauth-introspection",{"title":617,"path":618,"stem":619,"access":12},"auth-landscape","\u002Fservices\u002Fauth-landscape","services\u002Fauth-landscape",{"title":621,"path":622,"stem":623,"access":12},"blobs","\u002Fservices\u002Fblobs","services\u002Fblobs",{"title":625,"path":626,"stem":627,"access":12},"broker","\u002Fservices\u002Fbroker","services\u002Fbroker",{"title":629,"path":630,"stem":631,"access":12},"bundle","\u002Fservices\u002Fbundle","services\u002Fbundle",{"title":633,"path":634,"stem":635,"access":12},"classified","\u002Fservices\u002Fclassified","services\u002Fclassified",{"title":637,"path":638,"stem":639,"access":12},"computed","\u002Fservices\u002Fcomputed","services\u002Fcomputed",{"title":641,"path":642,"stem":643,"access":12},"consent","\u002Fservices\u002Fconsent","services\u002Fconsent",{"title":645,"path":646,"stem":647,"access":12},"cover","\u002Fservices\u002Fcover","services\u002Fcover",{"title":649,"path":650,"stem":651,"access":12},"coverage","\u002Fservices\u002Fcoverage","services\u002Fcoverage",{"title":653,"path":654,"stem":655,"access":12},"crdt","\u002Fservices\u002Fcrdt","services\u002Fcrdt",{"title":657,"path":658,"stem":659,"access":12},"cross-join","\u002Fservices\u002Fcross-join","services\u002Fcross-join",{"title":661,"path":662,"stem":663,"access":12},"custody","\u002Fservices\u002Fcustody","services\u002Fcustody",{"title":665,"path":666,"stem":667,"access":12},"derivations","\u002Fservices\u002Fderivations","services\u002Fderivations",{"title":669,"path":670,"stem":671,"access":12},"directory","\u002Fservices\u002Fdirectory","services\u002Fdirectory",{"title":673,"path":674,"stem":675,"access":12},"search — AI","\u002Fservices\u002Fembeddings","services\u002Fembeddings",{"title":677,"path":678,"stem":679,"access":12},"Field metadata","\u002Fservices\u002Ffield-metadata","services\u002Ffield-metadata",{"title":681,"path":682,"stem":683,"access":12},"Foreign refs","\u002Fservices\u002Fforeign-refs","services\u002Fforeign-refs",{"title":685,"path":686,"stem":687,"access":12},"forget","\u002Fservices\u002Fforget","services\u002Fforget",{"title":689,"path":690,"stem":691,"access":12},"governance","\u002Fservices\u002Fgovernance","services\u002Fgovernance",{"title":693,"path":694,"stem":695,"access":12},"guards","\u002Fservices\u002Fguards","services\u002Fguards",{"title":697,"path":698,"stem":699,"access":12},"history","\u002Fservices\u002Fhistory","services\u002Fhistory",{"title":701,"path":702,"stem":703,"access":12},"i18n","\u002Fservices\u002Fi18n","services\u002Fi18n",{"title":705,"path":706,"stem":707,"children":708,"access":12},"indexing","\u002Fservices\u002Findexing","services\u002Findexing",[709],{"title":705,"path":706,"stem":707,"access":12},{"title":711,"path":712,"stem":713,"access":12},"introspection","\u002Fservices\u002Fintrospection","services\u002Fintrospection",{"title":715,"path":716,"stem":717,"access":12},"joins","\u002Fservices\u002Fjoins","services\u002Fjoins",{"title":719,"path":720,"stem":721,"access":12},"lazy","\u002Fservices\u002Flazy","services\u002Flazy",{"title":723,"path":724,"stem":725,"access":12},"links","\u002Fservices\u002Flinks","services\u002Flinks",{"title":727,"path":728,"stem":729,"access":12},"live","\u002Fservices\u002Flive","services\u002Flive",{"title":731,"path":732,"stem":733,"access":12},"lookup","\u002Fservices\u002Flookup","services\u002Flookup",{"title":735,"path":736,"stem":737,"access":12},"manifest","\u002Fservices\u002Fmanifest","services\u002Fmanifest",{"title":739,"path":740,"stem":741,"access":12},"materialized-views","\u002Fservices\u002Fmaterialized-views","services\u002Fmaterialized-views",{"title":743,"path":744,"stem":745,"access":12},"Metadata ladder","\u002Fservices\u002Fmetadata-ladder","services\u002Fmetadata-ladder",{"title":747,"path":748,"stem":749,"access":12},"Metadata riders","\u002Fservices\u002Fmetadata-riders","services\u002Fmetadata-riders",{"title":751,"path":752,"stem":753,"access":12,"badge":754},"metrics","\u002Fservices\u002Fmetrics","services\u002Fmetrics","Planned",{"title":756,"path":757,"stem":758,"access":12,"badge":754},"migrations","\u002Fservices\u002Fmigrations","services\u002Fmigrations",{"title":760,"path":761,"stem":762,"access":12},"money","\u002Fservices\u002Fmoney","services\u002Fmoney",{"title":764,"path":765,"stem":766,"access":12},"numbering","\u002Fservices\u002Fnumbering","services\u002Fnumbering",{"title":768,"path":769,"stem":770,"access":12},"overlay-views","\u002Fservices\u002Foverlay-views","services\u002Foverlay-views",{"title":772,"path":773,"stem":774,"access":12,"badge":754},"partitioning","\u002Fservices\u002Fpartitioning","services\u002Fpartitioning",{"title":776,"path":777,"stem":778,"access":12},"periods","\u002Fservices\u002Fperiods","services\u002Fperiods",{"title":780,"path":781,"stem":782,"access":12},"persisted-schemas","\u002Fservices\u002Fpersisted-schemas","services\u002Fpersisted-schemas",{"title":784,"path":785,"stem":786,"access":12},"plaintext-bypass","\u002Fservices\u002Fplaintext-bypass","services\u002Fplaintext-bypass",{"title":788,"path":789,"stem":790,"access":12},"pod-redirect","\u002Fservices\u002Fpod-redirect","services\u002Fpod-redirect",{"title":792,"path":793,"stem":794,"access":12},"pod-signature","\u002Fservices\u002Fpod-signature","services\u002Fpod-signature",{"title":796,"path":797,"stem":798,"access":12},"policy","\u002Fservices\u002Fpolicy","services\u002Fpolicy",{"title":800,"path":801,"stem":802,"access":12},"portability","\u002Fservices\u002Fportability","services\u002Fportability",{"title":804,"path":805,"stem":806,"access":12},"reduce","\u002Fservices\u002Freduce","services\u002Freduce",{"title":808,"path":809,"stem":810,"access":12},"routing","\u002Fservices\u002Frouting","services\u002Frouting",{"title":812,"path":813,"stem":814,"access":12},"satellites","\u002Fservices\u002Fsatellites","services\u002Fsatellites",{"title":816,"path":817,"stem":818,"access":12},"schema-identifiers","\u002Fservices\u002Fschema-identifiers","services\u002Fschema-identifiers",{"title":820,"path":821,"stem":822,"access":12},"schema-update","\u002Fservices\u002Fschema-update","services\u002Fschema-update",{"title":824,"path":825,"stem":826,"access":12},"sealed-record","\u002Fservices\u002Fsealed-record","services\u002Fsealed-record",{"title":828,"path":829,"stem":830,"access":12},"sealing provider id","\u002Fservices\u002Fsealing-pid-stability","services\u002Fsealing-pid-stability",{"title":832,"path":833,"stem":834,"access":12},"search — full-text","\u002Fservices\u002Fsearch","services\u002Fsearch",{"title":836,"path":837,"stem":838,"access":12},"sequence","\u002Fservices\u002Fsequence","services\u002Fsequence",{"title":840,"path":841,"stem":842,"access":12},"session","\u002Fservices\u002Fsession","services\u002Fsession",{"title":844,"path":845,"stem":846,"access":12},"session-tiers","\u002Fservices\u002Fsession-tiers","services\u002Fsession-tiers",{"title":848,"path":849,"stem":850,"access":12},"shadow","\u002Fservices\u002Fshadow","services\u002Fshadow",{"title":852,"path":853,"stem":854,"access":12},"share-link","\u002Fservices\u002Fshare-link","services\u002Fshare-link",{"title":856,"path":857,"stem":858,"access":12},"snapshots","\u002Fservices\u002Fsnapshots","services\u002Fsnapshots",{"title":860,"path":861,"stem":862,"access":12},"store capabilities","\u002Fservices\u002Fstorage-capability-matrix","services\u002Fstorage-capability-matrix",{"title":864,"path":865,"stem":866,"access":12},"sync","\u002Fservices\u002Fsync","services\u002Fsync",{"title":868,"path":869,"stem":870,"access":12},"team","\u002Fservices\u002Fteam","services\u002Fteam",{"title":872,"path":873,"stem":874,"access":12},"tiers","\u002Fservices\u002Ftiers","services\u002Ftiers",{"title":876,"path":877,"stem":878,"access":12},"transactions","\u002Fservices\u002Ftransactions","services\u002Ftransactions",{"title":880,"path":881,"stem":882,"access":12},"partitions","\u002Fservices\u002Ftransferable-partitions","services\u002Ftransferable-partitions",{"title":884,"path":885,"stem":886,"access":12},"user-envelope","\u002Fservices\u002Fuser-envelope","services\u002Fuser-envelope",{"title":888,"path":889,"stem":890,"access":12,"badge":754},"validation","\u002Fservices\u002Fvalidation","services\u002Fvalidation",{"title":892,"path":893,"stem":894,"access":12},"vault-head","\u002Fservices\u002Fvault-head","services\u002Fvault-head",{"title":896,"path":897,"stem":898,"access":12},"via","\u002Fservices\u002Fvia","services\u002Fvia",{"title":900,"path":901,"stem":902,"access":12},"withdrawal","\u002Fservices\u002Fwithdrawal","services\u002Fwithdrawal",{"title":904,"path":905,"stem":906,"children":907},"Start","\u002Fstart","start",[908,911,915,919,923],{"title":10,"path":905,"stem":909,"access":12,"icon":910},"start\u002Findex","i-lucide-flag",{"title":912,"path":913,"stem":914,"access":12},"Install","\u002Fstart\u002Finstall","start\u002F1.install",{"title":916,"path":917,"stem":918,"access":12},"Your first vault","\u002Fstart\u002Ffirst-vault","start\u002F2.first-vault",{"title":920,"path":921,"stem":922,"access":12},"Your first service","\u002Fstart\u002Ffirst-service","start\u002F3.first-service",{"title":924,"path":925,"stem":926,"access":12},"See the ciphertext","\u002Fstart\u002Fsee-the-ciphertext","start\u002F4.see-the-ciphertext",{"id":928,"title":731,"access":12,"apiToc":929,"body":930,"category":4715,"description":4716,"extension":4717,"meta":4718,"navigation":4715,"nest":4719,"path":732,"seo":4720,"sinceVersion":3905,"status":4721,"stem":733,"subtitle":4722,"tier":4723,"tocExternal":4715,"__hash__":4724},"docs\u002Fservices\u002Flookup.md",false,{"type":931,"value":932,"toc":4686},"minimark",[933,936,940,945,994,1023,1027,1037,1724,1751,1754,1935,1941,2001,2005,2012,2122,2153,2157,2193,2210,2214,2223,2287,2290,2293,2354,2371,2375,2386,2611,2621,2802,2817,2825,2843,2950,2975,2979,2982,3303,3337,3348,3354,3689,3717,3757,3771,3788,3793,3809,3860,3866,3870,3907,3917,3939,4027,4052,4056,4113,4117,4139,4155,4171,4175,4181,4186,4423,4432,4445,4451,4482,4486,4558,4562,4616,4620,4682],[934,935,731],"h1",{"id":731},[937,938],"service-meta",{":rows":939},"[{\"label\":\"Subpath\",\"value\":\"`@noy-db\u002Fhub` (root export — `lookup`, `enumOf` (also exported as `enum`), `dict`, `UnknownLookupKeyError`, `DictKeyInUseError`)\"},{\"label\":\"Wiring\",\"value\":\"no `with*()` strategy — declare `lookupFields: { field: lookup(...) }` (or `viaFields: { field: via(lookup(...)) }`) on `vault.collection()`\"},{\"label\":\"Kind\",\"value\":\"field feature — declared per field through the `via` surface\"}]",[941,942,944],"h2",{"id":943},"what-it-does","What it does",[946,947,948,949,953,954,957,958,961,962,965,966,969,970,973,974,977,978,981,982,985,986,989,990,993],"p",{},"A lookup field stores a stable ",[950,951,952],"strong",{},"code"," (",[952,955,956],{},"'US'",", ",[952,959,960],{},"'paid'",") and resolves everything else — display\nlabel, membership, ordering, reference integrity — against a ",[950,963,964],{},"backing dimension",". One\ndeclaration covers all three places such dimensions live: inline in code (",[952,967,968],{},"enumOf()","), in a\nper-vault editable dictionary (",[952,971,972],{},"dict()",", the ",[975,976,701],"a",{"href":702}," ",[952,979,980],{},"_dict_*"," machinery), or in a\n",[950,983,984],{},"first-class collection"," of the vault itself (",[952,987,988],{},"lookup()"," — a \"matrix\" dimension like a\n",[952,991,992],{},"countries"," collection, with as many columns as you like).",[946,995,996,997,1000,1001,1004,1005,953,1008,1011,1012,1011,1015,1018,1019,1022],{},"Beyond code→label resolution it adds three things codes alone can't do: ",[950,998,999],{},"altKeys"," (alternate\nidentifiers that normalize to the canonical key on write — an ISO3 country code, a phone call\nprefix), ",[950,1002,1003],{},"closed vocabulary"," (write-time refusal of unknown keys, checked against the\ndimension's live rows), and ",[950,1006,1007],{},"reference semantics",[952,1009,1010],{},"restrict"," \u002F ",[952,1013,1014],{},"cascade",[952,1016,1017],{},"nullify"," when a\nstill-referenced backing row is deleted or ",[975,1020,1021],{"href":686},"forgotten",").",[941,1024,1026],{"id":1025},"the-canonical-example-a-countries-matrix","The canonical example — a countries matrix",[946,1028,1029,1030,1032,1033,1036],{},"The reference pattern for lookup dimensions is a first-class ",[952,1031,992],{}," collection: ISO2 as the\ncanonical key, ISO3 and call prefix as alternate keys, localized names — and ",[950,1034,1035],{},"sparse, populated\nonly with what you use"," (add a row for a country the day you first need it; no schema migration,\nno 249-row seed):",[1038,1039,1044],"pre",{"className":1040,"code":1041,"language":1042,"meta":1043,"style":1043},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { lookup } from '@noy-db\u002Fhub'\n\ninterface Country { id: string; iso2: string; iso3: string; callPrefix: string; name: Record\u003Cstring, string> }\ninterface Order { id: string; country: string }\n\nconst countries = vault.collection\u003CCountry>('countries', {})\nawait countries.put('row-US', { id: 'row-US', iso2: 'US', iso3: 'USA', callPrefix: '+1',\n  name: { en: 'United States', th: 'สหรัฐอเมริกา' } })\nawait countries.put('row-TH', { id: 'row-TH', iso2: 'TH', iso3: 'THA', callPrefix: '+66',\n  name: { en: 'Thailand', th: 'ประเทศไทย' } })\n\nconst orders = vault.collection\u003COrder>('orders', {\n  lookupFields: {\n    country: lookup('countries', {\n      key: 'iso2',                              \u002F\u002F the canonical key FIELD — not the row's storage id\n      altKeys: ['iso3', 'callPrefix'],          \u002F\u002F candidate values that normalize to `key`\n      present: { label: 'name', by: 'locale' }, \u002F\u002F \u003Cfield>Label resolves row.name[locale]\n      sortBy: 'name',\n      backing: 'collection',\n      vocabulary: 'closed',\n    }),\n  },\n})\n","ts","",[952,1045,1046,1079,1086,1164,1191,1196,1243,1322,1364,1439,1478,1483,1520,1530,1552,1573,1608,1650,1666,1682,1699,1710,1716],{"__ignoreMap":1043},[1047,1048,1051,1055,1059,1063,1066,1069,1072,1076],"span",{"class":1049,"line":1050},"line",1,[1047,1052,1054],{"class":1053},"s7zQu","import",[1047,1056,1058],{"class":1057},"sMK4o"," {",[1047,1060,1062],{"class":1061},"sTEyZ"," lookup",[1047,1064,1065],{"class":1057}," }",[1047,1067,1068],{"class":1053}," from",[1047,1070,1071],{"class":1057}," '",[1047,1073,1075],{"class":1074},"sfazB","@noy-db\u002Fhub",[1047,1077,1078],{"class":1057},"'\n",[1047,1080,1082],{"class":1049,"line":1081},2,[1047,1083,1085],{"emptyLinePlaceholder":1084},true,"\n",[1047,1087,1089,1093,1097,1099,1103,1106,1109,1112,1115,1117,1119,1121,1124,1126,1128,1130,1133,1135,1137,1139,1142,1144,1147,1150,1153,1156,1158,1161],{"class":1049,"line":1088},3,[1047,1090,1092],{"class":1091},"spNyl","interface",[1047,1094,1096],{"class":1095},"sBMFI"," Country",[1047,1098,1058],{"class":1057},[1047,1100,1102],{"class":1101},"swJcz"," id",[1047,1104,1105],{"class":1057},":",[1047,1107,1108],{"class":1095}," string",[1047,1110,1111],{"class":1057},";",[1047,1113,1114],{"class":1101}," iso2",[1047,1116,1105],{"class":1057},[1047,1118,1108],{"class":1095},[1047,1120,1111],{"class":1057},[1047,1122,1123],{"class":1101}," iso3",[1047,1125,1105],{"class":1057},[1047,1127,1108],{"class":1095},[1047,1129,1111],{"class":1057},[1047,1131,1132],{"class":1101}," callPrefix",[1047,1134,1105],{"class":1057},[1047,1136,1108],{"class":1095},[1047,1138,1111],{"class":1057},[1047,1140,1141],{"class":1101}," name",[1047,1143,1105],{"class":1057},[1047,1145,1146],{"class":1095}," Record",[1047,1148,1149],{"class":1057},"\u003C",[1047,1151,1152],{"class":1095},"string",[1047,1154,1155],{"class":1057},",",[1047,1157,1108],{"class":1095},[1047,1159,1160],{"class":1057},">",[1047,1162,1163],{"class":1057}," }\n",[1047,1165,1167,1169,1172,1174,1176,1178,1180,1182,1185,1187,1189],{"class":1049,"line":1166},4,[1047,1168,1092],{"class":1091},[1047,1170,1171],{"class":1095}," Order",[1047,1173,1058],{"class":1057},[1047,1175,1102],{"class":1101},[1047,1177,1105],{"class":1057},[1047,1179,1108],{"class":1095},[1047,1181,1111],{"class":1057},[1047,1183,1184],{"class":1101}," country",[1047,1186,1105],{"class":1057},[1047,1188,1108],{"class":1095},[1047,1190,1163],{"class":1057},[1047,1192,1194],{"class":1049,"line":1193},5,[1047,1195,1085],{"emptyLinePlaceholder":1084},[1047,1197,1199,1202,1205,1208,1211,1214,1218,1220,1223,1225,1228,1231,1233,1235,1237,1240],{"class":1049,"line":1198},6,[1047,1200,1201],{"class":1091},"const",[1047,1203,1204],{"class":1061}," countries ",[1047,1206,1207],{"class":1057},"=",[1047,1209,1210],{"class":1061}," vault",[1047,1212,1213],{"class":1057},".",[1047,1215,1217],{"class":1216},"s2Zo4","collection",[1047,1219,1149],{"class":1057},[1047,1221,1222],{"class":1095},"Country",[1047,1224,1160],{"class":1057},[1047,1226,1227],{"class":1061},"(",[1047,1229,1230],{"class":1057},"'",[1047,1232,992],{"class":1074},[1047,1234,1230],{"class":1057},[1047,1236,1155],{"class":1057},[1047,1238,1239],{"class":1057}," {}",[1047,1241,1242],{"class":1061},")\n",[1047,1244,1246,1249,1252,1254,1257,1259,1261,1264,1266,1268,1270,1272,1274,1276,1278,1280,1282,1284,1286,1288,1291,1293,1295,1297,1299,1301,1304,1306,1308,1310,1312,1314,1317,1319],{"class":1049,"line":1245},7,[1047,1247,1248],{"class":1053},"await",[1047,1250,1251],{"class":1061}," countries",[1047,1253,1213],{"class":1057},[1047,1255,1256],{"class":1216},"put",[1047,1258,1227],{"class":1061},[1047,1260,1230],{"class":1057},[1047,1262,1263],{"class":1074},"row-US",[1047,1265,1230],{"class":1057},[1047,1267,1155],{"class":1057},[1047,1269,1058],{"class":1057},[1047,1271,1102],{"class":1101},[1047,1273,1105],{"class":1057},[1047,1275,1071],{"class":1057},[1047,1277,1263],{"class":1074},[1047,1279,1230],{"class":1057},[1047,1281,1155],{"class":1057},[1047,1283,1114],{"class":1101},[1047,1285,1105],{"class":1057},[1047,1287,1071],{"class":1057},[1047,1289,1290],{"class":1074},"US",[1047,1292,1230],{"class":1057},[1047,1294,1155],{"class":1057},[1047,1296,1123],{"class":1101},[1047,1298,1105],{"class":1057},[1047,1300,1071],{"class":1057},[1047,1302,1303],{"class":1074},"USA",[1047,1305,1230],{"class":1057},[1047,1307,1155],{"class":1057},[1047,1309,1132],{"class":1101},[1047,1311,1105],{"class":1057},[1047,1313,1071],{"class":1057},[1047,1315,1316],{"class":1074},"+1",[1047,1318,1230],{"class":1057},[1047,1320,1321],{"class":1057},",\n",[1047,1323,1325,1328,1330,1332,1335,1337,1339,1342,1344,1346,1349,1351,1353,1356,1358,1360,1362],{"class":1049,"line":1324},8,[1047,1326,1327],{"class":1101},"  name",[1047,1329,1105],{"class":1057},[1047,1331,1058],{"class":1057},[1047,1333,1334],{"class":1101}," en",[1047,1336,1105],{"class":1057},[1047,1338,1071],{"class":1057},[1047,1340,1341],{"class":1074},"United States",[1047,1343,1230],{"class":1057},[1047,1345,1155],{"class":1057},[1047,1347,1348],{"class":1101}," th",[1047,1350,1105],{"class":1057},[1047,1352,1071],{"class":1057},[1047,1354,1355],{"class":1074},"สหรัฐอเมริกา",[1047,1357,1230],{"class":1057},[1047,1359,1065],{"class":1057},[1047,1361,1065],{"class":1057},[1047,1363,1242],{"class":1061},[1047,1365,1367,1369,1371,1373,1375,1377,1379,1382,1384,1386,1388,1390,1392,1394,1396,1398,1400,1402,1404,1406,1409,1411,1413,1415,1417,1419,1422,1424,1426,1428,1430,1432,1435,1437],{"class":1049,"line":1366},9,[1047,1368,1248],{"class":1053},[1047,1370,1251],{"class":1061},[1047,1372,1213],{"class":1057},[1047,1374,1256],{"class":1216},[1047,1376,1227],{"class":1061},[1047,1378,1230],{"class":1057},[1047,1380,1381],{"class":1074},"row-TH",[1047,1383,1230],{"class":1057},[1047,1385,1155],{"class":1057},[1047,1387,1058],{"class":1057},[1047,1389,1102],{"class":1101},[1047,1391,1105],{"class":1057},[1047,1393,1071],{"class":1057},[1047,1395,1381],{"class":1074},[1047,1397,1230],{"class":1057},[1047,1399,1155],{"class":1057},[1047,1401,1114],{"class":1101},[1047,1403,1105],{"class":1057},[1047,1405,1071],{"class":1057},[1047,1407,1408],{"class":1074},"TH",[1047,1410,1230],{"class":1057},[1047,1412,1155],{"class":1057},[1047,1414,1123],{"class":1101},[1047,1416,1105],{"class":1057},[1047,1418,1071],{"class":1057},[1047,1420,1421],{"class":1074},"THA",[1047,1423,1230],{"class":1057},[1047,1425,1155],{"class":1057},[1047,1427,1132],{"class":1101},[1047,1429,1105],{"class":1057},[1047,1431,1071],{"class":1057},[1047,1433,1434],{"class":1074},"+66",[1047,1436,1230],{"class":1057},[1047,1438,1321],{"class":1057},[1047,1440,1442,1444,1446,1448,1450,1452,1454,1457,1459,1461,1463,1465,1467,1470,1472,1474,1476],{"class":1049,"line":1441},10,[1047,1443,1327],{"class":1101},[1047,1445,1105],{"class":1057},[1047,1447,1058],{"class":1057},[1047,1449,1334],{"class":1101},[1047,1451,1105],{"class":1057},[1047,1453,1071],{"class":1057},[1047,1455,1456],{"class":1074},"Thailand",[1047,1458,1230],{"class":1057},[1047,1460,1155],{"class":1057},[1047,1462,1348],{"class":1101},[1047,1464,1105],{"class":1057},[1047,1466,1071],{"class":1057},[1047,1468,1469],{"class":1074},"ประเทศไทย",[1047,1471,1230],{"class":1057},[1047,1473,1065],{"class":1057},[1047,1475,1065],{"class":1057},[1047,1477,1242],{"class":1061},[1047,1479,1481],{"class":1049,"line":1480},11,[1047,1482,1085],{"emptyLinePlaceholder":1084},[1047,1484,1486,1488,1491,1493,1495,1497,1499,1501,1504,1506,1508,1510,1513,1515,1517],{"class":1049,"line":1485},12,[1047,1487,1201],{"class":1091},[1047,1489,1490],{"class":1061}," orders ",[1047,1492,1207],{"class":1057},[1047,1494,1210],{"class":1061},[1047,1496,1213],{"class":1057},[1047,1498,1217],{"class":1216},[1047,1500,1149],{"class":1057},[1047,1502,1503],{"class":1095},"Order",[1047,1505,1160],{"class":1057},[1047,1507,1227],{"class":1061},[1047,1509,1230],{"class":1057},[1047,1511,1512],{"class":1074},"orders",[1047,1514,1230],{"class":1057},[1047,1516,1155],{"class":1057},[1047,1518,1519],{"class":1057}," {\n",[1047,1521,1523,1526,1528],{"class":1049,"line":1522},13,[1047,1524,1525],{"class":1101},"  lookupFields",[1047,1527,1105],{"class":1057},[1047,1529,1519],{"class":1057},[1047,1531,1533,1536,1538,1540,1542,1544,1546,1548,1550],{"class":1049,"line":1532},14,[1047,1534,1535],{"class":1101},"    country",[1047,1537,1105],{"class":1057},[1047,1539,1062],{"class":1216},[1047,1541,1227],{"class":1061},[1047,1543,1230],{"class":1057},[1047,1545,992],{"class":1074},[1047,1547,1230],{"class":1057},[1047,1549,1155],{"class":1057},[1047,1551,1519],{"class":1057},[1047,1553,1555,1558,1560,1562,1565,1567,1569],{"class":1049,"line":1554},15,[1047,1556,1557],{"class":1101},"      key",[1047,1559,1105],{"class":1057},[1047,1561,1071],{"class":1057},[1047,1563,1564],{"class":1074},"iso2",[1047,1566,1230],{"class":1057},[1047,1568,1155],{"class":1057},[1047,1570,1572],{"class":1571},"sHwdD","                              \u002F\u002F the canonical key FIELD — not the row's storage id\n",[1047,1574,1576,1579,1581,1584,1586,1589,1591,1593,1595,1598,1600,1603,1605],{"class":1049,"line":1575},16,[1047,1577,1578],{"class":1101},"      altKeys",[1047,1580,1105],{"class":1057},[1047,1582,1583],{"class":1061}," [",[1047,1585,1230],{"class":1057},[1047,1587,1588],{"class":1074},"iso3",[1047,1590,1230],{"class":1057},[1047,1592,1155],{"class":1057},[1047,1594,1071],{"class":1057},[1047,1596,1597],{"class":1074},"callPrefix",[1047,1599,1230],{"class":1057},[1047,1601,1602],{"class":1061},"]",[1047,1604,1155],{"class":1057},[1047,1606,1607],{"class":1571},"          \u002F\u002F candidate values that normalize to `key`\n",[1047,1609,1611,1614,1616,1618,1621,1623,1625,1628,1630,1632,1635,1637,1639,1642,1644,1647],{"class":1049,"line":1610},17,[1047,1612,1613],{"class":1101},"      present",[1047,1615,1105],{"class":1057},[1047,1617,1058],{"class":1057},[1047,1619,1620],{"class":1101}," label",[1047,1622,1105],{"class":1057},[1047,1624,1071],{"class":1057},[1047,1626,1627],{"class":1074},"name",[1047,1629,1230],{"class":1057},[1047,1631,1155],{"class":1057},[1047,1633,1634],{"class":1101}," by",[1047,1636,1105],{"class":1057},[1047,1638,1071],{"class":1057},[1047,1640,1641],{"class":1074},"locale",[1047,1643,1230],{"class":1057},[1047,1645,1646],{"class":1057}," },",[1047,1648,1649],{"class":1571}," \u002F\u002F \u003Cfield>Label resolves row.name[locale]\n",[1047,1651,1653,1656,1658,1660,1662,1664],{"class":1049,"line":1652},18,[1047,1654,1655],{"class":1101},"      sortBy",[1047,1657,1105],{"class":1057},[1047,1659,1071],{"class":1057},[1047,1661,1627],{"class":1074},[1047,1663,1230],{"class":1057},[1047,1665,1321],{"class":1057},[1047,1667,1669,1672,1674,1676,1678,1680],{"class":1049,"line":1668},19,[1047,1670,1671],{"class":1101},"      backing",[1047,1673,1105],{"class":1057},[1047,1675,1071],{"class":1057},[1047,1677,1217],{"class":1074},[1047,1679,1230],{"class":1057},[1047,1681,1321],{"class":1057},[1047,1683,1685,1688,1690,1692,1695,1697],{"class":1049,"line":1684},20,[1047,1686,1687],{"class":1101},"      vocabulary",[1047,1689,1105],{"class":1057},[1047,1691,1071],{"class":1057},[1047,1693,1694],{"class":1074},"closed",[1047,1696,1230],{"class":1057},[1047,1698,1321],{"class":1057},[1047,1700,1702,1705,1708],{"class":1049,"line":1701},21,[1047,1703,1704],{"class":1057},"    }",[1047,1706,1707],{"class":1061},")",[1047,1709,1321],{"class":1057},[1047,1711,1713],{"class":1049,"line":1712},22,[1047,1714,1715],{"class":1057},"  },\n",[1047,1717,1719,1722],{"class":1049,"line":1718},23,[1047,1720,1721],{"class":1057},"}",[1047,1723,1242],{"class":1061},[946,1725,1726,1727,1730,1731,1734,1735,1737,1738,1741,1742,1746,1747,1750],{},"Note the row's own storage id (",[952,1728,1729],{},"'row-US'",") is deliberately ",[950,1732,1733],{},"not"," the canonical key (",[952,1736,956],{},"):\n",[952,1739,1740],{},"key"," names a ",[1743,1744,1745],"em",{},"field on the backing row",". Every lookup mechanism — membership, altKey\nnormalization, sorting, join dressing — keys by ",[952,1748,1749],{},"row[key]",", never by the row's storage id.",[946,1752,1753],{},"Writes then normalize any accepted identifier to the canonical key:",[1038,1755,1757],{"className":1040,"code":1756,"language":1042,"meta":1043,"style":1043},"await orders.put('o1', { id: 'o1', country: 'USA' })   \u002F\u002F ISO3 candidate\n;(await orders.get('o1'))?.country                     \u002F\u002F → 'US' — normalized on ingest\n\nawait orders.put('o2', { id: 'o2', country: '+66' })   \u002F\u002F call-prefix candidate\n;(await orders.get('o2'))?.country                     \u002F\u002F → 'TH'\n",[952,1758,1759,1813,1848,1852,1904],{"__ignoreMap":1043},[1047,1760,1761,1763,1766,1768,1770,1772,1774,1777,1779,1781,1783,1785,1787,1789,1791,1793,1795,1797,1799,1801,1803,1805,1807,1810],{"class":1049,"line":1050},[1047,1762,1248],{"class":1053},[1047,1764,1765],{"class":1061}," orders",[1047,1767,1213],{"class":1057},[1047,1769,1256],{"class":1216},[1047,1771,1227],{"class":1061},[1047,1773,1230],{"class":1057},[1047,1775,1776],{"class":1074},"o1",[1047,1778,1230],{"class":1057},[1047,1780,1155],{"class":1057},[1047,1782,1058],{"class":1057},[1047,1784,1102],{"class":1101},[1047,1786,1105],{"class":1057},[1047,1788,1071],{"class":1057},[1047,1790,1776],{"class":1074},[1047,1792,1230],{"class":1057},[1047,1794,1155],{"class":1057},[1047,1796,1184],{"class":1101},[1047,1798,1105],{"class":1057},[1047,1800,1071],{"class":1057},[1047,1802,1303],{"class":1074},[1047,1804,1230],{"class":1057},[1047,1806,1065],{"class":1057},[1047,1808,1809],{"class":1061},")   ",[1047,1811,1812],{"class":1571},"\u002F\u002F ISO3 candidate\n",[1047,1814,1815,1817,1819,1821,1823,1825,1828,1830,1832,1834,1836,1839,1842,1845],{"class":1049,"line":1081},[1047,1816,1111],{"class":1057},[1047,1818,1227],{"class":1061},[1047,1820,1248],{"class":1053},[1047,1822,1765],{"class":1061},[1047,1824,1213],{"class":1057},[1047,1826,1827],{"class":1216},"get",[1047,1829,1227],{"class":1061},[1047,1831,1230],{"class":1057},[1047,1833,1776],{"class":1074},[1047,1835,1230],{"class":1057},[1047,1837,1838],{"class":1061},"))",[1047,1840,1841],{"class":1057},"?.",[1047,1843,1844],{"class":1061},"country                     ",[1047,1846,1847],{"class":1571},"\u002F\u002F → 'US' — normalized on ingest\n",[1047,1849,1850],{"class":1049,"line":1088},[1047,1851,1085],{"emptyLinePlaceholder":1084},[1047,1853,1854,1856,1858,1860,1862,1864,1866,1869,1871,1873,1875,1877,1879,1881,1883,1885,1887,1889,1891,1893,1895,1897,1899,1901],{"class":1049,"line":1166},[1047,1855,1248],{"class":1053},[1047,1857,1765],{"class":1061},[1047,1859,1213],{"class":1057},[1047,1861,1256],{"class":1216},[1047,1863,1227],{"class":1061},[1047,1865,1230],{"class":1057},[1047,1867,1868],{"class":1074},"o2",[1047,1870,1230],{"class":1057},[1047,1872,1155],{"class":1057},[1047,1874,1058],{"class":1057},[1047,1876,1102],{"class":1101},[1047,1878,1105],{"class":1057},[1047,1880,1071],{"class":1057},[1047,1882,1868],{"class":1074},[1047,1884,1230],{"class":1057},[1047,1886,1155],{"class":1057},[1047,1888,1184],{"class":1101},[1047,1890,1105],{"class":1057},[1047,1892,1071],{"class":1057},[1047,1894,1434],{"class":1074},[1047,1896,1230],{"class":1057},[1047,1898,1065],{"class":1057},[1047,1900,1809],{"class":1061},[1047,1902,1903],{"class":1571},"\u002F\u002F call-prefix candidate\n",[1047,1905,1906,1908,1910,1912,1914,1916,1918,1920,1922,1924,1926,1928,1930,1932],{"class":1049,"line":1193},[1047,1907,1111],{"class":1057},[1047,1909,1227],{"class":1061},[1047,1911,1248],{"class":1053},[1047,1913,1765],{"class":1061},[1047,1915,1213],{"class":1057},[1047,1917,1827],{"class":1216},[1047,1919,1227],{"class":1061},[1047,1921,1230],{"class":1057},[1047,1923,1868],{"class":1074},[1047,1925,1230],{"class":1057},[1047,1927,1838],{"class":1061},[1047,1929,1841],{"class":1057},[1047,1931,1844],{"class":1061},[1047,1933,1934],{"class":1571},"\u002F\u002F → 'TH'\n",[946,1936,1937,1938,1105],{},"And unknown keys are refused at write time under ",[952,1939,1940],{},"vocabulary: 'closed'",[1038,1942,1944],{"className":1040,"code":1943,"language":1042,"meta":1043,"style":1043},"await orders.put('o3', { id: 'o3', country: 'ZZ' })\n\u002F\u002F → rejects with UnknownLookupKeyError\n",[952,1945,1946,1996],{"__ignoreMap":1043},[1047,1947,1948,1950,1952,1954,1956,1958,1960,1963,1965,1967,1969,1971,1973,1975,1977,1979,1981,1983,1985,1987,1990,1992,1994],{"class":1049,"line":1050},[1047,1949,1248],{"class":1053},[1047,1951,1765],{"class":1061},[1047,1953,1213],{"class":1057},[1047,1955,1256],{"class":1216},[1047,1957,1227],{"class":1061},[1047,1959,1230],{"class":1057},[1047,1961,1962],{"class":1074},"o3",[1047,1964,1230],{"class":1057},[1047,1966,1155],{"class":1057},[1047,1968,1058],{"class":1057},[1047,1970,1102],{"class":1101},[1047,1972,1105],{"class":1057},[1047,1974,1071],{"class":1057},[1047,1976,1962],{"class":1074},[1047,1978,1230],{"class":1057},[1047,1980,1155],{"class":1057},[1047,1982,1184],{"class":1101},[1047,1984,1105],{"class":1057},[1047,1986,1071],{"class":1057},[1047,1988,1989],{"class":1074},"ZZ",[1047,1991,1230],{"class":1057},[1047,1993,1065],{"class":1057},[1047,1995,1242],{"class":1061},[1047,1997,1998],{"class":1049,"line":1081},[1047,1999,2000],{"class":1571},"\u002F\u002F → rejects with UnknownLookupKeyError\n",[941,2002,2004],{"id":2003},"the-three-tiers","The three tiers",[946,2006,2007,2008,2011],{},"All three factories build the same descriptor shape; ",[952,2009,2010],{},"backing"," decides where the dimension lives:",[2013,2014,2015,2037],"table",{},[2016,2017,2018],"thead",{},[2019,2020,2021,2025,2028,2031,2034],"tr",{},[2022,2023,2024],"th",{},"Tier",[2022,2026,2027],{},"Factory",[2022,2029,2030],{},"Backing",[2022,2032,2033],{},"Vocabulary default",[2022,2035,2036],{},"Syncs?",[2038,2039,2040,2067,2097],"tbody",{},[2019,2041,2042,2048,2053,2060,2064],{},[2043,2044,2045],"td",{},[950,2046,2047],{},"enum",[2043,2049,2050],{},[952,2051,2052],{},"enumOf(['a','b'] as const)",[2043,2054,2055,2056,2059],{},"none — inline ",[952,2057,2058],{},"keys",", no store",[2043,2061,2062],{},[952,2063,1694],{},[2043,2065,2066],{},"n\u002Fa (no store)",[2019,2068,2069,2074,2079,2089,2094],{},[2043,2070,2071],{},[950,2072,2073],{},"dict",[2043,2075,2076],{},[952,2077,2078],{},"dict('status')",[2043,2080,2081,2082,2085,2086,1707],{},"reserved ",[952,2083,2084],{},"_dict_status"," micro-collection (",[952,2087,2088],{},"vault.dictionary('status')",[2043,2090,2091],{},[952,2092,2093],{},"open",[2043,2095,2096],{},"yes — see below",[2019,2098,2099,2104,2109,2115,2119],{},[2043,2100,2101],{},[950,2102,2103],{},"matrix",[2043,2105,2106],{},[952,2107,2108],{},"lookup('countries')",[2043,2110,2111,2112,1707],{},"a first-class collection (",[952,2113,2114],{},"vault.collection('countries')",[2043,2116,2117],{},[952,2118,2093],{},[2043,2120,2121],{},"yes (ordinary collection sync)",[946,2123,2124,2127,2128,2131,2132,2135,2136,2138,2139,2141,2142,2144,2145,2148,2149,2152],{},[952,2125,2126],{},"lookup(dimension, opts)"," is the one factory that can construct any tier\n(",[952,2129,2130],{},"backing: 'static' | 'reserved' | 'collection'",", default ",[952,2133,2134],{},"'collection'",") — ",[952,2137,968],{}," and\n",[952,2140,972],{}," are fixed-tier conveniences, and the ",[975,2143,701],{"href":702}," spellings ",[952,2146,2147],{},"dictKey()"," \u002F\n",[952,2150,2151],{},"staticDict()"," compile onto the same descriptor shape (see \"dictKey and staticDict are aliases\"\nbelow).",[941,2154,2156],{"id":2155},"altkeys-alternate-identifiers-normalize-on-write","altKeys — alternate identifiers normalize on write",[946,2158,2159,2161,2162,2164,2165,2168,2169,2172,2173,2175,2176,2179,2180,2182,2183,2186,2187,2189,2190,2192],{},[952,2160,999],{}," names backing-row fields whose values are accepted as write-time candidates and\nnormalized to the canonical ",[952,2163,1740],{}," — synchronously, from an in-memory index built over the backing\nrows already open in this session (no store read per ",[952,2166,2167],{},"put()","). Because the index is\nsession-local, the backing collection must be ",[950,2170,2171],{},"open in eager mode"," (the default) for matrix-tier\naltKeys; declaring ",[952,2174,999],{}," on a matrix field whose backing collection was opened\n",[952,2177,2178],{},"{ prefetch: false }"," (lazy) makes ",[952,2181,2167],{}," throw ",[952,2184,2185],{},"ValidationError"," naming the field and dimension.\nThe ",[952,2188,972],{}," tier has no ",[952,2191,999],{}," option — its dictionary cache is always synchronous, so the\nrestriction never applies.",[946,2194,2195,2196,2199,2200,2203,2204,2207,2208,1213],{},"A candidate value may be a string ",[950,2197,2198],{},"or a number"," — both coerce to the same string index entry (a\nnumeric ",[952,2201,2202],{},"1"," and the string ",[952,2205,2206],{},"'1'"," are interchangeable). Each candidate must be claimed by at most\none backing row: two rows resolving to the same candidate — across the string\u002Fnumber boundary\nincluded — throw ",[952,2209,2185],{},[941,2211,2213],{"id":2212},"vocabulary-open-vs-closed-and-why-sparse-dimensions-are-safe","Vocabulary — open vs closed, and why sparse dimensions are safe",[946,2215,2216,2218,2219,2222],{},[952,2217,1940],{}," checks membership against the backing dimension's ",[950,2220,2221],{},"actual current rows",",\nlive — not a hardcoded universe of \"real\" codes. A legitimate ISO2 code that simply hasn't been\npopulated in this vault is refused exactly like a fake one:",[1038,2224,2226],{"className":1040,"code":2225,"language":1042,"meta":1043,"style":1043},"\u002F\u002F Only 'US' and 'TH' rows exist — 'ZA' is a real ISO2 code, just not populated here.\nawait orders.put('o4', { id: 'o4', country: 'ZA' })\n\u002F\u002F → rejects with UnknownLookupKeyError\n",[952,2227,2228,2233,2283],{"__ignoreMap":1043},[1047,2229,2230],{"class":1049,"line":1050},[1047,2231,2232],{"class":1571},"\u002F\u002F Only 'US' and 'TH' rows exist — 'ZA' is a real ISO2 code, just not populated here.\n",[1047,2234,2235,2237,2239,2241,2243,2245,2247,2250,2252,2254,2256,2258,2260,2262,2264,2266,2268,2270,2272,2274,2277,2279,2281],{"class":1049,"line":1081},[1047,2236,1248],{"class":1053},[1047,2238,1765],{"class":1061},[1047,2240,1213],{"class":1057},[1047,2242,1256],{"class":1216},[1047,2244,1227],{"class":1061},[1047,2246,1230],{"class":1057},[1047,2248,2249],{"class":1074},"o4",[1047,2251,1230],{"class":1057},[1047,2253,1155],{"class":1057},[1047,2255,1058],{"class":1057},[1047,2257,1102],{"class":1101},[1047,2259,1105],{"class":1057},[1047,2261,1071],{"class":1057},[1047,2263,2249],{"class":1074},[1047,2265,1230],{"class":1057},[1047,2267,1155],{"class":1057},[1047,2269,1184],{"class":1101},[1047,2271,1105],{"class":1057},[1047,2273,1071],{"class":1057},[1047,2275,2276],{"class":1074},"ZA",[1047,2278,1230],{"class":1057},[1047,2280,1065],{"class":1057},[1047,2282,1242],{"class":1061},[1047,2284,2285],{"class":1049,"line":1088},[1047,2286,2000],{"class":1571},[946,2288,2289],{},"That is what makes populate-only-what-you-use dimensions sound: membership is defined by your\ndata, not by an external standard.",[946,2291,2292],{},"Per-tier detail:",[2294,2295,2296,2303,2315,2335],"ul",{},[2297,2298,2299,2302],"li",{},[950,2300,2301],{},"Matrix tier"," has no declared key list at all — membership is purely the backing collection's\nlive rows.",[2297,2304,2305,2308,2309,977,2311,2314],{},[950,2306,2307],{},"Dict tier"," closed membership is the declared ",[952,2310,2058],{},[950,2312,2313],{},"union"," the reserved dictionary's live\nrows: a declared key is known even before any dictionary row for it exists, and a live row for\nan undeclared key is known too.",[2297,2316,2317,2321,2322,2324,2325,2328,2329,2331,2332,2334],{},[950,2318,2319],{},[952,2320,2147],{}," (and ",[952,2323,972],{},") default to ",[952,2326,2327],{},"'open'"," — declaring keys on ",[952,2330,2147],{}," never\nenforced membership, and still doesn't; write-time refusal is exclusively the native\n",[952,2333,1940],{}," opt-in.",[2297,2336,2337,2341,2342,2345,2346,2349,2350,2353],{},[950,2338,2339],{},[952,2340,2151],{}," is closed by a different, older mechanism — its own ",[952,2343,2344],{},"validateCodes"," option\n(default ",[952,2347,2348],{},"true","), throwing ",[952,2351,2352],{},"UnknownDictCodeError",", unchanged.",[946,2355,2356,2359,2360,2363,2364,2366,2367,2370],{},[950,2357,2358],{},"Cold-session caveat."," The live-rows side of the check reads a cache materialized during ",[1743,2361,2362],{},"this\nsession",". A freshly opened vault (or one straight after a pull) that hasn't yet opened the\nmatrix-tier backing collection — or warmed the dict-tier dictionary cache — sees an empty\nlive-rows set, so a ",[952,2365,1940],{}," field refuses even a genuinely valid, already-persisted\nkey until the dimension is hydrated. Open the backing collection first (matrix tier, eager mode),\nor ",[952,2368,2369],{},"await vault.dictionary(name).list()"," (dict tier). This fails safe — it refuses rather than\naccepts unverified keys — but is easy to trip over on a fresh instance.",[941,2372,2374],{"id":2373},"array-valued-fields-element-wise-normalization","Array-valued fields — element-wise normalization",[946,2376,2377,2378,2381,2382,2385],{},"A lookup field whose value is itself an array (",[952,2379,2380],{},"tags: ['USA', '+66']",") normalizes ",[950,2383,2384],{},"element by\nelement"," — altKey normalization and closed-vocabulary membership run per element, against the same\nbacking index the scalar case uses:",[1038,2387,2389],{"className":1040,"code":2388,"language":1042,"meta":1043,"style":1043},"const orders = vault.collection\u003C{ id: string; tags: string[] }>('orders-tagged', {\n  lookupFields: { tags: lookup('countries', { key: 'iso2', altKeys: ['iso3', 'callPrefix'] }) },\n})\nawait orders.put('o1', { id: 'o1', tags: ['USA', '+66'] })\n;(await orders.get('o1'))?.tags   \u002F\u002F → ['US', 'TH'] — each element normalized to the canonical key\n",[952,2390,2391,2442,2513,2519,2579],{"__ignoreMap":1043},[1047,2392,2393,2395,2397,2399,2401,2403,2405,2408,2410,2412,2414,2416,2419,2421,2423,2426,2429,2431,2433,2436,2438,2440],{"class":1049,"line":1050},[1047,2394,1201],{"class":1091},[1047,2396,1490],{"class":1061},[1047,2398,1207],{"class":1057},[1047,2400,1210],{"class":1061},[1047,2402,1213],{"class":1057},[1047,2404,1217],{"class":1216},[1047,2406,2407],{"class":1057},"\u003C{",[1047,2409,1102],{"class":1101},[1047,2411,1105],{"class":1057},[1047,2413,1108],{"class":1095},[1047,2415,1111],{"class":1057},[1047,2417,2418],{"class":1101}," tags",[1047,2420,1105],{"class":1057},[1047,2422,1108],{"class":1095},[1047,2424,2425],{"class":1061},"[] ",[1047,2427,2428],{"class":1057},"}>",[1047,2430,1227],{"class":1061},[1047,2432,1230],{"class":1057},[1047,2434,2435],{"class":1074},"orders-tagged",[1047,2437,1230],{"class":1057},[1047,2439,1155],{"class":1057},[1047,2441,1519],{"class":1057},[1047,2443,2444,2446,2448,2450,2452,2454,2456,2458,2460,2462,2464,2466,2468,2471,2473,2475,2477,2479,2481,2484,2486,2488,2490,2492,2494,2496,2498,2500,2502,2505,2507,2510],{"class":1049,"line":1081},[1047,2445,1525],{"class":1101},[1047,2447,1105],{"class":1057},[1047,2449,1058],{"class":1057},[1047,2451,2418],{"class":1101},[1047,2453,1105],{"class":1057},[1047,2455,1062],{"class":1216},[1047,2457,1227],{"class":1061},[1047,2459,1230],{"class":1057},[1047,2461,992],{"class":1074},[1047,2463,1230],{"class":1057},[1047,2465,1155],{"class":1057},[1047,2467,1058],{"class":1057},[1047,2469,2470],{"class":1101}," key",[1047,2472,1105],{"class":1057},[1047,2474,1071],{"class":1057},[1047,2476,1564],{"class":1074},[1047,2478,1230],{"class":1057},[1047,2480,1155],{"class":1057},[1047,2482,2483],{"class":1101}," altKeys",[1047,2485,1105],{"class":1057},[1047,2487,1583],{"class":1061},[1047,2489,1230],{"class":1057},[1047,2491,1588],{"class":1074},[1047,2493,1230],{"class":1057},[1047,2495,1155],{"class":1057},[1047,2497,1071],{"class":1057},[1047,2499,1597],{"class":1074},[1047,2501,1230],{"class":1057},[1047,2503,2504],{"class":1061},"] ",[1047,2506,1721],{"class":1057},[1047,2508,2509],{"class":1061},") ",[1047,2511,2512],{"class":1057},"},\n",[1047,2514,2515,2517],{"class":1049,"line":1088},[1047,2516,1721],{"class":1057},[1047,2518,1242],{"class":1061},[1047,2520,2521,2523,2525,2527,2529,2531,2533,2535,2537,2539,2541,2543,2545,2547,2549,2551,2553,2555,2557,2559,2561,2563,2565,2567,2569,2571,2573,2575,2577],{"class":1049,"line":1166},[1047,2522,1248],{"class":1053},[1047,2524,1765],{"class":1061},[1047,2526,1213],{"class":1057},[1047,2528,1256],{"class":1216},[1047,2530,1227],{"class":1061},[1047,2532,1230],{"class":1057},[1047,2534,1776],{"class":1074},[1047,2536,1230],{"class":1057},[1047,2538,1155],{"class":1057},[1047,2540,1058],{"class":1057},[1047,2542,1102],{"class":1101},[1047,2544,1105],{"class":1057},[1047,2546,1071],{"class":1057},[1047,2548,1776],{"class":1074},[1047,2550,1230],{"class":1057},[1047,2552,1155],{"class":1057},[1047,2554,2418],{"class":1101},[1047,2556,1105],{"class":1057},[1047,2558,1583],{"class":1061},[1047,2560,1230],{"class":1057},[1047,2562,1303],{"class":1074},[1047,2564,1230],{"class":1057},[1047,2566,1155],{"class":1057},[1047,2568,1071],{"class":1057},[1047,2570,1434],{"class":1074},[1047,2572,1230],{"class":1057},[1047,2574,2504],{"class":1061},[1047,2576,1721],{"class":1057},[1047,2578,1242],{"class":1061},[1047,2580,2581,2583,2585,2587,2589,2591,2593,2595,2597,2599,2601,2603,2605,2608],{"class":1049,"line":1193},[1047,2582,1111],{"class":1057},[1047,2584,1227],{"class":1061},[1047,2586,1248],{"class":1053},[1047,2588,1765],{"class":1061},[1047,2590,1213],{"class":1057},[1047,2592,1827],{"class":1216},[1047,2594,1227],{"class":1061},[1047,2596,1230],{"class":1057},[1047,2598,1776],{"class":1074},[1047,2600,1230],{"class":1057},[1047,2602,1838],{"class":1061},[1047,2604,1841],{"class":1057},[1047,2606,2607],{"class":1061},"tags   ",[1047,2609,2610],{"class":1571},"\u002F\u002F → ['US', 'TH'] — each element normalized to the canonical key\n",[946,2612,2613,2614,2616,2617,2620],{},"Under ",[952,2615,1940],{},", the write is refused on the ",[950,2618,2619],{},"first"," unknown element:",[1038,2622,2624],{"className":1040,"code":2623,"language":1042,"meta":1043,"style":1043},"const closed = vault.collection\u003C{ id: string; tags: string[] }>('orders-closed', {\n  lookupFields: { tags: lookup('countries', { key: 'iso2', vocabulary: 'closed' }) },\n})\nawait closed.put('o1', { id: 'o1', tags: ['ZZZ', 'nope'] })\n\u002F\u002F → rejects with UnknownLookupKeyError\n",[952,2625,2626,2674,2729,2735,2798],{"__ignoreMap":1043},[1047,2627,2628,2630,2633,2635,2637,2639,2641,2643,2645,2647,2649,2651,2653,2655,2657,2659,2661,2663,2665,2668,2670,2672],{"class":1049,"line":1050},[1047,2629,1201],{"class":1091},[1047,2631,2632],{"class":1061}," closed ",[1047,2634,1207],{"class":1057},[1047,2636,1210],{"class":1061},[1047,2638,1213],{"class":1057},[1047,2640,1217],{"class":1216},[1047,2642,2407],{"class":1057},[1047,2644,1102],{"class":1101},[1047,2646,1105],{"class":1057},[1047,2648,1108],{"class":1095},[1047,2650,1111],{"class":1057},[1047,2652,2418],{"class":1101},[1047,2654,1105],{"class":1057},[1047,2656,1108],{"class":1095},[1047,2658,2425],{"class":1061},[1047,2660,2428],{"class":1057},[1047,2662,1227],{"class":1061},[1047,2664,1230],{"class":1057},[1047,2666,2667],{"class":1074},"orders-closed",[1047,2669,1230],{"class":1057},[1047,2671,1155],{"class":1057},[1047,2673,1519],{"class":1057},[1047,2675,2676,2678,2680,2682,2684,2686,2688,2690,2692,2694,2696,2698,2700,2702,2704,2706,2708,2710,2712,2715,2717,2719,2721,2723,2725,2727],{"class":1049,"line":1081},[1047,2677,1525],{"class":1101},[1047,2679,1105],{"class":1057},[1047,2681,1058],{"class":1057},[1047,2683,2418],{"class":1101},[1047,2685,1105],{"class":1057},[1047,2687,1062],{"class":1216},[1047,2689,1227],{"class":1061},[1047,2691,1230],{"class":1057},[1047,2693,992],{"class":1074},[1047,2695,1230],{"class":1057},[1047,2697,1155],{"class":1057},[1047,2699,1058],{"class":1057},[1047,2701,2470],{"class":1101},[1047,2703,1105],{"class":1057},[1047,2705,1071],{"class":1057},[1047,2707,1564],{"class":1074},[1047,2709,1230],{"class":1057},[1047,2711,1155],{"class":1057},[1047,2713,2714],{"class":1101}," vocabulary",[1047,2716,1105],{"class":1057},[1047,2718,1071],{"class":1057},[1047,2720,1694],{"class":1074},[1047,2722,1230],{"class":1057},[1047,2724,1065],{"class":1057},[1047,2726,2509],{"class":1061},[1047,2728,2512],{"class":1057},[1047,2730,2731,2733],{"class":1049,"line":1088},[1047,2732,1721],{"class":1057},[1047,2734,1242],{"class":1061},[1047,2736,2737,2739,2742,2744,2746,2748,2750,2752,2754,2756,2758,2760,2762,2764,2766,2768,2770,2772,2774,2776,2778,2781,2783,2785,2787,2790,2792,2794,2796],{"class":1049,"line":1166},[1047,2738,1248],{"class":1053},[1047,2740,2741],{"class":1061}," closed",[1047,2743,1213],{"class":1057},[1047,2745,1256],{"class":1216},[1047,2747,1227],{"class":1061},[1047,2749,1230],{"class":1057},[1047,2751,1776],{"class":1074},[1047,2753,1230],{"class":1057},[1047,2755,1155],{"class":1057},[1047,2757,1058],{"class":1057},[1047,2759,1102],{"class":1101},[1047,2761,1105],{"class":1057},[1047,2763,1071],{"class":1057},[1047,2765,1776],{"class":1074},[1047,2767,1230],{"class":1057},[1047,2769,1155],{"class":1057},[1047,2771,2418],{"class":1101},[1047,2773,1105],{"class":1057},[1047,2775,1583],{"class":1061},[1047,2777,1230],{"class":1057},[1047,2779,2780],{"class":1074},"ZZZ",[1047,2782,1230],{"class":1057},[1047,2784,1155],{"class":1057},[1047,2786,1071],{"class":1057},[1047,2788,2789],{"class":1074},"nope",[1047,2791,1230],{"class":1057},[1047,2793,2504],{"class":1061},[1047,2795,1721],{"class":1057},[1047,2797,1242],{"class":1061},[1047,2799,2800],{"class":1049,"line":1193},[1047,2801,2000],{"class":1571},[946,2803,2804,2805,2808,2809,2812,2813,2816],{},"Detail rules: normalization rewrites values in place, never cardinality — duplicate elements are\nkept, not deduplicated; a non-string element (number, object, ",[952,2806,2807],{},"null",") is skipped, exactly as the\nscalar branch skips a non-string value; an empty array is a no-op even under closed vocabulary.\nThis behaves identically at a dotted, non-wildcard path (",[952,2810,2811],{},"'meta.tags'"," for a nested\n",[952,2814,2815],{},"{ meta: { tags: [...] } }"," shape).",[941,2818,2820,2821,2824],{"id":2819},"presentation-fieldlabel-in-reads-and-joins","Presentation — ",[952,2822,2823],{},"\u003Cfield>Label",", in reads and joins",[946,2826,2827,2828,2830,2831,2834,2835,2838,2839,2842],{},"Reading with a locale resolves a ",[952,2829,2823],{}," sibling on the same record, sourced from the\nbacking row's ",[952,2832,2833],{},"present.label"," field (locale-keyed when ",[952,2836,2837],{},"present.by: 'locale'","). Joining to a\ncollection that declares a lookup field dresses the ",[950,2840,2841],{},"joined"," side too, matrix tier included:",[1038,2844,2846],{"className":1040,"code":2845,"language":1042,"meta":1043,"style":1043},"const rows = shipments.query().join('orderId', { as: 'order' }).toArray({ locale: 'th' })\nrows[0].order.countryLabel \u002F\u002F 'สหรัฐอเมริกา' — resolved through the join\n",[952,2847,2848,2927],{"__ignoreMap":1043},[1047,2849,2850,2852,2855,2857,2860,2862,2865,2868,2870,2873,2875,2877,2880,2882,2884,2886,2889,2891,2893,2896,2898,2900,2902,2904,2907,2909,2912,2915,2917,2919,2921,2923,2925],{"class":1049,"line":1050},[1047,2851,1201],{"class":1091},[1047,2853,2854],{"class":1061}," rows ",[1047,2856,1207],{"class":1057},[1047,2858,2859],{"class":1061}," shipments",[1047,2861,1213],{"class":1057},[1047,2863,2864],{"class":1216},"query",[1047,2866,2867],{"class":1061},"()",[1047,2869,1213],{"class":1057},[1047,2871,2872],{"class":1216},"join",[1047,2874,1227],{"class":1061},[1047,2876,1230],{"class":1057},[1047,2878,2879],{"class":1074},"orderId",[1047,2881,1230],{"class":1057},[1047,2883,1155],{"class":1057},[1047,2885,1058],{"class":1057},[1047,2887,2888],{"class":1101}," as",[1047,2890,1105],{"class":1057},[1047,2892,1071],{"class":1057},[1047,2894,2895],{"class":1074},"order",[1047,2897,1230],{"class":1057},[1047,2899,1065],{"class":1057},[1047,2901,1707],{"class":1061},[1047,2903,1213],{"class":1057},[1047,2905,2906],{"class":1216},"toArray",[1047,2908,1227],{"class":1061},[1047,2910,2911],{"class":1057},"{",[1047,2913,2914],{"class":1101}," locale",[1047,2916,1105],{"class":1057},[1047,2918,1071],{"class":1057},[1047,2920,2022],{"class":1074},[1047,2922,1230],{"class":1057},[1047,2924,1065],{"class":1057},[1047,2926,1242],{"class":1061},[1047,2928,2929,2932,2936,2938,2940,2942,2944,2947],{"class":1049,"line":1081},[1047,2930,2931],{"class":1061},"rows[",[1047,2933,2935],{"class":2934},"sbssI","0",[1047,2937,1602],{"class":1061},[1047,2939,1213],{"class":1057},[1047,2941,2895],{"class":1061},[1047,2943,1213],{"class":1057},[1047,2945,2946],{"class":1061},"countryLabel ",[1047,2948,2949],{"class":1571},"\u002F\u002F 'สหรัฐอเมริกา' — resolved through the join\n",[946,2951,2952,2953,2955,2956,2959,2960,2963,2964,2967,2968,2971,2972,2974],{},"Direct (non-join) reads of a matrix-tier field resolve ",[952,2954,2823],{}," the same way — keyed by\n",[952,2957,2958],{},"descriptor.key"," through the same session-local snapshot the join path uses — so a custom canonical\nkey like ",[952,2961,2962],{},"key: 'iso2'"," above dresses correctly on a plain read, not only through a join. That\nsnapshot shares the cold-session requirement: the backing dimension must be open and populated in\nthis session (the cold-session caveat above). Only the default ",[952,2965,2966],{},"key: 'id'"," tier keeps a live\non-demand ",[952,2969,2970],{},".get()"," fallback on a snapshot\nmiss; for any custom ",[952,2973,1740],{}," the snapshot is the sole source, so a cold dimension yields no label\nuntil it is hydrated.",[941,2976,2978],{"id":2977},"sorting-by-the-resolved-label","Sorting by the resolved label",[946,2980,2981],{},"Two independent channels:",[1038,2983,2985],{"className":1040,"code":2984,"language":1042,"meta":1043,"style":1043},"\u002F\u002F (a) declared: sortBy + displayLocale — a plain orderBy() sorts by the label at the\n\u002F\u002F     field's own fixed locale:\nlookup('countries', { key: 'iso2', present: { label: 'name', by: 'locale' },\n  sortBy: 'name', backing: 'collection', displayLocale: 'en' })\norders.query().orderBy('country', 'asc').toArray()\n\n\u002F\u002F (b) per-call: orderBy(..., { by: 'label' }) resolves at the query's own locale —\n\u002F\u002F     no displayLocale needed, and two locales genuinely produce two different\n\u002F\u002F     orders for the same rows (the labels collate differently per language):\norders.query().orderBy('country', 'asc', { by: 'label' }).toArray({ locale: 'en' })\norders.query().orderBy('country', 'asc', { by: 'label' }).toArray({ locale: 'th' })\n",[952,2986,2987,2992,2997,3057,3101,3143,3147,3152,3157,3162,3233],{"__ignoreMap":1043},[1047,2988,2989],{"class":1049,"line":1050},[1047,2990,2991],{"class":1571},"\u002F\u002F (a) declared: sortBy + displayLocale — a plain orderBy() sorts by the label at the\n",[1047,2993,2994],{"class":1049,"line":1081},[1047,2995,2996],{"class":1571},"\u002F\u002F     field's own fixed locale:\n",[1047,2998,2999,3001,3003,3005,3007,3009,3011,3013,3015,3017,3019,3021,3023,3025,3028,3030,3032,3034,3036,3038,3040,3042,3044,3046,3048,3050,3052,3054],{"class":1049,"line":1088},[1047,3000,731],{"class":1216},[1047,3002,1227],{"class":1061},[1047,3004,1230],{"class":1057},[1047,3006,992],{"class":1074},[1047,3008,1230],{"class":1057},[1047,3010,1155],{"class":1057},[1047,3012,1058],{"class":1057},[1047,3014,2470],{"class":1101},[1047,3016,1105],{"class":1057},[1047,3018,1071],{"class":1057},[1047,3020,1564],{"class":1074},[1047,3022,1230],{"class":1057},[1047,3024,1155],{"class":1057},[1047,3026,3027],{"class":1101}," present",[1047,3029,1105],{"class":1057},[1047,3031,1058],{"class":1057},[1047,3033,1620],{"class":1101},[1047,3035,1105],{"class":1057},[1047,3037,1071],{"class":1057},[1047,3039,1627],{"class":1074},[1047,3041,1230],{"class":1057},[1047,3043,1155],{"class":1057},[1047,3045,1634],{"class":1101},[1047,3047,1105],{"class":1057},[1047,3049,1071],{"class":1057},[1047,3051,1641],{"class":1074},[1047,3053,1230],{"class":1057},[1047,3055,3056],{"class":1057}," },\n",[1047,3058,3059,3062,3064,3066,3068,3070,3072,3075,3077,3079,3081,3083,3085,3088,3090,3092,3095,3097,3099],{"class":1049,"line":1166},[1047,3060,3061],{"class":1101},"  sortBy",[1047,3063,1105],{"class":1057},[1047,3065,1071],{"class":1057},[1047,3067,1627],{"class":1074},[1047,3069,1230],{"class":1057},[1047,3071,1155],{"class":1057},[1047,3073,3074],{"class":1101}," backing",[1047,3076,1105],{"class":1057},[1047,3078,1071],{"class":1057},[1047,3080,1217],{"class":1074},[1047,3082,1230],{"class":1057},[1047,3084,1155],{"class":1057},[1047,3086,3087],{"class":1101}," displayLocale",[1047,3089,1105],{"class":1057},[1047,3091,1071],{"class":1057},[1047,3093,3094],{"class":1074},"en",[1047,3096,1230],{"class":1057},[1047,3098,1065],{"class":1057},[1047,3100,1242],{"class":1061},[1047,3102,3103,3105,3107,3109,3111,3113,3116,3118,3120,3123,3125,3127,3129,3132,3134,3136,3138,3140],{"class":1049,"line":1193},[1047,3104,1512],{"class":1061},[1047,3106,1213],{"class":1057},[1047,3108,2864],{"class":1216},[1047,3110,2867],{"class":1061},[1047,3112,1213],{"class":1057},[1047,3114,3115],{"class":1216},"orderBy",[1047,3117,1227],{"class":1061},[1047,3119,1230],{"class":1057},[1047,3121,3122],{"class":1074},"country",[1047,3124,1230],{"class":1057},[1047,3126,1155],{"class":1057},[1047,3128,1071],{"class":1057},[1047,3130,3131],{"class":1074},"asc",[1047,3133,1230],{"class":1057},[1047,3135,1707],{"class":1061},[1047,3137,1213],{"class":1057},[1047,3139,2906],{"class":1216},[1047,3141,3142],{"class":1061},"()\n",[1047,3144,3145],{"class":1049,"line":1198},[1047,3146,1085],{"emptyLinePlaceholder":1084},[1047,3148,3149],{"class":1049,"line":1245},[1047,3150,3151],{"class":1571},"\u002F\u002F (b) per-call: orderBy(..., { by: 'label' }) resolves at the query's own locale —\n",[1047,3153,3154],{"class":1049,"line":1324},[1047,3155,3156],{"class":1571},"\u002F\u002F     no displayLocale needed, and two locales genuinely produce two different\n",[1047,3158,3159],{"class":1049,"line":1366},[1047,3160,3161],{"class":1571},"\u002F\u002F     orders for the same rows (the labels collate differently per language):\n",[1047,3163,3164,3166,3168,3170,3172,3174,3176,3178,3180,3182,3184,3186,3188,3190,3192,3194,3196,3198,3200,3202,3205,3207,3209,3211,3213,3215,3217,3219,3221,3223,3225,3227,3229,3231],{"class":1049,"line":1441},[1047,3165,1512],{"class":1061},[1047,3167,1213],{"class":1057},[1047,3169,2864],{"class":1216},[1047,3171,2867],{"class":1061},[1047,3173,1213],{"class":1057},[1047,3175,3115],{"class":1216},[1047,3177,1227],{"class":1061},[1047,3179,1230],{"class":1057},[1047,3181,3122],{"class":1074},[1047,3183,1230],{"class":1057},[1047,3185,1155],{"class":1057},[1047,3187,1071],{"class":1057},[1047,3189,3131],{"class":1074},[1047,3191,1230],{"class":1057},[1047,3193,1155],{"class":1057},[1047,3195,1058],{"class":1057},[1047,3197,1634],{"class":1101},[1047,3199,1105],{"class":1057},[1047,3201,1071],{"class":1057},[1047,3203,3204],{"class":1074},"label",[1047,3206,1230],{"class":1057},[1047,3208,1065],{"class":1057},[1047,3210,1707],{"class":1061},[1047,3212,1213],{"class":1057},[1047,3214,2906],{"class":1216},[1047,3216,1227],{"class":1061},[1047,3218,2911],{"class":1057},[1047,3220,2914],{"class":1101},[1047,3222,1105],{"class":1057},[1047,3224,1071],{"class":1057},[1047,3226,3094],{"class":1074},[1047,3228,1230],{"class":1057},[1047,3230,1065],{"class":1057},[1047,3232,1242],{"class":1061},[1047,3234,3235,3237,3239,3241,3243,3245,3247,3249,3251,3253,3255,3257,3259,3261,3263,3265,3267,3269,3271,3273,3275,3277,3279,3281,3283,3285,3287,3289,3291,3293,3295,3297,3299,3301],{"class":1049,"line":1480},[1047,3236,1512],{"class":1061},[1047,3238,1213],{"class":1057},[1047,3240,2864],{"class":1216},[1047,3242,2867],{"class":1061},[1047,3244,1213],{"class":1057},[1047,3246,3115],{"class":1216},[1047,3248,1227],{"class":1061},[1047,3250,1230],{"class":1057},[1047,3252,3122],{"class":1074},[1047,3254,1230],{"class":1057},[1047,3256,1155],{"class":1057},[1047,3258,1071],{"class":1057},[1047,3260,3131],{"class":1074},[1047,3262,1230],{"class":1057},[1047,3264,1155],{"class":1057},[1047,3266,1058],{"class":1057},[1047,3268,1634],{"class":1101},[1047,3270,1105],{"class":1057},[1047,3272,1071],{"class":1057},[1047,3274,3204],{"class":1074},[1047,3276,1230],{"class":1057},[1047,3278,1065],{"class":1057},[1047,3280,1707],{"class":1061},[1047,3282,1213],{"class":1057},[1047,3284,2906],{"class":1216},[1047,3286,1227],{"class":1061},[1047,3288,2911],{"class":1057},[1047,3290,2914],{"class":1101},[1047,3292,1105],{"class":1057},[1047,3294,1071],{"class":1057},[1047,3296,2022],{"class":1074},[1047,3298,1230],{"class":1057},[1047,3300,1065],{"class":1057},[1047,3302,1242],{"class":1061},[946,3304,3305,3311,3312,3315,3316,3319,3320,3322,3323,3326,3327,3329,3330,3333,3334,3336],{},[950,3306,3307,3308,1213],{},"Silent degrade if you skip ",[952,3309,3310],{},"displayLocale"," A ",[952,3313,3314],{},"sortBy"," field whose ",[952,3317,3318],{},"present.by"," is\nlocale-keyed but has no ",[952,3321,3310],{}," does not throw — a plain ",[952,3324,3325],{},"orderBy()"," degrades to raw\nstored-code order with no query-time warning. ",[952,3328,988],{}," emits a one-time ",[952,3331,3332],{},"console.warn"," at\ndeclare time when it detects this combination; watch for it, or use channel (b), which needs no\n",[952,3335,3310],{}," at all.",[941,3338,3340,3341,3343,3344,957,3346],{"id":3339},"reference-semantics-restrict-default-cascade-nullify","Reference semantics — ",[952,3342,1010],{}," (default), ",[952,3345,1014],{},[952,3347,1017],{},[946,3349,3350,3351,1105],{},"A lookup field is a constrained reference to its backing dimension. Deleting (or forgetting) a\nbacking row that is still referenced follows the field's ",[952,3352,3353],{},"onDelete",[1038,3355,3357],{"className":1040,"code":3356,"language":1042,"meta":1043,"style":1043},"import { dict } from '@noy-db\u002Fhub'\n\nconst tickets = vault.collection\u003C{ id: string; status: string }>('tickets', {\n  lookupFields: { status: dict('status') },     \u002F\u002F onDelete defaults to 'restrict'\n})\nawait vault.dictionary('status').put('paid', { en: 'Paid' })\nawait tickets.put('t1', { id: 't1', status: 'paid' })\n\n\u002F\u002F restrict (default) — refuses, naming the referencing collection and count:\nawait vault.dictionary('status').delete('paid')\n\u002F\u002F → rejects with DictKeyInUseError\n\u002F\u002F   err.dictionaryName === 'status'; err.usedBy === 'tickets'; err.count === 1\n\nawait tickets.delete('t1')                      \u002F\u002F retire the reference first\nawait vault.dictionary('status').delete('paid') \u002F\u002F now succeeds\n",[952,3358,3359,3378,3382,3430,3461,3467,3520,3570,3574,3579,3614,3619,3624,3628,3652],{"__ignoreMap":1043},[1047,3360,3361,3363,3365,3368,3370,3372,3374,3376],{"class":1049,"line":1050},[1047,3362,1054],{"class":1053},[1047,3364,1058],{"class":1057},[1047,3366,3367],{"class":1061}," dict",[1047,3369,1065],{"class":1057},[1047,3371,1068],{"class":1053},[1047,3373,1071],{"class":1057},[1047,3375,1075],{"class":1074},[1047,3377,1078],{"class":1057},[1047,3379,3380],{"class":1049,"line":1081},[1047,3381,1085],{"emptyLinePlaceholder":1084},[1047,3383,3384,3386,3389,3391,3393,3395,3397,3399,3401,3403,3405,3407,3410,3412,3414,3417,3419,3421,3424,3426,3428],{"class":1049,"line":1088},[1047,3385,1201],{"class":1091},[1047,3387,3388],{"class":1061}," tickets ",[1047,3390,1207],{"class":1057},[1047,3392,1210],{"class":1061},[1047,3394,1213],{"class":1057},[1047,3396,1217],{"class":1216},[1047,3398,2407],{"class":1057},[1047,3400,1102],{"class":1101},[1047,3402,1105],{"class":1057},[1047,3404,1108],{"class":1095},[1047,3406,1111],{"class":1057},[1047,3408,3409],{"class":1101}," status",[1047,3411,1105],{"class":1057},[1047,3413,1108],{"class":1095},[1047,3415,3416],{"class":1057}," }>",[1047,3418,1227],{"class":1061},[1047,3420,1230],{"class":1057},[1047,3422,3423],{"class":1074},"tickets",[1047,3425,1230],{"class":1057},[1047,3427,1155],{"class":1057},[1047,3429,1519],{"class":1057},[1047,3431,3432,3434,3436,3438,3440,3442,3444,3446,3448,3451,3453,3455,3458],{"class":1049,"line":1166},[1047,3433,1525],{"class":1101},[1047,3435,1105],{"class":1057},[1047,3437,1058],{"class":1057},[1047,3439,3409],{"class":1101},[1047,3441,1105],{"class":1057},[1047,3443,3367],{"class":1216},[1047,3445,1227],{"class":1061},[1047,3447,1230],{"class":1057},[1047,3449,3450],{"class":1074},"status",[1047,3452,1230],{"class":1057},[1047,3454,2509],{"class":1061},[1047,3456,3457],{"class":1057},"},",[1047,3459,3460],{"class":1571},"     \u002F\u002F onDelete defaults to 'restrict'\n",[1047,3462,3463,3465],{"class":1049,"line":1193},[1047,3464,1721],{"class":1057},[1047,3466,1242],{"class":1061},[1047,3468,3469,3471,3473,3475,3478,3480,3482,3484,3486,3488,3490,3492,3494,3496,3499,3501,3503,3505,3507,3509,3511,3514,3516,3518],{"class":1049,"line":1198},[1047,3470,1248],{"class":1053},[1047,3472,1210],{"class":1061},[1047,3474,1213],{"class":1057},[1047,3476,3477],{"class":1216},"dictionary",[1047,3479,1227],{"class":1061},[1047,3481,1230],{"class":1057},[1047,3483,3450],{"class":1074},[1047,3485,1230],{"class":1057},[1047,3487,1707],{"class":1061},[1047,3489,1213],{"class":1057},[1047,3491,1256],{"class":1216},[1047,3493,1227],{"class":1061},[1047,3495,1230],{"class":1057},[1047,3497,3498],{"class":1074},"paid",[1047,3500,1230],{"class":1057},[1047,3502,1155],{"class":1057},[1047,3504,1058],{"class":1057},[1047,3506,1334],{"class":1101},[1047,3508,1105],{"class":1057},[1047,3510,1071],{"class":1057},[1047,3512,3513],{"class":1074},"Paid",[1047,3515,1230],{"class":1057},[1047,3517,1065],{"class":1057},[1047,3519,1242],{"class":1061},[1047,3521,3522,3524,3527,3529,3531,3533,3535,3538,3540,3542,3544,3546,3548,3550,3552,3554,3556,3558,3560,3562,3564,3566,3568],{"class":1049,"line":1245},[1047,3523,1248],{"class":1053},[1047,3525,3526],{"class":1061}," tickets",[1047,3528,1213],{"class":1057},[1047,3530,1256],{"class":1216},[1047,3532,1227],{"class":1061},[1047,3534,1230],{"class":1057},[1047,3536,3537],{"class":1074},"t1",[1047,3539,1230],{"class":1057},[1047,3541,1155],{"class":1057},[1047,3543,1058],{"class":1057},[1047,3545,1102],{"class":1101},[1047,3547,1105],{"class":1057},[1047,3549,1071],{"class":1057},[1047,3551,3537],{"class":1074},[1047,3553,1230],{"class":1057},[1047,3555,1155],{"class":1057},[1047,3557,3409],{"class":1101},[1047,3559,1105],{"class":1057},[1047,3561,1071],{"class":1057},[1047,3563,3498],{"class":1074},[1047,3565,1230],{"class":1057},[1047,3567,1065],{"class":1057},[1047,3569,1242],{"class":1061},[1047,3571,3572],{"class":1049,"line":1324},[1047,3573,1085],{"emptyLinePlaceholder":1084},[1047,3575,3576],{"class":1049,"line":1366},[1047,3577,3578],{"class":1571},"\u002F\u002F restrict (default) — refuses, naming the referencing collection and count:\n",[1047,3580,3581,3583,3585,3587,3589,3591,3593,3595,3597,3599,3601,3604,3606,3608,3610,3612],{"class":1049,"line":1441},[1047,3582,1248],{"class":1053},[1047,3584,1210],{"class":1061},[1047,3586,1213],{"class":1057},[1047,3588,3477],{"class":1216},[1047,3590,1227],{"class":1061},[1047,3592,1230],{"class":1057},[1047,3594,3450],{"class":1074},[1047,3596,1230],{"class":1057},[1047,3598,1707],{"class":1061},[1047,3600,1213],{"class":1057},[1047,3602,3603],{"class":1216},"delete",[1047,3605,1227],{"class":1061},[1047,3607,1230],{"class":1057},[1047,3609,3498],{"class":1074},[1047,3611,1230],{"class":1057},[1047,3613,1242],{"class":1061},[1047,3615,3616],{"class":1049,"line":1480},[1047,3617,3618],{"class":1571},"\u002F\u002F → rejects with DictKeyInUseError\n",[1047,3620,3621],{"class":1049,"line":1485},[1047,3622,3623],{"class":1571},"\u002F\u002F   err.dictionaryName === 'status'; err.usedBy === 'tickets'; err.count === 1\n",[1047,3625,3626],{"class":1049,"line":1522},[1047,3627,1085],{"emptyLinePlaceholder":1084},[1047,3629,3630,3632,3634,3636,3638,3640,3642,3644,3646,3649],{"class":1049,"line":1532},[1047,3631,1248],{"class":1053},[1047,3633,3526],{"class":1061},[1047,3635,1213],{"class":1057},[1047,3637,3603],{"class":1216},[1047,3639,1227],{"class":1061},[1047,3641,1230],{"class":1057},[1047,3643,3537],{"class":1074},[1047,3645,1230],{"class":1057},[1047,3647,3648],{"class":1061},")                      ",[1047,3650,3651],{"class":1571},"\u002F\u002F retire the reference first\n",[1047,3653,3654,3656,3658,3660,3662,3664,3666,3668,3670,3672,3674,3676,3678,3680,3682,3684,3686],{"class":1049,"line":1554},[1047,3655,1248],{"class":1053},[1047,3657,1210],{"class":1061},[1047,3659,1213],{"class":1057},[1047,3661,3477],{"class":1216},[1047,3663,1227],{"class":1061},[1047,3665,1230],{"class":1057},[1047,3667,3450],{"class":1074},[1047,3669,1230],{"class":1057},[1047,3671,1707],{"class":1061},[1047,3673,1213],{"class":1057},[1047,3675,3603],{"class":1216},[1047,3677,1227],{"class":1061},[1047,3679,1230],{"class":1057},[1047,3681,3498],{"class":1074},[1047,3683,1230],{"class":1057},[1047,3685,2509],{"class":1061},[1047,3687,3688],{"class":1571},"\u002F\u002F now succeeds\n",[2294,3690,3691,3701,3708],{},[2297,3692,3693,3697,3698,1213],{},[950,3694,3695],{},[952,3696,1010],{}," refuses the delete before any mutation with ",[952,3699,3700],{},"DictKeyInUseError",[2297,3702,3703,3707],{},[950,3704,3705],{},[952,3706,1014],{}," tombstones\u002Fdeletes every referencing record.",[2297,3709,3710,3714,3715,1213],{},[950,3711,3712],{},[952,3713,1017],{}," clears the referencing field via an ordinary ",[952,3716,2167],{},[946,3718,3719,3720,3723,3724,3726,3727,3729,3730,3732,3733,3738,3739,3741,3742,3744,3745,3747,3748,1011,3751,2148,3754,1022],{},"The matrix tier behaves identically against a first-class collection — ",[952,3721,3722],{},"countries.delete(...)","\nthrows, cascades, or nullifies the same way — and ",[952,3725,1010],{}," matches against ",[952,3728,1749],{},", not the\nrow's storage id, so the non-default-",[952,3731,1740],{}," recipe above is fully covered.\n",[975,3734,3735],{"href":686},[952,3736,3737],{},"vault.forget()"," composes the same way: ",[952,3740,1010],{}," refuses the forget call\nitself before any shred while references exist; ",[952,3743,1014],{},"\u002F",[952,3746,1017],{}," propagate after the shred and\nare reported on the forget result (",[952,3749,3750],{},"lookupReferencesCascaded",[952,3752,3753],{},"lookupReferencesNullified",[952,3755,3756],{},"lookupReferencesResidue",[946,3758,3759,3760,3763,3764,3767,3768,3770],{},"To ",[950,3761,3762],{},"change"," (rather than delete) a dictionary key that records already reference, use\n",[952,3765,3766],{},"vault.dictionary(name).rename(oldKey, newKey)"," — it rewrites every referencing record to the new\nkey in one operation, and is honored even when the referencing field declares ",[952,3769,1940],{}," (mid-rename both the old and new keys count as members).",[946,3772,3773,3774,3777,3778,3780,3781,2148,3784,3787],{},"A plain delete of a dictionary\u002Fcollection row that ",[950,3775,3776],{},"no"," declared lookup field references is\ncompletely unaffected — ",[952,3779,3353],{}," only fires for dimensions a ",[952,3782,3783],{},"lookupFields",[952,3785,3786],{},"via(lookup(...))"," declaration actually points at.",[3789,3790,3792],"h3",{"id":3791},"when-a-backing-rows-key-cant-be-read","When a backing row's key can't be read",[946,3794,3795,3796,3798,3799,3801,3802,3804,3805,3808],{},"A matrix dimension with a custom ",[952,3797,1740],{}," resolves each reference by reading ",[952,3800,1749],{}," off the\nbacking row. If that row is corrupted — the ",[952,3803,1740],{}," field missing, or holding a non-scalar value —\nthe reference ",[950,3806,3807],{},"can't be resolved",", and the two policies diverge:",[2294,3810,3811,3836],{},[2297,3812,3813,3817,3818,3821,3822,957,3825,3827,3828,3831,3832,3835],{},[950,3814,3815],{},[952,3816,1010],{}," fails closed: the delete\u002Fforget refuses with ",[952,3819,3820],{},"RestrictRefUnresolvableError","\n(carrying ",[952,3823,3824],{},"dimension",[952,3826,1740],{},", and the ",[952,3829,3830],{},"referencing"," edge as ",[952,3833,3834],{},"\"collection.field\"","), since it\ncannot prove the row is unreferenced.",[2297,3837,3838,3844,3845,3848,3849,3852,3853,3856,3857,1022],{},[950,3839,3840,1011,3842],{},[952,3841,1014],{},[952,3843,1017],{}," proceed, but the edge that could not be propagated is never dropped\nsilently — it is reported on a ",[952,3846,3847],{},"lookup:propagation-residue"," vault event\n(",[952,3850,3851],{},"{ vault, dimension, key, residue }",", each residue entry formatted ",[952,3854,3855],{},"dimension:key:collection.field",",\ne.g. ",[952,3858,3859],{},"'countries:row-broken:orders.country'",[946,3861,3862,3863,3865],{},"A row whose ",[952,3864,1740],{}," is present and scalar is unaffected — this concerns only corrupted backing rows.",[941,3867,3869],{"id":3868},"reserved-tier-sync-dictionaries-travel","Reserved-tier sync — dictionaries travel",[946,3871,3872,3873,3875,3876,3878,3879,3882,3883,3886,3887,3890,3893,3894,3897,3898,3902,3903,3906],{},"Reserved ",[952,3874,980],{}," collections participate in ",[975,3877,864],{"href":865},": ",[952,3880,3881],{},"vault.dictionary(name)","\nwrites enter the dirty log and dispatch like any other write, and ",[952,3884,3885],{},"pull()"," applies remote\ndictionary rows through the ordinary path via an explicit reserved-prefix registry (every ",[1743,3888,3889],{},"other",[952,3891,3892],{},"_","-prefixed internal namespace keeps its skip semantics). Dictionary ",[950,3895,3896],{},"deletes"," travel as\nversion-ordered ",[975,3899,3901],{"href":3900},"\u002Fservices\u002Fsync#deletes-converge-as-delete-markers","delete markers",", so a deleted\nkey cannot be silently resurrected by a stale peer's next push. Before ",[952,3904,3905],{},"0.3.0-pre.9",", dictionary\nwrites bypassed sync entirely and only crossed devices via backup\u002Fbundle export.",[941,3908,3910,3913,3914,3916],{"id":3909},"describe-the-normalized-lookup-block",[952,3911,3912],{},"describe()"," — the normalized ",[952,3915,731],{}," block",[946,3918,3919,3920,3744,3922,3744,3924,3926,3927,3929,3930,3935,3936,3938],{},"A native ",[952,3921,988],{},[952,3923,968],{},[952,3925,972],{}," field contributes a normalized ",[952,3928,731],{}," block to\n",[975,3931,3932],{"href":678},[952,3933,3934],{},"collection.describe()"," — alongside, not replacing, the legacy ",[952,3937,2073],{},"\nblock:",[1038,3940,3942],{"className":1040,"code":3941,"language":1042,"meta":1043,"style":1043},"orders.describe().fields.find((f) => f.key === 'country')?.lookup\n\u002F\u002F {\n\u002F\u002F   dimension: 'countries', backing: 'collection', vocabulary: 'closed', key: 'iso2',\n\u002F\u002F   altKeys: ['iso3', 'callPrefix'], present: { label: 'name', by: 'locale' },\n\u002F\u002F   sortBy: 'name', onDelete: 'restrict',\n\u002F\u002F }\n",[952,3943,3944,4002,4007,4012,4017,4022],{"__ignoreMap":1043},[1047,3945,3946,3948,3950,3953,3955,3957,3960,3962,3965,3967,3969,3973,3975,3978,3981,3983,3986,3989,3991,3993,3995,3997,3999],{"class":1049,"line":1050},[1047,3947,1512],{"class":1061},[1047,3949,1213],{"class":1057},[1047,3951,3952],{"class":1216},"describe",[1047,3954,2867],{"class":1061},[1047,3956,1213],{"class":1057},[1047,3958,3959],{"class":1061},"fields",[1047,3961,1213],{"class":1057},[1047,3963,3964],{"class":1216},"find",[1047,3966,1227],{"class":1061},[1047,3968,1227],{"class":1057},[1047,3970,3972],{"class":3971},"sHdIc","f",[1047,3974,1707],{"class":1057},[1047,3976,3977],{"class":1091}," =>",[1047,3979,3980],{"class":1061}," f",[1047,3982,1213],{"class":1057},[1047,3984,3985],{"class":1061},"key ",[1047,3987,3988],{"class":1057},"===",[1047,3990,1071],{"class":1057},[1047,3992,3122],{"class":1074},[1047,3994,1230],{"class":1057},[1047,3996,1707],{"class":1061},[1047,3998,1841],{"class":1057},[1047,4000,4001],{"class":1061},"lookup\n",[1047,4003,4004],{"class":1049,"line":1081},[1047,4005,4006],{"class":1571},"\u002F\u002F {\n",[1047,4008,4009],{"class":1049,"line":1088},[1047,4010,4011],{"class":1571},"\u002F\u002F   dimension: 'countries', backing: 'collection', vocabulary: 'closed', key: 'iso2',\n",[1047,4013,4014],{"class":1049,"line":1166},[1047,4015,4016],{"class":1571},"\u002F\u002F   altKeys: ['iso3', 'callPrefix'], present: { label: 'name', by: 'locale' },\n",[1047,4018,4019],{"class":1049,"line":1193},[1047,4020,4021],{"class":1571},"\u002F\u002F   sortBy: 'name', onDelete: 'restrict',\n",[1047,4023,4024],{"class":1049,"line":1198},[1047,4025,4026],{"class":1571},"\u002F\u002F }\n",[946,4028,4029,4032,4033,4036,4037,4039,4040,4042,4043,4045,4046,4048,4049,4051],{},[952,4030,4031],{},"widget"," derives to ",[952,4034,4035],{},"'select'"," whenever a ",[952,4038,731],{}," block is present. The statically-known key set\nappears only where one exists (enum tier, or a dict tier with declared ",[952,4041,2058],{},") — a matrix-tier\nfield has no ",[952,4044,2058],{}," (membership lives in the backing collection's rows), and a bare ",[952,4047,968],{},"\nfield omits ",[952,4050,3824],{}," entirely (it has no backing store).",[941,4053,4055],{"id":4054},"dictkey-and-staticdict-are-aliases","dictKey and staticDict are aliases",[946,4057,4058,4059,2144,4061,1011,4063,4065,4066,4069,4070,4072,4073,4075,4076,3744,4079,3744,4081,4083,4084,4087,4088,4090,4091,977,4093,4095,4096,4098,4099,3744,4101,3744,4103,4105,4106,3744,4108,3744,4110,4112],{},"The ",[975,4060,701],{"href":702},[952,4062,2147],{},[952,4064,2151],{}," are ",[950,4067,4068],{},"aliases"," of this\nfeature's descriptor shape — not deprecated, fully supported: internally they build the\nequivalent descriptor (",[952,4071,2147],{}," ≙ the reserved tier, ",[952,4074,2151],{}," ≙ the static tier) and\ntheir stored envelopes, ",[952,4077,4078],{},"type",[952,4080,4031],{},[952,4082,2073],{}," describe() output, and ",[952,4085,4086],{},".join()"," dressing are\nbyte-identical to the native equivalent. Two differences remain, by design: the aliases do ",[950,4089,1733],{},"\nemit the new ",[952,4092,3912],{},[952,4094,731],{}," block, and they do not gain the new capabilities — altKeys,\n",[952,4097,1940],{}," refusal, the matrix tier, and ",[952,4100,1010],{},[952,4102,1014],{},[952,4104,1017],{}," semantics\nbelong to the native ",[952,4107,988],{},[952,4109,968],{},[952,4111,972],{}," spellings only.",[941,4114,4116],{"id":4115},"late-attach-declaring-lookup-fields-after-construction","Late-attach — declaring lookup fields after construction",[946,4118,4119,4121,4122,977,4125,4128,4129,4131,4132,4134,4135,4138],{},[952,4120,3783],{}," can be declared on a ",[950,4123,4124],{},"later",[952,4126,4127],{},"vault.collection(name, …)"," call against a collection\nthat is already open, not only at first construction — a \"late attach\". The fields go live at once:\nclosed-vocabulary enforcement, altKey normalization, and ",[952,4130,2823],{}," dressing (direct and\nthrough joins) all take effect immediately, and the reference-graph edges (",[952,4133,3353],{},") register on\nattach. Enforcement is ",[950,4136,4137],{},"not retroactive"," — records written before the attach keep whatever value\nthey already held, since they never ran altKey ingest or the closed-vocabulary check.",[946,4140,4141,4142,4145,4146,4148,4149,4151,4152,4154],{},"The matrix tier has one precondition: the backing dimension must ",[950,4143,4144],{},"already be open in this session,\nin eager mode",". A late matrix attach against a dimension that is unopened (or was opened\n",[952,4147,2178],{},") throws ",[952,4150,2185],{}," naming the field and dimension; open the backing\ncollection first and the same attach succeeds. The enum, static, and reserved (",[952,4153,972],{},") tiers\nattach with no such precondition.",[946,4156,4157,4158,4160,4161,4163,4164,4167,4168,4170],{},"If a late-attached field collides with a field already owned by a different ",[952,4159,896],{}," family (for\nexample attaching a ",[952,4162,731],{}," onto a field already declared through ",[952,4165,4166],{},"moneyFields","), the whole call\nthrows ",[952,4169,2185],{}," naming the field and both families — the attach is all-or-nothing.",[941,4172,4174],{"id":4173},"api-reference","API reference",[3789,4176,4178],{"id":4177},"lookupdimension-opts",[952,4179,4180],{},"lookup(dimension, opts?)",[946,4182,4183,4184,1213],{},"The general factory — any tier via ",[952,4185,2010],{},[2013,4187,4188,4204],{},[2016,4189,4190],{},[2019,4191,4192,4195,4198,4201],{},[2022,4193,4194],{},"Option",[2022,4196,4197],{},"Type",[2022,4199,4200],{},"Default",[2022,4202,4203],{},"Purpose",[2038,4205,4206,4224,4244,4269,4293,4314,4332,4351,4366,4382,4400],{},[2019,4207,4208,4212,4216,4221],{},[2043,4209,4210],{},[952,4211,1740],{},[2043,4213,4214],{},[952,4215,1152],{},[2043,4217,4218],{},[952,4219,4220],{},"'id'",[2043,4222,4223],{},"Backing-row field holding the canonical key.",[2019,4225,4226,4230,4235,4238],{},[2043,4227,4228],{},[952,4229,999],{},[2043,4231,4232],{},[952,4233,4234],{},"readonly string[]",[2043,4236,4237],{},"—",[2043,4239,4240,4241,4243],{},"Backing-row fields whose values normalize to ",[952,4242,1740],{}," on write. Matrix tier requires the backing collection open in eager mode.",[2019,4245,4246,4251,4256,4260],{},[2043,4247,4248],{},[952,4249,4250],{},"vocabulary",[2043,4252,4253],{},[952,4254,4255],{},"'open' | 'closed'",[2043,4257,4258],{},[952,4259,2327],{},[2043,4261,4262,4265,4266,1022],{},[952,4263,4264],{},"'closed'"," refuses unknown keys at write time (",[952,4267,4268],{},"UnknownLookupKeyError",[2019,4270,4271,4276,4281,4283],{},[2043,4272,4273],{},[952,4274,4275],{},"present",[2043,4277,4278],{},[952,4279,4280],{},"{ label: string; by?: string }",[2043,4282,4237],{},[2043,4284,4285,4286,4288,4289,4292],{},"Which backing-row field supplies ",[952,4287,2823],{},"; ",[952,4290,4291],{},"by: 'locale'"," makes it locale-keyed.",[2019,4294,4295,4299,4303,4305],{},[2043,4296,4297],{},[952,4298,3314],{},[2043,4300,4301],{},[952,4302,1152],{},[2043,4304,4237],{},[2043,4306,4307,4308,4310,4311,4313],{},"Backing-row field a plain ",[952,4309,3325],{}," sorts by (needs ",[952,4312,3310],{}," when locale-keyed).",[2019,4315,4316,4320,4325,4329],{},[2043,4317,4318],{},[952,4319,2010],{},[2043,4321,4322],{},[952,4323,4324],{},"'static' | 'reserved' | 'collection'",[2043,4326,4327],{},[952,4328,2134],{},[2043,4330,4331],{},"The tier.",[2019,4333,4334,4338,4343,4348],{},[2043,4335,4336],{},[952,4337,3353],{},[2043,4339,4340],{},[952,4341,4342],{},"'restrict' | 'cascade' | 'nullify'",[2043,4344,4345],{},[952,4346,4347],{},"'restrict'",[2043,4349,4350],{},"Reference semantics on delete\u002Fforget of a referenced backing row.",[2019,4352,4353,4357,4361,4363],{},[2043,4354,4355],{},[952,4356,2058],{},[2043,4358,4359],{},[952,4360,4234],{},[2043,4362,4237],{},[2043,4364,4365],{},"Declared key list (enum\u002Fdict tiers).",[2019,4367,4368,4372,4377,4379],{},[2043,4369,4370],{},[952,4371,2013],{},[2043,4373,4374],{},[952,4375,4376],{},"Record\u003Cstring, Record\u003Cstring, string>>",[2043,4378,4237],{},[2043,4380,4381],{},"Static tier's in-code key → locale → label table.",[2019,4383,4384,4388,4392,4394],{},[2043,4385,4386],{},[952,4387,3310],{},[2043,4389,4390],{},[952,4391,1152],{},[2043,4393,4237],{},[2043,4395,4396,4397,4399],{},"Fixed locale for declared-",[952,4398,3314],{}," ordering and locale-less label reads.",[2019,4401,4402,4413,4415,4417],{},[2043,4403,4404,1011,4407,1011,4410],{},[952,4405,4406],{},"onMissing",[952,4408,4409],{},"substitute",[952,4411,4412],{},"labels",[2043,4414,4237],{},[2043,4416,4237],{},[2043,4418,4419,4420,4422],{},"Label-resolution policy, shared with the ",[975,4421,701],{"href":702}," engine.",[3789,4424,4426,4429,4430,1707],{"id":4425},"enumofkeys-also-exported-as-enum",[952,4427,4428],{},"enumOf(keys)"," (also exported as ",[952,4431,2047],{},[946,4433,4434,4435,1321,4437,4440,4441,4444],{},"Inline closed enum — no backing store, no dimension name, ",[952,4436,1940],{},[952,4438,4439],{},"onDelete: 'restrict'",". ",[952,4442,4443],{},"enumOf(['draft', 'paid'] as const)"," types the field to the literal\nunion.",[3789,4446,4448],{"id":4447},"dictdimension-opts",[952,4449,4450],{},"dict(dimension, opts?)",[946,4452,4453,4454,4457,4458,4461,4462,4465,4466,957,4468,957,4470,957,4472,1321,4474,957,4476,4478,4479,4481],{},"Reserved-tier dictionary field — backed by ",[952,4455,4456],{},"vault.dictionary(dimension)","'s ",[952,4459,4460],{},"_dict_\u003Cdimension>","\ncollection, ",[952,4463,4464],{},"vocabulary: 'open'"," by default. Accepts ",[952,4467,2058],{},[952,4469,4250],{},[952,4471,4275],{},[952,4473,3353],{},[952,4475,4406],{},[952,4477,4409],{},". No ",[952,4480,999],{}," (the dictionary cache is always synchronous, so none of\nthe matrix tier's hydration constraints apply — and none of its altKey support either).",[3789,4483,4485],{"id":4484},"errors","Errors",[2013,4487,4488,4498],{},[2016,4489,4490],{},[2019,4491,4492,4495],{},[2022,4493,4494],{},"Error",[2022,4496,4497],{},"Thrown when",[2038,4499,4500,4512,4534],{},[2019,4501,4502,4506],{},[2043,4503,4504],{},[952,4505,4268],{},[2043,4507,4508,4509,4511],{},"A write supplies a key (after altKey normalization) that a ",[952,4510,1940],{}," field's backing dimension doesn't contain.",[2019,4513,4514,4518],{},[2043,4515,4516],{},[952,4517,3700],{},[2043,4519,4520,4521,4523,4524,957,4527,4530,4531,1213],{},"A backing dictionary\u002Fcollection row still referenced by a ",[952,4522,1010],{}," lookup field is deleted or forgotten. Carries ",[952,4525,4526],{},"dictionaryName",[952,4528,4529],{},"usedBy"," (the referencing collection), and ",[952,4532,4533],{},"count",[2019,4535,4536,4540],{},[2043,4537,4538],{},[952,4539,3820],{},[2043,4541,4542,4543,4545,4546,4548,4549,957,4551,4553,4554,953,4556,1022],{},"A ",[952,4544,1010],{}," delete\u002Fforget cannot resolve a referenced backing row's compare-key (its ",[952,4547,1740],{}," field is missing or non-scalar on a corrupted row), so it fails closed. Carries ",[952,4550,3824],{},[952,4552,1740],{},", and ",[952,4555,3830],{},[952,4557,3834],{},[941,4559,4561],{"id":4560},"limits-gotchas","Limits & gotchas",[2294,4563,4564,4587,4605],{},[2297,4565,4566,4569,4570,4572,4573,4575,4576,4578,4579,4581,4582,4584,4585,1213],{},[950,4567,4568],{},"Matrix-tier altKeys, closed vocabulary, and label presentation need a hydrated backing\ncollection"," — see the cold-session caveat above; with a custom ",[952,4571,1740],{},", a cold dimension yields no\n",[952,4574,2823],{}," until it is opened (only the default ",[952,4577,2966],{}," has an on-demand fallback).\n",[952,4580,999],{}," additionally refuses lazy (",[952,4583,2178],{},") backing collections at write time\nwith ",[952,4586,2185],{},[2297,4588,4589,4598,4599,4601,4602,1213],{},[950,4590,4591,4592,4594,4595,4597],{},"Declared ",[952,4593,3314],{}," without ",[952,4596,3310],{}," silently sorts by code"," when the label is\nlocale-keyed — heed the declare-time ",[952,4600,3332],{},", or use ",[952,4603,4604],{},"orderBy(..., { by: 'label' })",[2297,4606,4607,4612,4613,4615],{},[950,4608,4609,4611],{},[952,4610,1010],{}," is a behavior change for declared lookup fields"," relative to the alias era:\n",[952,4614,3700],{}," existed and was documented long before it was ever thrown; a delete of a\nstill-referenced dictionary row now actually refuses. Undeclared dimensions are unaffected.",[941,4617,4619],{"id":4618},"see-also","See also",[2294,4621,4622,4627,4637,4650,4655,4660,4672],{},[2297,4623,4624,4626],{},[975,4625,896],{"href":897}," — the field-feature surface this binding plugs into",[2297,4628,4629,4631,4632,3744,4634,4636],{},[975,4630,701],{"href":702}," — ",[952,4633,2147],{},[952,4635,2151],{},", dictionaries, and the label-resolution engine",[2297,4638,4639,4642,4643,3744,4646,4649],{},[975,4640,4641],{"href":682},"foreign-refs"," — record-to-record foreign keys (",[952,4644,4645],{},"ref()",[952,4647,4648],{},"refArray()","); lookup fields are code-to-dimension references with label resolution on top",[2297,4651,4652,4654],{},[975,4653,864],{"href":865}," — delete markers and how reserved dictionaries replicate",[2297,4656,4657,4659],{},[975,4658,685],{"href":686}," — how reference semantics gate or propagate an erasure",[2297,4661,4662,4665,4666,4668,4669,4671],{},[975,4663,4664],{"href":678},"field-metadata"," — the ",[952,4667,3912],{}," surface the ",[952,4670,731],{}," block extends",[2297,4673,4674,4677,4678],{},[975,4675,4676],{"href":598},"Services overview"," · ",[975,4679,4681],{"href":4680},"\u002Forientation","Orientation map",[4683,4684,4685],"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 .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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}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 .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}",{"title":1043,"searchDepth":1088,"depth":1088,"links":4687},[4688,4689,4690,4691,4692,4693,4694,4696,4697,4701,4702,4704,4705,4706,4713,4714],{"id":943,"depth":1081,"text":944},{"id":1025,"depth":1081,"text":1026},{"id":2003,"depth":1081,"text":2004},{"id":2155,"depth":1081,"text":2156},{"id":2212,"depth":1081,"text":2213},{"id":2373,"depth":1081,"text":2374},{"id":2819,"depth":1081,"text":4695},"Presentation — \u003Cfield>Label, in reads and joins",{"id":2977,"depth":1081,"text":2978},{"id":3339,"depth":1081,"text":4698,"children":4699},"Reference semantics — restrict (default), cascade, nullify",[4700],{"id":3791,"depth":1088,"text":3792},{"id":3868,"depth":1081,"text":3869},{"id":3909,"depth":1081,"text":4703},"describe() — the normalized lookup block",{"id":4054,"depth":1081,"text":4055},{"id":4115,"depth":1081,"text":4116},{"id":4173,"depth":1081,"text":4174,"children":4707},[4708,4709,4711,4712],{"id":4177,"depth":1088,"text":4180},{"id":4425,"depth":1088,"text":4710},"enumOf(keys) (also exported as enum)",{"id":4447,"depth":1088,"text":4450},{"id":4484,"depth":1088,"text":4485},{"id":4560,"depth":1081,"text":4561},{"id":4618,"depth":1081,"text":4619},null,"The lookup()\u002FenumOf()\u002Fdict() field feature: a field stores a canonical code and resolves against a backing dimension, with reference integrity.","md",{},"service",{"title":731,"description":4716},"experimental","Reference fields over enum, dictionary, and first-class collection dimensions","important","_MvjHtMPb12hgYIfNRqNRVDP_-IU0IQinZS51KGWkZg",{"data":4726,"body":4727},{},{"type":4728,"children":4729},"root",[4730],{"type":4731,"tag":946,"props":4732,"children":4733},"element",{},[4734,4740,4742,4747,4748,4754,4755,4760,4762,4767,4768,4773,4774,4779],{"type":4731,"tag":952,"props":4735,"children":4737},{"className":4736},[],[4738],{"type":4739,"value":1075},"text",{"type":4739,"value":4741}," (root export — ",{"type":4731,"tag":952,"props":4743,"children":4745},{"className":4744},[],[4746],{"type":4739,"value":731},{"type":4739,"value":957},{"type":4731,"tag":952,"props":4749,"children":4751},{"className":4750},[],[4752],{"type":4739,"value":4753},"enumOf",{"type":4739,"value":4429},{"type":4731,"tag":952,"props":4756,"children":4758},{"className":4757},[],[4759],{"type":4739,"value":2047},{"type":4739,"value":4761},"), ",{"type":4731,"tag":952,"props":4763,"children":4765},{"className":4764},[],[4766],{"type":4739,"value":2073},{"type":4739,"value":957},{"type":4731,"tag":952,"props":4769,"children":4771},{"className":4770},[],[4772],{"type":4739,"value":4268},{"type":4739,"value":957},{"type":4731,"tag":952,"props":4775,"children":4777},{"className":4776},[],[4778],{"type":4739,"value":3700},{"type":4739,"value":1707},{"data":4781,"body":4782},{},{"type":4728,"children":4783},[4784],{"type":4731,"tag":946,"props":4785,"children":4786},{},[4787,4789,4795,4797,4803,4805,4811,4813],{"type":4739,"value":4788},"no ",{"type":4731,"tag":952,"props":4790,"children":4792},{"className":4791},[],[4793],{"type":4739,"value":4794},"with*()",{"type":4739,"value":4796}," strategy — declare ",{"type":4731,"tag":952,"props":4798,"children":4800},{"className":4799},[],[4801],{"type":4739,"value":4802},"lookupFields: { field: lookup(...) }",{"type":4739,"value":4804}," (or ",{"type":4731,"tag":952,"props":4806,"children":4808},{"className":4807},[],[4809],{"type":4739,"value":4810},"viaFields: { field: via(lookup(...)) }",{"type":4739,"value":4812},") on ",{"type":4731,"tag":952,"props":4814,"children":4816},{"className":4815},[],[4817],{"type":4739,"value":4818},"vault.collection()",{"data":4820,"body":4821},{},{"type":4728,"children":4822},[4823],{"type":4731,"tag":946,"props":4824,"children":4825},{},[4826,4828,4833],{"type":4739,"value":4827},"field feature — declared per field through the ",{"type":4731,"tag":952,"props":4829,"children":4831},{"className":4830},[],[4832],{"type":4739,"value":896},{"type":4739,"value":4834}," surface",1791896572805]