[{"data":1,"prerenderedAt":659},["ShallowReactive",2],{"fougere:post.list:{}":3,"docs:\u002Fdocs\u002Fdata\u002Fseeds":6,"docs-uses":346,"docs-nav":521},{"items":4,"hasMore":5},[],false,{"id":7,"title":8,"body":9,"description":334,"extension":335,"forms":336,"kind":337,"meta":338,"navigation":128,"path":339,"seo":340,"stem":341,"step":342,"uses":343,"__hash__":345},"docs\u002Fdocs\u002F3.data\u002F5.seeds.md","Seed data",{"type":10,"value":11,"toc":331},"minimark",[12,25,271,276,327],[13,14,15,16,20,21,24],"p",{},"A seed is a file in a frond's ",[17,18,19],"code",{},"seeds\u002F"," directory, named after its entity, run at startup once the\nschema check passed. It is the frond's own code, not a client: its rows are written by the storage, the\nway a handler writes — so a field closed to callers (",[17,22,23],{},"readOnly",") and a chosen id are its to set.",[26,27,32],"pre",{"className":28,"code":29,"language":30,"meta":31,"style":31},"language-ts shiki shiki-themes material-theme-lighter fougere-pastel material-theme-palenight","\u002F\u002F fronds\u002Fblog\u002Fseeds\u002FAuthor.seed.ts\nexport default [\n  { id: 'alice', name: 'Alice Martin', email: 'alice@example.com' },\n];\n\n\u002F\u002F fronds\u002Fblog\u002Fseeds\u002FPost.seed.ts\nexport default [\n  { title: 'Hello', body: '…', authorId: 'alice', status: 'published', publishedAt: new Date() },\n  { title: 'Still a draft', body: '…', authorId: 'alice' },\n];\n","ts","",[17,33,34,43,57,114,123,130,136,145,222,264],{"__ignoreMap":31},[35,36,39],"span",{"class":37,"line":38},"line",1,[35,40,42],{"class":41},"skXKP","\u002F\u002F fronds\u002Fblog\u002Fseeds\u002FAuthor.seed.ts\n",[35,44,46,50,53],{"class":37,"line":45},2,[35,47,49],{"class":48},"sK6XW","export",[35,51,52],{"class":48}," default",[35,54,56],{"class":55},"srlTG"," [\n",[35,58,60,64,68,71,75,79,82,85,88,90,92,95,97,99,102,104,106,109,111],{"class":37,"line":59},3,[35,61,63],{"class":62},"s15xx","  {",[35,65,67],{"class":66},"sHtqg"," id",[35,69,70],{"class":62},":",[35,72,74],{"class":73},"sDDC1"," '",[35,76,78],{"class":77},"sN-8n","alice",[35,80,81],{"class":73},"'",[35,83,84],{"class":62},",",[35,86,87],{"class":66}," name",[35,89,70],{"class":62},[35,91,74],{"class":73},[35,93,94],{"class":77},"Alice Martin",[35,96,81],{"class":73},[35,98,84],{"class":62},[35,100,101],{"class":66}," email",[35,103,70],{"class":62},[35,105,74],{"class":73},[35,107,108],{"class":77},"alice@example.com",[35,110,81],{"class":73},[35,112,113],{"class":62}," },\n",[35,115,117,120],{"class":37,"line":116},4,[35,118,119],{"class":55},"]",[35,121,122],{"class":62},";\n",[35,124,126],{"class":37,"line":125},5,[35,127,129],{"emptyLinePlaceholder":128},true,"\n",[35,131,133],{"class":37,"line":132},6,[35,134,135],{"class":41},"\u002F\u002F fronds\u002Fblog\u002Fseeds\u002FPost.seed.ts\n",[35,137,139,141,143],{"class":37,"line":138},7,[35,140,49],{"class":48},[35,142,52],{"class":48},[35,144,56],{"class":55},[35,146,148,150,153,155,157,160,162,164,167,169,171,174,176,178,181,183,185,187,189,191,194,196,198,201,203,205,208,210,213,217,220],{"class":37,"line":147},8,[35,149,63],{"class":62},[35,151,152],{"class":66}," title",[35,154,70],{"class":62},[35,156,74],{"class":73},[35,158,159],{"class":77},"Hello",[35,161,81],{"class":73},[35,163,84],{"class":62},[35,165,166],{"class":66}," body",[35,168,70],{"class":62},[35,170,74],{"class":73},[35,172,173],{"class":77},"…",[35,175,81],{"class":73},[35,177,84],{"class":62},[35,179,180],{"class":66}," authorId",[35,182,70],{"class":62},[35,184,74],{"class":73},[35,186,78],{"class":77},[35,188,81],{"class":73},[35,190,84],{"class":62},[35,192,193],{"class":66}," status",[35,195,70],{"class":62},[35,197,74],{"class":73},[35,199,200],{"class":77},"published",[35,202,81],{"class":73},[35,204,84],{"class":62},[35,206,207],{"class":66}," publishedAt",[35,209,70],{"class":62},[35,211,212],{"class":62}," new",[35,214,216],{"class":215},"sgjsB"," Date",[35,218,219],{"class":55},"()",[35,221,113],{"class":62},[35,223,225,227,229,231,233,236,238,240,242,244,246,248,250,252,254,256,258,260,262],{"class":37,"line":224},9,[35,226,63],{"class":62},[35,228,152],{"class":66},[35,230,70],{"class":62},[35,232,74],{"class":73},[35,234,235],{"class":77},"Still a draft",[35,237,81],{"class":73},[35,239,84],{"class":62},[35,241,166],{"class":66},[35,243,70],{"class":62},[35,245,74],{"class":73},[35,247,173],{"class":77},[35,249,81],{"class":73},[35,251,84],{"class":62},[35,253,180],{"class":66},[35,255,70],{"class":62},[35,257,74],{"class":73},[35,259,78],{"class":77},[35,261,81],{"class":73},[35,263,113],{"class":62},[35,265,267,269],{"class":37,"line":266},10,[35,268,119],{"class":55},[35,270,122],{"class":62},[272,273,275],"h2",{"id":274},"the-contract","The contract",[277,278,279,291,309,315,321],"ul",{},[280,281,282,286,287,290],"li",{},[283,284,285],"strong",{},"Export",": the rows, or ",[17,288,289],{},"async (resolve) => rows"," when they must be computed.",[280,292,293,296,297,300,301,304,305,308],{},[283,294,295],{},"Order",": a ",[17,298,299],{},"ref()"," target is planted before its referrer — ",[17,302,303],{},"Author"," before ",[17,306,307],{},"Post"," here.",[280,310,311,314],{},[283,312,313],{},"Where",": a seed runs in the process that hosts its entity's storage, and is skipped\nelsewhere. The same seed is planted once, in process or split, with no code of its own\ndeciding it.",[280,316,317,320],{},[283,318,319],{},"Idempotence",": a seed is skipped when its entity already holds rows.",[280,322,323,326],{},[283,324,325],{},"What is still judged",": the storage refuses a row whose shape or reference does not hold.\nA seed has no caller and no identity — it does not call operations as a user.",[328,329,330],"style",{},"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 .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 .sDDC1, html code.shiki .sDDC1{--shiki-light:#39ADB5;--shiki-default:#EE9F6B;--shiki-dark:#89DDFF}html pre.shiki code .sN-8n, html code.shiki .sN-8n{--shiki-light:#91B859;--shiki-default:#EE9F6B;--shiki-dark:#C3E88D}html pre.shiki code .sgjsB, html code.shiki .sgjsB{--shiki-light:#6182B8;--shiki-default:#EFCD8F;--shiki-dark:#82AAFF}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":45,"depth":45,"links":332},[333],{"id":274,"depth":45,"text":275},"Rows written at startup, in the order their references need.","md",[19],"task",{},"\u002Fdocs\u002Fdata\u002Fseeds",{"title":8,"description":334},"docs\u002F3.data\u002F5.seeds",null,[344],"entity","rRHvXi_yl545qmP7fNaUrCeHIkE5ICLLT2zAvn5QDFw",[347,350,353,356,359,362,365,368,371,377,383,387,391,395,399,401,405,410,414,418,423,427,432,436,440,444,448,452,456,460,464,468,472,476,480,484,488,491,494,497,500,503,506,509,512,515,518],{"path":348,"title":349,"uses":342},"\u002Fdocs\u002Fconcepts\u002Fentity","Entity",{"path":351,"title":352,"uses":342},"\u002Fdocs\u002Fconcepts\u002Fhandler","Handler",{"path":354,"title":355,"uses":342},"\u002Fdocs\u002Fconcepts\u002Frepository","Repository",{"path":357,"title":358,"uses":342},"\u002Fdocs\u002Fconcepts\u002Ffrond","Frond",{"path":360,"title":361,"uses":342},"\u002Fdocs\u002Fconcepts\u002Ffacade","Facade",{"path":363,"title":364,"uses":342},"\u002Fdocs\u002Fconcepts\u002Ffact","Fact",{"path":366,"title":367,"uses":342},"\u002Fdocs\u002Fconcepts\u002Fport","Port",{"path":369,"title":370,"uses":342},"\u002Fdocs\u002Fconcepts\u002Fconfiguration","Configuration",{"path":372,"title":373,"uses":374},"\u002Fdocs\u002Faccess\u002Fauthentication","Authentication",[375,376],"port","frond",{"path":378,"title":379,"uses":380},"\u002Fdocs\u002Faccess\u002Fstate","Keep a caller's state",[381,382],"configuration","handler",{"path":384,"title":385,"uses":386},"\u002Fdocs\u002Fdata\u002Fsql","SQLite or Postgres",[344,381],{"path":388,"title":389,"uses":390},"\u002Fdocs\u002Fdata\u002Fseveral-databases","Several databases",[381,344],{"path":392,"title":393,"uses":394},"\u002Fdocs\u002Fdata\u002Fcomputed-field","A computed field",[344,375],{"path":396,"title":397,"uses":398},"\u002Fdocs\u002Fdata\u002Fevolve","Evolve a schema",[344],{"path":339,"title":8,"uses":400},[344],{"path":402,"title":403,"uses":404},"\u002Fdocs\u002Fdata\u002Fvalues","Read settings and secrets",[344,381],{"path":406,"title":407,"uses":408},"\u002Fdocs\u002Fdata\u002Fmirror","Mirror a source you cannot query",[409],"repository",{"path":411,"title":412,"uses":413},"\u002Fdocs\u002Fdata\u002Ftogether","Two writes as one",[409],{"path":415,"title":416,"uses":417},"\u002Fdocs\u002Fbehaviour\u002Faround-every-call","Around every call",[375,376],{"path":419,"title":420,"uses":421},"\u002Fdocs\u002Fbehaviour\u002Ffinish-a-fact","Finish a fact",[422],"fact",{"path":424,"title":425,"uses":426},"\u002Fdocs\u002Fserve\u002Frest-graphql","REST, OpenAPI, GraphQL",[382,381],{"path":428,"title":429,"uses":430},"\u002Fdocs\u002Fserve\u002Fpages","Pages: queries and commands",[382,431],"facade",{"path":433,"title":434,"uses":435},"\u002Fdocs\u002Fserve\u002Fforms","A form",[344],{"path":437,"title":438,"uses":439},"\u002Fdocs\u002Fserve\u002Fadmin","An admin panel",[382],{"path":441,"title":442,"uses":443},"\u002Fdocs\u002Frun\u002Fdeploy","Deploy a split",[381,376],{"path":445,"title":446,"uses":447},"\u002Fdocs\u002Frun\u002Fsecure","Secure calls between processes",[381,376],{"path":449,"title":450,"uses":451},"\u002Fdocs\u002Frun\u002Flifecycle","Reload and shut down",[381],{"path":453,"title":454,"uses":455},"\u002Fdocs\u002Frun\u002Fobserve","Observe",[381,382],{"path":457,"title":458,"uses":459},"\u002Fdocs\u002Frun\u002Fdev-panel","The dev panel",[382],{"path":461,"title":462,"uses":463},"\u002Fdocs\u002Frun\u002Ftest","Test",[344,375],{"path":465,"title":466,"uses":467},"\u002Fdocs\u002Fadopt\u002Fnew-project","Start a project",[376,381],{"path":469,"title":470,"uses":471},"\u002Fdocs\u002Fadopt\u002Fexisting-app","Add Fougere to an existing app",[376,381],{"path":473,"title":474,"uses":475},"\u002Fdocs\u002Fadopt\u002Fbring-your-schema","Bring your schema",[344],{"path":477,"title":478,"uses":479},"\u002Fdocs\u002Fadopt\u002Fhosts","Pick a host",[381],{"path":481,"title":482,"uses":483},"\u002Fdocs\u002Fadopt\u002Fanother-repository","A frond from another repository",[431,376],{"path":485,"title":486,"uses":487},"\u002Fdocs\u002Fadopt\u002Fdemos","Demos",[],{"path":489,"title":490,"uses":342},"\u002Fdocs\u002Fextending\u002Fscan","How the scan reads a project",{"path":492,"title":493,"uses":342},"\u002Fdocs\u002Fextending\u002Fwithout-compiler","Boot without the compiler",{"path":495,"title":496,"uses":342},"\u002Fdocs\u002Fextending\u002Fboot","The boot, step by step",{"path":498,"title":499,"uses":342},"\u002Fdocs\u002Fextending\u002Fcard-and-wire","The card and the wire",{"path":501,"title":502,"uses":342},"\u002Fdocs\u002Fextending\u002Fextension-points","Registries and extension points",{"path":504,"title":505,"uses":342},"\u002Fdocs\u002Fextending\u002Fvocabulary","Teach a word",{"path":507,"title":508,"uses":342},"\u002Fdocs\u002Fextending\u002Fextensions","Run code at boot and shutdown",{"path":510,"title":511,"uses":342},"\u002Fdocs\u002Fextending\u002Fsource-adapter","Write a source adapter",{"path":513,"title":514,"uses":342},"\u002Fdocs\u002Fextending\u002Fsurface","Write a surface",{"path":516,"title":517,"uses":342},"\u002Fdocs\u002Fextending\u002Fforeign-frond","A frond in another language",{"path":519,"title":520,"uses":342},"\u002Fdocs","What is Fougere",[522],{"title":523,"path":519,"stem":524,"children":525,"page":-1},"Docs","docs",[526,528,549,558,578,587,600,617,634],{"title":520,"path":519,"stem":527},"docs\u002Findex",{"title":529,"path":530,"stem":531,"children":532,"page":5},"Concepts","\u002Fdocs\u002Fconcepts","docs\u002F1.concepts",[533,535,537,539,541,543,545,547],{"title":349,"path":348,"stem":534},"docs\u002F1.concepts\u002F1.entity",{"title":352,"path":351,"stem":536},"docs\u002F1.concepts\u002F2.handler",{"title":355,"path":354,"stem":538},"docs\u002F1.concepts\u002F3.repository",{"title":358,"path":357,"stem":540},"docs\u002F1.concepts\u002F4.frond",{"title":361,"path":360,"stem":542},"docs\u002F1.concepts\u002F5.facade",{"title":364,"path":363,"stem":544},"docs\u002F1.concepts\u002F6.fact",{"title":367,"path":366,"stem":546},"docs\u002F1.concepts\u002F7.port",{"title":370,"path":369,"stem":548},"docs\u002F1.concepts\u002F8.configuration",{"title":550,"path":551,"stem":552,"children":553,"page":5},"Access","\u002Fdocs\u002Faccess","docs\u002F2.access",[554,556],{"title":373,"path":372,"stem":555},"docs\u002F2.access\u002F1.authentication",{"title":379,"path":378,"stem":557},"docs\u002F2.access\u002F2.state",{"title":559,"path":560,"stem":561,"children":562,"page":5},"Data","\u002Fdocs\u002Fdata","docs\u002F3.data",[563,565,567,569,571,572,574,576],{"title":385,"path":384,"stem":564},"docs\u002F3.data\u002F1.sql",{"title":389,"path":388,"stem":566},"docs\u002F3.data\u002F2.several-databases",{"title":393,"path":392,"stem":568},"docs\u002F3.data\u002F3.computed-field",{"title":397,"path":396,"stem":570},"docs\u002F3.data\u002F4.evolve",{"title":8,"path":339,"stem":341},{"title":403,"path":402,"stem":573},"docs\u002F3.data\u002F6.values",{"title":407,"path":406,"stem":575},"docs\u002F3.data\u002F7.mirror",{"title":412,"path":411,"stem":577},"docs\u002F3.data\u002F8.together",{"title":579,"path":580,"stem":581,"children":582,"page":5},"Behaviour","\u002Fdocs\u002Fbehaviour","docs\u002F4.behaviour",[583,585],{"title":416,"path":415,"stem":584},"docs\u002F4.behaviour\u002F1.around-every-call",{"title":420,"path":419,"stem":586},"docs\u002F4.behaviour\u002F2.finish-a-fact",{"title":588,"path":589,"stem":590,"children":591,"page":5},"Serve","\u002Fdocs\u002Fserve","docs\u002F5.serve",[592,594,596,598],{"title":425,"path":424,"stem":593},"docs\u002F5.serve\u002F1.rest-graphql",{"title":429,"path":428,"stem":595},"docs\u002F5.serve\u002F2.pages",{"title":434,"path":433,"stem":597},"docs\u002F5.serve\u002F3.forms",{"title":438,"path":437,"stem":599},"docs\u002F5.serve\u002F4.admin",{"title":601,"path":602,"stem":603,"children":604,"page":5},"Run","\u002Fdocs\u002Frun","docs\u002F6.run",[605,607,609,611,613,615],{"title":442,"path":441,"stem":606},"docs\u002F6.run\u002F1.deploy",{"title":446,"path":445,"stem":608},"docs\u002F6.run\u002F2.secure",{"title":450,"path":449,"stem":610},"docs\u002F6.run\u002F3.lifecycle",{"title":454,"path":453,"stem":612},"docs\u002F6.run\u002F4.observe",{"title":458,"path":457,"stem":614},"docs\u002F6.run\u002F5.dev-panel",{"title":462,"path":461,"stem":616},"docs\u002F6.run\u002F6.test",{"title":618,"path":619,"stem":620,"children":621,"page":5},"Adopt","\u002Fdocs\u002Fadopt","docs\u002F7.adopt",[622,624,626,628,630,632],{"title":466,"path":465,"stem":623},"docs\u002F7.adopt\u002F1.new-project",{"title":470,"path":469,"stem":625},"docs\u002F7.adopt\u002F2.existing-app",{"title":474,"path":473,"stem":627},"docs\u002F7.adopt\u002F3.bring-your-schema",{"title":478,"path":477,"stem":629},"docs\u002F7.adopt\u002F4.hosts",{"title":482,"path":481,"stem":631},"docs\u002F7.adopt\u002F5.another-repository",{"title":486,"path":485,"stem":633},"docs\u002F7.adopt\u002F6.demos",{"title":635,"path":636,"stem":637,"children":638,"page":5},"Extending","\u002Fdocs\u002Fextending","docs\u002F8.extending",[639,641,643,645,647,649,651,653,655,657],{"title":490,"path":489,"stem":640},"docs\u002F8.extending\u002F1.scan",{"title":493,"path":492,"stem":642},"docs\u002F8.extending\u002F10.without-compiler",{"title":496,"path":495,"stem":644},"docs\u002F8.extending\u002F2.boot",{"title":499,"path":498,"stem":646},"docs\u002F8.extending\u002F3.card-and-wire",{"title":502,"path":501,"stem":648},"docs\u002F8.extending\u002F4.extension-points",{"title":505,"path":504,"stem":650},"docs\u002F8.extending\u002F5.vocabulary",{"title":508,"path":507,"stem":652},"docs\u002F8.extending\u002F6.extensions",{"title":511,"path":510,"stem":654},"docs\u002F8.extending\u002F7.source-adapter",{"title":514,"path":513,"stem":656},"docs\u002F8.extending\u002F8.surface",{"title":517,"path":516,"stem":658},"docs\u002F8.extending\u002F9.foreign-frond",1794396613828]