refactor(ui): cleanup eslint configuration
authorJérôme Benoit <jerome.benoit@sap.com>
Thu, 7 Mar 2024 18:37:34 +0000 (19:37 +0100)
committerJérôme Benoit <jerome.benoit@sap.com>
Thu, 7 Mar 2024 18:37:34 +0000 (19:37 +0100)
Signed-off-by: Jérôme Benoit <jerome.benoit@sap.com>
17 files changed:
pnpm-lock.yaml
ui/web/.eslintrc.cjs
ui/web/package.json
ui/web/src/components/actions/AddChargingStations.vue
ui/web/src/components/actions/SetSupervisionUrl.vue
ui/web/src/components/actions/StartTransaction.vue
ui/web/src/components/buttons/ToggleButton.vue
ui/web/src/components/charging-stations/CSConnector.vue
ui/web/src/components/charging-stations/CSData.vue
ui/web/src/composables/UIClient.ts
ui/web/src/main.ts
ui/web/src/router/index.ts
ui/web/src/views/ChargingStationsView.vue
ui/web/start.js
ui/web/tests/unit/CSTable.spec.ts
ui/web/vite.config.ts
ui/web/vitest.config.ts

index d8bee504ad1b8af5bf492927003d22f895566be7..26aed9cc902efd3fa5a61d633a1c0b28725665d5 100644 (file)
@@ -266,6 +266,9 @@ importers:
       eslint-plugin-import:
         specifier: ^2.29.1
         version: 2.29.1(@typescript-eslint/parser@7.1.1)(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0)
+      eslint-plugin-simple-import-sort:
+        specifier: ^12.0.0
+        version: 12.0.0(eslint@8.57.0)
       eslint-plugin-vue:
         specifier: ^9.22.0
         version: 9.22.0(eslint@8.57.0)
@@ -5366,6 +5369,14 @@ packages:
       eslint: 8.57.0
     dev: true
 
+  /eslint-plugin-simple-import-sort@12.0.0(eslint@8.57.0):
+    resolution: {integrity: sha512-8o0dVEdAkYap0Cn5kNeklaKcT1nUsa3LITWEuFk3nJifOoD+5JQGoyDUW2W/iPWwBsNBJpyJS9y4je/BgxLcyQ==}
+    peerDependencies:
+      eslint: '>=5.0.0'
+    dependencies:
+      eslint: 8.57.0
+    dev: true
+
   /eslint-plugin-tsdoc@0.2.17:
     resolution: {integrity: sha512-xRmVi7Zx44lOBuYqG8vzTXuL6IdGOeF9nHX17bjJ8+VE6fsxpdGem0/SBTmAwgYMKYB1WBkqRJVQ+n8GK041pA==}
     dependencies:
index 128bff5f0f6df12a76f1dc511d32b4f5b1b21b87..55c077bd0e1423cbdebe17cd2f52481d7a705bb8 100644 (file)
@@ -9,11 +9,12 @@ module.exports = defineConfig({
     node: true
   },
 
-  plugins: ['import'],
+  plugins: ['simple-import-sort', 'import'],
 
   extends: [
     'eslint:recommended',
     'plugin:import/recommended',
+    'plugin:import/typescript',
     'plugin:vue/vue3-recommended',
     '@vue/eslint-config-typescript/recommended',
     '@vue/eslint-config-prettier'
@@ -28,20 +29,15 @@ module.exports = defineConfig({
   },
 
   parserOptions: {
+    sourceType: 'module',
     ecmaVersion: 'latest'
   },
 
   rules: {
     'no-console': env.NODE_ENV === 'production' ? 'warn' : 'off',
     'no-debugger': env.NODE_ENV === 'production' ? 'warn' : 'off',
-    'vue/require-v-for-key': 'off',
-    'vue/multi-word-component-names': 'off',
-    'sort-imports': [
-      'error',
-      {
-        ignoreDeclarationSort: true
-      }
-    ],
-    'import/order': 'error'
+    'simple-import-sort/imports': 'error',
+    'simple-import-sort/exports': 'error',
+    'vue/multi-word-component-names': 'off'
   }
 })
index ce4a83a85f36c789b04d83bf5e6a53956fff1dab..c5bd79c5036d800c8687dc359312424c2b3fd6ba 100644 (file)
@@ -52,6 +52,7 @@
     "eslint-define-config": "^2.1.0",
     "eslint-import-resolver-typescript": "^3.6.1",
     "eslint-plugin-import": "^2.29.1",
+    "eslint-plugin-simple-import-sort": "^12.0.0",
     "eslint-plugin-vue": "^9.22.0",
     "jsdom": "^24.0.0",
     "prettier": "^3.2.5",
index 6e3c2932e79002627a43feacb60d61d81cc5d41c..a95cba2b07a9afdf72cf03a2be97b81def9db712 100644 (file)
@@ -6,6 +6,7 @@
     <option
       v-for="template in $templates.value"
       v-show="Array.isArray($templates.value) && $templates.value.length > 0"
+      :key="template"
     >
       {{ template }}
     </option>
@@ -95,6 +96,7 @@
 
 <script setup lang="ts">
 import { getCurrentInstance, ref, watch } from 'vue'
+
 import Button from '@/components/buttons/Button.vue'
 import { convertToBoolean, randomUUID } from '@/composables'
 
index 887b1d4ce42bee2b0a0dd86e910fc4c455081c76..edefc8a544c8d4eafd86404a07f7b2fc7a2c98ff 100644 (file)
@@ -35,6 +35,7 @@
 
 <script setup lang="ts">
 import { ref } from 'vue'
+
 import Button from '@/components/buttons/Button.vue'
 
 defineProps<{
index 18145d8d8fad25fbc7467f2acca80aeb9fe33670..a0ab5ceceff52094a03e0b3ca34f1eb1fe46ab5b 100644 (file)
@@ -30,6 +30,7 @@
 
 <script setup lang="ts">
 import { ref } from 'vue'
+
 import Button from '@/components/buttons/Button.vue'
 import { convertToInt } from '@/composables'
 
index 6d72ba10f04a3e874f63b4757b11d14dbc2ee112..537a198b26ef6f1b9763b8f4a37583f92fe2c8bc 100644 (file)
@@ -6,6 +6,7 @@
 
 <script setup lang="ts">
 import { ref } from 'vue'
+
 import Button from '@/components/buttons/Button.vue'
 import { getFromLocalStorage, setToLocalStorage } from '@/composables'
 
index b75fc782a6d038ae5d121969f6a70ef0c0adfe49..9bfeae6de04620968bfd037e21ba4b1d5c9b8d9a 100644 (file)
 
 <script setup lang="ts">
 import { useToast } from 'vue-toast-notification'
+
 import Button from '@/components/buttons/Button.vue'
-import type { ConnectorStatus, Status } from '@/types'
 import ToggleButton from '@/components/buttons/ToggleButton.vue'
 import { useUIClient } from '@/composables'
+import type { ConnectorStatus, Status } from '@/types'
 
 const props = defineProps<{
   hashId: string
index 0da66895834c8296b982b7f2444b149d0ea516ab..abc087626986a444effa9867c4eceb6dcae74682 100644 (file)
@@ -66,9 +66,9 @@
           </tr>
         </thead>
         <tbody id="connectors-table__body">
-          <!-- eslint-disable-next-line vue/valid-v-for -->
           <CSConnector
             v-for="(connector, index) in getConnectorStatuses()"
+            :key="index + 1"
             :hash-id="chargingStation.stationInfo.hashId"
             :charging-station-id="chargingStation.stationInfo.chargingStationId"
             :connector-id="index + 1"
 
 <script setup lang="ts">
 import { useToast } from 'vue-toast-notification'
-import CSConnector from '@/components/charging-stations/CSConnector.vue'
+
 import Button from '@/components/buttons/Button.vue'
-import type { ChargingStationData, ConnectorStatus, Status } from '@/types'
 import ToggleButton from '@/components/buttons/ToggleButton.vue'
+import CSConnector from '@/components/charging-stations/CSConnector.vue'
 import { useUIClient } from '@/composables'
+import type { ChargingStationData, ConnectorStatus, Status } from '@/types'
 
 const props = defineProps<{
   chargingStation: ChargingStationData
index dde5b55608784d51e1982406f6d35cd11b54b70f..64f2bc69d4e5efd2549d51d471c6f1dafa039058 100644 (file)
@@ -1,5 +1,5 @@
 import { useToast } from 'vue-toast-notification'
-import { randomUUID } from './Utils'
+
 import {
   ApplicationProtocol,
   AuthenticationType,
@@ -12,6 +12,8 @@ import {
   type UIServerConfigurationSection
 } from '@/types'
 
+import { randomUUID } from './Utils'
+
 type ResponseHandler = {
   procedureName: ProcedureName
   resolve: (value: ResponsePayload | PromiseLike<ResponsePayload>) => void
index f69f2c46d240cbd763a1716f3b1e7c3283c53269..a39c049ba99052c4e48a2898fe3039508f1aab15 100644 (file)
@@ -1,10 +1,12 @@
+import 'vue-toast-notification/dist/theme-bootstrap.css'
+
 import { type App as AppType, createApp, ref } from 'vue'
 import ToastPlugin from 'vue-toast-notification'
-import type { ChargingStationData, ConfigurationData, UIServerConfigurationSection } from '@/types'
-import { router } from '@/router'
-import { UIClient, getFromLocalStorage, setToLocalStorage } from '@/composables'
+
 import App from '@/App.vue'
-import 'vue-toast-notification/dist/theme-bootstrap.css'
+import { getFromLocalStorage, setToLocalStorage, UIClient } from '@/composables'
+import { router } from '@/router'
+import type { ChargingStationData, ConfigurationData, UIServerConfigurationSection } from '@/types'
 
 const app = createApp(App)
 
index 23cca6a4913c23e3d65ecaceae24c539ad4c5010..cee4f416eb51cf9c5659bcd150bed263a7bfef7f 100644 (file)
@@ -1,8 +1,9 @@
 import { createRouter, createWebHistory } from 'vue-router'
-import ChargingStationsView from '@/views/ChargingStationsView.vue'
-import StartTransaction from '@/components/actions/StartTransaction.vue'
+
 import AddChargingStations from '@/components/actions/AddChargingStations.vue'
 import SetSupervisionUrl from '@/components/actions/SetSupervisionUrl.vue'
+import StartTransaction from '@/components/actions/StartTransaction.vue'
+import ChargingStationsView from '@/views/ChargingStationsView.vue'
 import NotFoundView from '@/views/NotFoundView.vue'
 
 export const router = createRouter({
index 56200d2eccd672b4ab0012dad6f77efe1720caed..7b4f8a53f74fff9e55055860ad92c01fa439c719 100644 (file)
@@ -51,6 +51,7 @@
         >
           <option
             v-for="uiServerConfiguration in uiServerConfigurations"
+            :key="uiServerConfiguration.index"
             :value="uiServerConfiguration.index"
           >
             {{
 <script setup lang="ts">
 import { computed, getCurrentInstance, onMounted, onUnmounted, ref, watch } from 'vue'
 import { useToast } from 'vue-toast-notification'
+
+import ReloadButton from '@/components/buttons/ReloadButton.vue'
+import ToggleButton from '@/components/buttons/ToggleButton.vue'
 import CSTable from '@/components/charging-stations/CSTable.vue'
-import type {
-  ChargingStationData,
-  ResponsePayload,
-  SimulatorState,
-  UIServerConfigurationSection
-} from '@/types'
 import Container from '@/components/Container.vue'
-import ReloadButton from '@/components/buttons/ReloadButton.vue'
 import {
   deleteFromLocalStorage,
   getFromLocalStorage,
@@ -131,7 +128,12 @@ import {
   setToLocalStorage,
   useUIClient
 } from '@/composables'
-import ToggleButton from '@/components/buttons/ToggleButton.vue'
+import type {
+  ChargingStationData,
+  ResponsePayload,
+  SimulatorState,
+  UIServerConfigurationSection
+} from '@/types'
 
 const simulatorState = ref<SimulatorState | undefined>(undefined)
 
index c620c4681ddc5d73fe051ffb5846ca3bbec8b1a9..9a325e569a1b4a2724adceeb52bd315d8f43f053 100644 (file)
@@ -2,6 +2,7 @@ import { createServer } from 'node:http'
 import { dirname, join } from 'node:path'
 import { env } from 'node:process'
 import { fileURLToPath } from 'node:url'
+
 import finalhandler from 'finalhandler'
 import serveStatic from 'serve-static'
 
index 0a364a6cf62fc3d184fd0dac8b35c6efbcb29b83..8a417af8619544233f04c94705de0e4738c8d641 100644 (file)
@@ -1,5 +1,6 @@
-import { expect, test } from 'vitest'
 import { shallowMount } from '@vue/test-utils'
+import { expect, test } from 'vitest'
+
 import CSTable from '@/components/charging-stations/CSTable.vue'
 import type { ChargingStationData } from '@/types'
 
index a5a1d53342af3729580add99ae03ef4cf7394aa2..6d5f08a34a04b179e7e53e5e3d57dc33caf0f3cb 100644 (file)
@@ -1,7 +1,8 @@
-import { URL, fileURLToPath } from 'node:url'
-import { defineConfig } from 'vite'
+import { fileURLToPath, URL } from 'node:url'
+
 import vue from '@vitejs/plugin-vue'
 import vueJsx from '@vitejs/plugin-vue-jsx'
+import { defineConfig } from 'vite'
 
 export default defineConfig({
   plugins: [vue(), vueJsx()],
index 39905b29c5bf4f670d2ab327e584209f0a81aafb..c5276e5caa0b040e1b00d0d8de6e5e3b6f53335b 100644 (file)
@@ -1,6 +1,8 @@
 import { fileURLToPath } from 'node:url'
-import { configDefaults, defineConfig } from 'vitest/config'
+
 import { mergeConfig } from 'vite'
+import { configDefaults, defineConfig } from 'vitest/config'
+
 import viteConfig from './vite.config'
 
 export default mergeConfig(