From 39908dcaddcba67732ca375426c5c06119bbbf72 Mon Sep 17 00:00:00 2001
From: maskeynihal <26411488+maskeynihal@users.noreply.github.com>
Date: Tue, 10 Oct 2023 13:17:18 +0545
Subject: [PATCH] Add prettier and run prettier command via lint-staged

---
 .eslintrc.cjs      |  3 ++-
 .lintstagedrc.json |  9 +++++++
 .prettierrc.json   |  9 +++++++
 package-lock.json  | 67 ++++++++++++++++++++++++++++++++++++++--------
 package.json       | 13 +++------
 5 files changed, 80 insertions(+), 21 deletions(-)
 create mode 100644 .lintstagedrc.json
 create mode 100644 .prettierrc.json

diff --git a/.eslintrc.cjs b/.eslintrc.cjs
index 583e355..195aafd 100644
--- a/.eslintrc.cjs
+++ b/.eslintrc.cjs
@@ -6,6 +6,7 @@ module.exports = {
   extends: [
     'eslint:recommended',
     'plugin:vue/recommended',
+    'prettier',
   ],
   parserOptions: {
     parser: '@babel/eslint-parser',
@@ -16,7 +17,6 @@ module.exports = {
   rules: {
     'linebreak-style': ['error', 'unix'],
     semi: ['error', 'always'],
-    quotes: ['error', 'single'],
     'comma-dangle': ['error', 'always-multiline'],
     'vue/require-v-for-key': 0,
     'vue/require-default-prop': 0,
@@ -25,6 +25,7 @@ module.exports = {
     'vue/html-indent': ['error', 4],
     'vue/script-indent': ['error', 4, {
       baseIndent: 1,
+      switchCase: 1,
     }],
     'vue/no-unused-vars': 0,
     'vue/html-self-closing': 0,
diff --git a/.lintstagedrc.json b/.lintstagedrc.json
new file mode 100644
index 0000000..6c26613
--- /dev/null
+++ b/.lintstagedrc.json
@@ -0,0 +1,9 @@
+{
+  "*.{js,vue}": [
+    "prettier --write",
+    "eslint --quiet --cache --fix"
+  ],
+  "*.scss": [
+    "stylelint --config node_modules/do-bulma/.stylelintrc.json --fix"
+  ]
+}
diff --git a/.prettierrc.json b/.prettierrc.json
new file mode 100644
index 0000000..356c609
--- /dev/null
+++ b/.prettierrc.json
@@ -0,0 +1,9 @@
+{
+  "singleQuote": true,
+  "trailingComma": "all",
+  "vueIndentScriptAndStyle": true,
+  "htmlWhitespaceSensitivity": "ignore",
+  "printWidth": 100,
+  "tabWidth": 4,
+  "singleAttributePerLine": true
+}
diff --git a/package-lock.json b/package-lock.json
index abd50ab..0b1365f 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -39,6 +39,7 @@
         "core-js": "^3.32.0",
         "duplicate-package-checker-webpack-plugin": "^3.0.0",
         "eslint": "^8.46.0",
+        "eslint-config-prettier": "^9.0.0",
         "eslint-plugin-vue": "^9.16.1",
         "esm": "^3.2.25",
         "husky": "^8.0.3",
@@ -47,6 +48,7 @@
         "lint-staged": "^13.2.3",
         "node-fetch": "^3.3.2",
         "postcss": "^8.4.31",
+        "prettier": "3.0.3",
         "sass": "^1.64.2",
         "sass-loader": "^13.3.2",
         "stylelint": "^15.10.2",
@@ -4469,6 +4471,22 @@
         "url": "https://opencollective.com/postcss/"
       }
     },
+    "node_modules/@vue/component-compiler-utils/node_modules/prettier": {
+      "version": "2.8.8",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
+      "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
+      "dev": true,
+      "optional": true,
+      "bin": {
+        "prettier": "bin-prettier.js"
+      },
+      "engines": {
+        "node": ">=10.13.0"
+      },
+      "funding": {
+        "url": "https://github.com/prettier/prettier?sponsor=1"
+      }
+    },
     "node_modules/@vue/component-compiler-utils/node_modules/yallist": {
       "version": "2.1.2",
       "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
@@ -8608,6 +8626,18 @@
         "url": "https://opencollective.com/eslint"
       }
     },
+    "node_modules/eslint-config-prettier": {
+      "version": "9.0.0",
+      "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz",
+      "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==",
+      "dev": true,
+      "bin": {
+        "eslint-config-prettier": "bin/cli.js"
+      },
+      "peerDependencies": {
+        "eslint": ">=7.0.0"
+      }
+    },
     "node_modules/eslint-plugin-vue": {
       "version": "9.16.1",
       "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.16.1.tgz",
@@ -16367,16 +16397,18 @@
       }
     },
     "node_modules/prettier": {
-      "version": "1.19.1",
-      "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz",
-      "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==",
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz",
+      "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==",
       "dev": true,
-      "optional": true,
       "bin": {
-        "prettier": "bin-prettier.js"
+        "prettier": "bin/prettier.cjs"
       },
       "engines": {
-        "node": ">=4"
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/prettier/prettier?sponsor=1"
       }
     },
     "node_modules/pretty-checkbox": {
@@ -23235,6 +23267,13 @@
             "source-map": "^0.6.1"
           }
         },
+        "prettier": {
+          "version": "2.8.8",
+          "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz",
+          "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==",
+          "dev": true,
+          "optional": true
+        },
         "yallist": {
           "version": "2.1.2",
           "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz",
@@ -26439,6 +26478,13 @@
         }
       }
     },
+    "eslint-config-prettier": {
+      "version": "9.0.0",
+      "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz",
+      "integrity": "sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==",
+      "dev": true,
+      "requires": {}
+    },
     "eslint-plugin-vue": {
       "version": "9.16.1",
       "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.16.1.tgz",
@@ -31772,11 +31818,10 @@
       "dev": true
     },
     "prettier": {
-      "version": "1.19.1",
-      "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz",
-      "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==",
-      "dev": true,
-      "optional": true
+      "version": "3.0.3",
+      "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz",
+      "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==",
+      "dev": true
     },
     "pretty-checkbox": {
       "version": "3.0.3",
diff --git a/package.json b/package.json
index 618e3ad..1ebb51b 100644
--- a/package.json
+++ b/package.json
@@ -23,7 +23,8 @@
     "test:eslint:fix": "npm run test:eslint -- --fix",
     "test:stylelint": "stylelint 'src/**/*.scss' --config node_modules/do-bulma/.stylelintrc.json",
     "test:i18n-packs": "node --es-module-specifier-resolution=node src/nginxconfig/i18n/verify.js",
-    "prepare": "husky install"
+    "prepare": "husky install",
+    "prettier": "prettier --write 'src/**/*.{js,vue}'"
   },
   "jest": {
     "testRegex": "/test/.*.js?$"
@@ -71,6 +72,7 @@
     "core-js": "^3.32.0",
     "duplicate-package-checker-webpack-plugin": "^3.0.0",
     "eslint": "^8.46.0",
+    "eslint-config-prettier": "^9.0.0",
     "eslint-plugin-vue": "^9.16.1",
     "esm": "^3.2.25",
     "husky": "^8.0.3",
@@ -79,6 +81,7 @@
     "lint-staged": "^13.2.3",
     "node-fetch": "^3.3.2",
     "postcss": "^8.4.31",
+    "prettier": "3.0.3",
     "sass": "^1.64.2",
     "sass-loader": "^13.3.2",
     "stylelint": "^15.10.2",
@@ -88,14 +91,6 @@
     "webpack": "^5.88.2",
     "webpack-bundle-analyzer": "^4.9.0"
   },
-  "lint-staged": {
-    "*.{js,vue}": [
-      "eslint --quiet --cache --fix"
-    ],
-    "*.scss": [
-      "stylelint --config node_modules/do-bulma/.stylelintrc.json --fix"
-    ]
-  },
   "overrides": {
     "@vue/cli-service": {
       "mini-css-extract-plugin": "^1.6.2"