[{"data":1,"prerenderedAt":4476},["ShallowReactive",2],{"navigation":3,"\u002Fservices\u002Fi18n":927,"mdc--x0wrbo-key":4418,"mdc--9e7hl1-key":4433,"mdc--m8qwwq-key":4445,"mdc-vl4hlf-key":4458,"mdc-6d0q6a-key":4467},[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":701,"access":12,"apiToc":929,"body":930,"category":4409,"description":4410,"extension":4411,"meta":4412,"navigation":4409,"nest":4413,"path":702,"seo":4414,"sinceVersion":4409,"status":4415,"stem":703,"subtitle":4409,"tier":4416,"tocExternal":4409,"__hash__":4417},"docs\u002Fservices\u002Fi18n.md",false,{"type":931,"value":932,"toc":4394},"minimark",[933,936,940,945,997,1001,1027,1031,1043,1047,1233,1237,1245,1911,1939,1943,1997,2001,2027,2031,2048,2062,2378,2391,2532,2547,2615,2647,2803,2907,2967,2990,3007,3031,3034,3128,3134,3177,3189,3216,3226,3244,3392,3422,3458,3559,3609,3642,3646,3670,4075,4080,4184,4191,4195,4257,4267,4271,4287,4291,4323,4327,4390],[934,935,701],"h1",{"id":701},[937,938],"service-meta",{":rows":939},"[{\"label\":\"Subpath\",\"value\":\"`@noy-db\u002Fhub\u002Fi18n`\"},{\"label\":\"Factory\",\"value\":\"`withI18n()`\"},{\"label\":\"Layer\",\"value\":\"`with-shape`\"},{\"label\":\"Cluster\",\"value\":\"D — Data Shape\"},{\"label\":\"LOC cost\",\"value\":\"~854 (off-bundle when not opted in)\"}]",[941,942,944],"h2",{"id":943},"what-it-does","What it does",[946,947,948,951,952,956,957,963,964,967,968,971,972,977,978,981,982,985,986,989,990,993,994,996],"p",{},[949,950,701],"code",{}," lets a ",[953,954,955],"a",{"href":48},"collection"," store one value per record and return the right locale's version of it on read, without your application code branching on language anywhere. It covers two complementary patterns: ",[958,959,960],"strong",{},[949,961,962],{},"dictKey"," — a stable code (",[949,965,966],{},"'paid'",", ",[949,969,970],{},"'draft'",") that resolves against a shared, per-vault label dictionary — for enum-like fields where the set of values is small and known; and ",[958,973,974],{},[949,975,976],{},"i18nText"," — a ",[949,979,980],{},"{ locale: string }"," map stored directly on the record — for free-form translated content (descriptions, notes). Locale resolution happens after decryption, at read time, so the record on disk always holds every locale you wrote; only the value handed back from ",[949,983,984],{},"get()","\u002F",[949,987,988],{},"list()"," changes shape. The label dictionary itself is stored as an encrypted collection inside the vault, and is versioned\u002Faudit-logged like any other collection when the history service (",[949,991,992],{},"withHistory()",") is also opted in — that's not a property of ",[949,995,701],{}," alone.",[941,998,1000],{"id":999},"when-you-need-it","When you need it",[1002,1003,1004,1008,1021,1024],"ul",{},[1005,1006,1007],"li",{},"Apps that ship in more than one language",[1005,1009,1010,1011,967,1014,967,1017,1020],{},"Enum-like fields (",[949,1012,1013],{},"status",[949,1015,1016],{},"taxClass",[949,1018,1019],{},"country",") where labels differ by locale",[1005,1022,1023],{},"Per-record translatable content (descriptions, comments, free-form notes)",[1005,1025,1026],{},"Auto-translate hooks for missing locale fills",[941,1028,1030],{"id":1029},"prerequisites","Prerequisites",[1002,1032,1033],{},[1005,1034,1035,1038,1039,1042],{},[958,1036,1037],{},"None"," — ",[949,1040,1041],{},"withI18n()"," plus the per-collection dictionary declarations shown below; no other strategy or package is involved.",[941,1044,1046],{"id":1045},"opt-in","Opt in",[1048,1049,1054],"pre",{"className":1050,"code":1051,"language":1052,"meta":1053,"style":1053},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","import { createNoydb, dictKey, i18nText } from '@noy-db\u002Fhub'\nimport { toMemory } from '@noy-db\u002Fto-memory'\nimport { withI18n } from '@noy-db\u002Fhub\u002Fi18n'\n\nconst db = await createNoydb({\n  store: toMemory(),\n  user: 'alice',\n  i18nStrategy: withI18n(),\n})\n","ts","",[949,1055,1056,1100,1121,1142,1149,1174,1192,1210,1224],{"__ignoreMap":1053},[1057,1058,1061,1065,1069,1073,1076,1079,1081,1084,1087,1090,1093,1097],"span",{"class":1059,"line":1060},"line",1,[1057,1062,1064],{"class":1063},"s7zQu","import",[1057,1066,1068],{"class":1067},"sMK4o"," {",[1057,1070,1072],{"class":1071},"sTEyZ"," createNoydb",[1057,1074,1075],{"class":1067},",",[1057,1077,1078],{"class":1071}," dictKey",[1057,1080,1075],{"class":1067},[1057,1082,1083],{"class":1071}," i18nText",[1057,1085,1086],{"class":1067}," }",[1057,1088,1089],{"class":1063}," from",[1057,1091,1092],{"class":1067}," '",[1057,1094,1096],{"class":1095},"sfazB","@noy-db\u002Fhub",[1057,1098,1099],{"class":1067},"'\n",[1057,1101,1103,1105,1107,1110,1112,1114,1116,1119],{"class":1059,"line":1102},2,[1057,1104,1064],{"class":1063},[1057,1106,1068],{"class":1067},[1057,1108,1109],{"class":1071}," toMemory",[1057,1111,1086],{"class":1067},[1057,1113,1089],{"class":1063},[1057,1115,1092],{"class":1067},[1057,1117,1118],{"class":1095},"@noy-db\u002Fto-memory",[1057,1120,1099],{"class":1067},[1057,1122,1124,1126,1128,1131,1133,1135,1137,1140],{"class":1059,"line":1123},3,[1057,1125,1064],{"class":1063},[1057,1127,1068],{"class":1067},[1057,1129,1130],{"class":1071}," withI18n",[1057,1132,1086],{"class":1067},[1057,1134,1089],{"class":1063},[1057,1136,1092],{"class":1067},[1057,1138,1139],{"class":1095},"@noy-db\u002Fhub\u002Fi18n",[1057,1141,1099],{"class":1067},[1057,1143,1145],{"class":1059,"line":1144},4,[1057,1146,1148],{"emptyLinePlaceholder":1147},true,"\n",[1057,1150,1152,1156,1159,1162,1165,1168,1171],{"class":1059,"line":1151},5,[1057,1153,1155],{"class":1154},"spNyl","const",[1057,1157,1158],{"class":1071}," db ",[1057,1160,1161],{"class":1067},"=",[1057,1163,1164],{"class":1063}," await",[1057,1166,1072],{"class":1167},"s2Zo4",[1057,1169,1170],{"class":1071},"(",[1057,1172,1173],{"class":1067},"{\n",[1057,1175,1177,1181,1184,1186,1189],{"class":1059,"line":1176},6,[1057,1178,1180],{"class":1179},"swJcz","  store",[1057,1182,1183],{"class":1067},":",[1057,1185,1109],{"class":1167},[1057,1187,1188],{"class":1071},"()",[1057,1190,1191],{"class":1067},",\n",[1057,1193,1195,1198,1200,1202,1205,1208],{"class":1059,"line":1194},7,[1057,1196,1197],{"class":1179},"  user",[1057,1199,1183],{"class":1067},[1057,1201,1092],{"class":1067},[1057,1203,1204],{"class":1095},"alice",[1057,1206,1207],{"class":1067},"'",[1057,1209,1191],{"class":1067},[1057,1211,1213,1216,1218,1220,1222],{"class":1059,"line":1212},8,[1057,1214,1215],{"class":1179},"  i18nStrategy",[1057,1217,1183],{"class":1067},[1057,1219,1130],{"class":1167},[1057,1221,1188],{"class":1071},[1057,1223,1191],{"class":1067},[1057,1225,1227,1230],{"class":1059,"line":1226},9,[1057,1228,1229],{"class":1067},"}",[1057,1231,1232],{"class":1071},")\n",[941,1234,1236],{"id":1235},"usage","Usage",[946,1238,1239,1240,985,1242,1244],{},"Seed the shared label dictionary, declare a collection's ",[949,1241,962],{},[949,1243,976],{}," fields, then\nread the same record back at different locales:",[1048,1246,1248],{"className":1050,"code":1247,"language":1052,"meta":1053,"style":1053},"const vault = await db.openVault('firm')\nawait vault.dictionary('status').putAll({\n  draft: { en: 'Draft', th: 'ฉบับร่าง' },\n  paid:  { en: 'Paid',  th: 'ชำระแล้ว' },\n})\n\ninterface Invoice {\n  id: string\n  status: string\n  description: Record\u003Cstring, string>\n}\n\nconst invoices = vault.collection\u003CInvoice>('invoices', {\n  dictKeyFields: {\n    status: dictKey('status', ['draft', 'paid'] as const),\n  },\n  i18nFields: {\n    description: i18nText({ languages: ['en', 'th'], required: 'all' }),\n  },\n})\n\nawait invoices.put('inv-1', {\n  id: 'inv-1',\n  status: 'paid',\n  description: { en: 'Consulting hours', th: 'ค่าที่ปรึกษา' },\n})\n\nawait invoices.get('inv-1', { locale: 'th' })\n\u002F\u002F → { id: 'inv-1', status: 'paid', statusLabel: 'ชำระแล้ว', description: 'ค่าที่ปรึกษา' }\n\nawait invoices.get('inv-1', { locale: 'en' })\n\u002F\u002F → { id: 'inv-1', status: 'paid', statusLabel: 'Paid', description: 'Consulting hours' }\n\nawait invoices.get('inv-1', { locale: 'raw' })\n\u002F\u002F → { id: 'inv-1', status: 'paid', description: { en: 'Consulting hours', th: 'ค่าที่ปรึกษา' } }\n\u002F\u002F 'raw' skips resolution: dictKey fields get no \u003Cfield>Label, i18nText fields keep their full locale map\n",[949,1249,1250,1281,1314,1352,1389,1395,1399,1411,1421,1430,1455,1461,1466,1503,1513,1565,1571,1581,1642,1647,1654,1659,1685,1700,1715,1750,1757,1762,1801,1808,1813,1850,1856,1861,1899,1905],{"__ignoreMap":1053},[1057,1251,1252,1254,1257,1259,1261,1264,1267,1270,1272,1274,1277,1279],{"class":1059,"line":1060},[1057,1253,1155],{"class":1154},[1057,1255,1256],{"class":1071}," vault ",[1057,1258,1161],{"class":1067},[1057,1260,1164],{"class":1063},[1057,1262,1263],{"class":1071}," db",[1057,1265,1266],{"class":1067},".",[1057,1268,1269],{"class":1167},"openVault",[1057,1271,1170],{"class":1071},[1057,1273,1207],{"class":1067},[1057,1275,1276],{"class":1095},"firm",[1057,1278,1207],{"class":1067},[1057,1280,1232],{"class":1071},[1057,1282,1283,1286,1289,1291,1294,1296,1298,1300,1302,1305,1307,1310,1312],{"class":1059,"line":1102},[1057,1284,1285],{"class":1063},"await",[1057,1287,1288],{"class":1071}," vault",[1057,1290,1266],{"class":1067},[1057,1292,1293],{"class":1167},"dictionary",[1057,1295,1170],{"class":1071},[1057,1297,1207],{"class":1067},[1057,1299,1013],{"class":1095},[1057,1301,1207],{"class":1067},[1057,1303,1304],{"class":1071},")",[1057,1306,1266],{"class":1067},[1057,1308,1309],{"class":1167},"putAll",[1057,1311,1170],{"class":1071},[1057,1313,1173],{"class":1067},[1057,1315,1316,1319,1321,1323,1326,1328,1330,1333,1335,1337,1340,1342,1344,1347,1349],{"class":1059,"line":1123},[1057,1317,1318],{"class":1179},"  draft",[1057,1320,1183],{"class":1067},[1057,1322,1068],{"class":1067},[1057,1324,1325],{"class":1179}," en",[1057,1327,1183],{"class":1067},[1057,1329,1092],{"class":1067},[1057,1331,1332],{"class":1095},"Draft",[1057,1334,1207],{"class":1067},[1057,1336,1075],{"class":1067},[1057,1338,1339],{"class":1179}," th",[1057,1341,1183],{"class":1067},[1057,1343,1092],{"class":1067},[1057,1345,1346],{"class":1095},"ฉบับร่าง",[1057,1348,1207],{"class":1067},[1057,1350,1351],{"class":1067}," },\n",[1057,1353,1354,1357,1359,1362,1364,1366,1368,1371,1373,1375,1378,1380,1382,1385,1387],{"class":1059,"line":1144},[1057,1355,1356],{"class":1179},"  paid",[1057,1358,1183],{"class":1067},[1057,1360,1361],{"class":1067},"  {",[1057,1363,1325],{"class":1179},[1057,1365,1183],{"class":1067},[1057,1367,1092],{"class":1067},[1057,1369,1370],{"class":1095},"Paid",[1057,1372,1207],{"class":1067},[1057,1374,1075],{"class":1067},[1057,1376,1377],{"class":1179},"  th",[1057,1379,1183],{"class":1067},[1057,1381,1092],{"class":1067},[1057,1383,1384],{"class":1095},"ชำระแล้ว",[1057,1386,1207],{"class":1067},[1057,1388,1351],{"class":1067},[1057,1390,1391,1393],{"class":1059,"line":1151},[1057,1392,1229],{"class":1067},[1057,1394,1232],{"class":1071},[1057,1396,1397],{"class":1059,"line":1176},[1057,1398,1148],{"emptyLinePlaceholder":1147},[1057,1400,1401,1404,1408],{"class":1059,"line":1194},[1057,1402,1403],{"class":1154},"interface",[1057,1405,1407],{"class":1406},"sBMFI"," Invoice",[1057,1409,1410],{"class":1067}," {\n",[1057,1412,1413,1416,1418],{"class":1059,"line":1212},[1057,1414,1415],{"class":1179},"  id",[1057,1417,1183],{"class":1067},[1057,1419,1420],{"class":1406}," string\n",[1057,1422,1423,1426,1428],{"class":1059,"line":1226},[1057,1424,1425],{"class":1179},"  status",[1057,1427,1183],{"class":1067},[1057,1429,1420],{"class":1406},[1057,1431,1433,1436,1438,1441,1444,1447,1449,1452],{"class":1059,"line":1432},10,[1057,1434,1435],{"class":1179},"  description",[1057,1437,1183],{"class":1067},[1057,1439,1440],{"class":1406}," Record",[1057,1442,1443],{"class":1067},"\u003C",[1057,1445,1446],{"class":1406},"string",[1057,1448,1075],{"class":1067},[1057,1450,1451],{"class":1406}," string",[1057,1453,1454],{"class":1067},">\n",[1057,1456,1458],{"class":1059,"line":1457},11,[1057,1459,1460],{"class":1067},"}\n",[1057,1462,1464],{"class":1059,"line":1463},12,[1057,1465,1148],{"emptyLinePlaceholder":1147},[1057,1467,1469,1471,1474,1476,1478,1480,1482,1484,1487,1490,1492,1494,1497,1499,1501],{"class":1059,"line":1468},13,[1057,1470,1155],{"class":1154},[1057,1472,1473],{"class":1071}," invoices ",[1057,1475,1161],{"class":1067},[1057,1477,1288],{"class":1071},[1057,1479,1266],{"class":1067},[1057,1481,955],{"class":1167},[1057,1483,1443],{"class":1067},[1057,1485,1486],{"class":1406},"Invoice",[1057,1488,1489],{"class":1067},">",[1057,1491,1170],{"class":1071},[1057,1493,1207],{"class":1067},[1057,1495,1496],{"class":1095},"invoices",[1057,1498,1207],{"class":1067},[1057,1500,1075],{"class":1067},[1057,1502,1410],{"class":1067},[1057,1504,1506,1509,1511],{"class":1059,"line":1505},14,[1057,1507,1508],{"class":1179},"  dictKeyFields",[1057,1510,1183],{"class":1067},[1057,1512,1410],{"class":1067},[1057,1514,1516,1519,1521,1523,1525,1527,1529,1531,1533,1536,1538,1541,1543,1545,1547,1550,1552,1555,1558,1561,1563],{"class":1059,"line":1515},15,[1057,1517,1518],{"class":1179},"    status",[1057,1520,1183],{"class":1067},[1057,1522,1078],{"class":1167},[1057,1524,1170],{"class":1071},[1057,1526,1207],{"class":1067},[1057,1528,1013],{"class":1095},[1057,1530,1207],{"class":1067},[1057,1532,1075],{"class":1067},[1057,1534,1535],{"class":1071}," [",[1057,1537,1207],{"class":1067},[1057,1539,1540],{"class":1095},"draft",[1057,1542,1207],{"class":1067},[1057,1544,1075],{"class":1067},[1057,1546,1092],{"class":1067},[1057,1548,1549],{"class":1095},"paid",[1057,1551,1207],{"class":1067},[1057,1553,1554],{"class":1071},"] ",[1057,1556,1557],{"class":1063},"as",[1057,1559,1560],{"class":1154}," const",[1057,1562,1304],{"class":1071},[1057,1564,1191],{"class":1067},[1057,1566,1568],{"class":1059,"line":1567},16,[1057,1569,1570],{"class":1067},"  },\n",[1057,1572,1574,1577,1579],{"class":1059,"line":1573},17,[1057,1575,1576],{"class":1179},"  i18nFields",[1057,1578,1183],{"class":1067},[1057,1580,1410],{"class":1067},[1057,1582,1584,1587,1589,1591,1593,1596,1599,1601,1603,1605,1608,1610,1612,1614,1617,1619,1622,1624,1627,1629,1631,1634,1636,1638,1640],{"class":1059,"line":1583},18,[1057,1585,1586],{"class":1179},"    description",[1057,1588,1183],{"class":1067},[1057,1590,1083],{"class":1167},[1057,1592,1170],{"class":1071},[1057,1594,1595],{"class":1067},"{",[1057,1597,1598],{"class":1179}," languages",[1057,1600,1183],{"class":1067},[1057,1602,1535],{"class":1071},[1057,1604,1207],{"class":1067},[1057,1606,1607],{"class":1095},"en",[1057,1609,1207],{"class":1067},[1057,1611,1075],{"class":1067},[1057,1613,1092],{"class":1067},[1057,1615,1616],{"class":1095},"th",[1057,1618,1207],{"class":1067},[1057,1620,1621],{"class":1071},"]",[1057,1623,1075],{"class":1067},[1057,1625,1626],{"class":1179}," required",[1057,1628,1183],{"class":1067},[1057,1630,1092],{"class":1067},[1057,1632,1633],{"class":1095},"all",[1057,1635,1207],{"class":1067},[1057,1637,1086],{"class":1067},[1057,1639,1304],{"class":1071},[1057,1641,1191],{"class":1067},[1057,1643,1645],{"class":1059,"line":1644},19,[1057,1646,1570],{"class":1067},[1057,1648,1650,1652],{"class":1059,"line":1649},20,[1057,1651,1229],{"class":1067},[1057,1653,1232],{"class":1071},[1057,1655,1657],{"class":1059,"line":1656},21,[1057,1658,1148],{"emptyLinePlaceholder":1147},[1057,1660,1662,1664,1667,1669,1672,1674,1676,1679,1681,1683],{"class":1059,"line":1661},22,[1057,1663,1285],{"class":1063},[1057,1665,1666],{"class":1071}," invoices",[1057,1668,1266],{"class":1067},[1057,1670,1671],{"class":1167},"put",[1057,1673,1170],{"class":1071},[1057,1675,1207],{"class":1067},[1057,1677,1678],{"class":1095},"inv-1",[1057,1680,1207],{"class":1067},[1057,1682,1075],{"class":1067},[1057,1684,1410],{"class":1067},[1057,1686,1688,1690,1692,1694,1696,1698],{"class":1059,"line":1687},23,[1057,1689,1415],{"class":1179},[1057,1691,1183],{"class":1067},[1057,1693,1092],{"class":1067},[1057,1695,1678],{"class":1095},[1057,1697,1207],{"class":1067},[1057,1699,1191],{"class":1067},[1057,1701,1703,1705,1707,1709,1711,1713],{"class":1059,"line":1702},24,[1057,1704,1425],{"class":1179},[1057,1706,1183],{"class":1067},[1057,1708,1092],{"class":1067},[1057,1710,1549],{"class":1095},[1057,1712,1207],{"class":1067},[1057,1714,1191],{"class":1067},[1057,1716,1718,1720,1722,1724,1726,1728,1730,1733,1735,1737,1739,1741,1743,1746,1748],{"class":1059,"line":1717},25,[1057,1719,1435],{"class":1179},[1057,1721,1183],{"class":1067},[1057,1723,1068],{"class":1067},[1057,1725,1325],{"class":1179},[1057,1727,1183],{"class":1067},[1057,1729,1092],{"class":1067},[1057,1731,1732],{"class":1095},"Consulting hours",[1057,1734,1207],{"class":1067},[1057,1736,1075],{"class":1067},[1057,1738,1339],{"class":1179},[1057,1740,1183],{"class":1067},[1057,1742,1092],{"class":1067},[1057,1744,1745],{"class":1095},"ค่าที่ปรึกษา",[1057,1747,1207],{"class":1067},[1057,1749,1351],{"class":1067},[1057,1751,1753,1755],{"class":1059,"line":1752},26,[1057,1754,1229],{"class":1067},[1057,1756,1232],{"class":1071},[1057,1758,1760],{"class":1059,"line":1759},27,[1057,1761,1148],{"emptyLinePlaceholder":1147},[1057,1763,1765,1767,1769,1771,1774,1776,1778,1780,1782,1784,1786,1789,1791,1793,1795,1797,1799],{"class":1059,"line":1764},28,[1057,1766,1285],{"class":1063},[1057,1768,1666],{"class":1071},[1057,1770,1266],{"class":1067},[1057,1772,1773],{"class":1167},"get",[1057,1775,1170],{"class":1071},[1057,1777,1207],{"class":1067},[1057,1779,1678],{"class":1095},[1057,1781,1207],{"class":1067},[1057,1783,1075],{"class":1067},[1057,1785,1068],{"class":1067},[1057,1787,1788],{"class":1179}," locale",[1057,1790,1183],{"class":1067},[1057,1792,1092],{"class":1067},[1057,1794,1616],{"class":1095},[1057,1796,1207],{"class":1067},[1057,1798,1086],{"class":1067},[1057,1800,1232],{"class":1071},[1057,1802,1804],{"class":1059,"line":1803},29,[1057,1805,1807],{"class":1806},"sHwdD","\u002F\u002F → { id: 'inv-1', status: 'paid', statusLabel: 'ชำระแล้ว', description: 'ค่าที่ปรึกษา' }\n",[1057,1809,1811],{"class":1059,"line":1810},30,[1057,1812,1148],{"emptyLinePlaceholder":1147},[1057,1814,1816,1818,1820,1822,1824,1826,1828,1830,1832,1834,1836,1838,1840,1842,1844,1846,1848],{"class":1059,"line":1815},31,[1057,1817,1285],{"class":1063},[1057,1819,1666],{"class":1071},[1057,1821,1266],{"class":1067},[1057,1823,1773],{"class":1167},[1057,1825,1170],{"class":1071},[1057,1827,1207],{"class":1067},[1057,1829,1678],{"class":1095},[1057,1831,1207],{"class":1067},[1057,1833,1075],{"class":1067},[1057,1835,1068],{"class":1067},[1057,1837,1788],{"class":1179},[1057,1839,1183],{"class":1067},[1057,1841,1092],{"class":1067},[1057,1843,1607],{"class":1095},[1057,1845,1207],{"class":1067},[1057,1847,1086],{"class":1067},[1057,1849,1232],{"class":1071},[1057,1851,1853],{"class":1059,"line":1852},32,[1057,1854,1855],{"class":1806},"\u002F\u002F → { id: 'inv-1', status: 'paid', statusLabel: 'Paid', description: 'Consulting hours' }\n",[1057,1857,1859],{"class":1059,"line":1858},33,[1057,1860,1148],{"emptyLinePlaceholder":1147},[1057,1862,1864,1866,1868,1870,1872,1874,1876,1878,1880,1882,1884,1886,1888,1890,1893,1895,1897],{"class":1059,"line":1863},34,[1057,1865,1285],{"class":1063},[1057,1867,1666],{"class":1071},[1057,1869,1266],{"class":1067},[1057,1871,1773],{"class":1167},[1057,1873,1170],{"class":1071},[1057,1875,1207],{"class":1067},[1057,1877,1678],{"class":1095},[1057,1879,1207],{"class":1067},[1057,1881,1075],{"class":1067},[1057,1883,1068],{"class":1067},[1057,1885,1788],{"class":1179},[1057,1887,1183],{"class":1067},[1057,1889,1092],{"class":1067},[1057,1891,1892],{"class":1095},"raw",[1057,1894,1207],{"class":1067},[1057,1896,1086],{"class":1067},[1057,1898,1232],{"class":1071},[1057,1900,1902],{"class":1059,"line":1901},35,[1057,1903,1904],{"class":1806},"\u002F\u002F → { id: 'inv-1', status: 'paid', description: { en: 'Consulting hours', th: 'ค่าที่ปรึกษา' } }\n",[1057,1906,1908],{"class":1059,"line":1907},36,[1057,1909,1910],{"class":1806},"\u002F\u002F 'raw' skips resolution: dictKey fields get no \u003Cfield>Label, i18nText fields keep their full locale map\n",[946,1912,1913,1914,1916,1917,1920,1921,985,1923,1925,1926,1929,1930,1932,1933,1936,1937,1266],{},"The stored record never changes — ",[949,1915,1013],{}," is always the code, ",[949,1918,1919],{},"description"," is always the full locale map. Only the shape of what ",[949,1922,984],{},[949,1924,988],{}," return depends on the ",[949,1927,1928],{},"locale"," you pass: a resolved string for ",[949,1931,1919],{},", plus a ",[949,1934,1935],{},"\u003Cfield>Label"," virtual field for each ",[949,1938,962],{},[941,1940,1942],{"id":1941},"api","API",[1002,1944,1945,1965,1975,1981],{},[1005,1946,1947,1950,1951,1950,1954,1950,1957,1950,1960,1950,1962],{},[949,1948,1949],{},"vault.dictionary(name).putAll(...)"," \u002F ",[949,1952,1953],{},"put(...)",[949,1955,1956],{},"get(...)",[949,1958,1959],{},"delete(...)",[949,1961,988],{},[949,1963,1964],{},"rename(...)",[1005,1966,1967,1970,1971,1974],{},[949,1968,1969],{},"dictKey(name, keys)"," and ",[949,1972,1973],{},"i18nText({ languages, required })"," field descriptors",[1005,1976,1977,1980],{},[949,1978,1979],{},"resolveI18nText(value, locale, fallback?)"," helper — resolve a single value",[1005,1982,1983,1984,1987,1988,1950,1991,1950,1993,1996],{},"Per-call ",[949,1985,1986],{},"{ locale, fallback }"," on ",[949,1989,1990],{},"collection.get()",[949,1992,988],{},[949,1994,1995],{},"query()"," reads",[941,1998,2000],{"id":1999},"behavior-when-not-opted-in","Behavior when NOT opted in",[1002,2002,2003,2009,2019],{},[1005,2004,2005,2008],{},[949,2006,2007],{},"applyI18nLocale"," (under the hood) returns the record unchanged — locale resolution is silently skipped",[1005,2010,2011,2014,2015,2018],{},[949,2012,2013],{},"validateI18nTextValue"," throws when a collection declared ",[949,2016,2017],{},"i18nFields"," (misconfiguration: declared but didn't opt in)",[1005,2020,2021,2024,2025],{},[949,2022,2023],{},"vault.dictionary(name)"," throws with a pointer to ",[949,2026,1139],{},[941,2028,2030],{"id":2029},"hardening-per-layer-policy-substitute-script-dictkey-parity","Hardening (per-layer policy, substitute, script, dictKey parity)",[946,2032,2033,2034,1950,2037,2040,2041,2043,2044,1266],{},"Optional, opt-in extensions on ",[949,2035,2036],{},"i18nText()",[949,2038,2039],{},"dictKey()",". Fields that\ndon't set them behave exactly as before (zero breaking change) — a plain\n",[949,2042,1973],{}," with no extra options resolves and\nvalidates exactly as shown in ",[953,2045,2047],{"href":2046},"#opt-in","Opt-in",[946,2049,2050,2051,2053,2054,2057,2058,2061],{},"Here is what the record on disk and the value returned from ",[949,2052,984],{}," look\nlike as each option kicks in, using a ",[949,2055,2056],{},"notes"," collection with a hardened\n",[949,2059,2060],{},"body"," field:",[1048,2063,2065],{"className":1050,"code":2064,"language":1052,"meta":1053,"style":1053},"interface Note { id: string; body: Record\u003Cstring, string> }\n\nconst notes = vault.collection\u003CNote>('notes', {\n  i18nFields: {\n    body: i18nText({\n      languages: ['th', 'en'], required: 'any',\n      substitute: ['en', 'th', 'any'],\n      onMissing: 'substitute',\n      smartSubstitute: true,\n      script: 'auto',\n      densifyOnWrite: true,\n    }),\n  },\n})\n\nawait notes.put('n1', { id: 'n1', body: { en: 'Site visit scheduled' } })\n",[949,2066,2067,2106,2110,2144,2152,2165,2205,2240,2256,2269,2285,2296,2305,2309,2315,2319],{"__ignoreMap":1053},[1057,2068,2069,2071,2074,2076,2079,2081,2083,2086,2089,2091,2093,2095,2097,2099,2101,2103],{"class":1059,"line":1060},[1057,2070,1403],{"class":1154},[1057,2072,2073],{"class":1406}," Note",[1057,2075,1068],{"class":1067},[1057,2077,2078],{"class":1179}," id",[1057,2080,1183],{"class":1067},[1057,2082,1451],{"class":1406},[1057,2084,2085],{"class":1067},";",[1057,2087,2088],{"class":1179}," body",[1057,2090,1183],{"class":1067},[1057,2092,1440],{"class":1406},[1057,2094,1443],{"class":1067},[1057,2096,1446],{"class":1406},[1057,2098,1075],{"class":1067},[1057,2100,1451],{"class":1406},[1057,2102,1489],{"class":1067},[1057,2104,2105],{"class":1067}," }\n",[1057,2107,2108],{"class":1059,"line":1102},[1057,2109,1148],{"emptyLinePlaceholder":1147},[1057,2111,2112,2114,2117,2119,2121,2123,2125,2127,2130,2132,2134,2136,2138,2140,2142],{"class":1059,"line":1123},[1057,2113,1155],{"class":1154},[1057,2115,2116],{"class":1071}," notes ",[1057,2118,1161],{"class":1067},[1057,2120,1288],{"class":1071},[1057,2122,1266],{"class":1067},[1057,2124,955],{"class":1167},[1057,2126,1443],{"class":1067},[1057,2128,2129],{"class":1406},"Note",[1057,2131,1489],{"class":1067},[1057,2133,1170],{"class":1071},[1057,2135,1207],{"class":1067},[1057,2137,2056],{"class":1095},[1057,2139,1207],{"class":1067},[1057,2141,1075],{"class":1067},[1057,2143,1410],{"class":1067},[1057,2145,2146,2148,2150],{"class":1059,"line":1144},[1057,2147,1576],{"class":1179},[1057,2149,1183],{"class":1067},[1057,2151,1410],{"class":1067},[1057,2153,2154,2157,2159,2161,2163],{"class":1059,"line":1151},[1057,2155,2156],{"class":1179},"    body",[1057,2158,1183],{"class":1067},[1057,2160,1083],{"class":1167},[1057,2162,1170],{"class":1071},[1057,2164,1173],{"class":1067},[1057,2166,2167,2170,2172,2174,2176,2178,2180,2182,2184,2186,2188,2190,2192,2194,2196,2198,2201,2203],{"class":1059,"line":1176},[1057,2168,2169],{"class":1179},"      languages",[1057,2171,1183],{"class":1067},[1057,2173,1535],{"class":1071},[1057,2175,1207],{"class":1067},[1057,2177,1616],{"class":1095},[1057,2179,1207],{"class":1067},[1057,2181,1075],{"class":1067},[1057,2183,1092],{"class":1067},[1057,2185,1607],{"class":1095},[1057,2187,1207],{"class":1067},[1057,2189,1621],{"class":1071},[1057,2191,1075],{"class":1067},[1057,2193,1626],{"class":1179},[1057,2195,1183],{"class":1067},[1057,2197,1092],{"class":1067},[1057,2199,2200],{"class":1095},"any",[1057,2202,1207],{"class":1067},[1057,2204,1191],{"class":1067},[1057,2206,2207,2210,2212,2214,2216,2218,2220,2222,2224,2226,2228,2230,2232,2234,2236,2238],{"class":1059,"line":1194},[1057,2208,2209],{"class":1179},"      substitute",[1057,2211,1183],{"class":1067},[1057,2213,1535],{"class":1071},[1057,2215,1207],{"class":1067},[1057,2217,1607],{"class":1095},[1057,2219,1207],{"class":1067},[1057,2221,1075],{"class":1067},[1057,2223,1092],{"class":1067},[1057,2225,1616],{"class":1095},[1057,2227,1207],{"class":1067},[1057,2229,1075],{"class":1067},[1057,2231,1092],{"class":1067},[1057,2233,2200],{"class":1095},[1057,2235,1207],{"class":1067},[1057,2237,1621],{"class":1071},[1057,2239,1191],{"class":1067},[1057,2241,2242,2245,2247,2249,2252,2254],{"class":1059,"line":1212},[1057,2243,2244],{"class":1179},"      onMissing",[1057,2246,1183],{"class":1067},[1057,2248,1092],{"class":1067},[1057,2250,2251],{"class":1095},"substitute",[1057,2253,1207],{"class":1067},[1057,2255,1191],{"class":1067},[1057,2257,2258,2261,2263,2267],{"class":1059,"line":1226},[1057,2259,2260],{"class":1179},"      smartSubstitute",[1057,2262,1183],{"class":1067},[1057,2264,2266],{"class":2265},"sfNiH"," true",[1057,2268,1191],{"class":1067},[1057,2270,2271,2274,2276,2278,2281,2283],{"class":1059,"line":1432},[1057,2272,2273],{"class":1179},"      script",[1057,2275,1183],{"class":1067},[1057,2277,1092],{"class":1067},[1057,2279,2280],{"class":1095},"auto",[1057,2282,1207],{"class":1067},[1057,2284,1191],{"class":1067},[1057,2286,2287,2290,2292,2294],{"class":1059,"line":1457},[1057,2288,2289],{"class":1179},"      densifyOnWrite",[1057,2291,1183],{"class":1067},[1057,2293,2266],{"class":2265},[1057,2295,1191],{"class":1067},[1057,2297,2298,2301,2303],{"class":1059,"line":1463},[1057,2299,2300],{"class":1067},"    }",[1057,2302,1304],{"class":1071},[1057,2304,1191],{"class":1067},[1057,2306,2307],{"class":1059,"line":1468},[1057,2308,1570],{"class":1067},[1057,2310,2311,2313],{"class":1059,"line":1505},[1057,2312,1229],{"class":1067},[1057,2314,1232],{"class":1071},[1057,2316,2317],{"class":1059,"line":1515},[1057,2318,1148],{"emptyLinePlaceholder":1147},[1057,2320,2321,2323,2326,2328,2330,2332,2334,2337,2339,2341,2343,2345,2347,2349,2351,2353,2355,2357,2359,2361,2363,2365,2367,2370,2372,2374,2376],{"class":1059,"line":1567},[1057,2322,1285],{"class":1063},[1057,2324,2325],{"class":1071}," notes",[1057,2327,1266],{"class":1067},[1057,2329,1671],{"class":1167},[1057,2331,1170],{"class":1071},[1057,2333,1207],{"class":1067},[1057,2335,2336],{"class":1095},"n1",[1057,2338,1207],{"class":1067},[1057,2340,1075],{"class":1067},[1057,2342,1068],{"class":1067},[1057,2344,2078],{"class":1179},[1057,2346,1183],{"class":1067},[1057,2348,1092],{"class":1067},[1057,2350,2336],{"class":1095},[1057,2352,1207],{"class":1067},[1057,2354,1075],{"class":1067},[1057,2356,2088],{"class":1179},[1057,2358,1183],{"class":1067},[1057,2360,1068],{"class":1067},[1057,2362,1325],{"class":1179},[1057,2364,1183],{"class":1067},[1057,2366,1092],{"class":1067},[1057,2368,2369],{"class":1095},"Site visit scheduled",[1057,2371,1207],{"class":1067},[1057,2373,1086],{"class":1067},[1057,2375,1086],{"class":1067},[1057,2377,1232],{"class":1071},[946,2379,2380,2381,2383,2384,2387,2388,2390],{},"Only ",[949,2382,1607],{}," was authored, but ",[949,2385,2386],{},"densifyOnWrite"," fills the empty ",[949,2389,1616],{}," slot at\nwrite time from the substitute chain, so the stored record is already dense:",[1048,2392,2394],{"className":1050,"code":2393,"language":1052,"meta":1053,"style":1053},"await notes.get('n1', { locale: 'th' })\n\u002F\u002F → { id: 'n1', body: 'Site visit scheduled' }\n\u002F\u002F th was densify-filled at write time, so this resolves directly —\n\u002F\u002F no substitute walk needed on read\n\nawait notes.get('n1', { locale: 'raw' })\n\u002F\u002F → { id: 'n1', body: { en: 'Site visit scheduled', th: 'Site visit scheduled' } }\n\u002F\u002F the full locale map as stored — densify made both slots non-empty\n\nawait notes.i18nProvenance('n1')\n\u002F\u002F → { body: ['th'] }\n\u002F\u002F th was auto-filled; en is the only authored slot\n",[949,2395,2396,2432,2437,2442,2447,2451,2487,2492,2497,2501,2522,2527],{"__ignoreMap":1053},[1057,2397,2398,2400,2402,2404,2406,2408,2410,2412,2414,2416,2418,2420,2422,2424,2426,2428,2430],{"class":1059,"line":1060},[1057,2399,1285],{"class":1063},[1057,2401,2325],{"class":1071},[1057,2403,1266],{"class":1067},[1057,2405,1773],{"class":1167},[1057,2407,1170],{"class":1071},[1057,2409,1207],{"class":1067},[1057,2411,2336],{"class":1095},[1057,2413,1207],{"class":1067},[1057,2415,1075],{"class":1067},[1057,2417,1068],{"class":1067},[1057,2419,1788],{"class":1179},[1057,2421,1183],{"class":1067},[1057,2423,1092],{"class":1067},[1057,2425,1616],{"class":1095},[1057,2427,1207],{"class":1067},[1057,2429,1086],{"class":1067},[1057,2431,1232],{"class":1071},[1057,2433,2434],{"class":1059,"line":1102},[1057,2435,2436],{"class":1806},"\u002F\u002F → { id: 'n1', body: 'Site visit scheduled' }\n",[1057,2438,2439],{"class":1059,"line":1123},[1057,2440,2441],{"class":1806},"\u002F\u002F th was densify-filled at write time, so this resolves directly —\n",[1057,2443,2444],{"class":1059,"line":1144},[1057,2445,2446],{"class":1806},"\u002F\u002F no substitute walk needed on read\n",[1057,2448,2449],{"class":1059,"line":1151},[1057,2450,1148],{"emptyLinePlaceholder":1147},[1057,2452,2453,2455,2457,2459,2461,2463,2465,2467,2469,2471,2473,2475,2477,2479,2481,2483,2485],{"class":1059,"line":1176},[1057,2454,1285],{"class":1063},[1057,2456,2325],{"class":1071},[1057,2458,1266],{"class":1067},[1057,2460,1773],{"class":1167},[1057,2462,1170],{"class":1071},[1057,2464,1207],{"class":1067},[1057,2466,2336],{"class":1095},[1057,2468,1207],{"class":1067},[1057,2470,1075],{"class":1067},[1057,2472,1068],{"class":1067},[1057,2474,1788],{"class":1179},[1057,2476,1183],{"class":1067},[1057,2478,1092],{"class":1067},[1057,2480,1892],{"class":1095},[1057,2482,1207],{"class":1067},[1057,2484,1086],{"class":1067},[1057,2486,1232],{"class":1071},[1057,2488,2489],{"class":1059,"line":1194},[1057,2490,2491],{"class":1806},"\u002F\u002F → { id: 'n1', body: { en: 'Site visit scheduled', th: 'Site visit scheduled' } }\n",[1057,2493,2494],{"class":1059,"line":1212},[1057,2495,2496],{"class":1806},"\u002F\u002F the full locale map as stored — densify made both slots non-empty\n",[1057,2498,2499],{"class":1059,"line":1226},[1057,2500,1148],{"emptyLinePlaceholder":1147},[1057,2502,2503,2505,2507,2509,2512,2514,2516,2518,2520],{"class":1059,"line":1432},[1057,2504,1285],{"class":1063},[1057,2506,2325],{"class":1071},[1057,2508,1266],{"class":1067},[1057,2510,2511],{"class":1167},"i18nProvenance",[1057,2513,1170],{"class":1071},[1057,2515,1207],{"class":1067},[1057,2517,2336],{"class":1095},[1057,2519,1207],{"class":1067},[1057,2521,1232],{"class":1071},[1057,2523,2524],{"class":1059,"line":1457},[1057,2525,2526],{"class":1806},"\u002F\u002F → { body: ['th'] }\n",[1057,2528,2529],{"class":1059,"line":1463},[1057,2530,2531],{"class":1806},"\u002F\u002F th was auto-filled; en is the only authored slot\n",[946,2533,2534,2535,967,2537,967,2540,2542,2543,2546],{},"Every read (",[949,2536,1773],{},[949,2538,2539],{},"list",[949,2541,1892],{}," included) strips the internal fill-tracking\nmarker — ",[949,2544,2545],{},"i18nProvenance()"," is the only way to see which locales were filled\nrather than authored.",[946,2548,2549,2558,2559,2561,2562,2565,2566,2568,2569,2572,2573,2576,2577,2580,2581,2583,2584,985,2587,985,2590,985,2593,985,2596,985,2599,2602,2603,2605,2606,2608,2609,2612,2613,1266],{},[958,2550,2551,2554,2555,2557],{},[949,2552,2553],{},"onMissing"," + ",[949,2556,2251],{}," — missing-locale policy."," When a field is\nresolved to an absent locale, ",[949,2560,2553],{}," decides: ",[949,2563,2564],{},"'substitute'"," (walk\nthe declared ",[949,2567,2251],{}," chain, then ",[949,2570,2571],{},"null","), ",[949,2574,2575],{},"'null'",", or ",[949,2578,2579],{},"'throw'","\n(the default — today's behavior). ",[949,2582,2553],{}," may be a scalar or a\nper-layer map (",[949,2585,2586],{},"read",[949,2588,2589],{},"guard",[949,2591,2592],{},"join",[949,2594,2595],{},"mv",[949,2597,2598],{},"derivation",[949,2600,2601],{},"export","); the\n",[949,2604,2589],{}," layer defaults to lenient ",[949,2607,2564],{},". A caller-supplied\n",[949,2610,2611],{},"fallback"," at read time overrides the declared ",[949,2614,2251],{},[946,2616,2617,2620,2621,2624,2625,2627,2628,2632,2633,2635,2636,2639,2640,2643,2644,1266],{},[958,2618,2619],{},"Smart substitute."," ",[949,2622,2623],{},"smartSubstitute: true"," makes the ",[949,2626,2564],{},"\nfallback ",[2629,2630,2631],"em",{},"script-aware",": after the explicit ",[949,2634,2251],{}," chain misses, it picks\nthe available locale whose primary script is ",[958,2637,2638],{},"nearest"," the target — same\nscript first, then ",[958,2641,2642],{},"Latin"," (broadly readable), then any other — instead of an\narbitrary first-non-empty value. So a missing Thai label falls back to another\nThai (or a Latin) translation rather than, say, an Arabic one. Default ",[949,2645,2646],{},"false",[1048,2648,2650],{"className":1050,"code":2649,"language":1052,"meta":1053,"style":1053},"i18nText({\n  languages: ['th', 'en'], required: 'any',\n  substitute: ['en', 'th', 'any'],\n  onMissing: { read: 'substitute', mv: 'throw', derivation: 'null' },\n  smartSubstitute: true,   \u002F\u002F nearest-script fallback\n})\n",[949,2651,2652,2660,2699,2734,2783,2797],{"__ignoreMap":1053},[1057,2653,2654,2656,2658],{"class":1059,"line":1060},[1057,2655,976],{"class":1167},[1057,2657,1170],{"class":1071},[1057,2659,1173],{"class":1067},[1057,2661,2662,2665,2667,2669,2671,2673,2675,2677,2679,2681,2683,2685,2687,2689,2691,2693,2695,2697],{"class":1059,"line":1102},[1057,2663,2664],{"class":1179},"  languages",[1057,2666,1183],{"class":1067},[1057,2668,1535],{"class":1071},[1057,2670,1207],{"class":1067},[1057,2672,1616],{"class":1095},[1057,2674,1207],{"class":1067},[1057,2676,1075],{"class":1067},[1057,2678,1092],{"class":1067},[1057,2680,1607],{"class":1095},[1057,2682,1207],{"class":1067},[1057,2684,1621],{"class":1071},[1057,2686,1075],{"class":1067},[1057,2688,1626],{"class":1179},[1057,2690,1183],{"class":1067},[1057,2692,1092],{"class":1067},[1057,2694,2200],{"class":1095},[1057,2696,1207],{"class":1067},[1057,2698,1191],{"class":1067},[1057,2700,2701,2704,2706,2708,2710,2712,2714,2716,2718,2720,2722,2724,2726,2728,2730,2732],{"class":1059,"line":1123},[1057,2702,2703],{"class":1179},"  substitute",[1057,2705,1183],{"class":1067},[1057,2707,1535],{"class":1071},[1057,2709,1207],{"class":1067},[1057,2711,1607],{"class":1095},[1057,2713,1207],{"class":1067},[1057,2715,1075],{"class":1067},[1057,2717,1092],{"class":1067},[1057,2719,1616],{"class":1095},[1057,2721,1207],{"class":1067},[1057,2723,1075],{"class":1067},[1057,2725,1092],{"class":1067},[1057,2727,2200],{"class":1095},[1057,2729,1207],{"class":1067},[1057,2731,1621],{"class":1071},[1057,2733,1191],{"class":1067},[1057,2735,2736,2739,2741,2743,2746,2748,2750,2752,2754,2756,2759,2761,2763,2766,2768,2770,2773,2775,2777,2779,2781],{"class":1059,"line":1144},[1057,2737,2738],{"class":1179},"  onMissing",[1057,2740,1183],{"class":1067},[1057,2742,1068],{"class":1067},[1057,2744,2745],{"class":1179}," read",[1057,2747,1183],{"class":1067},[1057,2749,1092],{"class":1067},[1057,2751,2251],{"class":1095},[1057,2753,1207],{"class":1067},[1057,2755,1075],{"class":1067},[1057,2757,2758],{"class":1179}," mv",[1057,2760,1183],{"class":1067},[1057,2762,1092],{"class":1067},[1057,2764,2765],{"class":1095},"throw",[1057,2767,1207],{"class":1067},[1057,2769,1075],{"class":1067},[1057,2771,2772],{"class":1179}," derivation",[1057,2774,1183],{"class":1067},[1057,2776,1092],{"class":1067},[1057,2778,2571],{"class":1095},[1057,2780,1207],{"class":1067},[1057,2782,1351],{"class":1067},[1057,2784,2785,2788,2790,2792,2794],{"class":1059,"line":1151},[1057,2786,2787],{"class":1179},"  smartSubstitute",[1057,2789,1183],{"class":1067},[1057,2791,2266],{"class":2265},[1057,2793,1075],{"class":1067},[1057,2795,2796],{"class":1806},"   \u002F\u002F nearest-script fallback\n",[1057,2798,2799,2801],{"class":1059,"line":1176},[1057,2800,1229],{"class":1067},[1057,2802,1232],{"class":1071},[2804,2805,2806],"blockquote",{},[946,2807,2808,2620,2811,2813,2814,985,2816,2572,2818,967,2820,1191,2822,967,2824,967,2826,2828,2829,2832,2833,2835,2836,2838,2839,2844,2845,1038,2848,2851,2852,2855,2856,2859,2860,2863,2864,2867,2868,2870,2871,2874,2875,2878,2879,2882,2883,2887,2888,2891,2892,2896,2897,985,2900,2903,2904,2906],{},[958,2809,2810],{},"Current wiring (ALL layers):",[949,2812,2586],{}," (",[949,2815,1773],{},[949,2817,2539],{},[949,2819,2589],{},[949,2821,2598],{},[949,2823,2595],{},[949,2825,2592],{},[949,2827,2601],{}," are all enforced — guard \u002F derivation ",[949,2830,2831],{},"ctx.vault"," reads\nresolve under their own layer policy (",[949,2834,2589],{}," defaults to the lenient\n",[949,2837,2564],{},"). The ",[958,2840,2841,2843],{},[949,2842,2595],{}," layer"," fires for materialized views that declare\n",[949,2846,2847],{},"{ i18nLocale, i18nFields }",[958,2849,2850],{},"UNION"," (group-key i18n fields resolve before\nthe unified-row bucketing) and ",[958,2853,2854],{},"query-form"," (resolved in\n",[949,2857,2858],{},"GroupedReduction.run"," before ",[949,2861,2862],{},"groupAndReduce","); grouping a raw i18n field\nwithout a locale throws ",[949,2865,2866],{},"LocaleNotSpecifiedError"," (group by a ",[949,2869,962],{},"\u002F\n",[949,2872,2873],{},"staticDict"," code instead, and resolve the label at read). i18n fields merely\n",[2629,2876,2877],{},"carried through"," an MV stay raw — declare them on the ",[958,2880,2881],{},"output collection","\nand they resolve per-reader at read time. The ",[958,2884,2885,2843],{},[949,2886,2592],{}," resolves a\njoined right-side i18n field to the query locale —\n",[949,2889,2890],{},"query().join(...).toArray({ locale })"," (or the vault default; raw when\nlocale-less). The ",[958,2893,2894,2843],{},[949,2895,2601],{}," fires for\n",[949,2898,2899],{},"exportStream",[949,2901,2902],{},"exportJSON({ resolveLabels })"," — records collapse to the export\nlocale (i18nText to the string, dict ",[949,2905,1935],{},"s resolved), with the\ndictionary snapshot omitted.",[946,2908,2909,2919,2920,2923,2924,2927,2928,2930,2931,2934,2935,2937,2938,985,2941,985,2944,2947,2948,2951,2952,2955,2956,2959,2960,2963,2964,1266],{},[958,2910,2911,2912,967,2915,2918],{},"Script enforcement (",[949,2913,2914],{},"script",[949,2916,2917],{},"onScriptViolation",")."," Write-time\nper-locale validation. ",[949,2921,2922],{},"script: 'auto'"," infers allowed Unicode scripts\nwith ",[958,2925,2926],{},"asymmetric Latin tolerance",": non-Latin locales also allow\n",[949,2929,2642],{}," (so ",[949,2932,2933],{},"'9\u002F9 อาคาร TCM ถนนรัชดาภิเษก'"," passes), while Latin locales\nreject other scripts (so Thai text in an ",[949,2936,1607],{}," slot is rejected).\n",[949,2939,2940],{},"Common",[949,2942,2943],{},"Inherited",[949,2945,2946],{},"Mark"," (digits, combining marks) are always\nallowed. Violations ",[949,2949,2950],{},"'reject'"," (default, ",[949,2953,2954],{},"ScriptViolationError","),\n",[949,2957,2958],{},"'filter'"," (strip), or ",[949,2961,2962],{},"'warn'",". Tighten a field with an explicit set:\n",[949,2965,2966],{},"script: { th: ['Thai'] }",[946,2968,2969,2974,2975,2978,2979,2981,2982,2985,2986,2989],{},[958,2970,2971,2973],{},[949,2972,2386],{}," — eager slot fill at write time."," With\n",[949,2976,2977],{},"densifyOnWrite: true"," on an ",[949,2980,976],{}," field, every empty declared-language\nslot is filled from the field's substitute chain ",[958,2983,2984],{},"at write time"," — using\n",[949,2987,2988],{},"substitute ?? ['any']"," (first non-empty value when no explicit chain is\ndeclared) — so the stored locale map is always dense and downstream layers\n(join, MV, derivation, export) never hit a hole.",[946,2991,2992,2993,2996,2997,2813,3000,1191,3002,967,3004,3006],{},"Which slots were auto-filled is recorded in an internal ",[949,2994,2995],{},"_i18nFilled"," marker\nthat is encrypted with the record and ",[958,2998,2999],{},"stripped from all reads",[949,3001,1773],{},[949,3003,2539],{},[949,3005,1892],{},"). The only sanctioned way to inspect it is:",[1048,3008,3010],{"className":1050,"code":3009,"language":1052,"meta":1053,"style":1053},"await collection.i18nProvenance(id)\n\u002F\u002F → e.g. { name: ['en'] }  — or undefined when nothing was filled\n",[949,3011,3012,3026],{"__ignoreMap":1053},[1057,3013,3014,3016,3019,3021,3023],{"class":1059,"line":1060},[1057,3015,1285],{"class":1063},[1057,3017,3018],{"class":1071}," collection",[1057,3020,1266],{"class":1067},[1057,3022,2511],{"class":1167},[1057,3024,3025],{"class":1071},"(id)\n",[1057,3027,3028],{"class":1059,"line":1102},[1057,3029,3030],{"class":1806},"\u002F\u002F → e.g. { name: ['en'] }  — or undefined when nothing was filled\n",[946,3032,3033],{},"Declaring the field:",[1048,3035,3037],{"className":1050,"code":3036,"language":1052,"meta":1053,"style":1053},"i18nText({\n  languages: ['th', 'en'], required: 'any',\n  substitute: ['th', 'any'],\n  densifyOnWrite: true,\n})\n",[949,3038,3039,3047,3085,3111,3122],{"__ignoreMap":1053},[1057,3040,3041,3043,3045],{"class":1059,"line":1060},[1057,3042,976],{"class":1167},[1057,3044,1170],{"class":1071},[1057,3046,1173],{"class":1067},[1057,3048,3049,3051,3053,3055,3057,3059,3061,3063,3065,3067,3069,3071,3073,3075,3077,3079,3081,3083],{"class":1059,"line":1102},[1057,3050,2664],{"class":1179},[1057,3052,1183],{"class":1067},[1057,3054,1535],{"class":1071},[1057,3056,1207],{"class":1067},[1057,3058,1616],{"class":1095},[1057,3060,1207],{"class":1067},[1057,3062,1075],{"class":1067},[1057,3064,1092],{"class":1067},[1057,3066,1607],{"class":1095},[1057,3068,1207],{"class":1067},[1057,3070,1621],{"class":1071},[1057,3072,1075],{"class":1067},[1057,3074,1626],{"class":1179},[1057,3076,1183],{"class":1067},[1057,3078,1092],{"class":1067},[1057,3080,2200],{"class":1095},[1057,3082,1207],{"class":1067},[1057,3084,1191],{"class":1067},[1057,3086,3087,3089,3091,3093,3095,3097,3099,3101,3103,3105,3107,3109],{"class":1059,"line":1123},[1057,3088,2703],{"class":1179},[1057,3090,1183],{"class":1067},[1057,3092,1535],{"class":1071},[1057,3094,1207],{"class":1067},[1057,3096,1616],{"class":1095},[1057,3098,1207],{"class":1067},[1057,3100,1075],{"class":1067},[1057,3102,1092],{"class":1067},[1057,3104,2200],{"class":1095},[1057,3106,1207],{"class":1067},[1057,3108,1621],{"class":1071},[1057,3110,1191],{"class":1067},[1057,3112,3113,3116,3118,3120],{"class":1059,"line":1144},[1057,3114,3115],{"class":1179},"  densifyOnWrite",[1057,3117,1183],{"class":1067},[1057,3119,2266],{"class":2265},[1057,3121,1191],{"class":1067},[1057,3123,3124,3126],{"class":1059,"line":1151},[1057,3125,1229],{"class":1067},[1057,3127,1232],{"class":1071},[946,3129,3130,3133],{},[958,3131,3132],{},"Write sequence"," (for a densify-enabled field):",[3135,3136,3137,3140,3155,3165,3171,3174],"ol",{},[1005,3138,3139],{},"Auto-translate (existing)",[1005,3141,3142,3145,3146,967,3149,2576,3152],{},[949,3143,3144],{},"computeExemptFills"," — reads the prior record's marker; classifies each\nlocale slot as ",[2629,3147,3148],{},"authored",[2629,3150,3151],{},"exempt round-tripped fill",[2629,3153,3154],{},"cleared fill",[1005,3156,3157,3158,3161,3162,3164],{},"Script enforcement — checks ",[958,3159,3160],{},"authored slots only","; unchanged\nround-tripped fills are exempt (so Thai text in an ",[949,3163,1607],{}," fill slot does not\ntrigger a Latin-locale script rejection on a second write)",[1005,3166,3167,3168],{},"Required-validation — authored floor only; fills do not satisfy ",[949,3169,3170],{},"required",[1005,3172,3173],{},"Densify — fill empty slots, record marker, refresh changed-source fills",[1005,3175,3176],{},"Encrypt and persist",[946,3178,3179,3182,3183,3185,3186,3188],{},[958,3180,3181],{},"Refresh and no-clobber."," Densify re-runs from the current authored slots\non every write, so correcting a source value automatically refreshes its\nderived slots (e.g. fixing ",[949,3184,1616],{}," re-densifies ",[949,3187,1607],{},"). If a user authors a real\nvalue into a formerly-filled slot the marker for that locale is cleared and\nthe value is treated as authored from that point on. A value byte-identical to\nthe existing fill remains classified as a fill (value-equality provenance\nlimitation).",[946,3190,3191,2620,3194,3196,3197,3200,3203,3204,3206,3207,3209,3210,3213,3215],{},[958,3192,3193],{},"Mutual exclusion.",[949,3195,2977],{}," combined with an ",[958,3198,3199],{},"explicit",[949,3201,3202],{},"onMissing: 'throw'"," — scalar or any per-layer value — is a configuration\nerror (densify fills every hole, making a throw policy unreachable). Declaring\n",[949,3205,2386],{}," without an explicit ",[949,3208,2553],{}," is fine; the ",[2629,3211,3212],{},"default",[949,3214,2579],{}," simply never fires.",[946,3217,3218,3221,3222,3225],{},[958,3219,3220],{},"Limitation."," Supports single-leaf i18n fields only. Array-wildcard paths\n(",[949,3223,3224],{},"contacts[].name",") are skipped, mirroring auto-translate.",[946,3227,3228,3234,3235,1970,3237,3239,3240,3243],{},[958,3229,3230,3233],{},[949,3231,3232],{},"i18n:script-violation"," event channel."," The ",[949,3236,2962],{},[949,3238,2958],{},"\nscript-enforcement modes collect ",[949,3241,3242],{},"ScriptWarning[]"," objects; previously those\nwarnings were silently discarded. The typed event channel surfaces them:",[1048,3245,3247],{"className":1050,"code":3246,"language":1052,"meta":1053,"style":1053},"\u002F\u002F Payload shape (ScriptWarning = { field, locale, expected, sample })\ninterface NoydbEventMap {\n  'i18n:script-violation': {\n    vault: string; collection: string; id: string\n    mode: 'warn' | 'filter'\n    warning: ScriptWarning\n  }\n}\n\ndb.on('i18n:script-violation', (e) => {\n  \u002F\u002F audit; e.mode === 'filter' means characters were dropped from e.warning.sample\n})\n",[949,3248,3249,3254,3263,3276,3301,3325,3335,3340,3344,3348,3381,3386],{"__ignoreMap":1053},[1057,3250,3251],{"class":1059,"line":1060},[1057,3252,3253],{"class":1806},"\u002F\u002F Payload shape (ScriptWarning = { field, locale, expected, sample })\n",[1057,3255,3256,3258,3261],{"class":1059,"line":1102},[1057,3257,1403],{"class":1154},[1057,3259,3260],{"class":1406}," NoydbEventMap",[1057,3262,1410],{"class":1067},[1057,3264,3265,3268,3270,3272,3274],{"class":1059,"line":1123},[1057,3266,3267],{"class":1067},"  '",[1057,3269,3232],{"class":1095},[1057,3271,1207],{"class":1067},[1057,3273,1183],{"class":1067},[1057,3275,1410],{"class":1067},[1057,3277,3278,3281,3283,3285,3287,3289,3291,3293,3295,3297,3299],{"class":1059,"line":1144},[1057,3279,3280],{"class":1179},"    vault",[1057,3282,1183],{"class":1067},[1057,3284,1451],{"class":1406},[1057,3286,2085],{"class":1067},[1057,3288,3018],{"class":1179},[1057,3290,1183],{"class":1067},[1057,3292,1451],{"class":1406},[1057,3294,2085],{"class":1067},[1057,3296,2078],{"class":1179},[1057,3298,1183],{"class":1067},[1057,3300,1420],{"class":1406},[1057,3302,3303,3306,3308,3310,3313,3315,3318,3320,3323],{"class":1059,"line":1151},[1057,3304,3305],{"class":1179},"    mode",[1057,3307,1183],{"class":1067},[1057,3309,1092],{"class":1067},[1057,3311,3312],{"class":1095},"warn",[1057,3314,1207],{"class":1067},[1057,3316,3317],{"class":1067}," |",[1057,3319,1092],{"class":1067},[1057,3321,3322],{"class":1095},"filter",[1057,3324,1099],{"class":1067},[1057,3326,3327,3330,3332],{"class":1059,"line":1176},[1057,3328,3329],{"class":1179},"    warning",[1057,3331,1183],{"class":1067},[1057,3333,3334],{"class":1406}," ScriptWarning\n",[1057,3336,3337],{"class":1059,"line":1194},[1057,3338,3339],{"class":1067},"  }\n",[1057,3341,3342],{"class":1059,"line":1212},[1057,3343,1460],{"class":1067},[1057,3345,3346],{"class":1059,"line":1226},[1057,3347,1148],{"emptyLinePlaceholder":1147},[1057,3349,3350,3353,3355,3358,3360,3362,3364,3366,3368,3370,3374,3376,3379],{"class":1059,"line":1432},[1057,3351,3352],{"class":1071},"db",[1057,3354,1266],{"class":1067},[1057,3356,3357],{"class":1167},"on",[1057,3359,1170],{"class":1071},[1057,3361,1207],{"class":1067},[1057,3363,3232],{"class":1095},[1057,3365,1207],{"class":1067},[1057,3367,1075],{"class":1067},[1057,3369,2813],{"class":1067},[1057,3371,3373],{"class":3372},"sHdIc","e",[1057,3375,1304],{"class":1067},[1057,3377,3378],{"class":1154}," =>",[1057,3380,1410],{"class":1067},[1057,3382,3383],{"class":1059,"line":1457},[1057,3384,3385],{"class":1806},"  \u002F\u002F audit; e.mode === 'filter' means characters were dropped from e.warning.sample\n",[1057,3387,3388,3390],{"class":1059,"line":1463},[1057,3389,1229],{"class":1067},[1057,3391,1232],{"class":1071},[946,3393,3394,3395,3397,3398,3400,3401,3404,3405,3407,3408,3410,3411,3414,3415,985,3418,3421],{},"One event is emitted per warning per write. The event fires for ",[949,3396,2962],{},"\n(value stored as-is) and ",[949,3399,2958],{}," (disallowed characters stripped — the\nevent is the ",[958,3402,3403],{},"only"," signal that stored data was mutated by script enforcement).\n",[949,3406,2950],{}," throws ",[949,3409,2954],{}," and emits nothing (the caller sees\nthe error directly). No new subscription surface — the existing\n",[949,3412,3413],{},"NoydbEventEmitter"," API (",[949,3416,3417],{},"db.on",[949,3419,3420],{},"db.off",") is used.",[946,3423,3424,3430,3431,3433,3434,3437,3438,3441,3442,3445,3446,3449,3450,3453,3454,3457],{},[958,3425,3426,3429],{},[949,3427,3428],{},"I18nMap\u003CLangs, Required>"," type helper."," Types the stored locale-map\nfrom the ",[949,3432,3170],{}," mode so the compiler forces you to handle an absent\noptional locale (",[949,3435,3436],{},"string | undefined",") instead of silently reading\n",[949,3439,3440],{},"undefined"," — the right fix for bare ",[949,3443,3444],{},".th"," access at raw-reading\n(identity\u002Fguard\u002Fexport) layers. ",[949,3447,3448],{},"'all'"," (default) → every locale\nrequired; ",[949,3451,3452],{},"'any'"," → every locale optional; ",[949,3455,3456],{},"readonly L[]"," → listed\nrequired, rest optional.",[1048,3459,3461],{"className":1050,"code":3460,"language":1052,"meta":1053,"style":1053},"type Lang = 'th' | 'en'\ninterface Contact {\n  name: I18nMap\u003CLang, 'any'>        \u002F\u002F { th?: string; en?: string }\n  legalName: I18nMap\u003CLang, ['th']>  \u002F\u002F { th: string; en?: string }\n}\n",[949,3462,3463,3488,3497,3525,3555],{"__ignoreMap":1053},[1057,3464,3465,3468,3471,3474,3476,3478,3480,3482,3484,3486],{"class":1059,"line":1060},[1057,3466,3467],{"class":1154},"type",[1057,3469,3470],{"class":1406}," Lang",[1057,3472,3473],{"class":1067}," =",[1057,3475,1092],{"class":1067},[1057,3477,1616],{"class":1095},[1057,3479,1207],{"class":1067},[1057,3481,3317],{"class":1067},[1057,3483,1092],{"class":1067},[1057,3485,1607],{"class":1095},[1057,3487,1099],{"class":1067},[1057,3489,3490,3492,3495],{"class":1059,"line":1102},[1057,3491,1403],{"class":1154},[1057,3493,3494],{"class":1406}," Contact",[1057,3496,1410],{"class":1067},[1057,3498,3499,3502,3504,3507,3509,3512,3514,3516,3518,3520,3522],{"class":1059,"line":1123},[1057,3500,3501],{"class":1179},"  name",[1057,3503,1183],{"class":1067},[1057,3505,3506],{"class":1406}," I18nMap",[1057,3508,1443],{"class":1067},[1057,3510,3511],{"class":1406},"Lang",[1057,3513,1075],{"class":1067},[1057,3515,1092],{"class":1067},[1057,3517,2200],{"class":1095},[1057,3519,1207],{"class":1067},[1057,3521,1489],{"class":1067},[1057,3523,3524],{"class":1806},"        \u002F\u002F { th?: string; en?: string }\n",[1057,3526,3527,3530,3532,3534,3536,3538,3540,3542,3544,3546,3548,3550,3552],{"class":1059,"line":1144},[1057,3528,3529],{"class":1179},"  legalName",[1057,3531,1183],{"class":1067},[1057,3533,3506],{"class":1406},[1057,3535,1443],{"class":1067},[1057,3537,3511],{"class":1406},[1057,3539,1075],{"class":1067},[1057,3541,1535],{"class":1071},[1057,3543,1207],{"class":1067},[1057,3545,1616],{"class":1095},[1057,3547,1207],{"class":1067},[1057,3549,1621],{"class":1071},[1057,3551,1489],{"class":1067},[1057,3553,3554],{"class":1806},"  \u002F\u002F { th: string; en?: string }\n",[1057,3556,3557],{"class":1059,"line":1151},[1057,3558,1460],{"class":1067},[946,3560,3561,2620,3564,3566,3567,985,3569,3571,3572,3574,3575,3578,3579,3582,3583,3586,3587,3590,3591,3594,3595,3598,3599,985,3602,3605,3606,2918],{},[958,3562,3563],{},"dictKey parity.",[949,3565,2039],{}," accepts the same ",[949,3568,2553],{},[949,3570,2251],{},"\n(default stays ",[949,3573,2575],{}," = legacy omit-on-miss). An ",[958,3576,3577],{},"array-of-keys","\nfield resolves to ",[949,3580,3581],{},"[{ key, label }]"," pair objects; a ",[958,3584,3585],{},"wildcard path","\n(",[949,3588,3589],{},"contacts[].title",") adds a per-element sibling ",[949,3592,3593],{},"\u003Cleaf>Label",". The\nstable key is preserved through resolution, so identity operations\n(",[949,3596,3597],{},"groupBy",", dedup) bind to the key even when labels collapse across\nlocales (",[949,3600,3601],{},"Mr.",[949,3603,3604],{},"Ms."," → ",[949,3607,3608],{},"คุณ",[946,3610,3611,3614,3615,3618,3619,3622,3623,985,3625,3627,3628,3631,3632,2620,3634,3637,3638,3641],{},[958,3612,3613],{},"Label sort."," Identity binding stays on the code, but when you want\nresults ",[2629,3616,3617],{},"ordered"," by the human label, opt in per-call:\n",[949,3620,3621],{},"query().orderBy('status', 'asc', { by: 'label' })"," sorts a ",[949,3624,962],{},[949,3626,2873],{},"\nfield by its resolved label at the query locale (",[949,3629,3630],{},"toArray({ locale })",", or a\n",[949,3633,2873],{},[949,3635,3636],{},"displayLocale"," when locale-less), falling back to the code when no\nlabel resolves. The default ",[949,3639,3640],{},"orderBy('status')"," still sorts by the stored code.",[941,3643,3645],{"id":3644},"staticdict-code-provided-dictionary","staticDict (code-provided dictionary)",[946,3647,3648,3651,3652,3654,3655,3658,3659,3662,3663,3665,3666,3669],{},[949,3649,3650],{},"staticDict(name, table, opts?)"," is a sibling to ",[949,3653,962],{}," for ",[958,3656,3657],{},"closed,\ndefined-in-code, identical-across-vaults"," enums (honorific, civil-status,\ngender, religion, status…). The labels live in the in-code ",[949,3660,3661],{},"table","; the record\nstores only the stable ",[958,3664,949],{},". Drop it into the same ",[949,3667,3668],{},"dictKeyFields"," slot:",[1048,3671,3673],{"className":1050,"code":3672,"language":1052,"meta":1053,"style":1053},"interface Worker { id: string; civilStatus: string }\n\nconst workers = vault.collection\u003CWorker>('workers', {\n  dictKeyFields: {\n    department:  dictKey('department', ['ops', 'fin'] as const),  \u002F\u002F per-vault, editable\n    civilStatus: staticDict('civilStatus', {                      \u002F\u002F code-defined\n      adultMale:   { th: 'นาย',    en: 'Mr'  },\n      adultFemale: { th: 'นาง',    en: 'Mrs' },\n    }, { displayLocale: 'th' }),\n  },\n})\n\nawait workers.put('w1', { id: 'w1', civilStatus: 'adultMale' }) \u002F\u002F stores only the code\n\nawait workers.get('w1')\n\u002F\u002F → { id: 'w1', civilStatus: 'adultMale', civilStatusLabel: 'นาย' }\n\u002F\u002F locale-less read: civilStatusLabel still resolves via displayLocale\n\nawait workers.get('w1', { locale: 'en' })\n\u002F\u002F → { id: 'w1', civilStatus: 'adultMale', civilStatusLabel: 'Mr' }\n\u002F\u002F an active locale wins over displayLocale\n",[949,3674,3675,3701,3705,3740,3748,3800,3826,3863,3898,3922,3926,3932,3936,3991,3995,4015,4020,4025,4029,4065,4070],{"__ignoreMap":1053},[1057,3676,3677,3679,3682,3684,3686,3688,3690,3692,3695,3697,3699],{"class":1059,"line":1060},[1057,3678,1403],{"class":1154},[1057,3680,3681],{"class":1406}," Worker",[1057,3683,1068],{"class":1067},[1057,3685,2078],{"class":1179},[1057,3687,1183],{"class":1067},[1057,3689,1451],{"class":1406},[1057,3691,2085],{"class":1067},[1057,3693,3694],{"class":1179}," civilStatus",[1057,3696,1183],{"class":1067},[1057,3698,1451],{"class":1406},[1057,3700,2105],{"class":1067},[1057,3702,3703],{"class":1059,"line":1102},[1057,3704,1148],{"emptyLinePlaceholder":1147},[1057,3706,3707,3709,3712,3714,3716,3718,3720,3722,3725,3727,3729,3731,3734,3736,3738],{"class":1059,"line":1123},[1057,3708,1155],{"class":1154},[1057,3710,3711],{"class":1071}," workers ",[1057,3713,1161],{"class":1067},[1057,3715,1288],{"class":1071},[1057,3717,1266],{"class":1067},[1057,3719,955],{"class":1167},[1057,3721,1443],{"class":1067},[1057,3723,3724],{"class":1406},"Worker",[1057,3726,1489],{"class":1067},[1057,3728,1170],{"class":1071},[1057,3730,1207],{"class":1067},[1057,3732,3733],{"class":1095},"workers",[1057,3735,1207],{"class":1067},[1057,3737,1075],{"class":1067},[1057,3739,1410],{"class":1067},[1057,3741,3742,3744,3746],{"class":1059,"line":1144},[1057,3743,1508],{"class":1179},[1057,3745,1183],{"class":1067},[1057,3747,1410],{"class":1067},[1057,3749,3750,3753,3755,3758,3760,3762,3765,3767,3769,3771,3773,3776,3778,3780,3782,3785,3787,3789,3791,3793,3795,3797],{"class":1059,"line":1151},[1057,3751,3752],{"class":1179},"    department",[1057,3754,1183],{"class":1067},[1057,3756,3757],{"class":1167},"  dictKey",[1057,3759,1170],{"class":1071},[1057,3761,1207],{"class":1067},[1057,3763,3764],{"class":1095},"department",[1057,3766,1207],{"class":1067},[1057,3768,1075],{"class":1067},[1057,3770,1535],{"class":1071},[1057,3772,1207],{"class":1067},[1057,3774,3775],{"class":1095},"ops",[1057,3777,1207],{"class":1067},[1057,3779,1075],{"class":1067},[1057,3781,1092],{"class":1067},[1057,3783,3784],{"class":1095},"fin",[1057,3786,1207],{"class":1067},[1057,3788,1554],{"class":1071},[1057,3790,1557],{"class":1063},[1057,3792,1560],{"class":1154},[1057,3794,1304],{"class":1071},[1057,3796,1075],{"class":1067},[1057,3798,3799],{"class":1806},"  \u002F\u002F per-vault, editable\n",[1057,3801,3802,3805,3807,3810,3812,3814,3817,3819,3821,3823],{"class":1059,"line":1176},[1057,3803,3804],{"class":1179},"    civilStatus",[1057,3806,1183],{"class":1067},[1057,3808,3809],{"class":1167}," staticDict",[1057,3811,1170],{"class":1071},[1057,3813,1207],{"class":1067},[1057,3815,3816],{"class":1095},"civilStatus",[1057,3818,1207],{"class":1067},[1057,3820,1075],{"class":1067},[1057,3822,1068],{"class":1067},[1057,3824,3825],{"class":1806},"                      \u002F\u002F code-defined\n",[1057,3827,3828,3831,3833,3836,3838,3840,3842,3845,3847,3849,3852,3854,3856,3859,3861],{"class":1059,"line":1194},[1057,3829,3830],{"class":1179},"      adultMale",[1057,3832,1183],{"class":1067},[1057,3834,3835],{"class":1067},"   {",[1057,3837,1339],{"class":1179},[1057,3839,1183],{"class":1067},[1057,3841,1092],{"class":1067},[1057,3843,3844],{"class":1095},"นาย",[1057,3846,1207],{"class":1067},[1057,3848,1075],{"class":1067},[1057,3850,3851],{"class":1179},"    en",[1057,3853,1183],{"class":1067},[1057,3855,1092],{"class":1067},[1057,3857,3858],{"class":1095},"Mr",[1057,3860,1207],{"class":1067},[1057,3862,1570],{"class":1067},[1057,3864,3865,3868,3870,3872,3874,3876,3878,3881,3883,3885,3887,3889,3891,3894,3896],{"class":1059,"line":1212},[1057,3866,3867],{"class":1179},"      adultFemale",[1057,3869,1183],{"class":1067},[1057,3871,1068],{"class":1067},[1057,3873,1339],{"class":1179},[1057,3875,1183],{"class":1067},[1057,3877,1092],{"class":1067},[1057,3879,3880],{"class":1095},"นาง",[1057,3882,1207],{"class":1067},[1057,3884,1075],{"class":1067},[1057,3886,3851],{"class":1179},[1057,3888,1183],{"class":1067},[1057,3890,1092],{"class":1067},[1057,3892,3893],{"class":1095},"Mrs",[1057,3895,1207],{"class":1067},[1057,3897,1351],{"class":1067},[1057,3899,3900,3903,3905,3908,3910,3912,3914,3916,3918,3920],{"class":1059,"line":1226},[1057,3901,3902],{"class":1067},"    },",[1057,3904,1068],{"class":1067},[1057,3906,3907],{"class":1179}," displayLocale",[1057,3909,1183],{"class":1067},[1057,3911,1092],{"class":1067},[1057,3913,1616],{"class":1095},[1057,3915,1207],{"class":1067},[1057,3917,1086],{"class":1067},[1057,3919,1304],{"class":1071},[1057,3921,1191],{"class":1067},[1057,3923,3924],{"class":1059,"line":1432},[1057,3925,1570],{"class":1067},[1057,3927,3928,3930],{"class":1059,"line":1457},[1057,3929,1229],{"class":1067},[1057,3931,1232],{"class":1071},[1057,3933,3934],{"class":1059,"line":1463},[1057,3935,1148],{"emptyLinePlaceholder":1147},[1057,3937,3938,3940,3943,3945,3947,3949,3951,3954,3956,3958,3960,3962,3964,3966,3968,3970,3972,3974,3976,3978,3981,3983,3985,3988],{"class":1059,"line":1468},[1057,3939,1285],{"class":1063},[1057,3941,3942],{"class":1071}," workers",[1057,3944,1266],{"class":1067},[1057,3946,1671],{"class":1167},[1057,3948,1170],{"class":1071},[1057,3950,1207],{"class":1067},[1057,3952,3953],{"class":1095},"w1",[1057,3955,1207],{"class":1067},[1057,3957,1075],{"class":1067},[1057,3959,1068],{"class":1067},[1057,3961,2078],{"class":1179},[1057,3963,1183],{"class":1067},[1057,3965,1092],{"class":1067},[1057,3967,3953],{"class":1095},[1057,3969,1207],{"class":1067},[1057,3971,1075],{"class":1067},[1057,3973,3694],{"class":1179},[1057,3975,1183],{"class":1067},[1057,3977,1092],{"class":1067},[1057,3979,3980],{"class":1095},"adultMale",[1057,3982,1207],{"class":1067},[1057,3984,1086],{"class":1067},[1057,3986,3987],{"class":1071},") ",[1057,3989,3990],{"class":1806},"\u002F\u002F stores only the code\n",[1057,3992,3993],{"class":1059,"line":1505},[1057,3994,1148],{"emptyLinePlaceholder":1147},[1057,3996,3997,3999,4001,4003,4005,4007,4009,4011,4013],{"class":1059,"line":1515},[1057,3998,1285],{"class":1063},[1057,4000,3942],{"class":1071},[1057,4002,1266],{"class":1067},[1057,4004,1773],{"class":1167},[1057,4006,1170],{"class":1071},[1057,4008,1207],{"class":1067},[1057,4010,3953],{"class":1095},[1057,4012,1207],{"class":1067},[1057,4014,1232],{"class":1071},[1057,4016,4017],{"class":1059,"line":1567},[1057,4018,4019],{"class":1806},"\u002F\u002F → { id: 'w1', civilStatus: 'adultMale', civilStatusLabel: 'นาย' }\n",[1057,4021,4022],{"class":1059,"line":1573},[1057,4023,4024],{"class":1806},"\u002F\u002F locale-less read: civilStatusLabel still resolves via displayLocale\n",[1057,4026,4027],{"class":1059,"line":1583},[1057,4028,1148],{"emptyLinePlaceholder":1147},[1057,4030,4031,4033,4035,4037,4039,4041,4043,4045,4047,4049,4051,4053,4055,4057,4059,4061,4063],{"class":1059,"line":1644},[1057,4032,1285],{"class":1063},[1057,4034,3942],{"class":1071},[1057,4036,1266],{"class":1067},[1057,4038,1773],{"class":1167},[1057,4040,1170],{"class":1071},[1057,4042,1207],{"class":1067},[1057,4044,3953],{"class":1095},[1057,4046,1207],{"class":1067},[1057,4048,1075],{"class":1067},[1057,4050,1068],{"class":1067},[1057,4052,1788],{"class":1179},[1057,4054,1183],{"class":1067},[1057,4056,1092],{"class":1067},[1057,4058,1607],{"class":1095},[1057,4060,1207],{"class":1067},[1057,4062,1086],{"class":1067},[1057,4064,1232],{"class":1071},[1057,4066,4067],{"class":1059,"line":1649},[1057,4068,4069],{"class":1806},"\u002F\u002F → { id: 'w1', civilStatus: 'adultMale', civilStatusLabel: 'Mr' }\n",[1057,4071,4072],{"class":1059,"line":1656},[1057,4073,4074],{"class":1806},"\u002F\u002F an active locale wins over displayLocale\n",[946,4076,4077,4078,1183],{},"How it differs from ",[949,4079,962],{},[1002,4081,4082,4097,4140,4153,4168],{},[1005,4083,4084,1970,4090,4096],{},[958,4085,4086,4087,3018],{},"No ",[949,4088,4089],{},"_dict_*",[958,4091,4092,4093],{},"no ",[949,4094,4095],{},"rename()"," — labels are code constants,\nso there is no per-vault encrypted copy and no O(records) migration. A label\nchange is a code deploy.",[1005,4098,4099,4102,4103,4105,4106,4108,4109,4112,4113,4115,4116,4118,4119,4121,4122,4125,4126,985,4128,4130,4131,4133,4134,4136,4137,4139],{},[958,4100,4101],{},"Hybrid resolution."," With a configured ",[949,4104,3636],{},", a ",[949,4107,1935],{},"\nresolves even under a ",[958,4110,4111],{},"locale-less"," read — the property a locale-less app\nneeds and ",[949,4114,962],{}," cannot provide. Without ",[949,4117,3636],{}," it behaves like\n",[949,4120,962],{}," (no label until a locale is active). When a locale ",[2629,4123,4124],{},"is"," active, it\nhonors ",[949,4127,2553],{},[949,4129,2251],{}," exactly like ",[949,4132,962],{},". The locale gate is\notherwise unchanged: an ",[949,4135,976],{},"-only or plain-",[949,4138,962],{}," collection still\nreturns the raw record on a locale-less read.",[1005,4141,4142,2620,4145,4148,4149,4152],{},[958,4143,4144],{},"Read-only by construction.",[949,4146,4147],{},"vault.dictionary(staticName)"," throws\n",[949,4150,4151],{},"StaticDictReadonlyError"," — a static dict has no mutation surface.",[1005,4154,4155,4158,4159,4148,4161,4164,4165,2918],{},[958,4156,4157],{},"Put-time code validation."," A stored code outside ",[949,4160,3661],{},[949,4162,4163],{},"UnknownDictCodeError"," (opt out per descriptor with ",[949,4166,4167],{},"{ validateCodes: false }",[1005,4169,4170,2620,4173,4176,4177,4180,4181,4183],{},[958,4171,4172],{},"Query parity.",[949,4174,4175],{},"groupBy(field)"," buckets by the stable code; the\ncode-table-backed source resolves ",[949,4178,4179],{},"{ by: 'label' }"," at the active locale, or\n",[949,4182,3636],{}," when the query is locale-less.",[946,4185,4186,4187,4190],{},"Migrating from a userland helper needs ",[958,4188,4189],{},"zero record change"," — the record\nalready stores the code; only the field descriptor changes.",[941,4192,4194],{"id":4193},"relation-to-the-lookup-feature","Relation to the lookup feature",[946,4196,4197,4198,967,4201,1970,4203,4206,4207,4210,4211,4213,4214,4216,4217,4219,4220,4223,4224,4227,4228,985,4231,985,4234,4237,4238,985,4241,985,4244,4247,4248,4250,4251,4253,4254,4256],{},"Since ",[949,4199,4200],{},"0.3.0-pre.9",[949,4202,2039],{},[949,4204,4205],{},"staticDict()"," are\n",[958,4208,4209],{},"aliases"," of the ",[953,4212,731],{"href":732}," feature's descriptor shape — ",[949,4215,2039],{}," matching\nits reserved-dictionary tier, ",[949,4218,4205],{}," its static tier. This is not a deprecation: both\nspellings stay fully supported, keep compiling onto the i18n binding, and their stored\nenvelopes, ",[949,4221,4222],{},"describe()"," output, and ",[949,4225,4226],{},".join()"," dressing are byte-identical to their native\nequivalents. What the native ",[949,4229,4230],{},"lookup()",[949,4232,4233],{},"enumOf()",[949,4235,4236],{},"dict()"," spellings add on top — alternate-key\nnormalization, closed-vocabulary write refusal, a first-class collection (\"matrix\") tier, and\n",[949,4239,4240],{},"restrict",[949,4242,4243],{},"cascade",[949,4245,4246],{},"nullify"," reference semantics on delete\u002Fforget — is exclusive to them; see\n",[953,4249,731],{"href":732},". Reserved ",[949,4252,4089],{}," dictionaries themselves now also replicate through\n",[953,4255,864],{"href":865},", with dictionary deletes traveling as delete markers.",[946,4258,4259,4260,4262,4263,4266],{},"Both declarations can also be spelled through the ",[953,4261,896],{"href":897}," composer\n(",[949,4264,4265],{},"viaFields: { status: via(dictKey('status', ['paid'] as const)) }",") with identical internals.",[941,4268,4270],{"id":4269},"pairs-well-with","Pairs well with",[1002,4272,4273,4282],{},[1005,4274,4275,1038,4278,4281],{},[958,4276,4277],{},"aggregate",[949,4279,4280],{},"groupBy(dictKeyField)"," resolves labels in the result on render",[1005,4283,4284,4286],{},[958,4285,697],{}," — locale changes are versioned",[941,4288,4290],{"id":4289},"edge-cases-limits","Edge cases & limits",[1002,4292,4293,4303,4317],{},[1005,4294,4295,4296,4299,4300],{},"Required locales declared in ",[949,4297,4298],{},"i18nText({ required: 'all' })"," are enforced on put — missing translations throw ",[949,4301,4302],{},"MissingTranslationError",[1005,4304,4305,4308,4309,4312,4313,4316],{},[949,4306,4307],{},"'auto'"," translate fields call out to the ",[949,4310,4311],{},"plaintextTranslator"," callback set at ",[949,4314,4315],{},"createNoydb","-time",[1005,4318,4319,4320,4322],{},"Dictionary ",[949,4321,4095],{}," rewrites every collection record that points at the old key — O(records) per rename",[941,4324,4326],{"id":4325},"see-also","See also",[1002,4328,4329,4339,4344,4350,4360,4367,4372],{},[1005,4330,4331,4333,4334,985,4336,4338],{},[953,4332,731],{"href":732}," — the reference-field feature ",[949,4335,2039],{},[949,4337,4205],{}," alias onto",[1005,4340,4341,4343],{},[953,4342,896],{"href":897}," — the field-feature composer shared by all field declarations",[1005,4345,4346,4349],{},[953,4347,4348],{"href":48},"Vaults & collections"," — the vault\u002Fcollection model this service builds on",[1005,4351,4352,4354,4355,985,4357,4359],{},[953,4353,507],{"href":508}," — an invoicing app using ",[949,4356,962],{},[949,4358,976],{}," end to end",[1005,4361,4362,4364,4365],{},[953,4363,697],{"href":698}," — versions dictionary and record changes when opted in alongside ",[949,4366,701],{},[1005,4368,4369,4371],{},[953,4370,597],{"href":598}," — the full opt-in catalog",[1005,4373,4374,4375,1970,4383,1266],{},"Proven by showcases ",[953,4376,4380],{"href":4377,"rel":4378},"https:\u002F\u002Fgithub.com\u002Fnoy-db\u002Fdocs\u002Fblob\u002Fmain\u002Fshowcases\u002Fsrc\u002F09-with-i18n.showcase.test.ts",[4379],"nofollow",[949,4381,4382],{},"09-with-i18n",[953,4384,4387],{"href":4385,"rel":4386},"https:\u002F\u002Fgithub.com\u002Fnoy-db\u002Fdocs\u002Fblob\u002Fmain\u002Fshowcases\u002Fsrc\u002F94-with-i18n-hardening.showcase.test.ts",[4379],[949,4388,4389],{},"94-with-i18n-hardening",[4391,4392,4393],"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 .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html .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 .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}",{"title":1053,"searchDepth":1123,"depth":1123,"links":4395},[4396,4397,4398,4399,4400,4401,4402,4403,4404,4405,4406,4407,4408],{"id":943,"depth":1102,"text":944},{"id":999,"depth":1102,"text":1000},{"id":1029,"depth":1102,"text":1030},{"id":1045,"depth":1102,"text":1046},{"id":1235,"depth":1102,"text":1236},{"id":1941,"depth":1102,"text":1942},{"id":1999,"depth":1102,"text":2000},{"id":2029,"depth":1102,"text":2030},{"id":3644,"depth":1102,"text":3645},{"id":4193,"depth":1102,"text":4194},{"id":4269,"depth":1102,"text":4270},{"id":4289,"depth":1102,"text":4290},{"id":4325,"depth":1102,"text":4326},null,"Multi-locale records via a shared label dictionary (dictKey) or per-record translated text (i18nText), resolved to the caller's locale at read time.","md",{},"service",{"title":701,"description":4410},"stable","important","3xcKhDUKEvDFx94HDJn48fqg-aj5kVDiosLwbdHVLj8",{"data":4419,"body":4420},{},{"type":4421,"children":4422},"root",[4423],{"type":4424,"tag":946,"props":4425,"children":4426},"element",{},[4427],{"type":4424,"tag":949,"props":4428,"children":4430},{"className":4429},[],[4431],{"type":4432,"value":1139},"text",{"data":4434,"body":4435},{},{"type":4421,"children":4436},[4437],{"type":4424,"tag":946,"props":4438,"children":4439},{},[4440],{"type":4424,"tag":949,"props":4441,"children":4443},{"className":4442},[],[4444],{"type":4432,"value":1041},{"data":4446,"body":4447},{},{"type":4421,"children":4448},[4449],{"type":4424,"tag":946,"props":4450,"children":4451},{},[4452],{"type":4424,"tag":949,"props":4453,"children":4455},{"className":4454},[],[4456],{"type":4432,"value":4457},"with-shape",{"data":4459,"body":4460},{},{"type":4421,"children":4461},[4462],{"type":4424,"tag":946,"props":4463,"children":4464},{},[4465],{"type":4432,"value":4466},"D — Data Shape",{"data":4468,"body":4469},{},{"type":4421,"children":4470},[4471],{"type":4424,"tag":946,"props":4472,"children":4473},{},[4474],{"type":4432,"value":4475},"~854 (off-bundle when not opted in)",1791896572763]