diff --git a/.eslintrc.json b/.eslintrc.json index 98b5f16..013d828 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -2,6 +2,7 @@ "root": true, "parser": "vue-eslint-parser", "parserOptions": { + "parser": "@typescript-eslint/parser", "sourceType": "module", "ecmaVersion": 2022, "ecmaFeatures": { @@ -12,7 +13,10 @@ "node": true, "es6": true }, - "extends": ["standard", "plugin:vue/vue3-recommended"], + "extends": [ + "standard", + "plugin:vue/vue3-recommended" + ], "globals": { "__static": true }, diff --git a/README.md b/README.md index 570d058..208ced8 100644 --- a/README.md +++ b/README.md @@ -48,11 +48,12 @@ https://github.com/jooy2/vutron-webpack - [Vite 3.x.x](https://vitejs.dev) - [Electron 21.x.x](https://www.electronjs.org) - [Electron Builder 23.x](https://www.electron.build) +- [TypeScript 4.x](https://www.typescriptlang.org) - [Vue 3.2.x](https://vuejs.org) - [Vue-i18n 9.x](https://kazupon.github.io/vue-i18n) - [Vue-router 4.x](https://router.vuejs.org) -- [Pinia 2.x](https://pinia.vuejs.org) - [Vuetify 3.x (Beta)](https://next.vuetifyjs.com) +- [Pinia 2.x](https://pinia.vuejs.org) - [ESLint 8.x](https://eslint.org) ## Installation diff --git a/electron-builder.json5 b/electron-builder.json5 index 1fb4dbf..3a0ffe0 100644 --- a/electron-builder.json5 +++ b/electron-builder.json5 @@ -17,6 +17,7 @@ */ "dist/**/*", "!dist/release/**/*", + "!dist/main/index.ts", "!**/.*", /* (Optional) Please review the list below based on your project preferences, as you may need to include them as needed. diff --git a/package-lock.json b/package-lock.json index 49a69f0..c6f50a6 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,6 +18,7 @@ "vuetify": "^3.0.0-beta.13" }, "devDependencies": { + "@typescript-eslint/parser": "^5.40.1", "@vitejs/plugin-vue": "^3.1.2", "@vitejs/plugin-vue-jsx": "^2.0.1", "cross-env": "^7.0.3", @@ -28,9 +29,11 @@ "eslint-friendly-formatter": "^4.0.1", "eslint-plugin-import": "^2.26.0", "eslint-plugin-vue": "^9.5.1", + "typescript": "^4.8.4", "vite": "^3.1.4", "vite-plugin-electron": "^0.9.3", - "vue-eslint-parser": "^9.1.0" + "vue-eslint-parser": "^9.1.0", + "vue-tsc": "^1.0.8" }, "engines": { "node": ">=16.0.0" @@ -1051,6 +1054,131 @@ "@types/node": "*" } }, + "node_modules/@typescript-eslint/parser": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.40.1.tgz", + "integrity": "sha512-IK6x55va5w4YvXd4b3VrXQPldV9vQTxi5ov+g4pMANsXPTXOcfjx08CRR1Dfrcc51syPtXHF5bgLlMHYFrvQtg==", + "dev": true, + "dependencies": { + "@typescript-eslint/scope-manager": "5.40.1", + "@typescript-eslint/types": "5.40.1", + "@typescript-eslint/typescript-estree": "5.40.1", + "debug": "^4.3.4" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.40.1.tgz", + "integrity": "sha512-jkn4xsJiUQucI16OLCXrLRXDZ3afKhOIqXs4R3O+M00hdQLKR58WuyXPZZjhKLFCEP2g+TXdBRtLQ33UfAdRUg==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.40.1", + "@typescript-eslint/visitor-keys": "5.40.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/types": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.40.1.tgz", + "integrity": "sha512-Icg9kiuVJSwdzSQvtdGspOlWNjVDnF3qVIKXdJ103o36yRprdl3Ge5cABQx+csx960nuMF21v8qvO31v9t3OHw==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.40.1.tgz", + "integrity": "sha512-5QTP/nW5+60jBcEPfXy/EZL01qrl9GZtbgDZtDPlfW5zj/zjNrdI2B5zMUHmOsfvOr2cWqwVdWjobCiHcedmQA==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.40.1", + "@typescript-eslint/visitor-keys": "5.40.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.40.1.tgz", + "integrity": "sha512-A2DGmeZ+FMja0geX5rww+DpvILpwo1OsiQs0M+joPWJYsiEFBLsH0y1oFymPNul6Z5okSmHpP4ivkc2N0Cgfkw==", + "dev": true, + "dependencies": { + "@typescript-eslint/types": "5.40.1", + "eslint-visitor-keys": "^3.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/@vitejs/plugin-vue": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-3.1.2.tgz", @@ -1083,6 +1211,82 @@ "vue": "^3.0.0" } }, + "node_modules/@volar/language-core": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-1.0.8.tgz", + "integrity": "sha512-uxYSOqBk8ZFSzGjUIPOBEFPOg8F3CE6cLO5meK95DODGIlUlPytGiy9sy8QZ9w7RpUH4XMOX3MH/G48SLgP07A==", + "dev": true, + "dependencies": { + "@volar/source-map": "1.0.8", + "@vue/reactivity": "^3.2.40", + "muggle-string": "^0.1.0" + } + }, + "node_modules/@volar/source-map": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-1.0.8.tgz", + "integrity": "sha512-uKMe+alyfl1Abs5SviKejFoe7x9g6jDPVpVt63Tet4qn1Ziy7tFsvtCpM2Y1Ko5qw2nLIeloLslPqm9/gmbBLQ==", + "dev": true, + "dependencies": { + "muggle-string": "^0.1.0" + } + }, + "node_modules/@volar/typescript": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-1.0.8.tgz", + "integrity": "sha512-2oY1Apvzcs/5tAn7p1tRlDxNgal5ezaK0h9cutcWALeimsaQBAEE2NAirCrLMHl8DneuDce0tzJqHaQeHw9RmQ==", + "dev": true, + "dependencies": { + "@volar/language-core": "1.0.8" + } + }, + "node_modules/@volar/vue-language-core": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@volar/vue-language-core/-/vue-language-core-1.0.8.tgz", + "integrity": "sha512-cXb7oTybxcm1vpz003agdYQHyxij7UAaSub60d7W1aMWpqb2iaCbVaq9izgQFlrpC4/JnVs+cJPb/Q6fAUVxBg==", + "dev": true, + "dependencies": { + "@volar/language-core": "1.0.8", + "@volar/source-map": "1.0.8", + "@vue/compiler-dom": "^3.2.40", + "@vue/compiler-sfc": "^3.2.40", + "@vue/reactivity": "^3.2.40", + "@vue/shared": "^3.2.40", + "minimatch": "^5.1.0", + "vue-template-compiler": "^2.7.10" + } + }, + "node_modules/@volar/vue-language-core/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@volar/vue-language-core/node_modules/minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@volar/vue-typescript": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@volar/vue-typescript/-/vue-typescript-1.0.8.tgz", + "integrity": "sha512-6jBvA7iwBkRqS2VQx2gLJgfLcF3hcODyJ6Lmiw2tN8D/LVfFCovvzJgPvIQb9Y4i+rha1Y0cpsYOUt9XW2Z7ZA==", + "dev": true, + "dependencies": { + "@volar/typescript": "1.0.8", + "@volar/vue-language-core": "1.0.8" + } + }, "node_modules/@vue/babel-helper-vue-transform-on": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.0.2.tgz", @@ -2310,6 +2514,12 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz", "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true + }, "node_modules/debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -4605,6 +4815,15 @@ "node": ">=8" } }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, "node_modules/hosted-git-info": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", @@ -5504,6 +5723,12 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "node_modules/muggle-string": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.1.0.tgz", + "integrity": "sha512-Tr1knR3d2mKvvWthlk7202rywKbiOm4rVFLsfAaSIhJ6dt9o47W4S+JMtWhd/PW9Wrdew2/S2fSvhz3E2gkfEg==", + "dev": true + }, "node_modules/nanoid": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", @@ -6686,6 +6911,27 @@ "json5": "lib/cli.js" } }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "dependencies": { + "tslib": "^1.8.1" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + } + }, "node_modules/tunnel": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", @@ -6728,6 +6974,19 @@ "is-typedarray": "^1.0.0" } }, + "node_modules/typescript": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", + "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", + "devOptional": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, "node_modules/unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -7136,6 +7395,32 @@ "vue": "^3.2.0" } }, + "node_modules/vue-template-compiler": { + "version": "2.7.13", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.13.tgz", + "integrity": "sha512-jYM6TClwDS9YqP48gYrtAtaOhRKkbYmbzE+Q51gX5YDr777n7tNI/IZk4QV4l/PjQPNh/FVa/E92sh/RqKMrog==", + "dev": true, + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "node_modules/vue-tsc": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.0.8.tgz", + "integrity": "sha512-+0sJ+QVH7SHLt8mV/uIw4xlHDk1mWigZkMFugfZTv8rlHpM3S2tCVZ0BWEGclT/0rKdO8j+St+mljpvhWPN/eQ==", + "dev": true, + "dependencies": { + "@volar/vue-language-core": "1.0.8", + "@volar/vue-typescript": "1.0.8" + }, + "bin": { + "vue-tsc": "bin/vue-tsc.js" + }, + "peerDependencies": { + "typescript": "*" + } + }, "node_modules/vuetify": { "version": "3.0.0-beta.13", "resolved": "https://registry.npmjs.org/vuetify/-/vuetify-3.0.0-beta.13.tgz", @@ -8141,6 +8426,78 @@ "@types/node": "*" } }, + "@typescript-eslint/parser": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.40.1.tgz", + "integrity": "sha512-IK6x55va5w4YvXd4b3VrXQPldV9vQTxi5ov+g4pMANsXPTXOcfjx08CRR1Dfrcc51syPtXHF5bgLlMHYFrvQtg==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "5.40.1", + "@typescript-eslint/types": "5.40.1", + "@typescript-eslint/typescript-estree": "5.40.1", + "debug": "^4.3.4" + } + }, + "@typescript-eslint/scope-manager": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.40.1.tgz", + "integrity": "sha512-jkn4xsJiUQucI16OLCXrLRXDZ3afKhOIqXs4R3O+M00hdQLKR58WuyXPZZjhKLFCEP2g+TXdBRtLQ33UfAdRUg==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.40.1", + "@typescript-eslint/visitor-keys": "5.40.1" + } + }, + "@typescript-eslint/types": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.40.1.tgz", + "integrity": "sha512-Icg9kiuVJSwdzSQvtdGspOlWNjVDnF3qVIKXdJ103o36yRprdl3Ge5cABQx+csx960nuMF21v8qvO31v9t3OHw==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.40.1.tgz", + "integrity": "sha512-5QTP/nW5+60jBcEPfXy/EZL01qrl9GZtbgDZtDPlfW5zj/zjNrdI2B5zMUHmOsfvOr2cWqwVdWjobCiHcedmQA==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.40.1", + "@typescript-eslint/visitor-keys": "5.40.1", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "dependencies": { + "semver": { + "version": "7.3.8", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", + "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "5.40.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.40.1.tgz", + "integrity": "sha512-A2DGmeZ+FMja0geX5rww+DpvILpwo1OsiQs0M+joPWJYsiEFBLsH0y1oFymPNul6Z5okSmHpP4ivkc2N0Cgfkw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "5.40.1", + "eslint-visitor-keys": "^3.3.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.3.0.tgz", + "integrity": "sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==", + "dev": true + } + } + }, "@vitejs/plugin-vue": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-3.1.2.tgz", @@ -8160,6 +8517,81 @@ "@vue/babel-plugin-jsx": "^1.1.1" } }, + "@volar/language-core": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@volar/language-core/-/language-core-1.0.8.tgz", + "integrity": "sha512-uxYSOqBk8ZFSzGjUIPOBEFPOg8F3CE6cLO5meK95DODGIlUlPytGiy9sy8QZ9w7RpUH4XMOX3MH/G48SLgP07A==", + "dev": true, + "requires": { + "@volar/source-map": "1.0.8", + "@vue/reactivity": "^3.2.40", + "muggle-string": "^0.1.0" + } + }, + "@volar/source-map": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@volar/source-map/-/source-map-1.0.8.tgz", + "integrity": "sha512-uKMe+alyfl1Abs5SviKejFoe7x9g6jDPVpVt63Tet4qn1Ziy7tFsvtCpM2Y1Ko5qw2nLIeloLslPqm9/gmbBLQ==", + "dev": true, + "requires": { + "muggle-string": "^0.1.0" + } + }, + "@volar/typescript": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@volar/typescript/-/typescript-1.0.8.tgz", + "integrity": "sha512-2oY1Apvzcs/5tAn7p1tRlDxNgal5ezaK0h9cutcWALeimsaQBAEE2NAirCrLMHl8DneuDce0tzJqHaQeHw9RmQ==", + "dev": true, + "requires": { + "@volar/language-core": "1.0.8" + } + }, + "@volar/vue-language-core": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@volar/vue-language-core/-/vue-language-core-1.0.8.tgz", + "integrity": "sha512-cXb7oTybxcm1vpz003agdYQHyxij7UAaSub60d7W1aMWpqb2iaCbVaq9izgQFlrpC4/JnVs+cJPb/Q6fAUVxBg==", + "dev": true, + "requires": { + "@volar/language-core": "1.0.8", + "@volar/source-map": "1.0.8", + "@vue/compiler-dom": "^3.2.40", + "@vue/compiler-sfc": "^3.2.40", + "@vue/reactivity": "^3.2.40", + "@vue/shared": "^3.2.40", + "minimatch": "^5.1.0", + "vue-template-compiler": "^2.7.10" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "minimatch": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", + "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } + } + }, + "@volar/vue-typescript": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@volar/vue-typescript/-/vue-typescript-1.0.8.tgz", + "integrity": "sha512-6jBvA7iwBkRqS2VQx2gLJgfLcF3hcODyJ6Lmiw2tN8D/LVfFCovvzJgPvIQb9Y4i+rha1Y0cpsYOUt9XW2Z7ZA==", + "dev": true, + "requires": { + "@volar/typescript": "1.0.8", + "@volar/vue-language-core": "1.0.8" + } + }, "@vue/babel-helper-vue-transform-on": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-transform-on/-/babel-helper-vue-transform-on-1.0.2.tgz", @@ -9107,6 +9539,12 @@ "resolved": "https://registry.npmjs.org/csstype/-/csstype-2.6.21.tgz", "integrity": "sha512-Z1PhmomIfypOpoMjRQB70jfvy/wxT50qW08YXO5lMIJkrdq4yOTR+AW7FqutScmB9NkLwxo+jU+kZLbofZZq/w==" }, + "de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true + }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", @@ -10731,6 +11169,12 @@ "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", "dev": true }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, "hosted-git-info": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", @@ -11368,6 +11812,12 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, + "muggle-string": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/muggle-string/-/muggle-string-0.1.0.tgz", + "integrity": "sha512-Tr1knR3d2mKvvWthlk7202rywKbiOm4rVFLsfAaSIhJ6dt9o47W4S+JMtWhd/PW9Wrdew2/S2fSvhz3E2gkfEg==", + "dev": true + }, "nanoid": { "version": "3.3.4", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", @@ -12216,6 +12666,21 @@ } } }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, "tunnel": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", @@ -12246,6 +12711,12 @@ "is-typedarray": "^1.0.0" } }, + "typescript": { + "version": "4.8.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", + "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", + "devOptional": true + }, "unbox-primitive": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", @@ -12527,6 +12998,26 @@ "@vue/devtools-api": "^6.1.4" } }, + "vue-template-compiler": { + "version": "2.7.13", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.13.tgz", + "integrity": "sha512-jYM6TClwDS9YqP48gYrtAtaOhRKkbYmbzE+Q51gX5YDr777n7tNI/IZk4QV4l/PjQPNh/FVa/E92sh/RqKMrog==", + "dev": true, + "requires": { + "de-indent": "^1.0.2", + "he": "^1.2.0" + } + }, + "vue-tsc": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/vue-tsc/-/vue-tsc-1.0.8.tgz", + "integrity": "sha512-+0sJ+QVH7SHLt8mV/uIw4xlHDk1mWigZkMFugfZTv8rlHpM3S2tCVZ0BWEGclT/0rKdO8j+St+mljpvhWPN/eQ==", + "dev": true, + "requires": { + "@volar/vue-language-core": "1.0.8", + "@volar/vue-typescript": "1.0.8" + } + }, "vuetify": { "version": "3.0.0-beta.13", "resolved": "https://registry.npmjs.org/vuetify/-/vuetify-3.0.0-beta.13.tgz", diff --git a/package.json b/package.json index 4d755c9..eb67673 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,7 @@ "main": "dist/main/index.js", "scripts": { "dev": "cross-env NODE_ENV=development vite", - "build": "npm run build:pre && electron-builder -wml", + "build": "vue-tsc --noEmit && npm run build:pre && electron-builder -wml", "build:pre": "cross-env NODE_ENV=production vite build", "build:dir": "npm run build:pre && electron-builder --dir", "build:mac": "npm run build:pre && CSC_IDENTITY_AUTO_DISCOVERY=false electron-builder --mac", @@ -29,6 +29,7 @@ "vuetify": "^3.0.0-beta.13" }, "devDependencies": { + "@typescript-eslint/parser": "^5.40.1", "@vitejs/plugin-vue": "^3.1.2", "@vitejs/plugin-vue-jsx": "^2.0.1", "cross-env": "^7.0.3", @@ -39,8 +40,10 @@ "eslint-friendly-formatter": "^4.0.1", "eslint-plugin-import": "^2.26.0", "eslint-plugin-vue": "^9.5.1", + "typescript": "^4.8.4", "vite": "^3.1.4", "vite-plugin-electron": "^0.9.3", - "vue-eslint-parser": "^9.1.0" + "vue-eslint-parser": "^9.1.0", + "vue-tsc": "^1.0.8" } } diff --git a/src/main/MainRunner.js b/src/main/MainRunner.ts similarity index 80% rename from src/main/MainRunner.js rename to src/main/MainRunner.ts index bb3e20b..6d5a995 100644 --- a/src/main/MainRunner.js +++ b/src/main/MainRunner.ts @@ -1,16 +1,16 @@ -import { app, BrowserWindow } from 'electron' +import { app, BrowserWindow, RenderProcessGoneDetails } from 'electron' import Constants from './utils/Constants' import * as electronRemote from '@electron/remote/main' -const exitApp = (mainWindow) => { +const exitApp = (mainWindow: BrowserWindow) : void => { if (mainWindow && !mainWindow.isDestroyed()) { mainWindow.hide() } - mainWindow = null + mainWindow.destroy() app.exit() } -export const createMainWindow = async (mainWindow) => { +export const createMainWindow = async (mainWindow: BrowserWindow) : Promise => { mainWindow = new BrowserWindow({ title: Constants.APP_NAME, show: false, @@ -22,7 +22,7 @@ export const createMainWindow = async (mainWindow) => { mainWindow.setMenu(null) - mainWindow.on('close', (event) => { + mainWindow.on('close', (event: Event) => { event.preventDefault() exitApp(mainWindow) }) @@ -51,7 +51,7 @@ export const createMainWindow = async (mainWindow) => { return mainWindow } -export const createErrorWindow = async (errorWindow, mainWindow, details) => { +export const createErrorWindow = async (errorWindow: BrowserWindow, mainWindow: BrowserWindow, details?: RenderProcessGoneDetails) : Promise => { if (!Constants.IS_DEV_ENV) { mainWindow?.hide() } diff --git a/src/main/index.js b/src/main/index.ts similarity index 79% rename from src/main/index.js rename to src/main/index.ts index 98be9f9..583d018 100644 --- a/src/main/index.js +++ b/src/main/index.ts @@ -1,4 +1,4 @@ -import { app } from 'electron' +import { app, WebContents, RenderProcessGoneDetails } from 'electron' import Constants from './utils/Constants' import { createErrorWindow, createMainWindow } from './MainRunner' import Menus from './utils/Menus' @@ -27,7 +27,7 @@ app.on('window-all-closed', () => { } }) -app.on('render-process-gone', (ev, webContents, details) => { +app.on('render-process-gone', (event: Event, webContents: WebContents, details: RenderProcessGoneDetails) => { errorWindow = createErrorWindow(errorWindow, mainWindow, details) }) diff --git a/src/main/utils/Constants.js b/src/main/utils/Constants.ts similarity index 100% rename from src/main/utils/Constants.js rename to src/main/utils/Constants.ts diff --git a/src/main/utils/Menus.js b/src/main/utils/Menus.ts similarity index 87% rename from src/main/utils/Menus.js rename to src/main/utils/Menus.ts index 648f3cb..aee4908 100644 --- a/src/main/utils/Menus.js +++ b/src/main/utils/Menus.ts @@ -2,7 +2,7 @@ import { systemPreferences } from 'electron' import Constants from './Constants' export default class Menus { - static macOSDisableDefaultMenuItem () { + static macOSDisableDefaultMenuItem () : void { if (Constants.IS_MAC) { systemPreferences.setUserDefault('NSDisabledDictationMenuItem', 'boolean', true) systemPreferences.setUserDefault('NSDisabledCharacterPaletteMenuItem', 'boolean', true) diff --git a/src/renderer/App.vue b/src/renderer/App.vue index ed0def5..dcee8a3 100644 --- a/src/renderer/App.vue +++ b/src/renderer/App.vue @@ -1,4 +1,4 @@ - diff --git a/src/renderer/components/layout/DefaultLayout.vue b/src/renderer/components/layout/DefaultLayout.vue index 8ece553..83282a1 100644 --- a/src/renderer/components/layout/DefaultLayout.vue +++ b/src/renderer/components/layout/DefaultLayout.vue @@ -1,5 +1,5 @@ -