11import { existsSync } from "node:fs"
2- import { addImports , addPlugin , addTemplate , createResolver , defineNuxtModule , updateTemplates , useLogger } from "@nuxt/kit"
2+ import { addImports , addPlugin , addTemplate , addTypeTemplate , createResolver , defineNuxtModule , updateTemplates , useLogger } from "@nuxt/kit"
33import { defu } from "defu"
44import { generateCode , loadFile } from "magicast"
55import { transform } from "esbuild"
66import { NAME , type VueQueryOptions , configKey , defaults } from "./runtime/utils"
77
88declare module "@nuxt/schema" {
99 interface PublicRuntimeConfig {
10- [ configKey ] : VueQueryOptions
10+ vueQuery : VueQueryOptions
1111 }
1212}
1313
@@ -33,52 +33,53 @@ export default defineNuxtModule<VueQueryOptions>({
3333 addPlugin ( resolve ( "./runtime/plugin" ) )
3434
3535 // 3. Add composable
36- addImports ( [ { name : "defineVueQueryPluginCallback " , from : resolve ( "./runtime/composables/defineVueQueryPluginCallback " ) } ] )
36+ addImports ( [ { name : "defineVueQueryPluginHook " , from : resolve ( "./runtime/composables/defineVueQueryPluginHook " ) } ] )
3737
38- const filename = "internal.vue-query-plugin-callback .mjs"
38+ const filename = "internal.vue-query-plugin-hook .mjs"
3939
40- // 4. Write pluginCallback() to .nuxt
41- const getContents = async ( ) => {
42- if ( existsSync ( resolve ( nuxt . options . rootDir , "vue-query.config.ts" ) ) ) {
43- const configFile = resolve ( nuxt . options . rootDir , "vue-query.config.ts" )
44- const file = await loadFile ( configFile )
45- if ( file . exports . pluginCallback || file . exports . default ) {
46- logger . success ( "Found vue-query.config.ts file" )
47- if ( ! file . exports . pluginCallback ) file . exports . pluginCallback = file . exports . default
48- delete file . exports . default
49- const { code } = generateCode ( file ) // We extract it with magicast...
50- const shaked = await transform ( code , { treeShaking : true , loader : "ts" } ) // ...we clean it with esbuild.
51- return shaked . code
40+ // 4. Write pluginHook() to .nuxt
41+ addTemplate ( {
42+ filename,
43+ write : true ,
44+ getContents : async ( ) => {
45+ if ( existsSync ( resolve ( nuxt . options . rootDir , "vue-query.config.ts" ) ) ) {
46+ const configFile = resolve ( nuxt . options . rootDir , "vue-query.config.ts" )
47+ const file = await loadFile ( configFile )
48+ if ( file . exports . pluginHook || file . exports . default ) {
49+ logger . success ( "Found vue-query.config.ts file" )
50+ if ( ! file . exports . pluginHook ) file . exports . pluginHook = file . exports . default
51+ delete file . exports . default
52+ const { code } = generateCode ( file ) // We extract it with magicast...
53+ const shaked = await transform ( code , { treeShaking : true , loader : "ts" } ) // ...we clean it with esbuild.
54+ return shaked . code
55+ }
56+ else {
57+ logger . error ( "Found vue-query.config.ts file, but it does not export a `pluginHook`." )
58+ }
5259 }
5360 else {
54- logger . error ( "Found vue-query.config.ts file, but it does not export a `pluginCallback` .")
61+ logger . info ( "No vue-query.config.ts file found .")
5562 }
63+ return "export function pluginHook() { return { pluginReturn: null, vueQueryPluginOptions: null}}"
5664 }
57- else {
58- logger . info ( "No vue-query.config.ts file found." )
59- }
60- return "export function pluginCallback() {}"
61- }
62- addTemplate ( { filename, write : true , getContents } )
63- // 4. Add types for the plugin callback.
64- const advancedTypes = "types/vue-query-nuxt-advanced.d.ts"
65- addTemplate ( {
66- filename : advancedTypes ,
65+ } )
66+
67+ // 4. Augment NuxtApp with the pluginHook return type (for provide)
68+ addTypeTemplate ( {
69+ filename : "types/vue-query-nuxt-advanced.d.ts" ,
70+ write : true ,
6771 getContents : ( ) => `
68- type PluginCallbackResult = Awaited<ReturnType<typeof import(".nuxt/${ filename } ").pluginCallback> >
69-
70- type AddPrefix <T> = {
72+ type PluginHookResult = Awaited<ReturnType<typeof import(".nuxt/${ filename } ").pluginHook>["pluginReturn"] >
73+
74+ type AddDollarPrefix <T> = {
7175 [K in keyof T['provide'] as \`$\${string & K}\`]: T['provide'][K]
7276 }
73-
77+
7478 declare module '#app' {
75- interface NuxtApp extends AddPrefix<PluginCallbackResult > {}
79+ interface NuxtApp extends AddDollarPrefix<PluginHookResult > {}
7680 }
7781 export { }`
7882 } )
79- nuxt . hook ( "prepare:types" , ( { references } ) => {
80- references . push ( { path : advancedTypes } )
81- } )
8283
8384 // 5. Auto - reload the config
8485 nuxt . hook ( "builder:watch" , async ( event , path ) => {
0 commit comments