UNPKG

@norbiros/nuxt-auto-form

Version:

Auto-generate Nuxt UI forms from Zod 4 schemas

72 lines (68 loc) 2.12 kB
import { defineNuxtModule, createResolver, addTypeTemplate, addComponent, addComponentsDir } from '@nuxt/kit'; async function ensureDependencies() { if (!await isPackageInstalled("zod")) { console.error("nuxt-auto-form requires 'zod' package to be installed."); return false; } const zodMajorVersion = await getPackageMajorVersion("zod"); if (zodMajorVersion && zodMajorVersion < 4) { console.error('nuxt-auto-form requires "zod" version >= 4 and found', zodMajorVersion); return false; } const hasNuxtUI = await isPackageInstalled("@nuxt/ui"); const hasNuxtUIPro = await isPackageInstalled("@nuxt/ui-pro"); if (!hasNuxtUI && !hasNuxtUIPro) { console.error('nuxt-auto-form requires "@nuxt/ui" or "@nuxt/ui-pro" package to be installed.'); return false; } return true; } async function isPackageInstalled(packageName) { try { await import(packageName); return true; } catch { return false; } } async function getPackageMajorVersion(packageName) { try { const pkg = await import(`${packageName}/package.json`); return Number.parseInt(pkg.version.split(".")[0]); } catch { return null; } } const module = defineNuxtModule({ meta: { name: "nuxt-auto-form", configKey: "autoForm" }, // Default configuration options of the Nuxt module defaults: {}, async setup(options, nuxt) { nuxt.options.runtimeConfig.public.autoForm = options; if (!await ensureDependencies()) { return; } const resolver = createResolver(import.meta.url); addTypeTemplate({ filename: "runtime/types/nuxt-auto-form.d.ts", src: resolver.resolve("runtime/types/index.d.ts") }); addTypeTemplate({ filename: "runtime/types/nuxt-auto-form-zod.d.ts", src: resolver.resolve("runtime/types/zod.d.ts") }); addComponent({ name: "AutoForm", filePath: resolver.resolve("runtime/components/AutoForm.vue") }); addComponentsDir({ path: resolver.resolve("runtime/components/input/"), prefix: "AInput", pathPrefix: false }); } }); export { module as default };