diff --git a/.eslintrc.cjs b/.eslintrc.cjs new file mode 100644 index 0000000..a718c90 --- /dev/null +++ b/.eslintrc.cjs @@ -0,0 +1,15 @@ +/* eslint-env node */ +require("@rushstack/eslint-patch/modern-module-resolution"); + +module.exports = { + "root": true, + "extends": [ + "plugin:vue/vue3-essential", + "eslint:recommended", + "@vue/eslint-config-typescript/recommended", + "@vue/eslint-config-prettier" + ], + "env": { + "vue/setup-compiler-macros": true + } +} diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index f7b4a89..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1,22 +0,0 @@ -module.exports = { - parser: 'vue-eslint-parser', - parserOptions: { - parser: 'babel-eslint', - sourceType: 'module', - }, - plugins: ['prettier'], - extends: [ - 'plugin:prettier/recommended', - 'plugin:vue/recommended', - 'prettier/vue', - ], - ignorePatterns: [ - '!.*.js', - '!docs/.vuepress', - 'docs/.vuepress/dist', - 'node_modules', - 'dist', - 'coverage', - 'yarn.lock', - ], -} diff --git a/.gitignore b/.gitignore index 0c24238..48ad441 100644 --- a/.gitignore +++ b/.gitignore @@ -7,6 +7,10 @@ node_modules .env.*.local # Log files +logs +*.log +pnpm-debug.log* +lerna-debug.log* npm-debug.log* yarn-debug.log* yarn-error.log* @@ -26,5 +30,7 @@ dist test/unit/coverage package-lock.json dev/dist -docs/.vuepress/dist +dist-ssr +*.local .netlify +docs/.vuepress/dist diff --git a/build/webpack.base.conf.js b/build/webpack.base.conf.js deleted file mode 100644 index 84d00f9..0000000 --- a/build/webpack.base.conf.js +++ /dev/null @@ -1,69 +0,0 @@ -const path = require('path') -const webpack = require('webpack') -const VueLoaderPlugin = require('vue-loader').VueLoaderPlugin -const MiniCssExtractPlugin = require('mini-css-extract-plugin') - -const env = process.env.NODE_ENV === 'production' ? 'production' : 'development' - -const devtool = env === 'production' ? 'source-map' : 'eval-source-map' - -const extractOrInjectStyles = - env !== 'production' ? 'vue-style-loader' : MiniCssExtractPlugin.loader - -module.exports = { - mode: env, - output: { - path: path.resolve(__dirname, '../dist'), - publicPath: '/', - filename: '[name].js', - }, - devtool, - resolve: { - extensions: ['.js', '.vue'], - alias: { - src: path.resolve(__dirname, '../src'), - assets: path.resolve(__dirname, '../docs/assets'), - mixins: path.resolve(__dirname, '../src/mixins'), - components: path.resolve(__dirname, '../src/components'), - vue$: 'vue/dist/vue.runtime.esm-bundler.js', - }, - }, - module: { - rules: [ - { - test: /\.vue$/, - loader: 'vue-loader', - }, - { - test: /\.js$/, - loader: 'babel-loader', - include: path.resolve(__dirname, '../'), - exclude: /node_modules/, - }, - { - test: /\.s?css$/, - use: [ - extractOrInjectStyles, - 'css-loader', - 'postcss-loader', - 'sass-loader', - ], - }, - ], - }, - plugins: [ - new webpack.DefinePlugin({ - 'process.env': env, - __VUE_OPTIONS_API__: true, - __VUE_PROD_DEVTOOLS__: false, - }), - new MiniCssExtractPlugin({ - filename: 'vue-select.css', - }), - new VueLoaderPlugin(), - ], - stats: { - children: false, - modules: false, - }, -} diff --git a/build/webpack.dev.conf.js b/build/webpack.dev.conf.js deleted file mode 100644 index 20523e0..0000000 --- a/build/webpack.dev.conf.js +++ /dev/null @@ -1,37 +0,0 @@ -const merge = require('webpack-merge') -const chokidar = require('chokidar') -const HtmlWebpackPlugin = require('html-webpack-plugin') -const baseWebpackConfig = require('./webpack.base.conf') - -/** - * - */ -module.exports = merge(baseWebpackConfig, { - entry: './dev/dev.js', - plugins: [ - new HtmlWebpackPlugin({ - template: './dev/dev.html', - inject: true, - }), - ], - optimization: { - noEmitOnErrors: true, - }, - devServer: { - hot: true, - hotOnly: true, - open: true, - inline: true, - stats: { - children: false, - modules: false, - chunks: false, - }, - port: 8080, - before(app, server) { - chokidar.watch(['./**/*.html']).on('all', function () { - server.sockWrite(server.sockets, 'content-changed') - }) - }, - }, -}) diff --git a/build/webpack.prod.conf.js b/build/webpack.prod.conf.js deleted file mode 100644 index b668a0b..0000000 --- a/build/webpack.prod.conf.js +++ /dev/null @@ -1,23 +0,0 @@ -const TerserPlugin = require('terser-webpack-plugin') -const merge = require('webpack-merge') -const baseWebpackConfig = require('./webpack.base.conf') - -module.exports = merge(baseWebpackConfig, { - entry: './src/index.js', - output: { - filename: 'vue-select.js', - library: 'VueSelect', - libraryTarget: 'umd', - globalObject: "typeof self !== 'undefined' ? self : this", - }, - externals: { - vue: 'vue', - }, - optimization: { - minimizer: [ - new TerserPlugin({ - sourceMap: true, - }), - ], - }, -}) diff --git a/dev/Dev.vue b/dev/Dev.vue index fa34401..ab8e964 100644 --- a/dev/Dev.vue +++ b/dev/Dev.vue @@ -5,9 +5,8 @@ + + diff --git a/package.json b/package.json index 3e24e21..bafd20e 100644 --- a/package.json +++ b/package.json @@ -13,16 +13,16 @@ "license": "MIT", "prepare": "npm run build", "scripts": { - "serve": "webpack-dev-server --config build/webpack.dev.conf.js --hot --progress -d", - "serve:docs": "cd docs && yarn serve", - "build": "cross-env NODE_ENV=production webpack --config build/webpack.prod.conf.js --progress", + "dev:docs": "cd docs && yarn serve", "build:docs": "cd docs && yarn build", - "build:preview": "cd docs && yarn build", - "test": "jest", - "eslint": "eslint '{**/*,*}.{js,ts,jsx,tsx,vue}'", - "eslint:fix": "npm run eslint -- --fix", "semantic-release": "semantic-release", - "commit": "git-cz" + "commit": "git-cz", + "dev": "vite", + "build": "vue-tsc --noEmit && vite build", + "preview": "vite preview --port 5050", + "test:unit": "vitest --environment jsdom", + "typecheck": "vue-tsc --noEmit -p tsconfig.vitest.json --composite false", + "lint": "eslint . --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore" }, "repository": { "type": "git", @@ -31,60 +31,33 @@ "peerDependencies": { "vue": "3.x" }, - "resolutions": { - "ajv": "6.8.1" - }, "devDependencies": { - "@babel/core": "^7.4.0", - "@babel/eslint-parser": "^7.14.7", - "@babel/plugin-transform-runtime": "^7.4.0", - "@babel/preset-env": "^7.4.2", - "@babel/runtime": "^7.4.2", + "@rushstack/eslint-patch": "^1.1.0", "@semantic-release/git": "^9.0.0", "@semantic-release/github": "^7.0.4", - "@vue/compiler-sfc": "^3.2.20", - "@vue/test-utils": "^2.0.0-rc.16", - "autoprefixer": "^9.4.7", - "babel-core": "^7.0.0-bridge.0", - "babel-eslint": "^10.0.3", - "babel-loader": "^8.0.5", + "@types/jsdom": "^16.2.14", + "@types/node": "^16.11.22", + "@vitejs/plugin-vue": "^2.1.0", + "@vue/eslint-config-prettier": "^7.0.0", + "@vue/eslint-config-typescript": "^10.0.0", + "@vue/test-utils": "^2.0.0-rc.18", + "@vue/tsconfig": "^0.1.3", + "autoprefixer": "^10.4.2", "bundlewatch": "^0.2.5", - "chokidar": "^2.1.5", "commitizen": "^4.0.3", "coveralls": "^3.0.2", "cross-env": "^5.2.0", - "css-loader": "^2.1.0", - "cssnano": "^4.1.10", "cz-conventional-changelog": "3.1.0", - "eslint": "^6.8.0", - "eslint-config-prettier": "^6.10.0", - "eslint-loader": "^3.0.3", - "eslint-plugin-prettier": "^3.1.2", - "eslint-plugin-vue": "^6.2.1", - "html-loader": "^0.5.5", - "html-webpack-plugin": "^3.2.0", - "jest": "^24.1.0", - "jest-serializer-vue": "^2.0.2", - "jest-transform-stub": "^2.0.0", - "mini-css-extract-plugin": "^0.5.0", - "node-sass": "^4.12.0", - "postcss-loader": "^3.0.0", - "postcss-scss": "^2.0.0", - "prettier": "2.2.1", - "sass-loader": "^7.1.0", + "eslint": "^8.5.0", + "eslint-plugin-vue": "^8.2.0", + "jsdom": "^19.0.0", + "prettier": "^2.5.1", "semantic-release": "^17.0.4", - "terser-webpack-plugin": "^1.2.3", - "url-loader": "^1.1.2", + "typescript": "~4.5.5", + "vite": "^2.7.13", + "vitest": "^0.2.5", "vue": "^3.2.20", - "vue-html-loader": "^1.2.4", - "vue-jest": "5.0.0-alpha.8", - "vue-loader": "^16.8.1", - "vue-server-renderer": "^2.6.10", - "vue-style-loader": "^4.1.2", - "webpack": "^4.29.6", - "webpack-cli": "^3.3.0", - "webpack-dev-server": "^3.2.1", - "webpack-merge": "^4.2.1" + "vue-tsc": "^0.31.1" }, "jest": { "moduleFileExtensions": [ diff --git a/postcss.config.js b/postcss.config.js index 82a74b0..5eb20c7 100644 --- a/postcss.config.js +++ b/postcss.config.js @@ -1,8 +1,3 @@ module.exports = { - plugins: [ - require('autoprefixer'), - require('cssnano')({ - preset: 'default', - }), - ], + plugins: [require('autoprefixer')], } diff --git a/src/__tests__/HelloWorld.spec.ts b/src/__tests__/HelloWorld.spec.ts new file mode 100644 index 0000000..2533202 --- /dev/null +++ b/src/__tests__/HelloWorld.spec.ts @@ -0,0 +1,11 @@ +import { describe, it, expect } from 'vitest' + +import { mount } from '@vue/test-utils' +import HelloWorld from '../HelloWorld.vue' + +describe('HelloWorld', () => { + it('renders properly', () => { + const wrapper = mount(HelloWorld, { props: { msg: 'Hello Vitest' } }) + expect(wrapper.text()).toContain('Hello Vitest') + }) +}) diff --git a/src/components/Select.vue b/src/components/Select.vue index 93d1f22..53ecbcd 100644 --- a/src/components/Select.vue +++ b/src/components/Select.vue @@ -34,7 +34,7 @@