[{"data":1,"prerenderedAt":813},["ShallowReactive",2],{"navigation":3,"/guide/hooks":67,"/guide/hooks-surround":808},[4,22,51],{"title":5,"path":6,"stem":7,"children":8,"page":21},"Guide","/guide","1.guide",[9,13,17],{"title":10,"path":11,"stem":12},"Installation","/guide/installation","1.guide/1.installation",{"title":14,"path":15,"stem":16},"Configuration","/guide/configuration","1.guide/2.configuration",{"title":18,"path":19,"stem":20},"Hooks","/guide/hooks","1.guide/3.hooks",false,{"title":23,"path":24,"stem":25,"children":26,"page":21},"Composables","/composables","2.composables",[27,31,35,39,43,47],{"title":28,"path":29,"stem":30},"useSurreal","/composables/use-surreal","2.composables/1.use-surreal",{"title":32,"path":33,"stem":34},"useSurrealAsyncData","/composables/use-surreal-async-data","2.composables/2.use-surreal-async-data",{"title":36,"path":37,"stem":38},"useSurrealQuery","/composables/use-surreal-query","2.composables/3.use-surreal-query",{"title":40,"path":41,"stem":42},"useSurrealSelect","/composables/use-surreal-select","2.composables/4.use-surreal-select",{"title":44,"path":45,"stem":46},"useSurrealAuth","/composables/use-surreal-auth","2.composables/5.use-surreal-auth",{"title":48,"path":49,"stem":50},"Other Composables","/composables/other-composables","2.composables/6.other-composables",{"title":52,"path":53,"stem":54,"children":55,"page":21},"Server","/server","3.server",[56,59,63],{"title":28,"path":57,"stem":58},"/server/use-surreal","3.server/1.use-surreal",{"title":60,"path":61,"stem":62},"useSurrealMemory","/server/use-surreal-memory","3.server/2.use-surreal-memory",{"title":64,"path":65,"stem":66},"useSurrealLocal","/server/use-surreal-local","3.server/3.use-surreal-local",{"id":68,"title":18,"body":69,"description":800,"extension":801,"head":802,"links":802,"meta":803,"navigation":584,"ogImage":802,"path":19,"robots":802,"schemaOrg":802,"seo":805,"sitemap":806,"stem":20,"__hash__":807},"docs/1.guide/3.hooks.md",{"type":70,"value":71,"toc":791},"minimark",[72,76,93,98,103,183,187,193,235,239,242,439,443,446,713,717,727,747,755,765,771,787],[73,74,18],"h1",{"id":75},"hooks",[77,78,79,80,84,85,92],"p",{},"Nuxt SurrealDB exposes a ",[81,82,83],"code",{},"surrealHooks"," utility (auto-imported in both app and server contexts) powered by ",[86,87,91],"a",{"href":88,"rel":89},"https://github.com/unjs/hookable",[90],"nofollow","hookable",". Use hooks to run logic when a SurrealDB connection is being established or has connected.",[94,95,97],"h2",{"id":96},"available-hooks","Available hooks",[99,100,102],"h3",{"id":101},"client-side-hooks","Client-side hooks",[104,105,106,119],"table",{},[107,108,109],"thead",{},[110,111,112,116],"tr",{},[113,114,115],"th",{},"Hook",[113,117,118],{},"Description",[120,121,122,133,143,153,163,173],"tbody",{},[110,123,124,130],{},[125,126,127],"td",{},[81,128,129],{},"surrealdb:connecting",[125,131,132],{},"Called before connecting to the remote SurrealDB",[110,134,135,140],{},[125,136,137],{},[81,138,139],{},"surrealdb:connected",[125,141,142],{},"Called after successfully connecting to the remote SurrealDB",[110,144,145,150],{},[125,146,147],{},[81,148,149],{},"surrealdb:memory:connecting",[125,151,152],{},"Called before connecting to the in-memory WASM engine",[110,154,155,160],{},[125,156,157],{},[81,158,159],{},"surrealdb:memory:connected",[125,161,162],{},"Called after successfully connecting to the in-memory WASM engine",[110,164,165,170],{},[125,166,167],{},[81,168,169],{},"surrealdb:local:connecting",[125,171,172],{},"Called before connecting to the local WASM engine",[110,174,175,180],{},[125,176,177],{},[81,178,179],{},"surrealdb:local:connected",[125,181,182],{},"Called after successfully connecting to the local WASM engine",[99,184,186],{"id":185},"server-side-hooks","Server-side hooks",[77,188,189,190,192],{},"In addition to all the hooks above, the server-side ",[81,191,83],{}," also provides:",[104,194,195,203],{},[107,196,197],{},[110,198,199,201],{},[113,200,115],{},[113,202,118],{},[120,204,205,215,225],{},[110,206,207,212],{},[125,208,209],{},[81,210,211],{},"surrealdb:session:init",[125,213,214],{},"Called when a new session is created for an H3Event",[110,216,217,222],{},[125,218,219],{},[81,220,221],{},"surrealdb:memory:session:init",[125,223,224],{},"Called when a new memory session is created for an H3Event",[110,226,227,232],{},[125,228,229],{},[81,230,231],{},"surrealdb:local:session:init",[125,233,234],{},"Called when a new local session is created for an H3Event",[94,236,238],{"id":237},"usage-in-nuxt-plugins","Usage in Nuxt plugins",[77,240,241],{},"Use hooks in a Nuxt plugin to run setup logic after a connection is established, for example to select a namespace and database or seed initial data:",[243,244,250],"pre",{"className":245,"code":246,"filename":247,"language":248,"meta":249,"style":249},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","export default defineNuxtPlugin(() => {\n  surrealHooks.hook('surrealdb:memory:connected', async ({ client }) => {\n    await client.use({\n      namespace: 'test',\n      database: 'test',\n    })\n    await client.query(\n      'DEFINE TABLE IF NOT EXISTS test; UPSERT test SET name = \"from-wasm-mem\" WHERE name = \"from-wasm-mem\";',\n    )\n  })\n})\n","plugins/surreal-setup.client.ts","ts","",[81,251,252,283,326,344,364,380,389,404,417,423,431],{"__ignoreMap":249},[253,254,257,261,264,268,272,276,280],"span",{"class":255,"line":256},"line",1,[253,258,260],{"class":259},"s7zQu","export",[253,262,263],{"class":259}," default",[253,265,267],{"class":266},"s2Zo4"," defineNuxtPlugin",[253,269,271],{"class":270},"sTEyZ","(",[253,273,275],{"class":274},"sMK4o","()",[253,277,279],{"class":278},"spNyl"," =>",[253,281,282],{"class":274}," {\n",[253,284,286,289,292,295,298,301,304,306,309,312,315,319,322,324],{"class":255,"line":285},2,[253,287,288],{"class":270},"  surrealHooks",[253,290,291],{"class":274},".",[253,293,294],{"class":266},"hook",[253,296,271],{"class":297},"swJcz",[253,299,300],{"class":274},"'",[253,302,159],{"class":303},"sfazB",[253,305,300],{"class":274},[253,307,308],{"class":274},",",[253,310,311],{"class":278}," async",[253,313,314],{"class":274}," ({",[253,316,318],{"class":317},"sHdIc"," client",[253,320,321],{"class":274}," })",[253,323,279],{"class":278},[253,325,282],{"class":274},[253,327,329,332,334,336,339,341],{"class":255,"line":328},3,[253,330,331],{"class":259},"    await",[253,333,318],{"class":270},[253,335,291],{"class":274},[253,337,338],{"class":266},"use",[253,340,271],{"class":297},[253,342,343],{"class":274},"{\n",[253,345,347,350,353,356,359,361],{"class":255,"line":346},4,[253,348,349],{"class":297},"      namespace",[253,351,352],{"class":274},":",[253,354,355],{"class":274}," '",[253,357,358],{"class":303},"test",[253,360,300],{"class":274},[253,362,363],{"class":274},",\n",[253,365,367,370,372,374,376,378],{"class":255,"line":366},5,[253,368,369],{"class":297},"      database",[253,371,352],{"class":274},[253,373,355],{"class":274},[253,375,358],{"class":303},[253,377,300],{"class":274},[253,379,363],{"class":274},[253,381,383,386],{"class":255,"line":382},6,[253,384,385],{"class":274},"    }",[253,387,388],{"class":297},")\n",[253,390,392,394,396,398,401],{"class":255,"line":391},7,[253,393,331],{"class":259},[253,395,318],{"class":270},[253,397,291],{"class":274},[253,399,400],{"class":266},"query",[253,402,403],{"class":297},"(\n",[253,405,407,410,413,415],{"class":255,"line":406},8,[253,408,409],{"class":274},"      '",[253,411,412],{"class":303},"DEFINE TABLE IF NOT EXISTS test; UPSERT test SET name = \"from-wasm-mem\" WHERE name = \"from-wasm-mem\";",[253,414,300],{"class":274},[253,416,363],{"class":274},[253,418,420],{"class":255,"line":419},9,[253,421,422],{"class":297},"    )\n",[253,424,426,429],{"class":255,"line":425},10,[253,427,428],{"class":274},"  }",[253,430,388],{"class":297},[253,432,434,437],{"class":255,"line":433},11,[253,435,436],{"class":274},"}",[253,438,388],{"class":270},[94,440,442],{"id":441},"usage-in-nitro-plugins","Usage in Nitro plugins",[77,444,445],{},"Use hooks in a Nitro plugin for server-side initialization:",[243,447,450],{"className":245,"code":448,"filename":449,"language":248,"meta":249,"style":249},"export default defineNitroPlugin(() => {\n  surrealHooks.hook('surrealdb:memory:connected', async ({ client }) => {\n    await client.use({\n      namespace: 'test',\n      database: 'test',\n    })\n    await client.query(\n      'DEFINE TABLE IF NOT EXISTS test; UPSERT test SET name = \"from-node-mem\" WHERE name = \"from-node-mem\";',\n    )\n  })\n\n  surrealHooks.hook('surrealdb:local:connected', async ({ client }) => {\n    await client.use({\n      namespace: 'test',\n      database: 'test',\n    })\n    await client.query(\n      'DEFINE TABLE IF NOT EXISTS test; UPSERT test SET name = \"from-node-local\" WHERE name = \"from-node-local\";',\n    )\n  })\n})\n","server/plugins/surreal-setup.ts",[81,451,452,469,499,513,527,541,547,559,570,574,580,586,617,632,647,662,669,682,694,699,706],{"__ignoreMap":249},[253,453,454,456,458,461,463,465,467],{"class":255,"line":256},[253,455,260],{"class":259},[253,457,263],{"class":259},[253,459,460],{"class":266}," defineNitroPlugin",[253,462,271],{"class":270},[253,464,275],{"class":274},[253,466,279],{"class":278},[253,468,282],{"class":274},[253,470,471,473,475,477,479,481,483,485,487,489,491,493,495,497],{"class":255,"line":285},[253,472,288],{"class":270},[253,474,291],{"class":274},[253,476,294],{"class":266},[253,478,271],{"class":297},[253,480,300],{"class":274},[253,482,159],{"class":303},[253,484,300],{"class":274},[253,486,308],{"class":274},[253,488,311],{"class":278},[253,490,314],{"class":274},[253,492,318],{"class":317},[253,494,321],{"class":274},[253,496,279],{"class":278},[253,498,282],{"class":274},[253,500,501,503,505,507,509,511],{"class":255,"line":328},[253,502,331],{"class":259},[253,504,318],{"class":270},[253,506,291],{"class":274},[253,508,338],{"class":266},[253,510,271],{"class":297},[253,512,343],{"class":274},[253,514,515,517,519,521,523,525],{"class":255,"line":346},[253,516,349],{"class":297},[253,518,352],{"class":274},[253,520,355],{"class":274},[253,522,358],{"class":303},[253,524,300],{"class":274},[253,526,363],{"class":274},[253,528,529,531,533,535,537,539],{"class":255,"line":366},[253,530,369],{"class":297},[253,532,352],{"class":274},[253,534,355],{"class":274},[253,536,358],{"class":303},[253,538,300],{"class":274},[253,540,363],{"class":274},[253,542,543,545],{"class":255,"line":382},[253,544,385],{"class":274},[253,546,388],{"class":297},[253,548,549,551,553,555,557],{"class":255,"line":391},[253,550,331],{"class":259},[253,552,318],{"class":270},[253,554,291],{"class":274},[253,556,400],{"class":266},[253,558,403],{"class":297},[253,560,561,563,566,568],{"class":255,"line":406},[253,562,409],{"class":274},[253,564,565],{"class":303},"DEFINE TABLE IF NOT EXISTS test; UPSERT test SET name = \"from-node-mem\" WHERE name = \"from-node-mem\";",[253,567,300],{"class":274},[253,569,363],{"class":274},[253,571,572],{"class":255,"line":419},[253,573,422],{"class":297},[253,575,576,578],{"class":255,"line":425},[253,577,428],{"class":274},[253,579,388],{"class":297},[253,581,582],{"class":255,"line":433},[253,583,585],{"emptyLinePlaceholder":584},true,"\n",[253,587,589,591,593,595,597,599,601,603,605,607,609,611,613,615],{"class":255,"line":588},12,[253,590,288],{"class":270},[253,592,291],{"class":274},[253,594,294],{"class":266},[253,596,271],{"class":297},[253,598,300],{"class":274},[253,600,179],{"class":303},[253,602,300],{"class":274},[253,604,308],{"class":274},[253,606,311],{"class":278},[253,608,314],{"class":274},[253,610,318],{"class":317},[253,612,321],{"class":274},[253,614,279],{"class":278},[253,616,282],{"class":274},[253,618,620,622,624,626,628,630],{"class":255,"line":619},13,[253,621,331],{"class":259},[253,623,318],{"class":270},[253,625,291],{"class":274},[253,627,338],{"class":266},[253,629,271],{"class":297},[253,631,343],{"class":274},[253,633,635,637,639,641,643,645],{"class":255,"line":634},14,[253,636,349],{"class":297},[253,638,352],{"class":274},[253,640,355],{"class":274},[253,642,358],{"class":303},[253,644,300],{"class":274},[253,646,363],{"class":274},[253,648,650,652,654,656,658,660],{"class":255,"line":649},15,[253,651,369],{"class":297},[253,653,352],{"class":274},[253,655,355],{"class":274},[253,657,358],{"class":303},[253,659,300],{"class":274},[253,661,363],{"class":274},[253,663,665,667],{"class":255,"line":664},16,[253,666,385],{"class":274},[253,668,388],{"class":297},[253,670,672,674,676,678,680],{"class":255,"line":671},17,[253,673,331],{"class":259},[253,675,318],{"class":270},[253,677,291],{"class":274},[253,679,400],{"class":266},[253,681,403],{"class":297},[253,683,685,687,690,692],{"class":255,"line":684},18,[253,686,409],{"class":274},[253,688,689],{"class":303},"DEFINE TABLE IF NOT EXISTS test; UPSERT test SET name = \"from-node-local\" WHERE name = \"from-node-local\";",[253,691,300],{"class":274},[253,693,363],{"class":274},[253,695,697],{"class":255,"line":696},19,[253,698,422],{"class":297},[253,700,702,704],{"class":255,"line":701},20,[253,703,428],{"class":274},[253,705,388],{"class":297},[253,707,709,711],{"class":255,"line":708},21,[253,710,436],{"class":274},[253,712,388],{"class":270},[94,714,716],{"id":715},"hook-arguments","Hook arguments",[77,718,719,720,723,724,352],{},"All ",[81,721,722],{},"connecting"," hooks receive ",[81,725,726],{},"{ client, config }",[728,729,730,741],"ul",{},[731,732,733,736,737,740],"li",{},[81,734,735],{},"client"," — the ",[81,738,739],{},"Surreal"," instance being connected",[731,742,743,746],{},[81,744,745],{},"config"," — the resolved connection configuration",[77,748,719,749,723,752,352],{},[81,750,751],{},"connected",[81,753,754],{},"{ client }",[728,756,757],{},[731,758,759,761,762,764],{},[81,760,735],{}," — the connected ",[81,763,739],{}," instance",[77,766,767,768,352],{},"Session init hooks receive ",[81,769,770],{},"{ session, event }",[728,772,773,781],{},[731,774,775,736,778,764],{},[81,776,777],{},"session",[81,779,780],{},"SurrealSession",[731,782,783,786],{},[81,784,785],{},"event"," — the H3Event for the current request",[788,789,790],"style",{},"html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}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":249,"searchDepth":256,"depth":285,"links":792},[793,797,798,799],{"id":96,"depth":285,"text":97,"children":794},[795,796],{"id":101,"depth":328,"text":102},{"id":185,"depth":328,"text":186},{"id":237,"depth":285,"text":238},{"id":441,"depth":285,"text":442},{"id":715,"depth":285,"text":716},"Learn how to use lifecycle hooks to customize SurrealDB connections","md",null,{"icon":804},"i-lucide-plug",{"title":18,"description":800},{"loc":19},"tuuCWmkJrylquMLQAd3Mmup7g56bgdEwB8IhaSwiV5s",[809,811],{"title":14,"path":15,"stem":16,"description":810,"children":-1},"Learn how to configure Nuxt SurrealDB in your Nuxt application",{"title":28,"path":29,"stem":30,"description":812,"children":-1},"Access the remote SurrealDB client in your Vue components.",1772382803205]