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