diff --git a/.eslintrc.json b/.eslintrc.json
index 8c8f1e67..7f9df3ed 100644
--- a/.eslintrc.json
+++ b/.eslintrc.json
@@ -1,9 +1,11 @@
{
- "parser": "@typescript-eslint/parser",
+ "parser": "vue-eslint-parser",
"parserOptions": {
+ "parser": "@typescript-eslint/parser",
"sourceType": "module",
"ecmaVersion": 2021,
- "project": "tsconfig.json"
+ "project": "tsconfig.json",
+ "extraFileExtensions": [".vue"]
},
"extends": [
"prettier",
@@ -11,6 +13,7 @@
"plugin:@typescript-eslint/eslint-recommended",
"plugin:@typescript-eslint/recommended",
"plugin:@typescript-eslint/recommended-requiring-type-checking",
+ "plugin:vue/vue3-recommended",
"plugin:functional/external-typescript-recommended",
"plugin:ava/recommended",
"plugin:prettier/recommended"
diff --git a/justfile b/justfile
index e0ac6f7f..35570152 100644
--- a/justfile
+++ b/justfile
@@ -4,7 +4,7 @@ lint:
npx astro sync
npx astro check
npx prettier --check source
- npx eslint . --ext ".ts"
+ npx eslint . --ext ".ts,.vue"
npx jscpd source
@compile:
diff --git a/package-lock.json b/package-lock.json
index 40b3c1c0..69c193a1 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -53,6 +53,7 @@
"eslint-plugin-ava": "14.0.0",
"eslint-plugin-functional": "6.5.1",
"eslint-plugin-prettier": "5.1.3",
+ "eslint-plugin-vue": "9.26.0",
"fastify": "4.27.0",
"fishery": "2.2.2",
"get-port": "7.1.0",
@@ -67,6 +68,7 @@
"tailwindcss": "3.4.4",
"tsx": "4.15.4",
"typescript": "5.4.5",
+ "vue-eslint-parser": "9.4.3",
"vue-tsc": "2.0.21",
"wait-on": "7.2.0",
"zx": "8.1.2"
@@ -4596,6 +4598,12 @@
"dev": true,
"license": "MIT"
},
+ "node_modules/boolbase": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz",
+ "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
+ "dev": true
+ },
"node_modules/boxen": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/boxen/-/boxen-7.1.1.tgz",
@@ -6343,6 +6351,68 @@
}
}
},
+ "node_modules/eslint-plugin-vue": {
+ "version": "9.26.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.26.0.tgz",
+ "integrity": "sha512-eTvlxXgd4ijE1cdur850G6KalZqk65k1JKoOI2d1kT3hr8sPD07j1q98FRFdNnpxBELGPWxZmInxeHGF/GxtqQ==",
+ "dev": true,
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "globals": "^13.24.0",
+ "natural-compare": "^1.4.0",
+ "nth-check": "^2.1.1",
+ "postcss-selector-parser": "^6.0.15",
+ "semver": "^7.6.0",
+ "vue-eslint-parser": "^9.4.2",
+ "xml-name-validator": "^4.0.0"
+ },
+ "engines": {
+ "node": "^14.17.0 || >=16.0.0"
+ },
+ "peerDependencies": {
+ "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-vue/node_modules/globals": {
+ "version": "13.24.0",
+ "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz",
+ "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==",
+ "dev": true,
+ "dependencies": {
+ "type-fest": "^0.20.2"
+ },
+ "engines": {
+ "node": ">=8"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/eslint-plugin-vue/node_modules/postcss-selector-parser": {
+ "version": "6.1.0",
+ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz",
+ "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==",
+ "dev": true,
+ "dependencies": {
+ "cssesc": "^3.0.0",
+ "util-deprecate": "^1.0.2"
+ },
+ "engines": {
+ "node": ">=4"
+ }
+ },
+ "node_modules/eslint-plugin-vue/node_modules/type-fest": {
+ "version": "0.20.2",
+ "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz",
+ "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==",
+ "dev": true,
+ "engines": {
+ "node": ">=10"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
"node_modules/eslint-scope": {
"version": "7.2.2",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
@@ -10349,6 +10419,18 @@
"set-blocking": "^2.0.0"
}
},
+ "node_modules/nth-check": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz",
+ "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==",
+ "dev": true,
+ "dependencies": {
+ "boolbase": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/fb55/nth-check?sponsor=1"
+ }
+ },
"node_modules/object-assign": {
"version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
@@ -14866,6 +14948,30 @@
}
}
},
+ "node_modules/vue-eslint-parser": {
+ "version": "9.4.3",
+ "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz",
+ "integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==",
+ "dev": true,
+ "dependencies": {
+ "debug": "^4.3.4",
+ "eslint-scope": "^7.1.1",
+ "eslint-visitor-keys": "^3.3.0",
+ "espree": "^9.3.1",
+ "esquery": "^1.4.0",
+ "lodash": "^4.17.21",
+ "semver": "^7.3.6"
+ },
+ "engines": {
+ "node": "^14.17.0 || >=16.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/mysticatea"
+ },
+ "peerDependencies": {
+ "eslint": ">=6.0.0"
+ }
+ },
"node_modules/vue-template-compiler": {
"version": "2.7.16",
"resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz",
@@ -15297,6 +15403,15 @@
"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
}
},
+ "node_modules/xml-name-validator": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz",
+ "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==",
+ "dev": true,
+ "engines": {
+ "node": ">=12"
+ }
+ },
"node_modules/y18n": {
"version": "5.0.8",
"resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz",
diff --git a/package.json b/package.json
index 4f00ebfa..1c2be86a 100644
--- a/package.json
+++ b/package.json
@@ -58,6 +58,7 @@
"eslint-plugin-ava": "14.0.0",
"eslint-plugin-functional": "6.5.1",
"eslint-plugin-prettier": "5.1.3",
+ "eslint-plugin-vue": "9.26.0",
"fastify": "4.27.0",
"fishery": "2.2.2",
"get-port": "7.1.0",
@@ -72,6 +73,7 @@
"tailwindcss": "3.4.4",
"tsx": "4.15.4",
"typescript": "5.4.5",
+ "vue-eslint-parser": "9.4.3",
"vue-tsc": "2.0.21",
"wait-on": "7.2.0",
"zx": "8.1.2"
diff --git a/source/statistics/GitHubRepositories.vue b/source/statistics/GitHubRepositories.vue
index 0ad9f1d2..a462849c 100644
--- a/source/statistics/GitHubRepositories.vue
+++ b/source/statistics/GitHubRepositories.vue
@@ -1,9 +1,9 @@
-
+
+
diff --git a/source/statistics/GitHubStars.vue b/source/statistics/GitHubStars.vue
index e2a929fa..ce709010 100644
--- a/source/statistics/GitHubStars.vue
+++ b/source/statistics/GitHubStars.vue
@@ -1,9 +1,9 @@
-
+
+
diff --git a/source/statistics/Cite.vue b/source/statistics/StatisticsCite.vue
similarity index 100%
rename from source/statistics/Cite.vue
rename to source/statistics/StatisticsCite.vue
diff --git a/source/statistics/StatisticsData.vue b/source/statistics/StatisticsData.vue
index 8b72a2a0..0e8e0381 100644
--- a/source/statistics/StatisticsData.vue
+++ b/source/statistics/StatisticsData.vue
@@ -6,7 +6,7 @@ import { Maybe } from "true-myth";
import YearsInBusiness from "./YearsInBusiness.vue";
import GitHubRepositories from "./GitHubRepositories.vue";
import GitHubStars from "./GitHubStars.vue";
-import Figure from "./Figure.vue";
+import StatisticsFigure from "./StatisticsFigure.vue";
import { gitHubStatisticsSchema, type GitHubStatistics } from "../github-statistics/github-statistics-schema";
const currentYear = import.meta.env.PROD ? new Date() : new Date(2022, 2, 23);
@@ -30,7 +30,7 @@ const barChartIcon = icons["bar-chart"].toSvg({ class: "text-dracula-green w-6 h
-
+
diff --git a/source/statistics/Figure.vue b/source/statistics/StatisticsFigure.vue
similarity index 100%
rename from source/statistics/Figure.vue
rename to source/statistics/StatisticsFigure.vue
diff --git a/source/statistics/YearsInBusiness.vue b/source/statistics/YearsInBusiness.vue
index e2e41362..43adf51f 100644
--- a/source/statistics/YearsInBusiness.vue
+++ b/source/statistics/YearsInBusiness.vue
@@ -1,6 +1,6 @@
-
- {{ yearsOfExperience }} yrs
-
+
+ {{ yearsOfExperience }} yrs
+