diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 903cee7..55bdd1d 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -65,6 +65,33 @@ jobs: - name: Lint run: pnpm lint + test: + runs-on: ${{ matrix.os }} + + strategy: + matrix: + node: [16] + os: [ubuntu-latest] + fail-fast: false + + steps: + - name: Checkout + uses: actions/checkout@master + + - run: corepack enable + + - name: Setup Node + uses: actions/setup-node@v3 + with: + cache: 'pnpm' + node-version: ${{ matrix.node }} + + - name: Install dependencies + run: pnpm install --shamefully-hoist --frozen-lockfile + + - name: Run Tests + run: pnpm test + release-build: if: | github.event_name == 'push' && diff --git a/package.json b/package.json index 6b001a1..b78f975 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "nuxt-swiper", - "version": "0.1.4", + "version": "0.1.1", "keywords": [ "vue", "nuxt", @@ -36,6 +36,7 @@ "dev": "nuxi dev playground", "lint": "eslint --ext .js,.ts,.vue .", "lint:fix": "eslint --fix --ext .js,.ts,.vue .", + "test": "vitest run --dir test", "dev:build": "nuxi build playground", "prepare": "nuxt-module-build --stub && nuxi prepare playground" }, @@ -46,12 +47,15 @@ "devDependencies": { "@nuxt/module-builder": "latest", "@nuxt/schema": "^3.0.0-rc.9", + "@nuxt/test-utils": "3.0.0-rc.9", "@nuxtjs/eslint-config-typescript": "latest", "@typescript-eslint/parser": "^5.0.1", "eslint": "^8.7.0", "nuxt": "^3.0.0-rc.9", "prettier": "^2.5.1", "typescript": "^4.4.4", + "vue": "^3.2.38", + "vitest": "^0.23.2", "vue-eslint-parser": "^9.1.0" }, "resolutions": { diff --git a/playground/app.vue b/playground/app.vue index 033924e..a3c6fe8 100644 --- a/playground/app.vue +++ b/playground/app.vue @@ -4,8 +4,12 @@ const colors = Array.from({ length: 10 }, () => { const r = Math.floor(Math.random() * 256) const g = Math.floor(Math.random() * 256) const b = Math.floor(Math.random() * 256) - return `rgb(${r}, ${g}, ${b})` + // Figure out contrast color for font + const contrast = r * 0.299 + g * 0.587 + b * 0.114 > 186 ? 'black' : 'white' + + return { bg: `rgb(${r}, ${g}, ${b})`, color: contrast } }) + const fakeArray = ref(colors) @@ -13,11 +17,13 @@ const fakeArray = ref(colors)

nuxt-swiper playground

+
+

Swiper Creative Effect

+ {{ idx }} + + +

Swiper Card Effect

+ + {{ idx }} @@ -56,8 +82,16 @@ const fakeArray = ref(colors) font-size: 18px; width: 100vh; height: 20vh; - color: #000; font-size: 4rem; font-weight: bold; + font-family: 'Roboto', sans-serif; +} +.swiper-cards { + width: 240px; + height: 240px; +} +.swiper-cards .swiper-slide { + border-radius: 6px; + border: 1px solid black; } diff --git a/playground/nuxt.config.ts b/playground/nuxt.config.ts index 13308e2..7b8fbdc 100644 --- a/playground/nuxt.config.ts +++ b/playground/nuxt.config.ts @@ -3,7 +3,6 @@ import { defineNuxtConfig } from 'nuxt' export default defineNuxtConfig({ modules: ['nuxt-swiper'], swiper: { - modules: ['autoplay', 'effect-creative'], - importComposables: true + modules: ['autoplay', 'effect-creative', 'effect-cards'] } }) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2c2f8bf..e3ab40a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,6 +10,7 @@ importers: '@nuxt/kit': ^3.0.0-rc.9 '@nuxt/module-builder': latest '@nuxt/schema': ^3.0.0-rc.9 + '@nuxt/test-utils': 3.0.0-rc.9 '@nuxtjs/eslint-config-typescript': latest '@typescript-eslint/parser': ^5.0.1 eslint: ^8.7.0 @@ -17,6 +18,8 @@ importers: prettier: ^2.5.1 swiper: ^8.3.2 typescript: ^4.4.4 + vitest: ^0.23.2 + vue: ^3.2.38 vue-eslint-parser: ^9.1.0 dependencies: '@nuxt/kit': registry.npmjs.org/@nuxt/kit/3.0.0-rc.9 @@ -24,12 +27,15 @@ importers: devDependencies: '@nuxt/module-builder': registry.npmjs.org/@nuxt/module-builder/0.1.7 '@nuxt/schema': registry.npmjs.org/@nuxt/schema/3.0.0-rc.9 + '@nuxt/test-utils': registry.npmjs.org/@nuxt/test-utils/3.0.0-rc.9_vue@3.2.39 '@nuxtjs/eslint-config-typescript': registry.npmjs.org/@nuxtjs/eslint-config-typescript/11.0.0_irgkl5vooow2ydyo6aokmferha '@typescript-eslint/parser': registry.npmjs.org/@typescript-eslint/parser/5.37.0_irgkl5vooow2ydyo6aokmferha eslint: registry.npmjs.org/eslint/8.23.1 nuxt: registry.npmjs.org/nuxt/3.0.0-rc.9_irgkl5vooow2ydyo6aokmferha prettier: registry.npmjs.org/prettier/2.7.1 typescript: registry.npmjs.org/typescript/4.8.3 + vitest: registry.npmjs.org/vitest/0.23.2 + vue: registry.npmjs.org/vue/3.2.39 vue-eslint-parser: registry.npmjs.org/vue-eslint-parser/9.1.0_eslint@8.23.1 playground: @@ -38,6 +44,12 @@ importers: devDependencies: nuxt-swiper: link:.. + test/fixtures/basic: + specifiers: + nuxt-swiper: link:../../.. + devDependencies: + nuxt-swiper: link:../../.. + packages: registry.npmjs.org/@ampproject/remapping/2.2.0: @@ -753,6 +765,31 @@ packages: - webpack dev: true + registry.npmjs.org/@nuxt/test-utils/3.0.0-rc.9_vue@3.2.39: + resolution: {integrity: sha512-q7UTiP2td1GWTFSIFlO0XA49mNMMt7VGDWdpW8kzuVBrP2ty8J+YFBO554kosKMQQ9/wmXWSFbGbGneC3uyNXQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@nuxt/test-utils/-/test-utils-3.0.0-rc.9.tgz} + id: registry.npmjs.org/@nuxt/test-utils/3.0.0-rc.9 + name: '@nuxt/test-utils' + version: 3.0.0-rc.9 + engines: {node: ^14.16.0 || ^16.11.0 || ^17.0.0 || ^18.0.0} + peerDependencies: + vue: ^3.2.38 + dependencies: + '@nuxt/kit': registry.npmjs.org/@nuxt/kit/3.0.0-rc.9 + '@nuxt/schema': registry.npmjs.org/@nuxt/schema/3.0.0-rc.9 + defu: registry.npmjs.org/defu/6.1.0 + execa: registry.npmjs.org/execa/6.1.0 + get-port-please: registry.npmjs.org/get-port-please/2.6.1 + jiti: registry.npmjs.org/jiti/1.15.0 + ohmyfetch: registry.npmjs.org/ohmyfetch/0.4.18 + vue: registry.npmjs.org/vue/3.2.39 + transitivePeerDependencies: + - esbuild + - rollup + - supports-color + - vite + - webpack + dev: true + registry.npmjs.org/@nuxt/ui-templates/0.3.3: resolution: {integrity: sha512-EgxICRWv+VCkt3wjCuJUJqNOFACF3h6FX3Mj+hDXshf6ECvl/y8BWEVGC5T2N8tE/bFcNC6rEJxPsp4s+4+XOQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@nuxt/ui-templates/-/ui-templates-0.3.3.tgz} name: '@nuxt/ui-templates' @@ -1036,6 +1073,20 @@ packages: engines: {node: '>=10.13.0'} dev: true + registry.npmjs.org/@types/chai-subset/1.3.3: + resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@types/chai-subset/-/chai-subset-1.3.3.tgz} + name: '@types/chai-subset' + version: 1.3.3 + dependencies: + '@types/chai': registry.npmjs.org/@types/chai/4.3.3 + dev: true + + registry.npmjs.org/@types/chai/4.3.3: + resolution: {integrity: sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz} + name: '@types/chai' + version: 4.3.3 + dev: true + registry.npmjs.org/@types/estree/0.0.39: resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz} name: '@types/estree' @@ -1612,7 +1663,7 @@ packages: call-bind: registry.npmjs.org/call-bind/1.0.2 define-properties: registry.npmjs.org/define-properties/1.1.4 es-abstract: registry.npmjs.org/es-abstract/1.20.2 - get-intrinsic: registry.npmjs.org/get-intrinsic/1.1.2 + get-intrinsic: registry.npmjs.org/get-intrinsic/1.1.3 is-string: registry.npmjs.org/is-string/1.0.7 dev: true @@ -1635,6 +1686,12 @@ packages: es-shim-unscopables: registry.npmjs.org/es-shim-unscopables/1.0.0 dev: true + registry.npmjs.org/assertion-error/1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz} + name: assertion-error + version: 1.1.0 + dev: true + registry.npmjs.org/async-sema/3.1.1: resolution: {integrity: sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/async-sema/-/async-sema-3.1.1.tgz} name: async-sema @@ -1658,7 +1715,7 @@ packages: postcss: ^8.1.0 dependencies: browserslist: registry.npmjs.org/browserslist/4.21.3 - caniuse-lite: registry.npmjs.org/caniuse-lite/1.0.30001397 + caniuse-lite: registry.npmjs.org/caniuse-lite/1.0.30001399 fraction.js: registry.npmjs.org/fraction.js/4.2.0 normalize-range: registry.npmjs.org/normalize-range/0.1.2 picocolors: registry.npmjs.org/picocolors/1.0.0 @@ -1750,10 +1807,10 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: registry.npmjs.org/caniuse-lite/1.0.30001397 + caniuse-lite: registry.npmjs.org/caniuse-lite/1.0.30001399 electron-to-chromium: registry.npmjs.org/electron-to-chromium/1.4.248 node-releases: registry.npmjs.org/node-releases/2.0.6 - update-browserslist-db: registry.npmjs.org/update-browserslist-db/1.0.8_browserslist@4.21.3 + update-browserslist-db: registry.npmjs.org/update-browserslist-db/1.0.9_browserslist@4.21.3 registry.npmjs.org/buffer-crc32/0.2.13: resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz} @@ -1820,7 +1877,7 @@ packages: version: 1.0.2 dependencies: function-bind: registry.npmjs.org/function-bind/1.1.1 - get-intrinsic: registry.npmjs.org/get-intrinsic/1.1.2 + get-intrinsic: registry.npmjs.org/get-intrinsic/1.1.3 dev: true registry.npmjs.org/callsites/3.1.0: @@ -1843,15 +1900,30 @@ packages: version: 3.0.0 dependencies: browserslist: registry.npmjs.org/browserslist/4.21.3 - caniuse-lite: registry.npmjs.org/caniuse-lite/1.0.30001397 + caniuse-lite: registry.npmjs.org/caniuse-lite/1.0.30001399 lodash.memoize: registry.npmjs.org/lodash.memoize/4.1.2 lodash.uniq: registry.npmjs.org/lodash.uniq/4.5.0 dev: true - registry.npmjs.org/caniuse-lite/1.0.30001397: - resolution: {integrity: sha512-SW9N2TbCdLf0eiNDRrrQXx2sOkaakNZbCjgNpPyMJJbiOrU5QzMIrXOVMRM1myBXTD5iTkdrtU/EguCrBocHlA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001397.tgz} + registry.npmjs.org/caniuse-lite/1.0.30001399: + resolution: {integrity: sha512-4vQ90tMKS+FkvuVWS5/QY1+d805ODxZiKFzsU8o/RsVJz49ZSRR8EjykLJbqhzdPgadbX6wB538wOzle3JniRA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001399.tgz} name: caniuse-lite - version: 1.0.30001397 + version: 1.0.30001399 + + registry.npmjs.org/chai/4.3.6: + resolution: {integrity: sha512-bbcp3YfHCUzMOvKqsztczerVgBKSsEijCySNlHHbX3VG1nskvqjz5Rfso1gGwD6w6oOV3eI60pKuMOV5MV7p3Q==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/chai/-/chai-4.3.6.tgz} + name: chai + version: 4.3.6 + engines: {node: '>=4'} + dependencies: + assertion-error: registry.npmjs.org/assertion-error/1.1.0 + check-error: registry.npmjs.org/check-error/1.0.2 + deep-eql: registry.npmjs.org/deep-eql/3.0.1 + get-func-name: registry.npmjs.org/get-func-name/2.0.0 + loupe: registry.npmjs.org/loupe/2.3.4 + pathval: registry.npmjs.org/pathval/1.1.1 + type-detect: registry.npmjs.org/type-detect/4.0.8 + dev: true registry.npmjs.org/chalk/2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz} @@ -1886,6 +1958,12 @@ packages: version: 0.7.0 dev: true + registry.npmjs.org/check-error/1.0.2: + resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/check-error/-/check-error-1.0.2.tgz} + name: check-error + version: 1.0.2 + dev: true + registry.npmjs.org/chokidar/3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz} name: chokidar @@ -2324,6 +2402,15 @@ packages: dependencies: ms: registry.npmjs.org/ms/2.1.2 + registry.npmjs.org/deep-eql/3.0.1: + resolution: {integrity: sha512-+QeIQyN5ZuO+3Uk5DYh6/1eKO0m0YmJFGNmFHGACpf1ClL1nmlV/p4gNgbl2pJGxgXb4faqo6UE+M5ACEMyVcw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/deep-eql/-/deep-eql-3.0.1.tgz} + name: deep-eql + version: 3.0.1 + engines: {node: '>=0.12'} + dependencies: + type-detect: registry.npmjs.org/type-detect/4.0.8 + dev: true + registry.npmjs.org/deep-is/0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz} name: deep-is @@ -2598,7 +2685,7 @@ packages: es-to-primitive: registry.npmjs.org/es-to-primitive/1.2.1 function-bind: registry.npmjs.org/function-bind/1.1.1 function.prototype.name: registry.npmjs.org/function.prototype.name/1.1.5 - get-intrinsic: registry.npmjs.org/get-intrinsic/1.1.2 + get-intrinsic: registry.npmjs.org/get-intrinsic/1.1.3 get-symbol-description: registry.npmjs.org/get-symbol-description/1.0.0 has: registry.npmjs.org/has/1.0.3 has-property-descriptors: registry.npmjs.org/has-property-descriptors/1.0.0 @@ -3635,6 +3722,23 @@ packages: strip-final-newline: registry.npmjs.org/strip-final-newline/2.0.0 dev: true + registry.npmjs.org/execa/6.1.0: + resolution: {integrity: sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/execa/-/execa-6.1.0.tgz} + name: execa + version: 6.1.0 + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + cross-spawn: registry.npmjs.org/cross-spawn/7.0.3 + get-stream: registry.npmjs.org/get-stream/6.0.1 + human-signals: registry.npmjs.org/human-signals/3.0.1 + is-stream: registry.npmjs.org/is-stream/3.0.0 + merge-stream: registry.npmjs.org/merge-stream/2.0.0 + npm-run-path: registry.npmjs.org/npm-run-path/5.1.0 + onetime: registry.npmjs.org/onetime/6.0.0 + signal-exit: registry.npmjs.org/signal-exit/3.0.7 + strip-final-newline: registry.npmjs.org/strip-final-newline/3.0.0 + dev: true + registry.npmjs.org/external-editor/3.1.0: resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz} name: external-editor @@ -3927,10 +4031,16 @@ packages: engines: {node: 6.* || 8.* || >= 10.*} dev: true - registry.npmjs.org/get-intrinsic/1.1.2: - resolution: {integrity: sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz} + registry.npmjs.org/get-func-name/2.0.0: + resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.0.tgz} + name: get-func-name + version: 2.0.0 + dev: true + + registry.npmjs.org/get-intrinsic/1.1.3: + resolution: {integrity: sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz} name: get-intrinsic - version: 1.1.2 + version: 1.1.3 dependencies: function-bind: registry.npmjs.org/function-bind/1.1.1 has: registry.npmjs.org/has/1.0.3 @@ -3959,7 +4069,7 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: registry.npmjs.org/call-bind/1.0.2 - get-intrinsic: registry.npmjs.org/get-intrinsic/1.1.2 + get-intrinsic: registry.npmjs.org/get-intrinsic/1.1.3 dev: true registry.npmjs.org/get-tsconfig/4.2.0: @@ -4139,7 +4249,7 @@ packages: name: has-property-descriptors version: 1.0.0 dependencies: - get-intrinsic: registry.npmjs.org/get-intrinsic/1.1.2 + get-intrinsic: registry.npmjs.org/get-intrinsic/1.1.3 dev: true registry.npmjs.org/has-symbols/1.0.3: @@ -4249,6 +4359,13 @@ packages: engines: {node: '>=10.17.0'} dev: true + registry.npmjs.org/human-signals/3.0.1: + resolution: {integrity: sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz} + name: human-signals + version: 3.0.1 + engines: {node: '>=12.20.0'} + dev: true + registry.npmjs.org/iconv-lite/0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz} name: iconv-lite @@ -4343,7 +4460,7 @@ packages: version: 1.0.3 engines: {node: '>= 0.4'} dependencies: - get-intrinsic: registry.npmjs.org/get-intrinsic/1.1.2 + get-intrinsic: registry.npmjs.org/get-intrinsic/1.1.3 has: registry.npmjs.org/has/1.0.3 side-channel: registry.npmjs.org/side-channel/1.0.4 dev: true @@ -4558,6 +4675,13 @@ packages: engines: {node: '>=8'} dev: true + registry.npmjs.org/is-stream/3.0.0: + resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz} + name: is-stream + version: 3.0.0 + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dev: true + registry.npmjs.org/is-string/1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz} name: is-string @@ -4895,6 +5019,14 @@ packages: is-unicode-supported: registry.npmjs.org/is-unicode-supported/1.3.0 dev: true + registry.npmjs.org/loupe/2.3.4: + resolution: {integrity: sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/loupe/-/loupe-2.3.4.tgz} + name: loupe + version: 2.3.4 + dependencies: + get-func-name: registry.npmjs.org/get-func-name/2.0.0 + dev: true + registry.npmjs.org/lru-cache/6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz} name: lru-cache @@ -4995,6 +5127,13 @@ packages: engines: {node: '>=6'} dev: true + registry.npmjs.org/mimic-fn/4.0.0: + resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz} + name: mimic-fn + version: 4.0.0 + engines: {node: '>=12'} + dev: true + registry.npmjs.org/min-indent/1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz} name: min-indent @@ -5360,6 +5499,15 @@ packages: path-key: registry.npmjs.org/path-key/3.1.1 dev: true + registry.npmjs.org/npm-run-path/5.1.0: + resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz} + name: npm-run-path + version: 5.1.0 + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + path-key: registry.npmjs.org/path-key/4.0.0 + dev: true + registry.npmjs.org/npmlog/5.0.1: resolution: {integrity: sha512-AqZtDUWOMKs1G/8lwylVjrdYgqA4d9nu8hc+0gzRxlDb1I10+FHBGMXs6aiQHFdCUUlqH99MUMuLfzWDNDtfxw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz} name: npmlog @@ -5543,6 +5691,15 @@ packages: mimic-fn: registry.npmjs.org/mimic-fn/2.1.0 dev: true + registry.npmjs.org/onetime/6.0.0: + resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz} + name: onetime + version: 6.0.0 + engines: {node: '>=12'} + dependencies: + mimic-fn: registry.npmjs.org/mimic-fn/4.0.0 + dev: true + registry.npmjs.org/open/8.4.0: resolution: {integrity: sha512-XgFPPM+B28FtCCgSb9I+s9szOC1vZRSwgWsRUA5ylIxRTgKozqjOCrVOqGsYABPYK5qnfqClxZTFBa8PKt2v6Q==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/open/-/open-8.4.0.tgz} name: open @@ -5710,6 +5867,13 @@ packages: engines: {node: '>=8'} dev: true + registry.npmjs.org/path-key/4.0.0: + resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz} + name: path-key + version: 4.0.0 + engines: {node: '>=12'} + dev: true + registry.npmjs.org/path-parse/1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz} name: path-parse @@ -5733,6 +5897,12 @@ packages: name: pathe version: 0.3.7 + registry.npmjs.org/pathval/1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz} + name: pathval + version: 1.1.1 + dev: true + registry.npmjs.org/perfect-debounce/0.1.3: resolution: {integrity: sha512-NOT9AcKiDGpnV/HBhI22Str++XWcErO/bALvHCuhv33owZW/CjH8KAFLZDCmu3727sihe0wTxpDhyGc6M8qacQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/perfect-debounce/-/perfect-debounce-0.1.3.tgz} name: perfect-debounce @@ -6554,6 +6724,16 @@ packages: fsevents: registry.npmjs.org/fsevents/2.3.2 dev: true + registry.npmjs.org/rollup/2.78.1: + resolution: {integrity: sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/rollup/-/rollup-2.78.1.tgz} + name: rollup + version: 2.78.1 + engines: {node: '>=10.0.0'} + hasBin: true + optionalDependencies: + fsevents: registry.npmjs.org/fsevents/2.3.2 + dev: true + registry.npmjs.org/rollup/2.79.0: resolution: {integrity: sha512-x4KsrCgwQ7ZJPcFA/SUu6QVcYlO7uRLfLAy0DSA4NS2eG8japdbpM50ToH7z4iObodRYOJ0soneF0iaQRJ6zhA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/rollup/-/rollup-2.79.0.tgz} name: rollup @@ -6739,7 +6919,7 @@ packages: version: 1.0.4 dependencies: call-bind: registry.npmjs.org/call-bind/1.0.2 - get-intrinsic: registry.npmjs.org/get-intrinsic/1.1.2 + get-intrinsic: registry.npmjs.org/get-intrinsic/1.1.3 object-inspect: registry.npmjs.org/object-inspect/1.12.2 dev: true @@ -6947,6 +7127,13 @@ packages: engines: {node: '>=6'} dev: true + registry.npmjs.org/strip-final-newline/3.0.0: + resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz} + name: strip-final-newline + version: 3.0.0 + engines: {node: '>=12'} + dev: true + registry.npmjs.org/strip-indent/3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz} name: strip-indent @@ -7145,6 +7332,26 @@ packages: version: 1.2.0 dev: true + registry.npmjs.org/tinybench/2.1.5: + resolution: {integrity: sha512-ak+PZZEuH3mw6CCFOgf5S90YH0MARnZNhxjhjguAmoJimEMAJuNip/rJRd6/wyylHItomVpKTzZk9zrhTrQCoQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/tinybench/-/tinybench-2.1.5.tgz} + name: tinybench + version: 2.1.5 + dev: true + + registry.npmjs.org/tinypool/0.3.0: + resolution: {integrity: sha512-NX5KeqHOBZU6Bc0xj9Vr5Szbb1j8tUHIeD18s41aDJaPeC5QTdEhK0SpdpUrZlj2nv5cctNcSjaKNanXlfcVEQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/tinypool/-/tinypool-0.3.0.tgz} + name: tinypool + version: 0.3.0 + engines: {node: '>=14.0.0'} + dev: true + + registry.npmjs.org/tinyspy/1.0.2: + resolution: {integrity: sha512-bSGlgwLBYf7PnUsQ6WOc6SJ3pGOcd+d8AA6EUnLDDM0kWEstC1JIlSZA3UNliDXhd9ABoS7hiRBDCu+XP/sf1Q==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/tinyspy/-/tinyspy-1.0.2.tgz} + name: tinyspy + version: 1.0.2 + engines: {node: '>=14.0.0'} + dev: true + registry.npmjs.org/tmp/0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz} name: tmp @@ -7226,6 +7433,13 @@ packages: prelude-ls: registry.npmjs.org/prelude-ls/1.2.1 dev: true + registry.npmjs.org/type-detect/4.0.8: + resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz} + name: type-detect + version: 4.0.8 + engines: {node: '>=4'} + dev: true + registry.npmjs.org/type-fest/0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz} name: type-fest @@ -7573,11 +7787,11 @@ packages: transitivePeerDependencies: - supports-color - registry.npmjs.org/update-browserslist-db/1.0.8_browserslist@4.21.3: - resolution: {integrity: sha512-GHg7C4M7oJSJYW/ED/5QOJ7nL/E0lwTOBGsOorA7jqHr8ExUhPfwAotIAmdSw/LWv3SMLSNpzTAgeLG9zaZKTA==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.8.tgz} - id: registry.npmjs.org/update-browserslist-db/1.0.8 + registry.npmjs.org/update-browserslist-db/1.0.9_browserslist@4.21.3: + resolution: {integrity: sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.9.tgz} + id: registry.npmjs.org/update-browserslist-db/1.0.9 name: update-browserslist-db - version: 1.0.8 + version: 1.0.9 hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -7698,6 +7912,78 @@ packages: fsevents: registry.npmjs.org/fsevents/2.3.2 dev: true + registry.npmjs.org/vite/3.1.0: + resolution: {integrity: sha512-YBg3dUicDpDWFCGttmvMbVyS9ydjntwEjwXRj2KBFwSB8SxmGcudo1yb8FW5+M/G86aS8x828ujnzUVdsLjs9g==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/vite/-/vite-3.1.0.tgz} + name: vite + version: 3.1.0 + engines: {node: ^14.18.0 || >=16.0.0} + hasBin: true + peerDependencies: + less: '*' + sass: '*' + stylus: '*' + terser: ^5.4.0 + peerDependenciesMeta: + less: + optional: true + sass: + optional: true + stylus: + optional: true + terser: + optional: true + dependencies: + esbuild: registry.npmjs.org/esbuild/0.15.7 + postcss: registry.npmjs.org/postcss/8.4.16 + resolve: registry.npmjs.org/resolve/1.22.1 + rollup: registry.npmjs.org/rollup/2.78.1 + optionalDependencies: + fsevents: registry.npmjs.org/fsevents/2.3.2 + dev: true + + registry.npmjs.org/vitest/0.23.2: + resolution: {integrity: sha512-kTBKp3ROPDkYC+x2zWt4znkDtnT08W1FQ6ngRFuqxpBGNuNVS+eWZKfffr8y2JGvEzZ9EzMAOcNaiqMj/FZqMw==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/vitest/-/vitest-0.23.2.tgz} + name: vitest + version: 0.23.2 + engines: {node: '>=v14.16.0'} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@vitest/browser': '*' + '@vitest/ui': '*' + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + dependencies: + '@types/chai': registry.npmjs.org/@types/chai/4.3.3 + '@types/chai-subset': registry.npmjs.org/@types/chai-subset/1.3.3 + '@types/node': registry.npmjs.org/@types/node/18.7.17 + chai: registry.npmjs.org/chai/4.3.6 + debug: registry.npmjs.org/debug/4.3.4 + local-pkg: registry.npmjs.org/local-pkg/0.4.2 + strip-literal: registry.npmjs.org/strip-literal/0.4.1 + tinybench: registry.npmjs.org/tinybench/2.1.5 + tinypool: registry.npmjs.org/tinypool/0.3.0 + tinyspy: registry.npmjs.org/tinyspy/1.0.2 + vite: registry.npmjs.org/vite/3.1.0 + transitivePeerDependencies: + - less + - sass + - stylus + - supports-color + - terser + dev: true + registry.npmjs.org/vscode-jsonrpc/6.0.0: resolution: {integrity: sha512-wnJA4BnEjOSyFMvjZdpiOwhSq9uDoK8e/kpRJDTaMYzwlkrhG1fwDIZI94CLsLzlCK5cIbMMtFlJlfR57Lavmg==, registry: https://registry.yarnpkg.com/, tarball: https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-6.0.0.tgz} name: vscode-jsonrpc diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index d22478d..69992bc 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,2 +1,3 @@ packages: - 'playground' + - 'test/fixtures/*' diff --git a/src/module.ts b/src/module.ts index d4e78d7..0393bfc 100644 --- a/src/module.ts +++ b/src/module.ts @@ -19,15 +19,15 @@ export default defineNuxtModule({ configKey: 'swiper' }, defaults: { - modules: [], + prefix: 'Swiper', styleLang: 'css', - importComposables: false + modules: [] }, - setup (options, nuxt) { - let { styleLang } = options + setup (_options, nuxt) { + let { styleLang } = _options const logger = useLogger(name) - const { modules, importComposables } = options + const { prefix, modules } = _options const { resolve } = createResolver(import.meta.url) const runtimePath = resolve('./runtime') @@ -63,7 +63,7 @@ export default defineNuxtModule({ } // Add Imports Swiper Modules. - for (const [key, func] of Object.entries(swiper.default)) { + for (const [key, _] of Object.entries(swiper)) { // Turn key to snake-case. const snakeCase: string = key .replace(/([a-z0-9]|(?=[A-Z]))([A-Z])/g, '$1-$2') @@ -74,19 +74,17 @@ export default defineNuxtModule({ modules === '*' || (Array.isArray(modules) && modules.includes(snakeCase as any)) - if (hasModule) { + if (hasModule && key !== 'default') { addImports({ name: key, - as: `Swiper${key}`, + as: `${prefix}${key}`, from: 'swiper' }) } } // Add Composables imports from `swiper/vue`. - if (importComposables) { - addImportsDir(resolve(runtimePath, 'composables')) - } + addImportsDir(resolve(runtimePath, 'composables')) // Add Plugin addPlugin(resolve(runtimePath, 'plugin')) diff --git a/src/types.ts b/src/types.ts index 0fb7613..296dc10 100644 --- a/src/types.ts +++ b/src/types.ts @@ -23,6 +23,17 @@ type SwiperModulesType = | `effect-${SwiperInterface['effect']}` export interface SwiperModuleOptions { + /** + * The prefix to use for the Swiper Modules to import. + * This is useful for importing only the modules you need and + * avoiding importing the entire Swiper library. + * + * e.g. `${prefix}Autoplay` -> `SwiperAutoplay` + * + * @default 'Swiper' + */ + prefix?: string + /** * Which type of lang of styles to import * @@ -42,13 +53,4 @@ export interface SwiperModuleOptions { * @default [] */ modules?: SwiperModulesType[] | '*' - - /** - * Import Swiper Composables - * - * `useSwiper`, `useSwiperSlide`. - * - * @default true - */ - importComposables?: boolean } diff --git a/test/basic.test.ts b/test/basic.test.ts new file mode 100644 index 0000000..26ec905 --- /dev/null +++ b/test/basic.test.ts @@ -0,0 +1,17 @@ +import { fileURLToPath } from 'node:url' +import { describe, it, expect } from 'vitest' +import { setup, $fetch } from '@nuxt/test-utils' + +await setup({ + server: true, + rootDir: fileURLToPath(new URL('./fixtures/basic', import.meta.url)) +}) + +describe('test suite', () => { + it('renders (10) Swiper Slides', async () => { + const result = await $fetch('/') + for (let i = 0; i < 10; i++) { + expect(result).toContain(`data-swiper-slide-index="${i}"`) + } + }, 15000) +}) diff --git a/test/fixtures/basic/app.vue b/test/fixtures/basic/app.vue new file mode 100644 index 0000000..2d9fdbc --- /dev/null +++ b/test/fixtures/basic/app.vue @@ -0,0 +1,44 @@ + + + diff --git a/test/fixtures/basic/nuxt.config.ts b/test/fixtures/basic/nuxt.config.ts new file mode 100644 index 0000000..5733cc1 --- /dev/null +++ b/test/fixtures/basic/nuxt.config.ts @@ -0,0 +1,8 @@ +import { defineNuxtConfig } from 'nuxt' + +export default defineNuxtConfig({ + modules: ['nuxt-swiper'], + swiper: { + modules: '*' + } +}) diff --git a/test/fixtures/basic/package.json b/test/fixtures/basic/package.json new file mode 100644 index 0000000..243c8ae --- /dev/null +++ b/test/fixtures/basic/package.json @@ -0,0 +1,7 @@ +{ + "private": true, + "name": "fixture-basic", + "devDependencies": { + "nuxt-swiper": "workspace:*" + } +}