nuxt3-swiper
Version:
<h1 align="center">nuxt3-swiper</h1>
100 lines (96 loc) • 2.83 kB
JavaScript
import * as swiperModulesImports from 'swiper/modules';
import { defineNuxtModule, addComponent, addImports, extendViteConfig } from '@nuxt/kit';
const name$1 = "nuxt3-swiper";
const version$1 = "1.3.0";
const packageConfig = {
name: name$1,
version: version$1};
const { name, version } = packageConfig;
const module$1 = defineNuxtModule({
meta: {
name,
version,
configKey: "swiper"
},
defaults: {
prefix: "Swiper",
styleLang: "css",
modules: "*"
},
hooks: {
"prepare:types": (ctx) => {
ctx.tsConfig.compilerOptions ||= {};
ctx.tsConfig.compilerOptions.types ||= [];
ctx.tsConfig.compilerOptions.types.push("swiper/vue");
ctx.references.push({
types: "swiper/vue"
});
}
},
setup(_options, nuxt) {
const { styleLang, prefix, modules } = _options;
const cssImports = [`swiper/${styleLang}`];
const componentImports = ["Swiper", "SwiperSlide"];
const moduleImports = [
{
name: "useSwiper",
as: "useSwiper",
from: "swiper/vue"
},
{
name: "useSwiperSlide",
as: "useSwiperSlide",
from: "swiper/vue"
}
];
for (const [key, _] of Object.entries(swiperModulesImports)) {
const snakeCase = key.replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, "$1-$2").replace(/^-/, "").toLowerCase();
const hasModule = modules === "*" || Array.isArray(modules) && modules.includes(snakeCase);
if (hasModule && !["default", "Swiper"].includes(key)) {
const noCssInModules = [
"autoplay",
"controller",
"effect-coverflow",
"hash-navigation",
"history",
"keyboard",
"manipulation",
"mousewheel",
"parallax",
"thumbs"
];
if (!noCssInModules.includes(snakeCase)) {
cssImports.push(`swiper/${styleLang}/${snakeCase}`);
}
moduleImports.push({
name: key,
as: `${prefix}${key}`,
from: "swiper/modules"
});
}
}
for (const cName of componentImports) {
addComponent({
name: cName,
export: cName,
filePath: "swiper/vue"
});
}
addImports(moduleImports);
nuxt.options.css = [...nuxt.options.css, ...cssImports];
extendViteConfig((config) => {
config.build = config.build || {};
config.build.rollupOptions = config.build.rollupOptions || {};
config.build.rollupOptions.output = config.build.rollupOptions.output || {};
config.build.rollupOptions.output = {
...config.build.rollupOptions.output,
manualChunks: (id) => {
if (id.includes("/node_modules/swiper")) {
return "swiper-vue";
}
}
};
});
}
});
export { module$1 as default };