@pinia-orm/nuxt
Version:
Nuxt module for pinia-orm
54 lines (51 loc) • 1.58 kB
JavaScript
import { defineNuxtModule, createResolver, addTemplate, addPlugin, isNuxt3, addImports } from '@nuxt/kit';
import { CONFIG_DEFAULTS } from 'pinia-orm';
const module = defineNuxtModule({
meta: {
name: "pinia-orm",
configKey: "piniaOrm"
},
defaults: {
autoImports: [],
...CONFIG_DEFAULTS
},
setup(options, nuxt) {
const resolver = createResolver(import.meta.url);
nuxt.options.build.transpile.push(resolver.resolve("./runtime"));
nuxt.hook("devtools:customTabs", (tabs) => {
tabs.push({
name: "pinia-orm",
title: "Pinia ORM",
icon: "https://pinia-orm.codedredd.de/logo.svg",
view: {
type: "iframe",
src: "https://pinia-orm.codedredd.de/api/composables/use-repo"
}
});
});
nuxt.hook("prepare:types", ({ references }) => {
references.push({ types: "@pinia-orm/nuxt" });
});
addTemplate({
filename: "orm-options.mjs",
getContents() {
return `
export const ormOptions = ${JSON.stringify(options, null, 2)}
`;
}
});
addPlugin(resolver.resolve("./runtime/plugin.vue" + (isNuxt3() ? "3" : "2")), {
append: true
});
if (options.autoImports) {
const generateImports = [
{ from: "pinia-orm", name: "useRepo" },
...options.autoImports.map(
(imports) => typeof imports === "string" ? { from: "pinia-orm", name: imports } : { from: "pinia-orm", name: imports[0], as: imports[1] }
)
];
addImports(generateImports);
}
}
});
export { module as default };