[{"data":1,"prerenderedAt":3640},["ShallowReactive",2],{"fougere:post.list:{}":3,"docs:\u002Fdocs\u002Fadopt\u002Fdemos":6,"docs-uses":115,"docs-nav":291,"demo:all":429,"demo:one-declaration":528},{"items":4,"hasMore":5},[],false,{"id":7,"title":8,"body":9,"description":103,"extension":104,"forms":105,"kind":106,"meta":107,"navigation":108,"path":109,"seo":110,"stem":111,"step":112,"uses":113,"__hash__":114},"docs\u002Fdocs\u002F7.adopt\u002F6.demos.md","Demos",{"type":10,"value":11,"toc":101},"minimark",[12,16,19,22,25,97],[13,14,15],"p",{},"Every page of this documentation shows fragments. These are the projects those fragments\nare cut from: complete, running, and read straight out of the repository rather than\ncopied into a page.",[13,17,18],{},"Pick one, open any file, and run the ones that do not need a native binary.",[20,21],"demo-list",{},[13,23,24],{},"Each demo also runs locally, which is the only way to see the ones that hold a database:",[26,27,32],"pre",{"className":28,"code":29,"language":30,"meta":31,"style":31},"language-bash shiki shiki-themes material-theme-lighter fougere-pastel material-theme-palenight","git clone https:\u002F\u002Fgithub.com\u002Fchok\u002Ffougere.git\ncd fougere && pnpm install && pnpm run build\npnpm -C demos\u002Fnuxt-blog dev\n","bash","",[33,34,35,51,81],"code",{"__ignoreMap":31},[36,37,40,44,48],"span",{"class":38,"line":39},"line",1,[36,41,43],{"class":42},"sV8pK","git",[36,45,47],{"class":46},"sN-8n"," clone",[36,49,50],{"class":46}," https:\u002F\u002Fgithub.com\u002Fchok\u002Ffougere.git\n",[36,52,54,58,61,65,68,71,73,75,78],{"class":38,"line":53},2,[36,55,57],{"class":56},"s4mR9","cd",[36,59,60],{"class":46}," fougere",[36,62,64],{"class":63},"s15xx"," &&",[36,66,67],{"class":42}," pnpm",[36,69,70],{"class":46}," install",[36,72,64],{"class":63},[36,74,67],{"class":42},[36,76,77],{"class":46}," run",[36,79,80],{"class":46}," build\n",[36,82,84,87,91,94],{"class":38,"line":83},3,[36,85,86],{"class":42},"pnpm",[36,88,90],{"class":89},"svHQO"," -C",[36,92,93],{"class":46}," demos\u002Fnuxt-blog",[36,95,96],{"class":46}," dev\n",[98,99,100],"style",{},"html pre.shiki code .sV8pK, html code.shiki .sV8pK{--shiki-light:#E2931D;--shiki-default:#C9B6EA;--shiki-dark:#FFCB6B}html pre.shiki code .sN-8n, html code.shiki .sN-8n{--shiki-light:#91B859;--shiki-default:#EE9F6B;--shiki-dark:#C3E88D}html pre.shiki code .s4mR9, html code.shiki .s4mR9{--shiki-light:#6182B8;--shiki-default:#C9B6EA;--shiki-dark:#82AAFF}html pre.shiki code .s15xx, html code.shiki .s15xx{--shiki-light:#39ADB5;--shiki-default:#A3B0A5;--shiki-dark:#89DDFF}html pre.shiki code .svHQO, html code.shiki .svHQO{--shiki-light:#91B859;--shiki-default:#8FCF86;--shiki-dark:#C3E88D}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":31,"searchDepth":53,"depth":53,"links":102},[],"Every demo the repository ships, whole — tree, files, and a sandbox to run it in.","md",[],"task",{},true,"\u002Fdocs\u002Fadopt\u002Fdemos",{"title":8,"description":103},"docs\u002F7.adopt\u002F6.demos",null,[],"mT11ANE2uzdj__Fsn24bGAGyZEilBtAJg7zYFjTCQEA",[116,119,122,125,128,131,134,137,140,146,152,157,161,165,169,173,177,182,186,190,195,199,204,208,212,216,220,224,228,232,236,240,244,248,252,256,258,261,264,267,270,273,276,279,282,285,288],{"path":117,"title":118,"uses":112},"\u002Fdocs\u002Fconcepts\u002Fentity","Entity",{"path":120,"title":121,"uses":112},"\u002Fdocs\u002Fconcepts\u002Fhandler","Handler",{"path":123,"title":124,"uses":112},"\u002Fdocs\u002Fconcepts\u002Frepository","Repository",{"path":126,"title":127,"uses":112},"\u002Fdocs\u002Fconcepts\u002Ffrond","Frond",{"path":129,"title":130,"uses":112},"\u002Fdocs\u002Fconcepts\u002Ffacade","Facade",{"path":132,"title":133,"uses":112},"\u002Fdocs\u002Fconcepts\u002Ffact","Fact",{"path":135,"title":136,"uses":112},"\u002Fdocs\u002Fconcepts\u002Fport","Port",{"path":138,"title":139,"uses":112},"\u002Fdocs\u002Fconcepts\u002Fconfiguration","Configuration",{"path":141,"title":142,"uses":143},"\u002Fdocs\u002Faccess\u002Fauthentication","Authentication",[144,145],"port","frond",{"path":147,"title":148,"uses":149},"\u002Fdocs\u002Faccess\u002Fstate","Keep a caller's state",[150,151],"configuration","handler",{"path":153,"title":154,"uses":155},"\u002Fdocs\u002Fdata\u002Fsql","SQLite or Postgres",[156,150],"entity",{"path":158,"title":159,"uses":160},"\u002Fdocs\u002Fdata\u002Fseveral-databases","Several databases",[150,156],{"path":162,"title":163,"uses":164},"\u002Fdocs\u002Fdata\u002Fcomputed-field","A computed field",[156,144],{"path":166,"title":167,"uses":168},"\u002Fdocs\u002Fdata\u002Fevolve","Evolve a schema",[156],{"path":170,"title":171,"uses":172},"\u002Fdocs\u002Fdata\u002Fseeds","Seed data",[156],{"path":174,"title":175,"uses":176},"\u002Fdocs\u002Fdata\u002Fvalues","Read settings and secrets",[156,150],{"path":178,"title":179,"uses":180},"\u002Fdocs\u002Fdata\u002Fmirror","Mirror a source you cannot query",[181],"repository",{"path":183,"title":184,"uses":185},"\u002Fdocs\u002Fdata\u002Ftogether","Two writes as one",[181],{"path":187,"title":188,"uses":189},"\u002Fdocs\u002Fbehaviour\u002Faround-every-call","Around every call",[144,145],{"path":191,"title":192,"uses":193},"\u002Fdocs\u002Fbehaviour\u002Ffinish-a-fact","Finish a fact",[194],"fact",{"path":196,"title":197,"uses":198},"\u002Fdocs\u002Fserve\u002Frest-graphql","REST, OpenAPI, GraphQL",[151,150],{"path":200,"title":201,"uses":202},"\u002Fdocs\u002Fserve\u002Fpages","Pages: queries and commands",[151,203],"facade",{"path":205,"title":206,"uses":207},"\u002Fdocs\u002Fserve\u002Fforms","A form",[156],{"path":209,"title":210,"uses":211},"\u002Fdocs\u002Fserve\u002Fadmin","An admin panel",[151],{"path":213,"title":214,"uses":215},"\u002Fdocs\u002Frun\u002Fdeploy","Deploy a split",[150,145],{"path":217,"title":218,"uses":219},"\u002Fdocs\u002Frun\u002Fsecure","Secure calls between processes",[150,145],{"path":221,"title":222,"uses":223},"\u002Fdocs\u002Frun\u002Flifecycle","Reload and shut down",[150],{"path":225,"title":226,"uses":227},"\u002Fdocs\u002Frun\u002Fobserve","Observe",[150,151],{"path":229,"title":230,"uses":231},"\u002Fdocs\u002Frun\u002Fdev-panel","The dev panel",[151],{"path":233,"title":234,"uses":235},"\u002Fdocs\u002Frun\u002Ftest","Test",[156,144],{"path":237,"title":238,"uses":239},"\u002Fdocs\u002Fadopt\u002Fnew-project","Start a project",[145,150],{"path":241,"title":242,"uses":243},"\u002Fdocs\u002Fadopt\u002Fexisting-app","Add Fougere to an existing app",[145,150],{"path":245,"title":246,"uses":247},"\u002Fdocs\u002Fadopt\u002Fbring-your-schema","Bring your schema",[156],{"path":249,"title":250,"uses":251},"\u002Fdocs\u002Fadopt\u002Fhosts","Pick a host",[150],{"path":253,"title":254,"uses":255},"\u002Fdocs\u002Fadopt\u002Fanother-repository","A frond from another repository",[203,145],{"path":109,"title":8,"uses":257},[],{"path":259,"title":260,"uses":112},"\u002Fdocs\u002Fextending\u002Fscan","How the scan reads a project",{"path":262,"title":263,"uses":112},"\u002Fdocs\u002Fextending\u002Fwithout-compiler","Boot without the compiler",{"path":265,"title":266,"uses":112},"\u002Fdocs\u002Fextending\u002Fboot","The boot, step by step",{"path":268,"title":269,"uses":112},"\u002Fdocs\u002Fextending\u002Fcard-and-wire","The card and the wire",{"path":271,"title":272,"uses":112},"\u002Fdocs\u002Fextending\u002Fextension-points","Registries and extension points",{"path":274,"title":275,"uses":112},"\u002Fdocs\u002Fextending\u002Fvocabulary","Teach a word",{"path":277,"title":278,"uses":112},"\u002Fdocs\u002Fextending\u002Fextensions","Run code at boot and shutdown",{"path":280,"title":281,"uses":112},"\u002Fdocs\u002Fextending\u002Fsource-adapter","Write a source adapter",{"path":283,"title":284,"uses":112},"\u002Fdocs\u002Fextending\u002Fsurface","Write a surface",{"path":286,"title":287,"uses":112},"\u002Fdocs\u002Fextending\u002Fforeign-frond","A frond in another language",{"path":289,"title":290,"uses":112},"\u002Fdocs","What is Fougere",[292],{"title":293,"path":289,"stem":294,"children":295,"page":-1},"Docs","docs",[296,298,319,328,349,358,371,388,404],{"title":290,"path":289,"stem":297},"docs\u002Findex",{"title":299,"path":300,"stem":301,"children":302,"page":5},"Concepts","\u002Fdocs\u002Fconcepts","docs\u002F1.concepts",[303,305,307,309,311,313,315,317],{"title":118,"path":117,"stem":304},"docs\u002F1.concepts\u002F1.entity",{"title":121,"path":120,"stem":306},"docs\u002F1.concepts\u002F2.handler",{"title":124,"path":123,"stem":308},"docs\u002F1.concepts\u002F3.repository",{"title":127,"path":126,"stem":310},"docs\u002F1.concepts\u002F4.frond",{"title":130,"path":129,"stem":312},"docs\u002F1.concepts\u002F5.facade",{"title":133,"path":132,"stem":314},"docs\u002F1.concepts\u002F6.fact",{"title":136,"path":135,"stem":316},"docs\u002F1.concepts\u002F7.port",{"title":139,"path":138,"stem":318},"docs\u002F1.concepts\u002F8.configuration",{"title":320,"path":321,"stem":322,"children":323,"page":5},"Access","\u002Fdocs\u002Faccess","docs\u002F2.access",[324,326],{"title":142,"path":141,"stem":325},"docs\u002F2.access\u002F1.authentication",{"title":148,"path":147,"stem":327},"docs\u002F2.access\u002F2.state",{"title":329,"path":330,"stem":331,"children":332,"page":5},"Data","\u002Fdocs\u002Fdata","docs\u002F3.data",[333,335,337,339,341,343,345,347],{"title":154,"path":153,"stem":334},"docs\u002F3.data\u002F1.sql",{"title":159,"path":158,"stem":336},"docs\u002F3.data\u002F2.several-databases",{"title":163,"path":162,"stem":338},"docs\u002F3.data\u002F3.computed-field",{"title":167,"path":166,"stem":340},"docs\u002F3.data\u002F4.evolve",{"title":171,"path":170,"stem":342},"docs\u002F3.data\u002F5.seeds",{"title":175,"path":174,"stem":344},"docs\u002F3.data\u002F6.values",{"title":179,"path":178,"stem":346},"docs\u002F3.data\u002F7.mirror",{"title":184,"path":183,"stem":348},"docs\u002F3.data\u002F8.together",{"title":350,"path":351,"stem":352,"children":353,"page":5},"Behaviour","\u002Fdocs\u002Fbehaviour","docs\u002F4.behaviour",[354,356],{"title":188,"path":187,"stem":355},"docs\u002F4.behaviour\u002F1.around-every-call",{"title":192,"path":191,"stem":357},"docs\u002F4.behaviour\u002F2.finish-a-fact",{"title":359,"path":360,"stem":361,"children":362,"page":5},"Serve","\u002Fdocs\u002Fserve","docs\u002F5.serve",[363,365,367,369],{"title":197,"path":196,"stem":364},"docs\u002F5.serve\u002F1.rest-graphql",{"title":201,"path":200,"stem":366},"docs\u002F5.serve\u002F2.pages",{"title":206,"path":205,"stem":368},"docs\u002F5.serve\u002F3.forms",{"title":210,"path":209,"stem":370},"docs\u002F5.serve\u002F4.admin",{"title":372,"path":373,"stem":374,"children":375,"page":5},"Run","\u002Fdocs\u002Frun","docs\u002F6.run",[376,378,380,382,384,386],{"title":214,"path":213,"stem":377},"docs\u002F6.run\u002F1.deploy",{"title":218,"path":217,"stem":379},"docs\u002F6.run\u002F2.secure",{"title":222,"path":221,"stem":381},"docs\u002F6.run\u002F3.lifecycle",{"title":226,"path":225,"stem":383},"docs\u002F6.run\u002F4.observe",{"title":230,"path":229,"stem":385},"docs\u002F6.run\u002F5.dev-panel",{"title":234,"path":233,"stem":387},"docs\u002F6.run\u002F6.test",{"title":389,"path":390,"stem":391,"children":392,"page":5},"Adopt","\u002Fdocs\u002Fadopt","docs\u002F7.adopt",[393,395,397,399,401,403],{"title":238,"path":237,"stem":394},"docs\u002F7.adopt\u002F1.new-project",{"title":242,"path":241,"stem":396},"docs\u002F7.adopt\u002F2.existing-app",{"title":246,"path":245,"stem":398},"docs\u002F7.adopt\u002F3.bring-your-schema",{"title":250,"path":249,"stem":400},"docs\u002F7.adopt\u002F4.hosts",{"title":254,"path":253,"stem":402},"docs\u002F7.adopt\u002F5.another-repository",{"title":8,"path":109,"stem":111},{"title":405,"path":406,"stem":407,"children":408,"page":5},"Extending","\u002Fdocs\u002Fextending","docs\u002F8.extending",[409,411,413,415,417,419,421,423,425,427],{"title":260,"path":259,"stem":410},"docs\u002F8.extending\u002F1.scan",{"title":263,"path":262,"stem":412},"docs\u002F8.extending\u002F10.without-compiler",{"title":266,"path":265,"stem":414},"docs\u002F8.extending\u002F2.boot",{"title":269,"path":268,"stem":416},"docs\u002F8.extending\u002F3.card-and-wire",{"title":272,"path":271,"stem":418},"docs\u002F8.extending\u002F4.extension-points",{"title":275,"path":274,"stem":420},"docs\u002F8.extending\u002F5.vocabulary",{"title":278,"path":277,"stem":422},"docs\u002F8.extending\u002F6.extensions",{"title":281,"path":280,"stem":424},"docs\u002F8.extending\u002F7.source-adapter",{"title":284,"path":283,"stem":426},"docs\u002F8.extending\u002F8.surface",{"title":287,"path":286,"stem":428},"docs\u002F8.extending\u002F9.foreign-frond",[430,433,436,439,442,445,448,451,453,456,458,461,463,466,469,471,473,475,477,480,482,485,487,490,493,495,498,500,503,505,508,510,512,514,516,519,521,524,526],{"name":431,"runnable":108,"count":432},"admin-panel",8,{"name":434,"runnable":108,"count":435},"anchor-chain",4,{"name":437,"runnable":108,"count":438},"ask-quorum",10,{"name":440,"runnable":5,"count":441},"auth-better",7,{"name":443,"runnable":108,"count":444},"boot-refusals",58,{"name":446,"runnable":108,"count":447},"cloudflare-d1",24,{"name":449,"runnable":5,"count":450},"config-reload",6,{"name":452,"runnable":108,"count":435},"container-basics",{"name":454,"runnable":108,"count":455},"conventions",17,{"name":457,"runnable":108,"count":441},"core-scanner",{"name":459,"runnable":108,"count":460},"crossing-cost",12,{"name":462,"runnable":5,"count":460},"crud-auto",{"name":464,"runnable":108,"count":465},"emit-fleet",11,{"name":467,"runnable":108,"count":468},"emit-multirepo",21,{"name":470,"runnable":108,"count":438},"emit-split",{"name":472,"runnable":5,"count":438},"express-blog",{"name":474,"runnable":108,"count":441},"log-destinations",{"name":476,"runnable":5,"count":465},"mirror-catalog",{"name":478,"runnable":108,"count":479},"multi-frond",30,{"name":481,"runnable":108,"count":441},"multi-transport",{"name":483,"runnable":5,"count":484},"next-blog",18,{"name":486,"runnable":108,"count":432},"no-compiler",{"name":488,"runnable":5,"count":489},"nuxt-blog",42,{"name":491,"runnable":108,"count":492},"observability",16,{"name":494,"runnable":5,"count":465},"oclif-catalog",{"name":496,"runnable":5,"count":497},"on-delete",14,{"name":499,"runnable":108,"count":435},"one-declaration",{"name":501,"runnable":108,"count":502},"pipe-split",13,{"name":504,"runnable":108,"count":455},"ports-swap",{"name":506,"runnable":5,"count":507},"react-router-blog",20,{"name":509,"runnable":108,"count":441},"rust-frond",{"name":511,"runnable":5,"count":438},"schema-ecommerce",{"name":513,"runnable":108,"count":465},"shared-parent",{"name":515,"runnable":108,"count":465},"sse-live",{"name":517,"runnable":5,"count":518},"sveltekit-blog",23,{"name":520,"runnable":5,"count":507},"tanstack-blog",{"name":522,"runnable":5,"count":523},"test-gradient",19,{"name":525,"runnable":5,"count":502},"together-frame",{"name":527,"runnable":108,"count":497},"transport-chain",{"id":529,"title":499,"body":530,"count":435,"description":31,"entry":535,"extension":104,"meta":3635,"name":499,"navigation":108,"path":3636,"runnable":108,"seo":3637,"stem":3638,"__hash__":3639},"demo\u002Fdemo\u002Fone-declaration.md",{"type":10,"value":531,"toc":3633},[532,3630],[533,534,536,1299,3275,3493],"code-tree",{"default-value":535},"main.ts",[26,537,541],{"className":538,"code":539,"filename":540,"language":104,"meta":31,"style":31},"language-md shiki shiki-themes material-theme-lighter fougere-pastel material-theme-palenight","# one-declaration — six lines in, four consumers out\n\n```bash\npnpm -C demos\u002Fone-declaration dev\n```\n\nOne entity is declared. Four different consumers are then asked what they make of\nit. **Nobody wrote any of the four**, and none of them can drift from the others.\n\n## What you write\n\n```ts\nclass Reading extends entity({\n  id: primary(),\n  station: text({ min: 2, max: 40 }),\n  celsius: number({ min: -90, max: 60 }),\n  recordedAt: created(),\n}) {}\n```\n\n## What comes out\n\n**The table** — `min: 2` became a database constraint, not a runtime check:\n\n```sql\ncreate table if not exists \"reading\" (\n  \"id\" text not null primary key,\n  \"station\" text not null,\n  \"celsius\" real not null,\n  \"recorded_at\" text not null,\n  constraint \"reading_station_check\" check (length(\"station\") >= 2 and length(\"station\") \u003C= 40),\n  constraint \"reading_celsius_check\" check (\"celsius\" >= -90 and \"celsius\" \u003C= 60))\n```\n\nSo raw SQL, another process, or a human at a prompt meets the bound too.\n\n**The identity card** — 488 bytes of plain JSON Schema:\n\n```json\n\"station\": { \"type\": \"string\", \"minLength\": 2, \"maxLength\": 40 }\n```\n\nAny validator on earth reads it. This is the document `demos\u002Frust-frond` publishes:\na Frond written in Rust, consumed from TypeScript, with no shared code.\n\n**The io projection** — nobody wrote \"a client cannot supply an id\":\n\n```\na client may send    station, celsius\na client receives    id, station, celsius, recordedAt\n```\n\n`primary()` and `created()` state it, and the facade reads them.\n\n**The validator** — the same verdict in the browser, at the façade, and across a split\n(proven in `packages\u002Fcore\u002Ftests\u002Fvalidator-local-remote.test.ts`):\n\n```\n{ station: \"x\", celsius: 200 }   →  station: String is too short (1 \u003C 2). · celsius: 200 is greater than 60.\n```\n\n## Why this is the whole point\n\n`min: 2` is written once and lands in four places — a `CHECK` in the database, the\nvalidator at the facade, the card that crosses a language boundary, and the browser's own\n`minlength` attribute. Write those by hand and you have four places to keep\nconsistent, in four languages, one of which you do not control.\n\n## What is not shown here\n\nThe form contract — `formFieldsOf` derives `minlength`\u002F`max`\u002F`pattern` from the same\nshape, but it lives inside `@fougere\u002Fnuxt` and the package exposes only its Nuxt\nmodule. Its own doc comment says \"usable by any renderer\"; no renderer outside the\npackage can reach it today.\n\n","README.md",[33,542,543,553,558,568,573,579,583,589,607,612,620,624,631,654,672,716,755,769,779,783,787,794,799,822,826,834,840,846,852,858,863,869,875,880,885,891,896,909,914,922,986,991,995,1011,1017,1022,1035,1040,1045,1051,1057,1062,1067,1090,1095,1108,1124,1129,1133,1139,1144,1149,1157,1162,1184,1190,1203,1209,1214,1222,1227,1271,1287,1293],{"__ignoreMap":31},[36,544,545,549],{"class":38,"line":39},[36,546,548],{"class":547},"sd7zb","#",[36,550,552],{"class":551},"sLf9K"," one-declaration — six lines in, four consumers out\n",[36,554,555],{"class":38,"line":53},[36,556,557],{"emptyLinePlaceholder":108},"\n",[36,559,560,564],{"class":38,"line":83},[36,561,563],{"class":562},"siB6D","```",[36,565,567],{"class":566},"sYNOY","bash\n",[36,569,570],{"class":38,"line":435},[36,571,572],{"class":566},"pnpm -C demos\u002Fone-declaration dev\n",[36,574,576],{"class":38,"line":575},5,[36,577,578],{"class":562},"```\n",[36,580,581],{"class":38,"line":450},[36,582,557],{"emptyLinePlaceholder":108},[36,584,585],{"class":38,"line":441},[36,586,588],{"class":587},"sPEhv","One entity is declared. Four different consumers are then asked what they make of\n",[36,590,591,594,598,602,604],{"class":38,"line":432},[36,592,593],{"class":587},"it. ",[36,595,597],{"class":596},"sHaeK","**",[36,599,601],{"class":600},"s7rwI","Nobody wrote any of the four",[36,603,597],{"class":596},[36,605,606],{"class":587},", and none of them can drift from the others.\n",[36,608,610],{"class":38,"line":609},9,[36,611,557],{"emptyLinePlaceholder":108},[36,613,614,617],{"class":38,"line":438},[36,615,616],{"class":547},"##",[36,618,619],{"class":551}," What you write\n",[36,621,622],{"class":38,"line":465},[36,623,557],{"emptyLinePlaceholder":108},[36,625,626,628],{"class":38,"line":460},[36,627,563],{"class":562},[36,629,630],{"class":566},"ts\n",[36,632,633,637,641,644,647,651],{"class":38,"line":502},[36,634,636],{"class":635},"s76I7","class",[36,638,640],{"class":639},"sBZYL"," Reading",[36,642,643],{"class":635}," extends",[36,645,646],{"class":56}," entity",[36,648,650],{"class":649},"srlTG","(",[36,652,653],{"class":63},"{\n",[36,655,656,660,663,666,669],{"class":38,"line":497},[36,657,659],{"class":658},"sHtqg","  id",[36,661,662],{"class":63},":",[36,664,665],{"class":56}," primary",[36,667,668],{"class":649},"()",[36,670,671],{"class":63},",\n",[36,673,675,678,680,683,685,688,691,693,697,700,703,705,708,711,714],{"class":38,"line":674},15,[36,676,677],{"class":658},"  station",[36,679,662],{"class":63},[36,681,682],{"class":56}," text",[36,684,650],{"class":649},[36,686,687],{"class":63},"{",[36,689,690],{"class":658}," min",[36,692,662],{"class":63},[36,694,696],{"class":695},"s3dPA"," 2",[36,698,699],{"class":63},",",[36,701,702],{"class":658}," max",[36,704,662],{"class":63},[36,706,707],{"class":695}," 40",[36,709,710],{"class":63}," }",[36,712,713],{"class":649},")",[36,715,671],{"class":63},[36,717,718,721,723,726,728,730,732,734,737,740,742,744,746,749,751,753],{"class":38,"line":492},[36,719,720],{"class":658},"  celsius",[36,722,662],{"class":63},[36,724,725],{"class":56}," number",[36,727,650],{"class":649},[36,729,687],{"class":63},[36,731,690],{"class":658},[36,733,662],{"class":63},[36,735,736],{"class":63}," -",[36,738,739],{"class":695},"90",[36,741,699],{"class":63},[36,743,702],{"class":658},[36,745,662],{"class":63},[36,747,748],{"class":695}," 60",[36,750,710],{"class":63},[36,752,713],{"class":649},[36,754,671],{"class":63},[36,756,757,760,762,765,767],{"class":38,"line":455},[36,758,759],{"class":658},"  recordedAt",[36,761,662],{"class":63},[36,763,764],{"class":56}," created",[36,766,668],{"class":649},[36,768,671],{"class":63},[36,770,771,774,776],{"class":38,"line":484},[36,772,773],{"class":63},"}",[36,775,713],{"class":649},[36,777,778],{"class":63}," {}\n",[36,780,781],{"class":38,"line":523},[36,782,578],{"class":562},[36,784,785],{"class":38,"line":507},[36,786,557],{"emptyLinePlaceholder":108},[36,788,789,791],{"class":38,"line":468},[36,790,616],{"class":547},[36,792,793],{"class":551}," What comes out\n",[36,795,797],{"class":38,"line":796},22,[36,798,557],{"emptyLinePlaceholder":108},[36,800,801,803,806,808,811,814,817,819],{"class":38,"line":518},[36,802,597],{"class":596},[36,804,805],{"class":600},"The table",[36,807,597],{"class":596},[36,809,810],{"class":587}," — ",[36,812,813],{"class":63},"`",[36,815,816],{"class":46},"min: 2",[36,818,813],{"class":63},[36,820,821],{"class":587}," became a database constraint, not a runtime check:\n",[36,823,824],{"class":38,"line":447},[36,825,557],{"emptyLinePlaceholder":108},[36,827,829,831],{"class":38,"line":828},25,[36,830,563],{"class":562},[36,832,833],{"class":566},"sql\n",[36,835,837],{"class":38,"line":836},26,[36,838,839],{"class":566},"create table if not exists \"reading\" (\n",[36,841,843],{"class":38,"line":842},27,[36,844,845],{"class":566},"  \"id\" text not null primary key,\n",[36,847,849],{"class":38,"line":848},28,[36,850,851],{"class":566},"  \"station\" text not null,\n",[36,853,855],{"class":38,"line":854},29,[36,856,857],{"class":566},"  \"celsius\" real not null,\n",[36,859,860],{"class":38,"line":479},[36,861,862],{"class":566},"  \"recorded_at\" text not null,\n",[36,864,866],{"class":38,"line":865},31,[36,867,868],{"class":566},"  constraint \"reading_station_check\" check (length(\"station\") >= 2 and length(\"station\") \u003C= 40),\n",[36,870,872],{"class":38,"line":871},32,[36,873,874],{"class":566},"  constraint \"reading_celsius_check\" check (\"celsius\" >= -90 and \"celsius\" \u003C= 60))\n",[36,876,878],{"class":38,"line":877},33,[36,879,578],{"class":562},[36,881,883],{"class":38,"line":882},34,[36,884,557],{"emptyLinePlaceholder":108},[36,886,888],{"class":38,"line":887},35,[36,889,890],{"class":587},"So raw SQL, another process, or a human at a prompt meets the bound too.\n",[36,892,894],{"class":38,"line":893},36,[36,895,557],{"emptyLinePlaceholder":108},[36,897,899,901,904,906],{"class":38,"line":898},37,[36,900,597],{"class":596},[36,902,903],{"class":600},"The identity card",[36,905,597],{"class":596},[36,907,908],{"class":587}," — 488 bytes of plain JSON Schema:\n",[36,910,912],{"class":38,"line":911},38,[36,913,557],{"emptyLinePlaceholder":108},[36,915,917,919],{"class":38,"line":916},39,[36,918,563],{"class":562},[36,920,921],{"class":566},"json\n",[36,923,925,929,932,934,937,939,942,946,948,950,952,955,957,959,961,964,966,968,970,972,974,977,979,981,983],{"class":38,"line":924},40,[36,926,928],{"class":927},"sDDC1","\"",[36,930,931],{"class":46},"station",[36,933,928],{"class":927},[36,935,936],{"class":587},": ",[36,938,687],{"class":63},[36,940,941],{"class":63}," \"",[36,943,945],{"class":944},"s8ClO","type",[36,947,928],{"class":63},[36,949,662],{"class":63},[36,951,941],{"class":927},[36,953,954],{"class":46},"string",[36,956,928],{"class":927},[36,958,699],{"class":63},[36,960,941],{"class":63},[36,962,963],{"class":944},"minLength",[36,965,928],{"class":63},[36,967,662],{"class":63},[36,969,696],{"class":695},[36,971,699],{"class":63},[36,973,941],{"class":63},[36,975,976],{"class":944},"maxLength",[36,978,928],{"class":63},[36,980,662],{"class":63},[36,982,707],{"class":695},[36,984,985],{"class":63}," }\n",[36,987,989],{"class":38,"line":988},41,[36,990,578],{"class":562},[36,992,993],{"class":38,"line":489},[36,994,557],{"emptyLinePlaceholder":108},[36,996,998,1001,1003,1006,1008],{"class":38,"line":997},43,[36,999,1000],{"class":587},"Any validator on earth reads it. This is the document ",[36,1002,813],{"class":63},[36,1004,1005],{"class":46},"demos\u002Frust-frond",[36,1007,813],{"class":63},[36,1009,1010],{"class":587}," publishes:\n",[36,1012,1014],{"class":38,"line":1013},44,[36,1015,1016],{"class":587},"a Frond written in Rust, consumed from TypeScript, with no shared code.\n",[36,1018,1020],{"class":38,"line":1019},45,[36,1021,557],{"emptyLinePlaceholder":108},[36,1023,1025,1027,1030,1032],{"class":38,"line":1024},46,[36,1026,597],{"class":596},[36,1028,1029],{"class":600},"The io projection",[36,1031,597],{"class":596},[36,1033,1034],{"class":587}," — nobody wrote \"a client cannot supply an id\":\n",[36,1036,1038],{"class":38,"line":1037},47,[36,1039,557],{"emptyLinePlaceholder":108},[36,1041,1043],{"class":38,"line":1042},48,[36,1044,578],{"class":562},[36,1046,1048],{"class":38,"line":1047},49,[36,1049,1050],{"class":566},"a client may send    station, celsius\n",[36,1052,1054],{"class":38,"line":1053},50,[36,1055,1056],{"class":566},"a client receives    id, station, celsius, recordedAt\n",[36,1058,1060],{"class":38,"line":1059},51,[36,1061,578],{"class":562},[36,1063,1065],{"class":38,"line":1064},52,[36,1066,557],{"emptyLinePlaceholder":108},[36,1068,1070,1072,1075,1077,1080,1082,1085,1087],{"class":38,"line":1069},53,[36,1071,813],{"class":63},[36,1073,1074],{"class":46},"primary()",[36,1076,813],{"class":63},[36,1078,1079],{"class":587}," and ",[36,1081,813],{"class":63},[36,1083,1084],{"class":46},"created()",[36,1086,813],{"class":63},[36,1088,1089],{"class":587}," state it, and the facade reads them.\n",[36,1091,1093],{"class":38,"line":1092},54,[36,1094,557],{"emptyLinePlaceholder":108},[36,1096,1098,1100,1103,1105],{"class":38,"line":1097},55,[36,1099,597],{"class":596},[36,1101,1102],{"class":600},"The validator",[36,1104,597],{"class":596},[36,1106,1107],{"class":587}," — the same verdict in the browser, at the façade, and across a split\n",[36,1109,1111,1114,1116,1119,1121],{"class":38,"line":1110},56,[36,1112,1113],{"class":587},"(proven in ",[36,1115,813],{"class":63},[36,1117,1118],{"class":46},"packages\u002Fcore\u002Ftests\u002Fvalidator-local-remote.test.ts",[36,1120,813],{"class":63},[36,1122,1123],{"class":587},"):\n",[36,1125,1127],{"class":38,"line":1126},57,[36,1128,557],{"emptyLinePlaceholder":108},[36,1130,1131],{"class":38,"line":444},[36,1132,578],{"class":562},[36,1134,1136],{"class":38,"line":1135},59,[36,1137,1138],{"class":566},"{ station: \"x\", celsius: 200 }   →  station: String is too short (1 \u003C 2). · celsius: 200 is greater than 60.\n",[36,1140,1142],{"class":38,"line":1141},60,[36,1143,578],{"class":562},[36,1145,1147],{"class":38,"line":1146},61,[36,1148,557],{"emptyLinePlaceholder":108},[36,1150,1152,1154],{"class":38,"line":1151},62,[36,1153,616],{"class":547},[36,1155,1156],{"class":551}," Why this is the whole point\n",[36,1158,1160],{"class":38,"line":1159},63,[36,1161,557],{"emptyLinePlaceholder":108},[36,1163,1165,1167,1169,1171,1174,1176,1179,1181],{"class":38,"line":1164},64,[36,1166,813],{"class":63},[36,1168,816],{"class":46},[36,1170,813],{"class":63},[36,1172,1173],{"class":587}," is written once and lands in four places — a ",[36,1175,813],{"class":63},[36,1177,1178],{"class":46},"CHECK",[36,1180,813],{"class":63},[36,1182,1183],{"class":587}," in the database, the\n",[36,1185,1187],{"class":38,"line":1186},65,[36,1188,1189],{"class":587},"validator at the facade, the card that crosses a language boundary, and the browser's own\n",[36,1191,1193,1195,1198,1200],{"class":38,"line":1192},66,[36,1194,813],{"class":63},[36,1196,1197],{"class":46},"minlength",[36,1199,813],{"class":63},[36,1201,1202],{"class":587}," attribute. Write those by hand and you have four places to keep\n",[36,1204,1206],{"class":38,"line":1205},67,[36,1207,1208],{"class":587},"consistent, in four languages, one of which you do not control.\n",[36,1210,1212],{"class":38,"line":1211},68,[36,1213,557],{"emptyLinePlaceholder":108},[36,1215,1217,1219],{"class":38,"line":1216},69,[36,1218,616],{"class":547},[36,1220,1221],{"class":551}," What is not shown here\n",[36,1223,1225],{"class":38,"line":1224},70,[36,1226,557],{"emptyLinePlaceholder":108},[36,1228,1230,1233,1235,1238,1240,1243,1245,1247,1249,1252,1254,1257,1259,1261,1263,1266,1268],{"class":38,"line":1229},71,[36,1231,1232],{"class":587},"The form contract — ",[36,1234,813],{"class":63},[36,1236,1237],{"class":46},"formFieldsOf",[36,1239,813],{"class":63},[36,1241,1242],{"class":587}," derives ",[36,1244,813],{"class":63},[36,1246,1197],{"class":46},[36,1248,813],{"class":63},[36,1250,1251],{"class":587},"\u002F",[36,1253,813],{"class":63},[36,1255,1256],{"class":46},"max",[36,1258,813],{"class":63},[36,1260,1251],{"class":587},[36,1262,813],{"class":63},[36,1264,1265],{"class":46},"pattern",[36,1267,813],{"class":63},[36,1269,1270],{"class":587}," from the same\n",[36,1272,1274,1277,1279,1282,1284],{"class":38,"line":1273},72,[36,1275,1276],{"class":587},"shape, but it lives inside ",[36,1278,813],{"class":63},[36,1280,1281],{"class":46},"@fougere\u002Fnuxt",[36,1283,813],{"class":63},[36,1285,1286],{"class":587}," and the package exposes only its Nuxt\n",[36,1288,1290],{"class":38,"line":1289},73,[36,1291,1292],{"class":587},"module. Its own doc comment says \"usable by any renderer\"; no renderer outside the\n",[36,1294,1296],{"class":38,"line":1295},74,[36,1297,1298],{"class":587},"package can reach it today.\n",[26,1300,1304],{"className":1301,"code":1302,"filename":535,"language":1303,"meta":31,"style":31},"language-ts shiki shiki-themes material-theme-lighter fougere-pastel material-theme-palenight","\u002F**\n * Six lines in. Everything else out.\n *\n * This demo writes ONE entity and then asks four different consumers what they\n * make of it — the SQL dialect, the wire, the io projection, the validator. Nobody\n * wrote any of the four. Run it and read the arrows.\n *\u002F\nimport { Card, entity, primary, text, number, created, Visibility } from '@fougere\u002Fschema';\nimport { toTable, createTableSQL } from '@fougere\u002Fadapter-sql';\n\n\u002F\u002F ─────────────────────────────────────────────────────────────────────────────\n\u002F\u002F WHAT YOU WRITE\n\u002F\u002F ─────────────────────────────────────────────────────────────────────────────\n\nclass Reading extends entity({\n  id: primary(),\n  station: text({ min: 2, max: 40 }),\n  celsius: number({ min: -90, max: 60 }),\n  recordedAt: created(),\n}) {}\n\n\u002F\u002F ─────────────────────────────────────────────────────────────────────────────\n\nconst B = (s: string) => `\\x1b[1m${s}\\x1b[0m`;\nconst D = (s: string) => `\\x1b[2m${s}\\x1b[0m`;\nconst G = (s: string) => `\\x1b[32m${s}\\x1b[0m`;\nconst R = (s: string) => `\\x1b[31m${s}\\x1b[0m`;\n\nfunction section(arrow: string, title: string, who: string) {\n  console.log(`\\n${D('  ' + arrow)}  ${B(title)}\\n     ${D(who)}\\n`);\n}\n\nconsole.log(`\n  ${G('🌿 fougere')}  one declaration\n\n  ${B('class Reading extends entity({')}\n  ${B('  id: primary(),')}\n  ${B(\"  station: text({ min: 2, max: 40 }),\")}\n  ${B('  celsius: number({ min: -90, max: 60 }),')}\n  ${B('  recordedAt: created(),')}\n  ${B('}) {}')}\n`);\n\n\u002F\u002F ── 1. the database ──────────────────────────────────────────────────────────\nsection('→', 'The table', 'schema-sql, sqlite dialect — nobody wrote this DDL');\nconst ddl = createTableSQL(toTable('reading', Reading as never), 'sqlite');\nconsole.log(ddl.replace(\u002F, (constraint)\u002Fg, ',\\n       $1').replace(\u002F\\((\"id\")\u002F, '(\\n       $1').replace(\u002F, (\"station\"|\"celsius\"|\"recorded_at\")\u002Fg, ',\\n       $1'));\nconsole.log(D(`\n     The bounds became CHECK constraints. So raw SQL, another process, or a\n     human at a prompt meets \"at least 2 characters\" too — not just this app.`));\n\n\u002F\u002F ── 2. the wire ──────────────────────────────────────────────────────────────\nsection('→', 'The identity card', 'what crosses to another language — plain JSON Schema');\nconst card = Card.fromSchema(Reading as never, 'reading').descriptor;\nconsole.log(JSON.stringify(card, null, 2).split('\\n').map((l) => '     ' + l).join('\\n'));\nconsole.log(D(`\n     ${JSON.stringify(card).length} bytes, and any validator on earth reads it. This is the\n     document demos\u002Frust-frond publishes — a Frond written in Rust, consumed\n     from TypeScript, with no shared code.`));\n\n\u002F\u002F ── 3. the io projection ─────────────────────────────────────────────────────\nsection('→', 'What a client may send, and what it gets back', 'the boundary axis — nobody listed these');\nconst may = Object.keys(Visibility.of(Reading.getFields() as never).input);\nconst gets = Object.keys(Visibility.of(Reading.getFields() as never).output);\nconsole.log(`     ${D('a client may send   ')} ${may.join(', ')}`);\nconsole.log(`     ${D('a client receives   ')} ${gets.join(', ')}`);\nconsole.log(D(`\n     Nobody wrote \"a client cannot supply an id\". primary() and created() say it,\n     and the facade reads them.`));\n\n\u002F\u002F ── 4. the validator ─────────────────────────────────────────────────────────────\nsection('→', 'The validator', 'the same verdict in the browser, at the façade, and across a split');\nfor (const [label, input] of [\n  ['{ station: \"x\", celsius: 200 }', { station: 'x', celsius: 200 }],\n  ['{ station: \"harbour\", celsius: 12.1 }', { station: 'harbour', celsius: 12.1 }],\n] as const) {\n  const verdict = Reading.validate(input);\n  console.log(`     ${D(label.padEnd(38))} ${verdict.success\n    ? G('accepted')\n    : R(verdict.errors.map((e) => `${e.path}: ${e.message}`).join(' · '))}`);\n}\n\nconsole.log(`\n  ${B('Four consumers, one declaration.')} ${D('None of the four was written by hand, and')}\n  ${D('none can drift from the others — there is nothing to keep in sync.')}\n`);\n\n","ts",[33,1305,1306,1312,1317,1322,1327,1332,1337,1342,1396,1423,1427,1432,1437,1441,1445,1459,1471,1503,1537,1549,1557,1561,1565,1569,1625,1667,1709,1751,1755,1795,1875,1880,1884,1898,1921,1925,1944,1963,1982,2001,2020,2039,2047,2051,2056,2091,2143,2279,2295,2300,2311,2315,2320,2353,2396,2490,2506,2532,2537,2548,2552,2557,2591,2646,2694,2751,2807,2823,2828,2839,2843,2848,2881,2910,2954,2996,3010,3036,3081,3101,3186,3191,3196,3209,3246,3266],{"__ignoreMap":31},[36,1307,1308],{"class":38,"line":39},[36,1309,1311],{"class":1310},"skXKP","\u002F**\n",[36,1313,1314],{"class":38,"line":53},[36,1315,1316],{"class":1310}," * Six lines in. Everything else out.\n",[36,1318,1319],{"class":38,"line":83},[36,1320,1321],{"class":1310}," *\n",[36,1323,1324],{"class":38,"line":435},[36,1325,1326],{"class":1310}," * This demo writes ONE entity and then asks four different consumers what they\n",[36,1328,1329],{"class":38,"line":575},[36,1330,1331],{"class":1310}," * make of it — the SQL dialect, the wire, the io projection, the validator. Nobody\n",[36,1333,1334],{"class":38,"line":450},[36,1335,1336],{"class":1310}," * wrote any of the four. Run it and read the arrows.\n",[36,1338,1339],{"class":38,"line":441},[36,1340,1341],{"class":1310}," *\u002F\n",[36,1343,1344,1348,1351,1354,1356,1358,1360,1362,1364,1366,1368,1370,1372,1374,1376,1379,1381,1384,1387,1390,1393],{"class":38,"line":432},[36,1345,1347],{"class":1346},"sK6XW","import",[36,1349,1350],{"class":63}," {",[36,1352,1353],{"class":587}," Card",[36,1355,699],{"class":63},[36,1357,646],{"class":587},[36,1359,699],{"class":63},[36,1361,665],{"class":587},[36,1363,699],{"class":63},[36,1365,682],{"class":587},[36,1367,699],{"class":63},[36,1369,725],{"class":587},[36,1371,699],{"class":63},[36,1373,764],{"class":587},[36,1375,699],{"class":63},[36,1377,1378],{"class":587}," Visibility",[36,1380,710],{"class":63},[36,1382,1383],{"class":1346}," from",[36,1385,1386],{"class":927}," '",[36,1388,1389],{"class":46},"@fougere\u002Fschema",[36,1391,1392],{"class":927},"'",[36,1394,1395],{"class":63},";\n",[36,1397,1398,1400,1402,1405,1407,1410,1412,1414,1416,1419,1421],{"class":38,"line":609},[36,1399,1347],{"class":1346},[36,1401,1350],{"class":63},[36,1403,1404],{"class":587}," toTable",[36,1406,699],{"class":63},[36,1408,1409],{"class":587}," createTableSQL",[36,1411,710],{"class":63},[36,1413,1383],{"class":1346},[36,1415,1386],{"class":927},[36,1417,1418],{"class":46},"@fougere\u002Fadapter-sql",[36,1420,1392],{"class":927},[36,1422,1395],{"class":63},[36,1424,1425],{"class":38,"line":438},[36,1426,557],{"emptyLinePlaceholder":108},[36,1428,1429],{"class":38,"line":465},[36,1430,1431],{"class":1310},"\u002F\u002F ─────────────────────────────────────────────────────────────────────────────\n",[36,1433,1434],{"class":38,"line":460},[36,1435,1436],{"class":1310},"\u002F\u002F WHAT YOU WRITE\n",[36,1438,1439],{"class":38,"line":502},[36,1440,1431],{"class":1310},[36,1442,1443],{"class":38,"line":497},[36,1444,557],{"emptyLinePlaceholder":108},[36,1446,1447,1449,1451,1453,1455,1457],{"class":38,"line":674},[36,1448,636],{"class":635},[36,1450,640],{"class":639},[36,1452,643],{"class":635},[36,1454,646],{"class":56},[36,1456,650],{"class":649},[36,1458,653],{"class":63},[36,1460,1461,1463,1465,1467,1469],{"class":38,"line":492},[36,1462,659],{"class":658},[36,1464,662],{"class":63},[36,1466,665],{"class":56},[36,1468,668],{"class":649},[36,1470,671],{"class":63},[36,1472,1473,1475,1477,1479,1481,1483,1485,1487,1489,1491,1493,1495,1497,1499,1501],{"class":38,"line":455},[36,1474,677],{"class":658},[36,1476,662],{"class":63},[36,1478,682],{"class":56},[36,1480,650],{"class":649},[36,1482,687],{"class":63},[36,1484,690],{"class":658},[36,1486,662],{"class":63},[36,1488,696],{"class":695},[36,1490,699],{"class":63},[36,1492,702],{"class":658},[36,1494,662],{"class":63},[36,1496,707],{"class":695},[36,1498,710],{"class":63},[36,1500,713],{"class":649},[36,1502,671],{"class":63},[36,1504,1505,1507,1509,1511,1513,1515,1517,1519,1521,1523,1525,1527,1529,1531,1533,1535],{"class":38,"line":484},[36,1506,720],{"class":658},[36,1508,662],{"class":63},[36,1510,725],{"class":56},[36,1512,650],{"class":649},[36,1514,687],{"class":63},[36,1516,690],{"class":658},[36,1518,662],{"class":63},[36,1520,736],{"class":63},[36,1522,739],{"class":695},[36,1524,699],{"class":63},[36,1526,702],{"class":658},[36,1528,662],{"class":63},[36,1530,748],{"class":695},[36,1532,710],{"class":63},[36,1534,713],{"class":649},[36,1536,671],{"class":63},[36,1538,1539,1541,1543,1545,1547],{"class":38,"line":523},[36,1540,759],{"class":658},[36,1542,662],{"class":63},[36,1544,764],{"class":56},[36,1546,668],{"class":649},[36,1548,671],{"class":63},[36,1550,1551,1553,1555],{"class":38,"line":507},[36,1552,773],{"class":63},[36,1554,713],{"class":649},[36,1556,778],{"class":63},[36,1558,1559],{"class":38,"line":468},[36,1560,557],{"emptyLinePlaceholder":108},[36,1562,1563],{"class":38,"line":796},[36,1564,1431],{"class":1310},[36,1566,1567],{"class":38,"line":518},[36,1568,557],{"emptyLinePlaceholder":108},[36,1570,1571,1574,1578,1581,1584,1588,1590,1593,1595,1599,1602,1606,1609,1612,1614,1616,1618,1621,1623],{"class":38,"line":447},[36,1572,1573],{"class":635},"const",[36,1575,1577],{"class":1576},"slP7D"," B",[36,1579,1580],{"class":63}," =",[36,1582,1583],{"class":63}," (",[36,1585,1587],{"class":1586},"shDUQ","s",[36,1589,662],{"class":63},[36,1591,1592],{"class":639}," string",[36,1594,713],{"class":63},[36,1596,1598],{"class":1597},"scTuO"," =>",[36,1600,1601],{"class":927}," `",[36,1603,1605],{"class":1604},"sfnqo","\\x1b",[36,1607,1608],{"class":46},"[1m",[36,1610,1611],{"class":63},"${",[36,1613,1587],{"class":587},[36,1615,773],{"class":63},[36,1617,1605],{"class":1604},[36,1619,1620],{"class":46},"[0m",[36,1622,813],{"class":927},[36,1624,1395],{"class":63},[36,1626,1627,1629,1632,1634,1636,1638,1640,1642,1644,1646,1648,1650,1653,1655,1657,1659,1661,1663,1665],{"class":38,"line":828},[36,1628,1573],{"class":635},[36,1630,1631],{"class":1576}," D",[36,1633,1580],{"class":63},[36,1635,1583],{"class":63},[36,1637,1587],{"class":1586},[36,1639,662],{"class":63},[36,1641,1592],{"class":639},[36,1643,713],{"class":63},[36,1645,1598],{"class":1597},[36,1647,1601],{"class":927},[36,1649,1605],{"class":1604},[36,1651,1652],{"class":46},"[2m",[36,1654,1611],{"class":63},[36,1656,1587],{"class":587},[36,1658,773],{"class":63},[36,1660,1605],{"class":1604},[36,1662,1620],{"class":46},[36,1664,813],{"class":927},[36,1666,1395],{"class":63},[36,1668,1669,1671,1674,1676,1678,1680,1682,1684,1686,1688,1690,1692,1695,1697,1699,1701,1703,1705,1707],{"class":38,"line":836},[36,1670,1573],{"class":635},[36,1672,1673],{"class":1576}," G",[36,1675,1580],{"class":63},[36,1677,1583],{"class":63},[36,1679,1587],{"class":1586},[36,1681,662],{"class":63},[36,1683,1592],{"class":639},[36,1685,713],{"class":63},[36,1687,1598],{"class":1597},[36,1689,1601],{"class":927},[36,1691,1605],{"class":1604},[36,1693,1694],{"class":46},"[32m",[36,1696,1611],{"class":63},[36,1698,1587],{"class":587},[36,1700,773],{"class":63},[36,1702,1605],{"class":1604},[36,1704,1620],{"class":46},[36,1706,813],{"class":927},[36,1708,1395],{"class":63},[36,1710,1711,1713,1716,1718,1720,1722,1724,1726,1728,1730,1732,1734,1737,1739,1741,1743,1745,1747,1749],{"class":38,"line":842},[36,1712,1573],{"class":635},[36,1714,1715],{"class":1576}," R",[36,1717,1580],{"class":63},[36,1719,1583],{"class":63},[36,1721,1587],{"class":1586},[36,1723,662],{"class":63},[36,1725,1592],{"class":639},[36,1727,713],{"class":63},[36,1729,1598],{"class":1597},[36,1731,1601],{"class":927},[36,1733,1605],{"class":1604},[36,1735,1736],{"class":46},"[31m",[36,1738,1611],{"class":63},[36,1740,1587],{"class":587},[36,1742,773],{"class":63},[36,1744,1605],{"class":1604},[36,1746,1620],{"class":46},[36,1748,813],{"class":927},[36,1750,1395],{"class":63},[36,1752,1753],{"class":38,"line":848},[36,1754,557],{"emptyLinePlaceholder":108},[36,1756,1757,1760,1763,1765,1768,1770,1772,1774,1777,1779,1781,1783,1786,1788,1790,1792],{"class":38,"line":854},[36,1758,1759],{"class":635},"function",[36,1761,1762],{"class":56}," section",[36,1764,650],{"class":63},[36,1766,1767],{"class":1586},"arrow",[36,1769,662],{"class":63},[36,1771,1592],{"class":639},[36,1773,699],{"class":63},[36,1775,1776],{"class":1586}," title",[36,1778,662],{"class":63},[36,1780,1592],{"class":639},[36,1782,699],{"class":63},[36,1784,1785],{"class":1586}," who",[36,1787,662],{"class":63},[36,1789,1592],{"class":639},[36,1791,713],{"class":63},[36,1793,1794],{"class":63}," {\n",[36,1796,1797,1800,1803,1806,1809,1811,1814,1816,1819,1821,1823,1826,1829,1832,1834,1836,1839,1842,1844,1847,1849,1851,1853,1856,1858,1860,1863,1865,1867,1869,1871,1873],{"class":38,"line":479},[36,1798,1799],{"class":587},"  console",[36,1801,1802],{"class":63},".",[36,1804,1805],{"class":56},"log",[36,1807,650],{"class":1808},"spAFX",[36,1810,813],{"class":927},[36,1812,1813],{"class":1604},"\\n",[36,1815,1611],{"class":63},[36,1817,1818],{"class":56},"D",[36,1820,650],{"class":649},[36,1822,1392],{"class":927},[36,1824,1825],{"class":927},"  '",[36,1827,1828],{"class":63}," +",[36,1830,1831],{"class":587}," arrow",[36,1833,713],{"class":649},[36,1835,773],{"class":63},[36,1837,1838],{"class":63},"  ${",[36,1840,1841],{"class":56},"B",[36,1843,650],{"class":649},[36,1845,1846],{"class":587},"title",[36,1848,713],{"class":649},[36,1850,773],{"class":63},[36,1852,1813],{"class":1604},[36,1854,1855],{"class":63},"     ${",[36,1857,1818],{"class":56},[36,1859,650],{"class":649},[36,1861,1862],{"class":587},"who",[36,1864,713],{"class":649},[36,1866,773],{"class":63},[36,1868,1813],{"class":1604},[36,1870,813],{"class":927},[36,1872,713],{"class":1808},[36,1874,1395],{"class":63},[36,1876,1877],{"class":38,"line":865},[36,1878,1879],{"class":63},"}\n",[36,1881,1882],{"class":38,"line":871},[36,1883,557],{"emptyLinePlaceholder":108},[36,1885,1886,1889,1891,1893,1895],{"class":38,"line":877},[36,1887,1888],{"class":587},"console",[36,1890,1802],{"class":63},[36,1892,1805],{"class":56},[36,1894,650],{"class":649},[36,1896,1897],{"class":927},"`\n",[36,1899,1900,1902,1905,1907,1909,1912,1914,1916,1918],{"class":38,"line":882},[36,1901,1838],{"class":63},[36,1903,1904],{"class":56},"G",[36,1906,650],{"class":649},[36,1908,1392],{"class":927},[36,1910,1911],{"class":46},"🌿 fougere",[36,1913,1392],{"class":927},[36,1915,713],{"class":649},[36,1917,773],{"class":63},[36,1919,1920],{"class":46},"  one declaration\n",[36,1922,1923],{"class":38,"line":887},[36,1924,557],{"emptyLinePlaceholder":108},[36,1926,1927,1929,1931,1933,1935,1938,1940,1942],{"class":38,"line":893},[36,1928,1838],{"class":63},[36,1930,1841],{"class":56},[36,1932,650],{"class":649},[36,1934,1392],{"class":927},[36,1936,1937],{"class":46},"class Reading extends entity({",[36,1939,1392],{"class":927},[36,1941,713],{"class":649},[36,1943,1879],{"class":63},[36,1945,1946,1948,1950,1952,1954,1957,1959,1961],{"class":38,"line":898},[36,1947,1838],{"class":63},[36,1949,1841],{"class":56},[36,1951,650],{"class":649},[36,1953,1392],{"class":927},[36,1955,1956],{"class":46},"  id: primary(),",[36,1958,1392],{"class":927},[36,1960,713],{"class":649},[36,1962,1879],{"class":63},[36,1964,1965,1967,1969,1971,1973,1976,1978,1980],{"class":38,"line":911},[36,1966,1838],{"class":63},[36,1968,1841],{"class":56},[36,1970,650],{"class":649},[36,1972,928],{"class":927},[36,1974,1975],{"class":46},"  station: text({ min: 2, max: 40 }),",[36,1977,928],{"class":927},[36,1979,713],{"class":649},[36,1981,1879],{"class":63},[36,1983,1984,1986,1988,1990,1992,1995,1997,1999],{"class":38,"line":916},[36,1985,1838],{"class":63},[36,1987,1841],{"class":56},[36,1989,650],{"class":649},[36,1991,1392],{"class":927},[36,1993,1994],{"class":46},"  celsius: number({ min: -90, max: 60 }),",[36,1996,1392],{"class":927},[36,1998,713],{"class":649},[36,2000,1879],{"class":63},[36,2002,2003,2005,2007,2009,2011,2014,2016,2018],{"class":38,"line":924},[36,2004,1838],{"class":63},[36,2006,1841],{"class":56},[36,2008,650],{"class":649},[36,2010,1392],{"class":927},[36,2012,2013],{"class":46},"  recordedAt: created(),",[36,2015,1392],{"class":927},[36,2017,713],{"class":649},[36,2019,1879],{"class":63},[36,2021,2022,2024,2026,2028,2030,2033,2035,2037],{"class":38,"line":988},[36,2023,1838],{"class":63},[36,2025,1841],{"class":56},[36,2027,650],{"class":649},[36,2029,1392],{"class":927},[36,2031,2032],{"class":46},"}) {}",[36,2034,1392],{"class":927},[36,2036,713],{"class":649},[36,2038,1879],{"class":63},[36,2040,2041,2043,2045],{"class":38,"line":489},[36,2042,813],{"class":927},[36,2044,713],{"class":649},[36,2046,1395],{"class":63},[36,2048,2049],{"class":38,"line":997},[36,2050,557],{"emptyLinePlaceholder":108},[36,2052,2053],{"class":38,"line":1013},[36,2054,2055],{"class":1310},"\u002F\u002F ── 1. the database ──────────────────────────────────────────────────────────\n",[36,2057,2058,2061,2063,2065,2068,2070,2072,2074,2076,2078,2080,2082,2085,2087,2089],{"class":38,"line":1019},[36,2059,2060],{"class":56},"section",[36,2062,650],{"class":649},[36,2064,1392],{"class":927},[36,2066,2067],{"class":46},"→",[36,2069,1392],{"class":927},[36,2071,699],{"class":63},[36,2073,1386],{"class":927},[36,2075,805],{"class":46},[36,2077,1392],{"class":927},[36,2079,699],{"class":63},[36,2081,1386],{"class":927},[36,2083,2084],{"class":46},"schema-sql, sqlite dialect — nobody wrote this DDL",[36,2086,1392],{"class":927},[36,2088,713],{"class":649},[36,2090,1395],{"class":63},[36,2092,2093,2095,2098,2101,2103,2105,2108,2110,2112,2115,2117,2119,2122,2125,2128,2130,2132,2134,2137,2139,2141],{"class":38,"line":1024},[36,2094,1573],{"class":635},[36,2096,2097],{"class":587}," ddl ",[36,2099,2100],{"class":63},"=",[36,2102,1409],{"class":56},[36,2104,650],{"class":649},[36,2106,2107],{"class":56},"toTable",[36,2109,650],{"class":649},[36,2111,1392],{"class":927},[36,2113,2114],{"class":46},"reading",[36,2116,1392],{"class":927},[36,2118,699],{"class":63},[36,2120,2121],{"class":587}," Reading ",[36,2123,2124],{"class":1346},"as",[36,2126,2127],{"class":639}," never",[36,2129,713],{"class":649},[36,2131,699],{"class":63},[36,2133,1386],{"class":927},[36,2135,2136],{"class":46},"sqlite",[36,2138,1392],{"class":927},[36,2140,713],{"class":649},[36,2142,1395],{"class":63},[36,2144,2145,2147,2149,2151,2153,2156,2158,2161,2163,2165,2168,2170,2173,2175,2177,2181,2183,2185,2187,2189,2192,2194,2196,2198,2200,2202,2204,2207,2209,2212,2214,2216,2218,2220,2222,2224,2226,2228,2230,2232,2234,2236,2238,2240,2242,2245,2248,2251,2253,2256,2258,2260,2262,2264,2266,2268,2270,2272,2274,2277],{"class":38,"line":1037},[36,2146,1888],{"class":587},[36,2148,1802],{"class":63},[36,2150,1805],{"class":56},[36,2152,650],{"class":649},[36,2154,2155],{"class":587},"ddl",[36,2157,1802],{"class":63},[36,2159,2160],{"class":56},"replace",[36,2162,650],{"class":649},[36,2164,1251],{"class":927},[36,2166,2167],{"class":46},", ",[36,2169,650],{"class":63},[36,2171,2172],{"class":46},"constraint",[36,2174,713],{"class":63},[36,2176,1251],{"class":927},[36,2178,2180],{"class":2179},"sWPpw","g",[36,2182,699],{"class":63},[36,2184,1386],{"class":927},[36,2186,699],{"class":46},[36,2188,1813],{"class":1604},[36,2190,2191],{"class":46},"       $1",[36,2193,1392],{"class":927},[36,2195,713],{"class":649},[36,2197,1802],{"class":63},[36,2199,2160],{"class":56},[36,2201,650],{"class":649},[36,2203,1251],{"class":927},[36,2205,2206],{"class":1604},"\\(",[36,2208,650],{"class":63},[36,2210,2211],{"class":46},"\"id\"",[36,2213,713],{"class":63},[36,2215,1251],{"class":927},[36,2217,699],{"class":63},[36,2219,1386],{"class":927},[36,2221,650],{"class":46},[36,2223,1813],{"class":1604},[36,2225,2191],{"class":46},[36,2227,1392],{"class":927},[36,2229,713],{"class":649},[36,2231,1802],{"class":63},[36,2233,2160],{"class":56},[36,2235,650],{"class":649},[36,2237,1251],{"class":927},[36,2239,2167],{"class":46},[36,2241,650],{"class":63},[36,2243,2244],{"class":46},"\"station\"",[36,2246,2247],{"class":63},"|",[36,2249,2250],{"class":46},"\"celsius\"",[36,2252,2247],{"class":63},[36,2254,2255],{"class":46},"\"recorded_at\"",[36,2257,713],{"class":63},[36,2259,1251],{"class":927},[36,2261,2180],{"class":2179},[36,2263,699],{"class":63},[36,2265,1386],{"class":927},[36,2267,699],{"class":46},[36,2269,1813],{"class":1604},[36,2271,2191],{"class":46},[36,2273,1392],{"class":927},[36,2275,2276],{"class":649},"))",[36,2278,1395],{"class":63},[36,2280,2281,2283,2285,2287,2289,2291,2293],{"class":38,"line":1042},[36,2282,1888],{"class":587},[36,2284,1802],{"class":63},[36,2286,1805],{"class":56},[36,2288,650],{"class":649},[36,2290,1818],{"class":56},[36,2292,650],{"class":649},[36,2294,1897],{"class":927},[36,2296,2297],{"class":38,"line":1047},[36,2298,2299],{"class":46},"     The bounds became CHECK constraints. So raw SQL, another process, or a\n",[36,2301,2302,2305,2307,2309],{"class":38,"line":1053},[36,2303,2304],{"class":46},"     human at a prompt meets \"at least 2 characters\" too — not just this app.",[36,2306,813],{"class":927},[36,2308,2276],{"class":649},[36,2310,1395],{"class":63},[36,2312,2313],{"class":38,"line":1059},[36,2314,557],{"emptyLinePlaceholder":108},[36,2316,2317],{"class":38,"line":1064},[36,2318,2319],{"class":1310},"\u002F\u002F ── 2. the wire ──────────────────────────────────────────────────────────────\n",[36,2321,2322,2324,2326,2328,2330,2332,2334,2336,2338,2340,2342,2344,2347,2349,2351],{"class":38,"line":1069},[36,2323,2060],{"class":56},[36,2325,650],{"class":649},[36,2327,1392],{"class":927},[36,2329,2067],{"class":46},[36,2331,1392],{"class":927},[36,2333,699],{"class":63},[36,2335,1386],{"class":927},[36,2337,903],{"class":46},[36,2339,1392],{"class":927},[36,2341,699],{"class":63},[36,2343,1386],{"class":927},[36,2345,2346],{"class":46},"what crosses to another language — plain JSON Schema",[36,2348,1392],{"class":927},[36,2350,713],{"class":649},[36,2352,1395],{"class":63},[36,2354,2355,2357,2360,2362,2364,2366,2369,2371,2374,2376,2378,2380,2382,2384,2386,2388,2390,2394],{"class":38,"line":1092},[36,2356,1573],{"class":635},[36,2358,2359],{"class":587}," card ",[36,2361,2100],{"class":63},[36,2363,1353],{"class":587},[36,2365,1802],{"class":63},[36,2367,2368],{"class":56},"fromSchema",[36,2370,650],{"class":649},[36,2372,2373],{"class":587},"Reading ",[36,2375,2124],{"class":1346},[36,2377,2127],{"class":639},[36,2379,699],{"class":63},[36,2381,1386],{"class":927},[36,2383,2114],{"class":46},[36,2385,1392],{"class":927},[36,2387,713],{"class":649},[36,2389,1802],{"class":63},[36,2391,2393],{"class":2392},"sy9f4","descriptor",[36,2395,1395],{"class":63},[36,2397,2398,2400,2402,2404,2406,2409,2411,2414,2416,2419,2421,2424,2426,2428,2430,2432,2435,2437,2439,2441,2443,2445,2447,2450,2452,2454,2457,2459,2461,2463,2466,2468,2471,2473,2475,2478,2480,2482,2484,2486,2488],{"class":38,"line":1097},[36,2399,1888],{"class":587},[36,2401,1802],{"class":63},[36,2403,1805],{"class":56},[36,2405,650],{"class":649},[36,2407,2408],{"class":587},"JSON",[36,2410,1802],{"class":63},[36,2412,2413],{"class":56},"stringify",[36,2415,650],{"class":649},[36,2417,2418],{"class":587},"card",[36,2420,699],{"class":63},[36,2422,2423],{"class":927}," null",[36,2425,699],{"class":63},[36,2427,696],{"class":695},[36,2429,713],{"class":649},[36,2431,1802],{"class":63},[36,2433,2434],{"class":56},"split",[36,2436,650],{"class":649},[36,2438,1392],{"class":927},[36,2440,1813],{"class":1604},[36,2442,1392],{"class":927},[36,2444,713],{"class":649},[36,2446,1802],{"class":63},[36,2448,2449],{"class":56},"map",[36,2451,650],{"class":649},[36,2453,650],{"class":63},[36,2455,2456],{"class":1586},"l",[36,2458,713],{"class":63},[36,2460,1598],{"class":1597},[36,2462,1386],{"class":927},[36,2464,2465],{"class":927},"     '",[36,2467,1828],{"class":63},[36,2469,2470],{"class":587}," l",[36,2472,713],{"class":649},[36,2474,1802],{"class":63},[36,2476,2477],{"class":56},"join",[36,2479,650],{"class":649},[36,2481,1392],{"class":927},[36,2483,1813],{"class":1604},[36,2485,1392],{"class":927},[36,2487,2276],{"class":649},[36,2489,1395],{"class":63},[36,2491,2492,2494,2496,2498,2500,2502,2504],{"class":38,"line":1110},[36,2493,1888],{"class":587},[36,2495,1802],{"class":63},[36,2497,1805],{"class":56},[36,2499,650],{"class":649},[36,2501,1818],{"class":56},[36,2503,650],{"class":649},[36,2505,1897],{"class":927},[36,2507,2508,2510,2512,2514,2516,2518,2520,2522,2524,2527,2529],{"class":38,"line":1126},[36,2509,1855],{"class":63},[36,2511,2408],{"class":587},[36,2513,1802],{"class":63},[36,2515,2413],{"class":56},[36,2517,650],{"class":649},[36,2519,2418],{"class":587},[36,2521,713],{"class":649},[36,2523,1802],{"class":63},[36,2525,2526],{"class":2392},"length",[36,2528,773],{"class":63},[36,2530,2531],{"class":46}," bytes, and any validator on earth reads it. This is the\n",[36,2533,2534],{"class":38,"line":444},[36,2535,2536],{"class":46},"     document demos\u002Frust-frond publishes — a Frond written in Rust, consumed\n",[36,2538,2539,2542,2544,2546],{"class":38,"line":1135},[36,2540,2541],{"class":46},"     from TypeScript, with no shared code.",[36,2543,813],{"class":927},[36,2545,2276],{"class":649},[36,2547,1395],{"class":63},[36,2549,2550],{"class":38,"line":1141},[36,2551,557],{"emptyLinePlaceholder":108},[36,2553,2554],{"class":38,"line":1146},[36,2555,2556],{"class":1310},"\u002F\u002F ── 3. the io projection ─────────────────────────────────────────────────────\n",[36,2558,2559,2561,2563,2565,2567,2569,2571,2573,2576,2578,2580,2582,2585,2587,2589],{"class":38,"line":1151},[36,2560,2060],{"class":56},[36,2562,650],{"class":649},[36,2564,1392],{"class":927},[36,2566,2067],{"class":46},[36,2568,1392],{"class":927},[36,2570,699],{"class":63},[36,2572,1386],{"class":927},[36,2574,2575],{"class":46},"What a client may send, and what it gets back",[36,2577,1392],{"class":927},[36,2579,699],{"class":63},[36,2581,1386],{"class":927},[36,2583,2584],{"class":46},"the boundary axis — nobody listed these",[36,2586,1392],{"class":927},[36,2588,713],{"class":649},[36,2590,1395],{"class":63},[36,2592,2593,2595,2598,2600,2603,2605,2608,2610,2613,2615,2618,2620,2623,2625,2628,2630,2633,2635,2637,2639,2642,2644],{"class":38,"line":1159},[36,2594,1573],{"class":635},[36,2596,2597],{"class":587}," may ",[36,2599,2100],{"class":63},[36,2601,2602],{"class":587}," Object",[36,2604,1802],{"class":63},[36,2606,2607],{"class":56},"keys",[36,2609,650],{"class":649},[36,2611,2612],{"class":587},"Visibility",[36,2614,1802],{"class":63},[36,2616,2617],{"class":56},"of",[36,2619,650],{"class":649},[36,2621,2622],{"class":587},"Reading",[36,2624,1802],{"class":63},[36,2626,2627],{"class":56},"getFields",[36,2629,668],{"class":649},[36,2631,2632],{"class":1346}," as",[36,2634,2127],{"class":639},[36,2636,713],{"class":649},[36,2638,1802],{"class":63},[36,2640,2641],{"class":2392},"input",[36,2643,713],{"class":649},[36,2645,1395],{"class":63},[36,2647,2648,2650,2653,2655,2657,2659,2661,2663,2665,2667,2669,2671,2673,2675,2677,2679,2681,2683,2685,2687,2690,2692],{"class":38,"line":1164},[36,2649,1573],{"class":635},[36,2651,2652],{"class":587}," gets ",[36,2654,2100],{"class":63},[36,2656,2602],{"class":587},[36,2658,1802],{"class":63},[36,2660,2607],{"class":56},[36,2662,650],{"class":649},[36,2664,2612],{"class":587},[36,2666,1802],{"class":63},[36,2668,2617],{"class":56},[36,2670,650],{"class":649},[36,2672,2622],{"class":587},[36,2674,1802],{"class":63},[36,2676,2627],{"class":56},[36,2678,668],{"class":649},[36,2680,2632],{"class":1346},[36,2682,2127],{"class":639},[36,2684,713],{"class":649},[36,2686,1802],{"class":63},[36,2688,2689],{"class":2392},"output",[36,2691,713],{"class":649},[36,2693,1395],{"class":63},[36,2695,2696,2698,2700,2702,2704,2706,2708,2710,2712,2714,2717,2719,2721,2723,2726,2729,2731,2733,2735,2737,2739,2741,2743,2745,2747,2749],{"class":38,"line":1186},[36,2697,1888],{"class":587},[36,2699,1802],{"class":63},[36,2701,1805],{"class":56},[36,2703,650],{"class":649},[36,2705,813],{"class":927},[36,2707,1855],{"class":63},[36,2709,1818],{"class":56},[36,2711,650],{"class":649},[36,2713,1392],{"class":927},[36,2715,2716],{"class":46},"a client may send   ",[36,2718,1392],{"class":927},[36,2720,713],{"class":649},[36,2722,773],{"class":63},[36,2724,2725],{"class":63}," ${",[36,2727,2728],{"class":587},"may",[36,2730,1802],{"class":63},[36,2732,2477],{"class":56},[36,2734,650],{"class":649},[36,2736,1392],{"class":927},[36,2738,2167],{"class":46},[36,2740,1392],{"class":927},[36,2742,713],{"class":649},[36,2744,773],{"class":63},[36,2746,813],{"class":927},[36,2748,713],{"class":649},[36,2750,1395],{"class":63},[36,2752,2753,2755,2757,2759,2761,2763,2765,2767,2769,2771,2774,2776,2778,2780,2782,2785,2787,2789,2791,2793,2795,2797,2799,2801,2803,2805],{"class":38,"line":1192},[36,2754,1888],{"class":587},[36,2756,1802],{"class":63},[36,2758,1805],{"class":56},[36,2760,650],{"class":649},[36,2762,813],{"class":927},[36,2764,1855],{"class":63},[36,2766,1818],{"class":56},[36,2768,650],{"class":649},[36,2770,1392],{"class":927},[36,2772,2773],{"class":46},"a client receives   ",[36,2775,1392],{"class":927},[36,2777,713],{"class":649},[36,2779,773],{"class":63},[36,2781,2725],{"class":63},[36,2783,2784],{"class":587},"gets",[36,2786,1802],{"class":63},[36,2788,2477],{"class":56},[36,2790,650],{"class":649},[36,2792,1392],{"class":927},[36,2794,2167],{"class":46},[36,2796,1392],{"class":927},[36,2798,713],{"class":649},[36,2800,773],{"class":63},[36,2802,813],{"class":927},[36,2804,713],{"class":649},[36,2806,1395],{"class":63},[36,2808,2809,2811,2813,2815,2817,2819,2821],{"class":38,"line":1205},[36,2810,1888],{"class":587},[36,2812,1802],{"class":63},[36,2814,1805],{"class":56},[36,2816,650],{"class":649},[36,2818,1818],{"class":56},[36,2820,650],{"class":649},[36,2822,1897],{"class":927},[36,2824,2825],{"class":38,"line":1211},[36,2826,2827],{"class":46},"     Nobody wrote \"a client cannot supply an id\". primary() and created() say it,\n",[36,2829,2830,2833,2835,2837],{"class":38,"line":1216},[36,2831,2832],{"class":46},"     and the facade reads them.",[36,2834,813],{"class":927},[36,2836,2276],{"class":649},[36,2838,1395],{"class":63},[36,2840,2841],{"class":38,"line":1224},[36,2842,557],{"emptyLinePlaceholder":108},[36,2844,2845],{"class":38,"line":1229},[36,2846,2847],{"class":1310},"\u002F\u002F ── 4. the validator ─────────────────────────────────────────────────────────────\n",[36,2849,2850,2852,2854,2856,2858,2860,2862,2864,2866,2868,2870,2872,2875,2877,2879],{"class":38,"line":1273},[36,2851,2060],{"class":56},[36,2853,650],{"class":649},[36,2855,1392],{"class":927},[36,2857,2067],{"class":46},[36,2859,1392],{"class":927},[36,2861,699],{"class":63},[36,2863,1386],{"class":927},[36,2865,1102],{"class":46},[36,2867,1392],{"class":927},[36,2869,699],{"class":63},[36,2871,1386],{"class":927},[36,2873,2874],{"class":46},"the same verdict in the browser, at the façade, and across a split",[36,2876,1392],{"class":927},[36,2878,713],{"class":649},[36,2880,1395],{"class":63},[36,2882,2883,2886,2888,2890,2893,2896,2898,2901,2904,2907],{"class":38,"line":1289},[36,2884,2885],{"class":1346},"for",[36,2887,1583],{"class":649},[36,2889,1573],{"class":635},[36,2891,2892],{"class":63}," [",[36,2894,2895],{"class":587},"label",[36,2897,699],{"class":63},[36,2899,2900],{"class":587}," input",[36,2902,2903],{"class":63},"]",[36,2905,2906],{"class":63}," of",[36,2908,2909],{"class":649}," [\n",[36,2911,2912,2915,2917,2920,2922,2924,2926,2929,2931,2933,2936,2938,2940,2943,2945,2948,2950,2952],{"class":38,"line":1295},[36,2913,2914],{"class":649},"  [",[36,2916,1392],{"class":927},[36,2918,2919],{"class":46},"{ station: \"x\", celsius: 200 }",[36,2921,1392],{"class":927},[36,2923,699],{"class":63},[36,2925,1350],{"class":63},[36,2927,2928],{"class":658}," station",[36,2930,662],{"class":63},[36,2932,1386],{"class":927},[36,2934,2935],{"class":46},"x",[36,2937,1392],{"class":927},[36,2939,699],{"class":63},[36,2941,2942],{"class":658}," celsius",[36,2944,662],{"class":63},[36,2946,2947],{"class":695}," 200",[36,2949,710],{"class":63},[36,2951,2903],{"class":649},[36,2953,671],{"class":63},[36,2955,2957,2959,2961,2964,2966,2968,2970,2972,2974,2976,2979,2981,2983,2985,2987,2990,2992,2994],{"class":38,"line":2956},75,[36,2958,2914],{"class":649},[36,2960,1392],{"class":927},[36,2962,2963],{"class":46},"{ station: \"harbour\", celsius: 12.1 }",[36,2965,1392],{"class":927},[36,2967,699],{"class":63},[36,2969,1350],{"class":63},[36,2971,2928],{"class":658},[36,2973,662],{"class":63},[36,2975,1386],{"class":927},[36,2977,2978],{"class":46},"harbour",[36,2980,1392],{"class":927},[36,2982,699],{"class":63},[36,2984,2942],{"class":658},[36,2986,662],{"class":63},[36,2988,2989],{"class":695}," 12.1",[36,2991,710],{"class":63},[36,2993,2903],{"class":649},[36,2995,671],{"class":63},[36,2997,2999,3001,3003,3006,3008],{"class":38,"line":2998},76,[36,3000,2903],{"class":649},[36,3002,2632],{"class":1346},[36,3004,3005],{"class":635}," const",[36,3007,713],{"class":649},[36,3009,1794],{"class":63},[36,3011,3013,3016,3019,3021,3023,3025,3028,3030,3032,3034],{"class":38,"line":3012},77,[36,3014,3015],{"class":635},"  const",[36,3017,3018],{"class":587}," verdict",[36,3020,1580],{"class":63},[36,3022,640],{"class":587},[36,3024,1802],{"class":63},[36,3026,3027],{"class":56},"validate",[36,3029,650],{"class":1808},[36,3031,2641],{"class":587},[36,3033,713],{"class":1808},[36,3035,1395],{"class":63},[36,3037,3039,3041,3043,3045,3047,3049,3051,3053,3055,3057,3059,3062,3064,3067,3069,3071,3073,3076,3078],{"class":38,"line":3038},78,[36,3040,1799],{"class":587},[36,3042,1802],{"class":63},[36,3044,1805],{"class":56},[36,3046,650],{"class":1808},[36,3048,813],{"class":927},[36,3050,1855],{"class":63},[36,3052,1818],{"class":56},[36,3054,650],{"class":649},[36,3056,2895],{"class":587},[36,3058,1802],{"class":63},[36,3060,3061],{"class":56},"padEnd",[36,3063,650],{"class":649},[36,3065,3066],{"class":695},"38",[36,3068,2276],{"class":649},[36,3070,773],{"class":63},[36,3072,2725],{"class":63},[36,3074,3075],{"class":587},"verdict",[36,3077,1802],{"class":63},[36,3079,3080],{"class":2392},"success\n",[36,3082,3084,3087,3089,3091,3093,3096,3098],{"class":38,"line":3083},79,[36,3085,3086],{"class":63},"    ?",[36,3088,1673],{"class":56},[36,3090,650],{"class":649},[36,3092,1392],{"class":927},[36,3094,3095],{"class":46},"accepted",[36,3097,1392],{"class":927},[36,3099,3100],{"class":649},")\n",[36,3102,3104,3107,3109,3111,3113,3115,3118,3120,3122,3124,3126,3129,3131,3133,3135,3137,3139,3141,3144,3146,3148,3150,3152,3154,3157,3159,3161,3163,3165,3167,3169,3171,3174,3176,3178,3180,3182,3184],{"class":38,"line":3103},80,[36,3105,3106],{"class":63},"    :",[36,3108,1715],{"class":56},[36,3110,650],{"class":649},[36,3112,3075],{"class":587},[36,3114,1802],{"class":63},[36,3116,3117],{"class":2392},"errors",[36,3119,1802],{"class":63},[36,3121,2449],{"class":56},[36,3123,650],{"class":649},[36,3125,650],{"class":63},[36,3127,3128],{"class":1586},"e",[36,3130,713],{"class":63},[36,3132,1598],{"class":1597},[36,3134,1601],{"class":927},[36,3136,1611],{"class":63},[36,3138,3128],{"class":587},[36,3140,1802],{"class":63},[36,3142,3143],{"class":2392},"path",[36,3145,773],{"class":63},[36,3147,936],{"class":46},[36,3149,1611],{"class":63},[36,3151,3128],{"class":587},[36,3153,1802],{"class":63},[36,3155,3156],{"class":2392},"message",[36,3158,773],{"class":63},[36,3160,813],{"class":927},[36,3162,713],{"class":649},[36,3164,1802],{"class":63},[36,3166,2477],{"class":56},[36,3168,650],{"class":649},[36,3170,1392],{"class":927},[36,3172,3173],{"class":46}," · ",[36,3175,1392],{"class":927},[36,3177,2276],{"class":649},[36,3179,773],{"class":63},[36,3181,813],{"class":927},[36,3183,713],{"class":1808},[36,3185,1395],{"class":63},[36,3187,3189],{"class":38,"line":3188},81,[36,3190,1879],{"class":63},[36,3192,3194],{"class":38,"line":3193},82,[36,3195,557],{"emptyLinePlaceholder":108},[36,3197,3199,3201,3203,3205,3207],{"class":38,"line":3198},83,[36,3200,1888],{"class":587},[36,3202,1802],{"class":63},[36,3204,1805],{"class":56},[36,3206,650],{"class":649},[36,3208,1897],{"class":927},[36,3210,3212,3214,3216,3218,3220,3223,3225,3227,3229,3231,3233,3235,3237,3240,3242,3244],{"class":38,"line":3211},84,[36,3213,1838],{"class":63},[36,3215,1841],{"class":56},[36,3217,650],{"class":649},[36,3219,1392],{"class":927},[36,3221,3222],{"class":46},"Four consumers, one declaration.",[36,3224,1392],{"class":927},[36,3226,713],{"class":649},[36,3228,773],{"class":63},[36,3230,2725],{"class":63},[36,3232,1818],{"class":56},[36,3234,650],{"class":649},[36,3236,1392],{"class":927},[36,3238,3239],{"class":46},"None of the four was written by hand, and",[36,3241,1392],{"class":927},[36,3243,713],{"class":649},[36,3245,1879],{"class":63},[36,3247,3249,3251,3253,3255,3257,3260,3262,3264],{"class":38,"line":3248},85,[36,3250,1838],{"class":63},[36,3252,1818],{"class":56},[36,3254,650],{"class":649},[36,3256,1392],{"class":927},[36,3258,3259],{"class":46},"none can drift from the others — there is nothing to keep in sync.",[36,3261,1392],{"class":927},[36,3263,713],{"class":649},[36,3265,1879],{"class":63},[36,3267,3269,3271,3273],{"class":38,"line":3268},86,[36,3270,813],{"class":927},[36,3272,713],{"class":649},[36,3274,1395],{"class":63},[26,3276,3281],{"className":3277,"code":3278,"filename":3279,"language":3280,"meta":31,"style":31},"language-json shiki shiki-themes material-theme-lighter fougere-pastel material-theme-palenight","{\n  \"name\": \"one-declaration\",\n  \"private\": true,\n  \"type\": \"module\",\n  \"scripts\": {\n    \"dev\": \"tsx main.ts\",\n    \"typecheck\": \"tsc --noEmit -p .\"\n  },\n  \"dependencies\": {\n    \"@fougere\u002Fschema\": \"^0.30.0-alpha.5\",\n    \"@fougere\u002Fadapter-sql\": \"^0.30.0-alpha.5\"\n  },\n  \"devDependencies\": {\n    \"tsx\": \"^4.0.0\"\n  }\n}\n\n","package.json","json",[33,3282,3283,3287,3307,3323,3342,3355,3377,3396,3401,3414,3433,3449,3453,3466,3484,3489],{"__ignoreMap":31},[36,3284,3285],{"class":38,"line":39},[36,3286,653],{"class":63},[36,3288,3289,3292,3295,3297,3299,3301,3303,3305],{"class":38,"line":53},[36,3290,3291],{"class":63},"  \"",[36,3293,3294],{"class":944},"name",[36,3296,928],{"class":63},[36,3298,662],{"class":63},[36,3300,941],{"class":927},[36,3302,499],{"class":46},[36,3304,928],{"class":927},[36,3306,671],{"class":63},[36,3308,3309,3311,3314,3316,3318,3321],{"class":38,"line":83},[36,3310,3291],{"class":63},[36,3312,3313],{"class":944},"private",[36,3315,928],{"class":63},[36,3317,662],{"class":63},[36,3319,3320],{"class":927}," true",[36,3322,671],{"class":63},[36,3324,3325,3327,3329,3331,3333,3335,3338,3340],{"class":38,"line":435},[36,3326,3291],{"class":63},[36,3328,945],{"class":944},[36,3330,928],{"class":63},[36,3332,662],{"class":63},[36,3334,941],{"class":927},[36,3336,3337],{"class":46},"module",[36,3339,928],{"class":927},[36,3341,671],{"class":63},[36,3343,3344,3346,3349,3351,3353],{"class":38,"line":575},[36,3345,3291],{"class":63},[36,3347,3348],{"class":944},"scripts",[36,3350,928],{"class":63},[36,3352,662],{"class":63},[36,3354,1794],{"class":63},[36,3356,3357,3360,3364,3366,3368,3370,3373,3375],{"class":38,"line":450},[36,3358,3359],{"class":63},"    \"",[36,3361,3363],{"class":3362},"sWI7z","dev",[36,3365,928],{"class":63},[36,3367,662],{"class":63},[36,3369,941],{"class":927},[36,3371,3372],{"class":46},"tsx main.ts",[36,3374,928],{"class":927},[36,3376,671],{"class":63},[36,3378,3379,3381,3384,3386,3388,3390,3393],{"class":38,"line":441},[36,3380,3359],{"class":63},[36,3382,3383],{"class":3362},"typecheck",[36,3385,928],{"class":63},[36,3387,662],{"class":63},[36,3389,941],{"class":927},[36,3391,3392],{"class":46},"tsc --noEmit -p .",[36,3394,3395],{"class":927},"\"\n",[36,3397,3398],{"class":38,"line":432},[36,3399,3400],{"class":63},"  },\n",[36,3402,3403,3405,3408,3410,3412],{"class":38,"line":609},[36,3404,3291],{"class":63},[36,3406,3407],{"class":944},"dependencies",[36,3409,928],{"class":63},[36,3411,662],{"class":63},[36,3413,1794],{"class":63},[36,3415,3416,3418,3420,3422,3424,3426,3429,3431],{"class":38,"line":438},[36,3417,3359],{"class":63},[36,3419,1389],{"class":3362},[36,3421,928],{"class":63},[36,3423,662],{"class":63},[36,3425,941],{"class":927},[36,3427,3428],{"class":46},"^0.30.0-alpha.5",[36,3430,928],{"class":927},[36,3432,671],{"class":63},[36,3434,3435,3437,3439,3441,3443,3445,3447],{"class":38,"line":465},[36,3436,3359],{"class":63},[36,3438,1418],{"class":3362},[36,3440,928],{"class":63},[36,3442,662],{"class":63},[36,3444,941],{"class":927},[36,3446,3428],{"class":46},[36,3448,3395],{"class":927},[36,3450,3451],{"class":38,"line":460},[36,3452,3400],{"class":63},[36,3454,3455,3457,3460,3462,3464],{"class":38,"line":502},[36,3456,3291],{"class":63},[36,3458,3459],{"class":944},"devDependencies",[36,3461,928],{"class":63},[36,3463,662],{"class":63},[36,3465,1794],{"class":63},[36,3467,3468,3470,3473,3475,3477,3479,3482],{"class":38,"line":497},[36,3469,3359],{"class":63},[36,3471,3472],{"class":3362},"tsx",[36,3474,928],{"class":63},[36,3476,662],{"class":63},[36,3478,941],{"class":927},[36,3480,3481],{"class":46},"^4.0.0",[36,3483,3395],{"class":927},[36,3485,3486],{"class":38,"line":674},[36,3487,3488],{"class":63},"  }\n",[36,3490,3491],{"class":38,"line":492},[36,3492,1879],{"class":63},[26,3494,3497],{"className":3277,"code":3495,"filename":3496,"language":3280,"meta":31,"style":31},"{\n  \"extends\": \"..\u002F..\u002Ftsconfig.base.json\",\n  \"compilerOptions\": {\n    \"noEmit\": true,\n    \"rootDir\": \".\"\n  },\n  \"include\": [\".\"],\n  \"exclude\": [\"**\u002Fdist\", \"node_modules\"]\n}\n\n","tsconfig.json",[33,3498,3499,3503,3523,3536,3551,3568,3572,3594,3626],{"__ignoreMap":31},[36,3500,3501],{"class":38,"line":39},[36,3502,653],{"class":63},[36,3504,3505,3507,3510,3512,3514,3516,3519,3521],{"class":38,"line":53},[36,3506,3291],{"class":63},[36,3508,3509],{"class":944},"extends",[36,3511,928],{"class":63},[36,3513,662],{"class":63},[36,3515,941],{"class":927},[36,3517,3518],{"class":46},"..\u002F..\u002Ftsconfig.base.json",[36,3520,928],{"class":927},[36,3522,671],{"class":63},[36,3524,3525,3527,3530,3532,3534],{"class":38,"line":83},[36,3526,3291],{"class":63},[36,3528,3529],{"class":944},"compilerOptions",[36,3531,928],{"class":63},[36,3533,662],{"class":63},[36,3535,1794],{"class":63},[36,3537,3538,3540,3543,3545,3547,3549],{"class":38,"line":435},[36,3539,3359],{"class":63},[36,3541,3542],{"class":3362},"noEmit",[36,3544,928],{"class":63},[36,3546,662],{"class":63},[36,3548,3320],{"class":927},[36,3550,671],{"class":63},[36,3552,3553,3555,3558,3560,3562,3564,3566],{"class":38,"line":575},[36,3554,3359],{"class":63},[36,3556,3557],{"class":3362},"rootDir",[36,3559,928],{"class":63},[36,3561,662],{"class":63},[36,3563,941],{"class":927},[36,3565,1802],{"class":46},[36,3567,3395],{"class":927},[36,3569,3570],{"class":38,"line":450},[36,3571,3400],{"class":63},[36,3573,3574,3576,3579,3581,3583,3585,3587,3589,3591],{"class":38,"line":441},[36,3575,3291],{"class":63},[36,3577,3578],{"class":944},"include",[36,3580,928],{"class":63},[36,3582,662],{"class":63},[36,3584,2892],{"class":63},[36,3586,928],{"class":927},[36,3588,1802],{"class":46},[36,3590,928],{"class":927},[36,3592,3593],{"class":63},"],\n",[36,3595,3596,3598,3601,3603,3605,3607,3609,3612,3614,3616,3618,3621,3623],{"class":38,"line":432},[36,3597,3291],{"class":63},[36,3599,3600],{"class":944},"exclude",[36,3602,928],{"class":63},[36,3604,662],{"class":63},[36,3606,2892],{"class":63},[36,3608,928],{"class":927},[36,3610,3611],{"class":46},"**\u002Fdist",[36,3613,928],{"class":927},[36,3615,699],{"class":63},[36,3617,941],{"class":927},[36,3619,3620],{"class":46},"node_modules",[36,3622,928],{"class":927},[36,3624,3625],{"class":63},"]\n",[36,3627,3628],{"class":38,"line":609},[36,3629,1879],{"class":63},[98,3631,3632],{},"html pre.shiki code .sd7zb, html code.shiki .sd7zb{--shiki-light:#39ADB5;--shiki-light-font-weight:inherit;--shiki-default:#A3B0A5;--shiki-default-font-weight:bold;--shiki-dark:#89DDFF;--shiki-dark-font-weight:inherit}html pre.shiki code .sLf9K, html code.shiki .sLf9K{--shiki-light:#E2931D;--shiki-light-font-weight:inherit;--shiki-default:#8FCF86;--shiki-default-font-weight:bold;--shiki-dark:#FFCB6B;--shiki-dark-font-weight:inherit}html pre.shiki code .siB6D, html code.shiki .siB6D{--shiki-light:#91B859;--shiki-default:#A3B0A5;--shiki-dark:#C3E88D}html pre.shiki code .sYNOY, html code.shiki .sYNOY{--shiki-light:#90A4AE90;--shiki-default:#DDE5DA;--shiki-dark:#BABED890}html pre.shiki code .sPEhv, html code.shiki .sPEhv{--shiki-light:#90A4AE;--shiki-default:#DDE5DA;--shiki-dark:#BABED8}html pre.shiki code .sHaeK, html code.shiki .sHaeK{--shiki-light:#39ADB5;--shiki-light-font-weight:bold;--shiki-default:#A3B0A5;--shiki-default-font-weight:inherit;--shiki-dark:#89DDFF;--shiki-dark-font-weight:bold}html pre.shiki code .s7rwI, html code.shiki .s7rwI{--shiki-light:#E53935;--shiki-light-font-weight:bold;--shiki-default:#DDE5DA;--shiki-default-font-weight:inherit;--shiki-dark:#F07178;--shiki-dark-font-weight:bold}html pre.shiki code .s76I7, html code.shiki .s76I7{--shiki-light:#9C3EDA;--shiki-default:#8FCF86;--shiki-dark:#C792EA}html pre.shiki code .sBZYL, html code.shiki .sBZYL{--shiki-light:#E2931D;--shiki-default:#EFCD8F;--shiki-dark:#FFCB6B}html pre.shiki code .s4mR9, html code.shiki .s4mR9{--shiki-light:#6182B8;--shiki-default:#C9B6EA;--shiki-dark:#82AAFF}html pre.shiki code .srlTG, html code.shiki .srlTG{--shiki-light:#90A4AE;--shiki-default:#A3B0A5;--shiki-dark:#BABED8}html pre.shiki code .s15xx, html code.shiki .s15xx{--shiki-light:#39ADB5;--shiki-default:#A3B0A5;--shiki-dark:#89DDFF}html pre.shiki code .sHtqg, html code.shiki .sHtqg{--shiki-light:#E53935;--shiki-default:#93CFC0;--shiki-dark:#F07178}html pre.shiki code .s3dPA, html code.shiki .s3dPA{--shiki-light:#F76D47;--shiki-default:#EE9F6B;--shiki-dark:#F78C6C}html pre.shiki code .sN-8n, html code.shiki .sN-8n{--shiki-light:#91B859;--shiki-default:#EE9F6B;--shiki-dark:#C3E88D}html pre.shiki code .sDDC1, html code.shiki .sDDC1{--shiki-light:#39ADB5;--shiki-default:#EE9F6B;--shiki-dark:#89DDFF}html pre.shiki code .s8ClO, html code.shiki .s8ClO{--shiki-light:#9C3EDA;--shiki-default:#93CFC0;--shiki-dark:#C792EA}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 .skXKP, html code.shiki .skXKP{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#7D8C80;--shiki-default-font-style:inherit;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .sK6XW, html code.shiki .sK6XW{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#8FCF86;--shiki-default-font-style:inherit;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .slP7D, html code.shiki .slP7D{--shiki-light:#90A4AE;--shiki-default:#C9B6EA;--shiki-dark:#BABED8}html pre.shiki code .shDUQ, html code.shiki .shDUQ{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#DDE5DA;--shiki-default-font-style:inherit;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .scTuO, html code.shiki .scTuO{--shiki-light:#9C3EDA;--shiki-default:#A3B0A5;--shiki-dark:#C792EA}html pre.shiki code .sfnqo, html code.shiki .sfnqo{--shiki-light:#90A4AE;--shiki-default:#EE9F6B;--shiki-dark:#BABED8}html pre.shiki code .spAFX, html code.shiki .spAFX{--shiki-light:#E53935;--shiki-default:#A3B0A5;--shiki-dark:#F07178}html pre.shiki code .sWPpw, html code.shiki .sWPpw{--shiki-light:#F76D47;--shiki-default:#8FCF86;--shiki-dark:#F78C6C}html pre.shiki code .sy9f4, html code.shiki .sy9f4{--shiki-light:#90A4AE;--shiki-default:#93CFC0;--shiki-dark:#BABED8}html pre.shiki code .sWI7z, html code.shiki .sWI7z{--shiki-light:#E2931D;--shiki-default:#93CFC0;--shiki-dark:#FFCB6B}",{"title":31,"searchDepth":53,"depth":53,"links":3634},[],{},"\u002Fdemo\u002Fone-declaration",{"title":499,"description":31},"demo\u002Fone-declaration","TlVRDEzX1VybN-9lq4gVRl90HvDhcK16HXN79iYrO2Y",1794396615280]