|
1 | 1 | import { fileURLToPath } from 'node:url'
|
| 2 | +import fs from 'node:fs' |
2 | 3 | import { defu } from 'defu'
|
3 | 4 | import { defineNuxtModule, addPlugin, createResolver, addTemplate, resolveModule, extendViteConfig } from '@nuxt/kit'
|
4 | 5 | import type { CookieOptions } from 'nuxt/app'
|
@@ -74,6 +75,13 @@ export interface ModuleOptions {
|
74 | 75 | */
|
75 | 76 | cookieOptions?: CookieOptions
|
76 | 77 |
|
| 78 | + /** |
| 79 | + * Path to Supabase database type definitions file |
| 80 | + * @default '~/types/database.types.ts' |
| 81 | + * @type string |
| 82 | + */ |
| 83 | + types?: string | false |
| 84 | + |
77 | 85 | /**
|
78 | 86 | * Supabase client options (overrides default options from `@supabase/ssr`)
|
79 | 87 | * @default { }
|
@@ -108,10 +116,11 @@ export default defineNuxtModule<ModuleOptions>({
|
108 | 116 | sameSite: 'lax',
|
109 | 117 | secure: true,
|
110 | 118 | } as CookieOptions,
|
| 119 | + types: '~/types/database.types.ts', |
111 | 120 | clientOptions: {} as SupabaseClientOptions<string>,
|
112 | 121 | },
|
113 | 122 | setup(options, nuxt) {
|
114 |
| - const { resolve } = createResolver(import.meta.url) |
| 123 | + const { resolve, resolvePath } = createResolver(import.meta.url) |
115 | 124 | const resolveRuntimeModule = (path: string) => resolveModule(path, { paths: resolve('./runtime') })
|
116 | 125 |
|
117 | 126 | // Public runtimeConfig
|
@@ -191,7 +200,18 @@ export default defineNuxtModule<ModuleOptions>({
|
191 | 200 | ].join('\n'),
|
192 | 201 | })
|
193 | 202 |
|
194 |
| - nuxt.hook('prepare:types', (options) => { |
| 203 | + addTemplate({ |
| 204 | + filename: 'types/supabase-database.d.ts', |
| 205 | + getContents: async () => { |
| 206 | + if (!!options.types && fs.existsSync(await resolvePath(options.types))) { |
| 207 | + return `export * from '${await resolvePath(options.types)}'` |
| 208 | + } |
| 209 | + |
| 210 | + return `export type Database = unknown` |
| 211 | + }, |
| 212 | + }) |
| 213 | + |
| 214 | + nuxt.hook('prepare:types', async (options) => { |
195 | 215 | options.references.push({ path: resolve(nuxt.options.buildDir, 'types/supabase.d.ts') })
|
196 | 216 | })
|
197 | 217 |
|
|
0 commit comments