UNPKG

nuxt3-swiper

Version:
100 lines (96 loc) 2.83 kB
import * as swiperModulesImports from 'swiper/modules'; import { defineNuxtModule, addComponent, addImports, extendViteConfig } from '@nuxt/kit'; const name$1 = "nuxt3-swiper"; const version$1 = "1.2.1"; const packageConfig = { name: name$1, version: version$1}; const { name, version } = packageConfig; const module = 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 as default };