diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 000000000..0f10977a6 --- /dev/null +++ b/.eslintignore @@ -0,0 +1 @@ +**/*.d.ts \ No newline at end of file diff --git a/package.json b/package.json index 8c9f78e65..fa71329fe 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ ], "main": "./dist/vue-select.umd.js", "module": "./dist/vue-select.es.js", + "types": "./dist/src/index.d.ts", "exports": { ".": { "import": "./dist/vue-select.es.js", @@ -48,6 +49,7 @@ "vue": "3.x" }, "devDependencies": { + "@babel/types": "^7.22.5", "@rushstack/eslint-patch": "^1.2.0", "@semantic-release/git": "^10.0.1", "@semantic-release/github": "^8.0.7", @@ -73,6 +75,7 @@ "semantic-release": "^19.0.5", "typescript": "^4.9.3", "vite": "^3.2.4", + "vite-plugin-dts": "^2.3.0", "vitest": "^0.25.3", "vue": "^3.2.45", "vue-tsc": "^1.0.10" diff --git a/shims-vue.d.ts b/shims-vue.d.ts new file mode 100644 index 000000000..753e7a90d --- /dev/null +++ b/shims-vue.d.ts @@ -0,0 +1,5 @@ +declare module '*.vue' { + import type { DefineComponent } from 'vue' + const component: DefineComponent, Record, any> + export default component +} \ No newline at end of file diff --git a/src/components/Select.vue b/src/components/Select.vue index 0f81b6b68..7bc2cfead 100644 --- a/src/components/Select.vue +++ b/src/components/Select.vue @@ -135,19 +135,20 @@ - diff --git a/src/components/childComponents.js b/src/components/childComponents.ts similarity index 100% rename from src/components/childComponents.js rename to src/components/childComponents.ts diff --git a/src/directives/appendToBody.js b/src/directives/appendToBody.ts similarity index 100% rename from src/directives/appendToBody.js rename to src/directives/appendToBody.ts diff --git a/src/index.js b/src/index.ts similarity index 100% rename from src/index.js rename to src/index.ts diff --git a/src/mixins/ajax.js b/src/mixins/ajax.ts similarity index 100% rename from src/mixins/ajax.js rename to src/mixins/ajax.ts diff --git a/src/mixins/index.js b/src/mixins/index.js deleted file mode 100644 index edea0523d..000000000 --- a/src/mixins/index.js +++ /dev/null @@ -1,5 +0,0 @@ -import ajax from '@/mixins/ajax.js' -import pointer from '@/mixins/typeAheadPointer.js' -import pointerScroll from '@/mixins/pointerScroll.js' - -export default { ajax, pointer, pointerScroll } diff --git a/src/mixins/index.ts b/src/mixins/index.ts new file mode 100644 index 000000000..12ab9a83f --- /dev/null +++ b/src/mixins/index.ts @@ -0,0 +1,5 @@ +import ajax from '@/mixins/ajax.ts' +import pointer from '@/mixins/typeAheadPointer.ts' +import pointerScroll from '@/mixins/pointerScroll.ts' + +export default { ajax, pointer, pointerScroll } diff --git a/src/mixins/pointerScroll.js b/src/mixins/pointerScroll.ts similarity index 100% rename from src/mixins/pointerScroll.js rename to src/mixins/pointerScroll.ts diff --git a/src/mixins/typeAheadPointer.js b/src/mixins/typeAheadPointer.ts similarity index 100% rename from src/mixins/typeAheadPointer.js rename to src/mixins/typeAheadPointer.ts diff --git a/src/utility/sortAndStringify.js b/src/utility/sortAndStringify.ts similarity index 100% rename from src/utility/sortAndStringify.js rename to src/utility/sortAndStringify.ts diff --git a/src/utility/uniqueId.js b/src/utility/uniqueId.ts similarity index 100% rename from src/utility/uniqueId.js rename to src/utility/uniqueId.ts diff --git a/tsconfig.app.json b/tsconfig.app.json index b67c3f9ae..31a813a29 100644 --- a/tsconfig.app.json +++ b/tsconfig.app.json @@ -1,6 +1,6 @@ { "extends": "@vue/tsconfig/tsconfig.web.json", - "include": ["env.d.ts", "src/**/*", "src/**/*.vue"], + "include": ["env.d.ts", "shims-vue.d.ts", "src/**/*", "src/**/*.vue"], "exclude": ["tests"], "compilerOptions": { "composite": true, diff --git a/vite.config.ts b/vite.config.ts index 38821d493..b9d9d184c 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,12 +1,16 @@ import { resolve } from 'path' import { fileURLToPath, URL } from 'url' - +import dts from 'vite-plugin-dts' import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' // https://vitejs.dev/config/ export default defineConfig({ - plugins: [vue()], + plugins: [vue(), dts({ + staticImport: true, + skipDiagnostics: false, + insertTypesEntry: true + })], publicDir: false, resolve: { alias: { @@ -17,7 +21,7 @@ export default defineConfig({ build: { target: 'es2015', lib: { - entry: resolve(__dirname, 'src/index.js'), + entry: resolve(__dirname, 'src/index.ts'), name: 'vue-select', fileName: (format) => `vue-select.${format}.js`, },