From 3f5861f5512e60c8ee19608e045f8a5203ad345b Mon Sep 17 00:00:00 2001 From: uncenter <47499684+uncenter@users.noreply.github.com> Date: Wed, 17 Jan 2024 23:32:49 -0500 Subject: [PATCH 1/2] chore: remove eslint-plugin-prettier, update prettier & config --- .eslintrc.json | 113 +++++++------- .prettierrc.json | 13 +- package.json | 334 ++++++++++++++++++++--------------------- scripts/format-lang.js | 23 ++- yarn.lock | 27 +--- 5 files changed, 244 insertions(+), 266 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 9d747b879..5801064e3 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,59 +1,58 @@ { - "env": { - "browser": true, - "es2020": true, - "node": true - }, - "extends": [ - "eslint:recommended", - "plugin:prettier/recommended", - "plugin:import/recommended", - "plugin:@typescript-eslint/recommended", - "next" - ], - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaFeatures": { - "jsx": true - }, - "ecmaVersion": 11, - "sourceType": "module" - }, - "plugins": ["@typescript-eslint", "prettier"], - "settings": { - "import/resolver": { - "alias": { - "map": [ - ["assets", "./src/assets"], - ["components", "./src/components"], - ["db", "./db"], - ["hooks", "./src/components/hooks"], - ["lang", "./src/lang"], - ["lib", "./src/lib"], - ["public", "./public"], - ["queries", "./src/queries"], - ["store", "./src/store"], - ["styles", "./src/styles"] - ], - "extensions": [".ts", ".tsx", ".js", ".jsx", ".json"] - } - } - }, - "rules": { - "no-console": "error", - "react/display-name": "off", - "react/react-in-jsx-scope": "off", - "react/prop-types": "off", - "import/no-anonymous-default-export": "off", - "import/no-named-as-default": "off", - "@next/next/no-img-element": "off", - "@typescript-eslint/no-empty-function": "off", - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/no-var-requires": "off", - "@typescript-eslint/no-empty-interface": "off", - "@typescript-eslint/no-unused-vars": ["error", { "ignoreRestSiblings": true }] - }, - "globals": { - "React": "writable" - } + "env": { + "browser": true, + "es2020": true, + "node": true + }, + "extends": [ + "eslint:recommended", + "plugin:import/recommended", + "plugin:@typescript-eslint/recommended", + "next" + ], + "parser": "@typescript-eslint/parser", + "parserOptions": { + "ecmaFeatures": { + "jsx": true + }, + "ecmaVersion": 11, + "sourceType": "module" + }, + "plugins": ["@typescript-eslint"], + "settings": { + "import/resolver": { + "alias": { + "map": [ + ["assets", "./src/assets"], + ["components", "./src/components"], + ["db", "./db"], + ["hooks", "./src/components/hooks"], + ["lang", "./src/lang"], + ["lib", "./src/lib"], + ["public", "./public"], + ["queries", "./src/queries"], + ["store", "./src/store"], + ["styles", "./src/styles"] + ], + "extensions": [".ts", ".tsx", ".js", ".jsx", ".json"] + } + } + }, + "rules": { + "no-console": "error", + "react/display-name": "off", + "react/react-in-jsx-scope": "off", + "react/prop-types": "off", + "import/no-anonymous-default-export": "off", + "import/no-named-as-default": "off", + "@next/next/no-img-element": "off", + "@typescript-eslint/no-empty-function": "off", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-var-requires": "off", + "@typescript-eslint/no-empty-interface": "off", + "@typescript-eslint/no-unused-vars": ["error", { "ignoreRestSiblings": true }] + }, + "globals": { + "React": "writable" + } } diff --git a/.prettierrc.json b/.prettierrc.json index a91dc35d8..e65d136e6 100644 --- a/.prettierrc.json +++ b/.prettierrc.json @@ -1,8 +1,9 @@ { - "arrowParens": "avoid", - "endOfLine": "lf", - "printWidth": 100, - "singleQuote": true, - "trailingComma": "all", - "quoteProps": "consistent" + "useTabs": true, + "arrowParens": "avoid", + "endOfLine": "lf", + "printWidth": 100, + "singleQuote": true, + "trailingComma": "all", + "quoteProps": "consistent" } diff --git a/package.json b/package.json index 0f437c355..2deace0a7 100644 --- a/package.json +++ b/package.json @@ -1,169 +1,169 @@ { - "name": "umami", - "version": "2.9.0", - "description": "A simple, fast, privacy-focused alternative to Google Analytics.", - "author": "Mike Cao ", - "license": "MIT", - "homepage": "https://umami.is", - "repository": { - "type": "git", - "url": "https://github.com/umami-software/umami.git" - }, - "scripts": { - "dev": "next dev -p 3000", - "build": "npm-run-all check-env build-db check-db build-tracker build-geo build-app", - "start": "next start", - "build-docker": "npm-run-all build-db build-tracker build-geo build-app", - "start-docker": "npm-run-all check-db update-tracker start-server", - "start-env": "node scripts/start-env.js", - "start-server": "node server.js", - "build-app": "next build", - "build-components": "rollup -c rollup.components.config.mjs", - "build-tracker": "rollup -c rollup.tracker.config.mjs", - "build-db": "npm-run-all copy-db-files build-db-client", - "build-lang": "npm-run-all format-lang compile-lang clean-lang download-country-names download-language-names", - "build-geo": "node scripts/build-geo.js", - "build-db-schema": "prisma db pull", - "build-db-client": "prisma generate", - "update-tracker": "node scripts/update-tracker.js", - "update-db": "prisma migrate deploy", - "check-db": "node scripts/check-db.js", - "check-env": "node scripts/check-env.js", - "copy-db-files": "node scripts/copy-db-files.js", - "extract-messages": "formatjs extract \"src/{pages,components}/**/*.js\" --out-file build/messages.json", - "merge-messages": "node scripts/merge-messages.js", - "generate-lang": "npm-run-all extract-messages merge-messages", - "format-lang": "node scripts/format-lang.js", - "compile-lang": "formatjs compile-folder --ast build/messages public/intl/messages", - "clean-lang": "prettier --write ./public/intl/messages/*.json", - "check-lang": "node scripts/check-lang.js", - "download-country-names": "node scripts/download-country-names.js", - "download-language-names": "node scripts/download-language-names.js", - "change-password": "node scripts/change-password.js", - "lint": "next lint --quiet", - "prepare": "node -e \"if (process.env.NODE_ENV !== 'production'){process.exit(1)} \" || husky install", - "postbuild": "node scripts/postbuild.js" - }, - "lint-staged": { - "**/*.{js,jsx,ts,tsx}": [ - "prettier --write", - "eslint" - ], - "**/*.css": [ - "stylelint --fix", - "prettier --write" - ], - "**/*.json": [ - "prettier --write" - ] - }, - "cacheDirectories": [ - ".next/cache" - ], - "dependencies": { - "@clickhouse/client": "^0.2.2", - "@fontsource/inter": "^4.5.15", - "@prisma/client": "5.6.0", - "@prisma/extension-read-replicas": "^0.3.0", - "@react-spring/web": "^9.7.3", - "@tanstack/react-query": "^5.12.2", - "@umami/prisma-client": "^0.8.0", - "@umami/redis-client": "^0.18.0", - "chalk": "^4.1.1", - "chart.js": "^4.2.1", - "chartjs-adapter-date-fns": "^3.0.0", - "classnames": "^2.3.1", - "colord": "^2.9.2", - "cors": "^2.8.5", - "cross-spawn": "^7.0.3", - "date-fns": "^2.23.0", - "date-fns-tz": "^1.1.4", - "dateformat": "^5.0.3", - "debug": "^4.3.4", - "del": "^6.0.0", - "detect-browser": "^5.2.0", - "dotenv": "^10.0.0", - "fs-extra": "^10.0.1", - "immer": "^9.0.12", - "ipaddr.js": "^2.0.1", - "is-ci": "^3.0.1", - "is-docker": "^3.0.0", - "is-localhost-ip": "^1.4.0", - "isbot": "^3.4.5", - "kafkajs": "^2.1.0", - "maxmind": "^4.3.6", - "moment-timezone": "^0.5.35", - "next": "14.0.4", - "next-basics": "^0.39.0", - "node-fetch": "^3.2.8", - "npm-run-all": "^4.1.5", - "prisma": "5.6.0", - "react": "^18.2.0", - "react-basics": "^0.114.0", - "react-beautiful-dnd": "^13.1.0", - "react-dom": "^18.2.0", - "react-error-boundary": "^4.0.4", - "react-intl": "^6.5.5", - "react-simple-maps": "^2.3.0", - "react-use-measure": "^2.0.4", - "react-window": "^1.8.6", - "request-ip": "^3.3.0", - "semver": "^7.5.4", - "thenby": "^1.3.4", - "timezone-support": "^2.0.2", - "uuid": "^9.0.0", - "yup": "^0.32.11", - "zustand": "^4.3.8" - }, - "devDependencies": { - "@formatjs/cli": "^4.2.29", - "@netlify/plugin-nextjs": "^4.27.3", - "@rollup/plugin-alias": "^5.0.0", - "@rollup/plugin-buble": "^1.0.2", - "@rollup/plugin-commonjs": "^25.0.4", - "@rollup/plugin-json": "^6.0.0", - "@rollup/plugin-node-resolve": "^15.2.0", - "@rollup/plugin-replace": "^5.0.2", - "@svgr/rollup": "^8.1.0", - "@svgr/webpack": "^8.1.0", - "@types/node": "^20.9.0", - "@types/react": "^18.2.41", - "@types/react-dom": "^18.2.17", - "@types/react-window": "^1.8.8", - "@typescript-eslint/eslint-plugin": "^6.7.3", - "@typescript-eslint/parser": "^6.7.3", - "cross-env": "^7.0.3", - "esbuild": "^0.17.17", - "eslint": "^8.33.0", - "eslint-config-next": "^12.2.4", - "eslint-config-prettier": "^8.5.0", - "eslint-import-resolver-alias": "^1.1.2", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-prettier": "^4.0.0", - "extract-react-intl-messages": "^4.1.1", - "husky": "^8.0.3", - "lint-staged": "^14.0.1", - "postcss": "^8.4.31", - "postcss-flexbugs-fixes": "^5.0.2", - "postcss-import": "^15.1.0", - "postcss-preset-env": "7.8.3", - "postcss-rtlcss": "^4.0.1", - "prettier": "^2.6.2", - "prompts": "2.4.2", - "rollup": "^3.28.0", - "rollup-plugin-copy": "^3.4.0", - "rollup-plugin-delete": "^2.0.0", - "rollup-plugin-dts": "^5.3.1", - "rollup-plugin-esbuild": "^5.0.0", - "rollup-plugin-node-externals": "^6.1.1", - "rollup-plugin-postcss": "^4.0.2", - "rollup-plugin-terser": "^7.0.2", - "stylelint": "^15.10.1", - "stylelint-config-css-modules": "^4.1.0", - "stylelint-config-prettier": "^9.0.3", - "stylelint-config-recommended": "^9.0.0", - "tar": "^6.1.2", - "ts-node": "^10.9.1", - "typescript": "^5.1.6" - } + "name": "umami", + "version": "2.9.0", + "description": "A simple, fast, privacy-focused alternative to Google Analytics.", + "author": "Mike Cao ", + "license": "MIT", + "homepage": "https://umami.is", + "repository": { + "type": "git", + "url": "https://github.com/umami-software/umami.git" + }, + "scripts": { + "dev": "next dev -p 3000", + "build": "npm-run-all check-env build-db check-db build-tracker build-geo build-app", + "start": "next start", + "build-docker": "npm-run-all build-db build-tracker build-geo build-app", + "start-docker": "npm-run-all check-db update-tracker start-server", + "start-env": "node scripts/start-env.js", + "start-server": "node server.js", + "build-app": "next build", + "build-components": "rollup -c rollup.components.config.mjs", + "build-tracker": "rollup -c rollup.tracker.config.mjs", + "build-db": "npm-run-all copy-db-files build-db-client", + "build-lang": "npm-run-all format-lang compile-lang clean-lang download-country-names download-language-names", + "build-geo": "node scripts/build-geo.js", + "build-db-schema": "prisma db pull", + "build-db-client": "prisma generate", + "update-tracker": "node scripts/update-tracker.js", + "update-db": "prisma migrate deploy", + "check-db": "node scripts/check-db.js", + "check-env": "node scripts/check-env.js", + "copy-db-files": "node scripts/copy-db-files.js", + "extract-messages": "formatjs extract \"src/{pages,components}/**/*.js\" --out-file build/messages.json", + "merge-messages": "node scripts/merge-messages.js", + "generate-lang": "npm-run-all extract-messages merge-messages", + "format-lang": "node scripts/format-lang.js", + "compile-lang": "formatjs compile-folder --ast build/messages public/intl/messages", + "clean-lang": "prettier --write ./public/intl/messages/*.json", + "check-lang": "node scripts/check-lang.js", + "download-country-names": "node scripts/download-country-names.js", + "download-language-names": "node scripts/download-language-names.js", + "change-password": "node scripts/change-password.js", + "lint": "next lint --quiet", + "prepare": "node -e \"if (process.env.NODE_ENV !== 'production'){process.exit(1)} \" || husky install", + "postbuild": "node scripts/postbuild.js", + "format": "prettier --write ." + }, + "lint-staged": { + "**/*.{js,jsx,ts,tsx}": [ + "prettier --write", + "eslint" + ], + "**/*.css": [ + "stylelint --fix", + "prettier --write" + ], + "**/*.json": [ + "prettier --write" + ] + }, + "cacheDirectories": [ + ".next/cache" + ], + "dependencies": { + "@clickhouse/client": "^0.2.2", + "@fontsource/inter": "^4.5.15", + "@prisma/client": "5.6.0", + "@prisma/extension-read-replicas": "^0.3.0", + "@react-spring/web": "^9.7.3", + "@tanstack/react-query": "^5.12.2", + "@umami/prisma-client": "^0.8.0", + "@umami/redis-client": "^0.18.0", + "chalk": "^4.1.1", + "chart.js": "^4.2.1", + "chartjs-adapter-date-fns": "^3.0.0", + "classnames": "^2.3.1", + "colord": "^2.9.2", + "cors": "^2.8.5", + "cross-spawn": "^7.0.3", + "date-fns": "^2.23.0", + "date-fns-tz": "^1.1.4", + "dateformat": "^5.0.3", + "debug": "^4.3.4", + "del": "^6.0.0", + "detect-browser": "^5.2.0", + "dotenv": "^10.0.0", + "fs-extra": "^10.0.1", + "immer": "^9.0.12", + "ipaddr.js": "^2.0.1", + "is-ci": "^3.0.1", + "is-docker": "^3.0.0", + "is-localhost-ip": "^1.4.0", + "isbot": "^3.4.5", + "kafkajs": "^2.1.0", + "maxmind": "^4.3.6", + "moment-timezone": "^0.5.35", + "next": "14.0.4", + "next-basics": "^0.39.0", + "node-fetch": "^3.2.8", + "npm-run-all": "^4.1.5", + "prisma": "5.6.0", + "react": "^18.2.0", + "react-basics": "^0.114.0", + "react-beautiful-dnd": "^13.1.0", + "react-dom": "^18.2.0", + "react-error-boundary": "^4.0.4", + "react-intl": "^6.5.5", + "react-simple-maps": "^2.3.0", + "react-use-measure": "^2.0.4", + "react-window": "^1.8.6", + "request-ip": "^3.3.0", + "semver": "^7.5.4", + "thenby": "^1.3.4", + "timezone-support": "^2.0.2", + "uuid": "^9.0.0", + "yup": "^0.32.11", + "zustand": "^4.3.8" + }, + "devDependencies": { + "@formatjs/cli": "^4.2.29", + "@netlify/plugin-nextjs": "^4.27.3", + "@rollup/plugin-alias": "^5.0.0", + "@rollup/plugin-buble": "^1.0.2", + "@rollup/plugin-commonjs": "^25.0.4", + "@rollup/plugin-json": "^6.0.0", + "@rollup/plugin-node-resolve": "^15.2.0", + "@rollup/plugin-replace": "^5.0.2", + "@svgr/rollup": "^8.1.0", + "@svgr/webpack": "^8.1.0", + "@types/node": "^20.9.0", + "@types/react": "^18.2.41", + "@types/react-dom": "^18.2.17", + "@types/react-window": "^1.8.8", + "@typescript-eslint/eslint-plugin": "^6.7.3", + "@typescript-eslint/parser": "^6.7.3", + "cross-env": "^7.0.3", + "esbuild": "^0.17.17", + "eslint": "^8.33.0", + "eslint-config-next": "^12.2.4", + "eslint-config-prettier": "^8.5.0", + "eslint-import-resolver-alias": "^1.1.2", + "eslint-plugin-import": "^2.26.0", + "extract-react-intl-messages": "^4.1.1", + "husky": "^8.0.3", + "lint-staged": "^14.0.1", + "postcss": "^8.4.31", + "postcss-flexbugs-fixes": "^5.0.2", + "postcss-import": "^15.1.0", + "postcss-preset-env": "7.8.3", + "postcss-rtlcss": "^4.0.1", + "prettier": "^3.2.4", + "prompts": "2.4.2", + "rollup": "^3.28.0", + "rollup-plugin-copy": "^3.4.0", + "rollup-plugin-delete": "^2.0.0", + "rollup-plugin-dts": "^5.3.1", + "rollup-plugin-esbuild": "^5.0.0", + "rollup-plugin-node-externals": "^6.1.1", + "rollup-plugin-postcss": "^4.0.2", + "rollup-plugin-terser": "^7.0.2", + "stylelint": "^15.10.1", + "stylelint-config-css-modules": "^4.1.0", + "stylelint-config-prettier": "^9.0.3", + "stylelint-config-recommended": "^9.0.0", + "tar": "^6.1.2", + "ts-node": "^10.9.1", + "typescript": "^5.1.6" + } } diff --git a/scripts/format-lang.js b/scripts/format-lang.js index 593e296d2..c5dd40ea7 100644 --- a/scripts/format-lang.js +++ b/scripts/format-lang.js @@ -1,7 +1,6 @@ const fs = require('fs-extra'); const path = require('path'); const del = require('del'); -const prettier = require('prettier'); const src = path.resolve(__dirname, '../src/lang'); const dest = path.resolve(__dirname, '../build/messages'); @@ -14,21 +13,19 @@ This script takes the files from the `lang` folder and formats them into the format that format-js expects. */ async function run() { - await fs.ensureDir(dest); + await fs.ensureDir(dest); - files.forEach(file => { - const lang = require(`../src/lang/${file}`); - const keys = Object.keys(lang).sort(); + files.forEach(file => { + const lang = require(`../src/lang/${file}`); + const keys = Object.keys(lang).sort(); - const formatted = keys.reduce((obj, key) => { - obj[key] = { defaultMessage: lang[key] }; - return obj; - }, {}); + const formatted = keys.reduce((obj, key) => { + obj[key] = { defaultMessage: lang[key] }; + return obj; + }, {}); - const json = prettier.format(JSON.stringify(formatted), { parser: 'json' }); - - fs.writeFileSync(path.resolve(dest, file), json); - }); + fs.writeFileSync(path.resolve(dest, file), JSON.stringify(formatted)); + }); } run(); diff --git a/yarn.lock b/yarn.lock index b24830a3c..e73c3b9b7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4319,13 +4319,6 @@ eslint-plugin-jsx-a11y@^6.5.1: object.fromentries "^2.0.6" semver "^6.3.0" -eslint-plugin-prettier@^4.0.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-4.2.1.tgz#651cbb88b1dab98bfd42f017a12fa6b2d993f94b" - integrity sha512-f/0rXLXUt0oFYs8ra4w49wYZBG5GKZpAYsJSm6rnYL5uVDjd+zowwMwVZHnAjf4edNrKpCDYfXDgmRE/Ak7QyQ== - dependencies: - prettier-linter-helpers "^1.0.0" - eslint-plugin-react-hooks@^4.5.0: version "4.6.0" resolved "https://registry.yarnpkg.com/eslint-plugin-react-hooks/-/eslint-plugin-react-hooks-4.6.0.tgz#4c3e697ad95b77e93f8646aaa1630c1ba607edd3" @@ -4533,11 +4526,6 @@ fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== -fast-diff@^1.1.2: - version "1.3.0" - resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" - integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== - fast-equals@^3.0.1: version "3.0.3" resolved "https://registry.yarnpkg.com/fast-equals/-/fast-equals-3.0.3.tgz#8e6cb4e51ca1018d87dd41982ef92758b3e4197f" @@ -7367,17 +7355,10 @@ prelude-ls@^1.2.1: resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== -prettier-linter-helpers@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz#d23d41fe1375646de2d0104d3454a3008802cf7b" - integrity sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w== - dependencies: - fast-diff "^1.1.2" - -prettier@^2.6.2: - version "2.8.8" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da" - integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q== +prettier@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.2.4.tgz#4723cadeac2ce7c9227de758e5ff9b14e075f283" + integrity sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ== pretty-bytes@^5.6.0: version "5.6.0" From 4b4f3e8c1f39c55c600dfe15ef5ecbd0f1858b3b Mon Sep 17 00:00:00 2001 From: uncenter <47499684+uncenter@users.noreply.github.com> Date: Wed, 17 Jan 2024 23:35:23 -0500 Subject: [PATCH 2/2] chore: add prettier to eslint extends --- .eslintrc.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.eslintrc.json b/.eslintrc.json index 5801064e3..4ab27a6e6 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -8,7 +8,8 @@ "eslint:recommended", "plugin:import/recommended", "plugin:@typescript-eslint/recommended", - "next" + "next", + "prettier" ], "parser": "@typescript-eslint/parser", "parserOptions": {