From 7ea8ac671534139e3bbc1aad6a3f663354af4d98 Mon Sep 17 00:00:00 2001 From: Joscha Date: Sun, 2 Mar 2025 18:59:59 +0100 Subject: [PATCH] Set up typed eslint --- pnpm-lock.yaml | 126 ++++++++++-------- .../{eslint.config.js => eslint.config.ts} | 14 +- showbits-thermal-printer-ui/package.json | 2 + showbits-thermal-printer-ui/src/main.ts | 7 + .../tsconfig.node.json | 2 +- 5 files changed, 95 insertions(+), 56 deletions(-) rename showbits-thermal-printer-ui/{eslint.config.js => eslint.config.ts} (80%) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0edf438..f38e734 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,36 +24,42 @@ importers: '@eslint/js': specifier: ^9.21.0 version: 9.21.0 + '@types/eslint-config-prettier': + specifier: ^6.11.3 + version: 6.11.3 '@vitejs/plugin-vue': specifier: ^5.2.1 - version: 5.2.1(vite@6.2.0(@types/node@22.13.8))(vue@3.5.13(typescript@5.7.3)) + version: 5.2.1(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2))(vue@3.5.13(typescript@5.7.3)) '@vue/tsconfig': specifier: ^0.7.0 version: 0.7.0(typescript@5.7.3)(vue@3.5.13(typescript@5.7.3)) eslint: specifier: ^9.21.0 - version: 9.21.0 + version: 9.21.0(jiti@2.4.2) eslint-config-prettier: specifier: ^10.0.2 - version: 10.0.2(eslint@9.21.0) + version: 10.0.2(eslint@9.21.0(jiti@2.4.2)) eslint-plugin-vue: specifier: ^9.32.0 - version: 9.32.0(eslint@9.21.0) + version: 9.32.0(eslint@9.21.0(jiti@2.4.2)) globals: specifier: ^16.0.0 version: 16.0.0 + jiti: + specifier: ^2.4.2 + version: 2.4.2 typescript: specifier: ~5.7.3 version: 5.7.3 typescript-eslint: specifier: ^8.25.0 - version: 8.25.0(eslint@9.21.0)(typescript@5.7.3) + version: 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) vite: specifier: ^6.2.0 - version: 6.2.0(@types/node@22.13.8) + version: 6.2.0(@types/node@22.13.8)(jiti@2.4.2) vite-plugin-vue-devtools: specifier: ^7.7.2 - version: 7.7.2(rollup@4.34.9)(vite@6.2.0(@types/node@22.13.8))(vue@3.5.13(typescript@5.7.3)) + version: 7.7.2(rollup@4.34.9)(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2))(vue@3.5.13(typescript@5.7.3)) vue-tsc: specifier: ^2.2.8 version: 2.2.8(typescript@5.7.3) @@ -551,6 +557,9 @@ packages: resolution: {integrity: sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==} engines: {node: '>=18'} + '@types/eslint-config-prettier@6.11.3': + resolution: {integrity: sha512-3wXCiM8croUnhg9LdtZUJQwNcQYGWxxdOWDjPe1ykCqJFPVpzAKfs/2dgSoCtAvdPeaponcWPI7mPcGGp9dkKQ==} + '@types/estree@1.0.6': resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} @@ -1073,6 +1082,10 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} + jiti@2.4.2: + resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} + hasBin: true + js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -1781,9 +1794,9 @@ snapshots: '@esbuild/win32-x64@0.25.0': optional: true - '@eslint-community/eslint-utils@4.4.1(eslint@9.21.0)': + '@eslint-community/eslint-utils@4.4.1(eslint@9.21.0(jiti@2.4.2))': dependencies: - eslint: 9.21.0 + eslint: 9.21.0(jiti@2.4.2) eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} @@ -1936,6 +1949,8 @@ snapshots: '@sindresorhus/merge-streams@4.0.0': {} + '@types/eslint-config-prettier@6.11.3': {} + '@types/estree@1.0.6': {} '@types/json-schema@7.0.15': {} @@ -1944,15 +1959,15 @@ snapshots: dependencies: undici-types: 6.20.0 - '@typescript-eslint/eslint-plugin@8.25.0(@typescript-eslint/parser@8.25.0(eslint@9.21.0)(typescript@5.7.3))(eslint@9.21.0)(typescript@5.7.3)': + '@typescript-eslint/eslint-plugin@8.25.0(@typescript-eslint/parser@8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.25.0(eslint@9.21.0)(typescript@5.7.3) + '@typescript-eslint/parser': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) '@typescript-eslint/scope-manager': 8.25.0 - '@typescript-eslint/type-utils': 8.25.0(eslint@9.21.0)(typescript@5.7.3) - '@typescript-eslint/utils': 8.25.0(eslint@9.21.0)(typescript@5.7.3) + '@typescript-eslint/type-utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) '@typescript-eslint/visitor-keys': 8.25.0 - eslint: 9.21.0 + eslint: 9.21.0(jiti@2.4.2) graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 @@ -1961,14 +1976,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.25.0(eslint@9.21.0)(typescript@5.7.3)': + '@typescript-eslint/parser@8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@typescript-eslint/scope-manager': 8.25.0 '@typescript-eslint/types': 8.25.0 '@typescript-eslint/typescript-estree': 8.25.0(typescript@5.7.3) '@typescript-eslint/visitor-keys': 8.25.0 debug: 4.4.0 - eslint: 9.21.0 + eslint: 9.21.0(jiti@2.4.2) typescript: 5.7.3 transitivePeerDependencies: - supports-color @@ -1978,12 +1993,12 @@ snapshots: '@typescript-eslint/types': 8.25.0 '@typescript-eslint/visitor-keys': 8.25.0 - '@typescript-eslint/type-utils@8.25.0(eslint@9.21.0)(typescript@5.7.3)': + '@typescript-eslint/type-utils@8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: '@typescript-eslint/typescript-estree': 8.25.0(typescript@5.7.3) - '@typescript-eslint/utils': 8.25.0(eslint@9.21.0)(typescript@5.7.3) + '@typescript-eslint/utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) debug: 4.4.0 - eslint: 9.21.0 + eslint: 9.21.0(jiti@2.4.2) ts-api-utils: 2.0.1(typescript@5.7.3) typescript: 5.7.3 transitivePeerDependencies: @@ -2005,13 +2020,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.25.0(eslint@9.21.0)(typescript@5.7.3)': + '@typescript-eslint/utils@8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0(jiti@2.4.2)) '@typescript-eslint/scope-manager': 8.25.0 '@typescript-eslint/types': 8.25.0 '@typescript-eslint/typescript-estree': 8.25.0(typescript@5.7.3) - eslint: 9.21.0 + eslint: 9.21.0(jiti@2.4.2) typescript: 5.7.3 transitivePeerDependencies: - supports-color @@ -2021,9 +2036,9 @@ snapshots: '@typescript-eslint/types': 8.25.0 eslint-visitor-keys: 4.2.0 - '@vitejs/plugin-vue@5.2.1(vite@6.2.0(@types/node@22.13.8))(vue@3.5.13(typescript@5.7.3))': + '@vitejs/plugin-vue@5.2.1(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2))(vue@3.5.13(typescript@5.7.3))': dependencies: - vite: 6.2.0(@types/node@22.13.8) + vite: 6.2.0(@types/node@22.13.8)(jiti@2.4.2) vue: 3.5.13(typescript@5.7.3) '@volar/language-core@2.4.11': @@ -2103,14 +2118,14 @@ snapshots: de-indent: 1.0.2 he: 1.2.0 - '@vue/devtools-core@7.7.2(vite@6.2.0(@types/node@22.13.8))(vue@3.5.13(typescript@5.7.3))': + '@vue/devtools-core@7.7.2(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2))(vue@3.5.13(typescript@5.7.3))': dependencies: '@vue/devtools-kit': 7.7.2 '@vue/devtools-shared': 7.7.2 mitt: 3.0.1 nanoid: 5.1.2 pathe: 2.0.3 - vite-hot-client: 0.2.4(vite@6.2.0(@types/node@22.13.8)) + vite-hot-client: 0.2.4(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2)) vue: 3.5.13(typescript@5.7.3) transitivePeerDependencies: - vite @@ -2310,20 +2325,20 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-prettier@10.0.2(eslint@9.21.0): + eslint-config-prettier@10.0.2(eslint@9.21.0(jiti@2.4.2)): dependencies: - eslint: 9.21.0 + eslint: 9.21.0(jiti@2.4.2) - eslint-plugin-vue@9.32.0(eslint@9.21.0): + eslint-plugin-vue@9.32.0(eslint@9.21.0(jiti@2.4.2)): dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0) - eslint: 9.21.0 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0(jiti@2.4.2)) + eslint: 9.21.0(jiti@2.4.2) globals: 13.24.0 natural-compare: 1.4.0 nth-check: 2.1.1 postcss-selector-parser: 6.1.2 semver: 7.7.1 - vue-eslint-parser: 9.4.3(eslint@9.21.0) + vue-eslint-parser: 9.4.3(eslint@9.21.0(jiti@2.4.2)) xml-name-validator: 4.0.0 transitivePeerDependencies: - supports-color @@ -2342,9 +2357,9 @@ snapshots: eslint-visitor-keys@4.2.0: {} - eslint@9.21.0: + eslint@9.21.0(jiti@2.4.2): dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.21.0(jiti@2.4.2)) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.19.2 '@eslint/core': 0.12.0 @@ -2378,6 +2393,8 @@ snapshots: minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.4 + optionalDependencies: + jiti: 2.4.2 transitivePeerDependencies: - supports-color @@ -2549,6 +2566,8 @@ snapshots: isexe@2.0.0: {} + jiti@2.4.2: {} + js-tokens@4.0.0: {} js-yaml@4.1.0: @@ -2798,12 +2817,12 @@ snapshots: type-fest@0.20.2: {} - typescript-eslint@8.25.0(eslint@9.21.0)(typescript@5.7.3): + typescript-eslint@8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.25.0(@typescript-eslint/parser@8.25.0(eslint@9.21.0)(typescript@5.7.3))(eslint@9.21.0)(typescript@5.7.3) - '@typescript-eslint/parser': 8.25.0(eslint@9.21.0)(typescript@5.7.3) - '@typescript-eslint/utils': 8.25.0(eslint@9.21.0)(typescript@5.7.3) - eslint: 9.21.0 + '@typescript-eslint/eslint-plugin': 8.25.0(@typescript-eslint/parser@8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/parser': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + '@typescript-eslint/utils': 8.25.0(eslint@9.21.0(jiti@2.4.2))(typescript@5.7.3) + eslint: 9.21.0(jiti@2.4.2) typescript: 5.7.3 transitivePeerDependencies: - supports-color @@ -2828,11 +2847,11 @@ snapshots: util-deprecate@1.0.2: {} - vite-hot-client@0.2.4(vite@6.2.0(@types/node@22.13.8)): + vite-hot-client@0.2.4(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2)): dependencies: - vite: 6.2.0(@types/node@22.13.8) + vite: 6.2.0(@types/node@22.13.8)(jiti@2.4.2) - vite-plugin-inspect@0.8.9(rollup@4.34.9)(vite@6.2.0(@types/node@22.13.8)): + vite-plugin-inspect@0.8.9(rollup@4.34.9)(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2)): dependencies: '@antfu/utils': 0.7.10 '@rollup/pluginutils': 5.1.4(rollup@4.34.9) @@ -2843,28 +2862,28 @@ snapshots: perfect-debounce: 1.0.0 picocolors: 1.1.1 sirv: 3.0.1 - vite: 6.2.0(@types/node@22.13.8) + vite: 6.2.0(@types/node@22.13.8)(jiti@2.4.2) transitivePeerDependencies: - rollup - supports-color - vite-plugin-vue-devtools@7.7.2(rollup@4.34.9)(vite@6.2.0(@types/node@22.13.8))(vue@3.5.13(typescript@5.7.3)): + vite-plugin-vue-devtools@7.7.2(rollup@4.34.9)(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2))(vue@3.5.13(typescript@5.7.3)): dependencies: - '@vue/devtools-core': 7.7.2(vite@6.2.0(@types/node@22.13.8))(vue@3.5.13(typescript@5.7.3)) + '@vue/devtools-core': 7.7.2(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2))(vue@3.5.13(typescript@5.7.3)) '@vue/devtools-kit': 7.7.2 '@vue/devtools-shared': 7.7.2 execa: 9.5.2 sirv: 3.0.1 - vite: 6.2.0(@types/node@22.13.8) - vite-plugin-inspect: 0.8.9(rollup@4.34.9)(vite@6.2.0(@types/node@22.13.8)) - vite-plugin-vue-inspector: 5.3.1(vite@6.2.0(@types/node@22.13.8)) + vite: 6.2.0(@types/node@22.13.8)(jiti@2.4.2) + vite-plugin-inspect: 0.8.9(rollup@4.34.9)(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2)) + vite-plugin-vue-inspector: 5.3.1(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2)) transitivePeerDependencies: - '@nuxt/kit' - rollup - supports-color - vue - vite-plugin-vue-inspector@5.3.1(vite@6.2.0(@types/node@22.13.8)): + vite-plugin-vue-inspector@5.3.1(vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2)): dependencies: '@babel/core': 7.26.9 '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.9) @@ -2875,11 +2894,11 @@ snapshots: '@vue/compiler-dom': 3.5.13 kolorist: 1.8.0 magic-string: 0.30.17 - vite: 6.2.0(@types/node@22.13.8) + vite: 6.2.0(@types/node@22.13.8)(jiti@2.4.2) transitivePeerDependencies: - supports-color - vite@6.2.0(@types/node@22.13.8): + vite@6.2.0(@types/node@22.13.8)(jiti@2.4.2): dependencies: esbuild: 0.25.0 postcss: 8.5.3 @@ -2887,13 +2906,14 @@ snapshots: optionalDependencies: '@types/node': 22.13.8 fsevents: 2.3.3 + jiti: 2.4.2 vscode-uri@3.1.0: {} - vue-eslint-parser@9.4.3(eslint@9.21.0): + vue-eslint-parser@9.4.3(eslint@9.21.0(jiti@2.4.2)): dependencies: debug: 4.4.0 - eslint: 9.21.0 + eslint: 9.21.0(jiti@2.4.2) eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 diff --git a/showbits-thermal-printer-ui/eslint.config.js b/showbits-thermal-printer-ui/eslint.config.ts similarity index 80% rename from showbits-thermal-printer-ui/eslint.config.js rename to showbits-thermal-printer-ui/eslint.config.ts index 57af2da..6026e56 100644 --- a/showbits-thermal-printer-ui/eslint.config.js +++ b/showbits-thermal-printer-ui/eslint.config.ts @@ -10,9 +10,19 @@ export default tseslint.config( { languageOptions: { globals: { ...globals.browser, ...globals.node } } }, + { + languageOptions: { + parserOptions: { + projectService: true, + tsconfigRootDir: import.meta.dirname, + extraFileExtensions: ["vue"], + }, + }, + }, + eslint.configs.recommended, - ...tseslint.configs.strict, - ...tseslint.configs.stylistic, + ...tseslint.configs.strictTypeChecked, + ...tseslint.configs.stylisticTypeChecked, ...vue.configs["flat/recommended"], prettier, diff --git a/showbits-thermal-printer-ui/package.json b/showbits-thermal-printer-ui/package.json index d493b68..a055bd2 100644 --- a/showbits-thermal-printer-ui/package.json +++ b/showbits-thermal-printer-ui/package.json @@ -14,12 +14,14 @@ }, "devDependencies": { "@eslint/js": "^9.21.0", + "@types/eslint-config-prettier": "^6.11.3", "@vitejs/plugin-vue": "^5.2.1", "@vue/tsconfig": "^0.7.0", "eslint": "^9.21.0", "eslint-config-prettier": "^10.0.2", "eslint-plugin-vue": "^9.32.0", "globals": "^16.0.0", + "jiti": "^2.4.2", "typescript": "~5.7.3", "typescript-eslint": "^8.25.0", "vite": "^6.2.0", diff --git a/showbits-thermal-printer-ui/src/main.ts b/showbits-thermal-printer-ui/src/main.ts index 3c9bfeb..281caa3 100644 --- a/showbits-thermal-printer-ui/src/main.ts +++ b/showbits-thermal-printer-ui/src/main.ts @@ -2,4 +2,11 @@ import { createApp } from "vue"; import "./style.css"; import App from "./App.vue"; +// The type of App contains any in its type parameters, according to vscode. +// Presumably, this is what triggers the lint. +// +// @vue/eslint-config-typescript turns this option off entirely. +// https://github.com/vuejs/eslint-config-typescript/blob/bcdeb741521a718d44dfe77aadcf6d0702b1fd21/src/internals.ts#L139 +// +// eslint-disable-next-line @typescript-eslint/no-unsafe-argument createApp(App).mount("#app"); diff --git a/showbits-thermal-printer-ui/tsconfig.node.json b/showbits-thermal-printer-ui/tsconfig.node.json index 5d56af0..f2c0066 100644 --- a/showbits-thermal-printer-ui/tsconfig.node.json +++ b/showbits-thermal-printer-ui/tsconfig.node.json @@ -14,5 +14,5 @@ "moduleDetection": "force", "noEmit": true }, - "include": ["vite.config.ts"] + "include": ["vite.config.ts", "eslint.config.ts"] }