Fixed bugs found by eslint

This commit is contained in:
Marcel Hellkamp 2023-07-25 09:49:32 +02:00
parent cee770d5a4
commit 181cc64a07
8 changed files with 3346 additions and 47 deletions

14
.eslintrc.cjs Normal file
View File

@ -0,0 +1,14 @@
/* eslint-env node */
require("@rushstack/eslint-patch/modern-module-resolution");
module.exports = {
root: true,
"extends": [
"plugin:vue/vue3-essential",
"eslint:recommended",
"@vue/eslint-config-typescript",
],
parserOptions: {
ecmaVersion: "latest"
}
};

3288
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@ -14,7 +14,8 @@
"dev": "vite", "dev": "vite",
"preview": "vite preview", "preview": "vite preview",
"build": "vite build", "build": "vite build",
"check": "vue-tsc --noEmit -p tsconfig.app.json --composite false" "check": "vue-tsc --noEmit -p tsconfig.app.json --composite false",
"lint": "eslint ./src --ext .vue,.js,.jsx,.cjs,.mjs,.ts,.tsx,.cts,.mts --fix --ignore-path .gitignore"
}, },
"dependencies": { "dependencies": {
"@vueuse/core": "^10.2.1", "@vueuse/core": "^10.2.1",
@ -25,11 +26,17 @@
"vue-masonry": "^0.16.0" "vue-masonry": "^0.16.0"
}, },
"devDependencies": { "devDependencies": {
"@rushstack/eslint-patch": "^1.2.0",
"@tsconfig/node18": "^2.0.1", "@tsconfig/node18": "^2.0.1",
"@types/node": "^18.16.17", "@types/node": "^18.16.17",
"@typescript-eslint/eslint-plugin": "^6.2.0",
"@typescript-eslint/parser": "^6.2.0",
"@vitejs/plugin-legacy": "^4.1.0", "@vitejs/plugin-legacy": "^4.1.0",
"@vitejs/plugin-vue": "^4.2.3", "@vitejs/plugin-vue": "^4.2.3",
"@vue/tsconfig": "^0.4.0", "@vue/tsconfig": "^0.4.0",
"@vue/eslint-config-typescript": "^11.0.3",
"eslint": "^8.45.0",
"eslint-plugin-vue": "^9.15.1",
"git-describe": "^4.1.1", "git-describe": "^4.1.1",
"typescript": "~5.0.4", "typescript": "~5.0.4",
"vite": "^4.3.9", "vite": "^4.3.9",

View File

@ -175,12 +175,6 @@ const toggleTheme = () => {
config.value.theme = actualTheme.value === "dark" ? "light" : "dark" config.value.theme = actualTheme.value === "dark" ? "light" : "dark"
} }
const aboutLink = computed(() => {
if (config.value?.servers.length)
return `https://${config.value.servers[0]}/about`
return "#"
})
const privacyLink = computed(() => { const privacyLink = computed(() => {
if (config.value?.servers.length) if (config.value?.servers.length)
return `https://${config.value.servers[0]}/privacy-policy` return `https://${config.value.servers[0]}/privacy-policy`
@ -204,7 +198,7 @@ const privacyLink = computed(() => {
<div v-if="filteredPosts.length === 0 && updateInProgress">Loading first posts ...</div> <div v-if="filteredPosts.length === 0 && updateInProgress">Loading first posts ...</div>
<div v-else-if="filteredPosts.length === 0">Nothing there yet ...</div> <div v-else-if="filteredPosts.length === 0">Nothing there yet ...</div>
<div v-else v-masonry transition-duration="1s" item-selector=".wall-item" percent-position="true" id="wall"> <div v-else v-masonry transition-duration="1s" item-selector=".wall-item" percent-position="true" id="wall">
<Card v-masonry-tile class="wall-item secret-hover" v-for="(post, index) in filteredPosts" :key="post.id" <Card v-masonry-tile class="wall-item secret-hover" v-for="post in filteredPosts" :key="post.id"
:post="post"> :post="post">
<template v-slot:topleft> <template v-slot:topleft>
<div class="dropdown secret"> <div class="dropdown secret">

View File

@ -1,7 +1,7 @@
<script setup lang="ts"> <script setup lang="ts">
import { type Config } from '@/types'; import { type Config } from '@/types';
const props = defineProps<{ defineProps<{
config: Config config: Config
}>() }>()
@ -21,7 +21,7 @@ const props = defineProps<{
<template v-if="config.accounts.length && config?.tags.length"> and </template> <template v-if="config.accounts.length && config?.tags.length"> and </template>
<template v-if="config.accounts.length"> <template v-if="config.accounts.length">
posts or boosts by posts or boosts by
<template v-for="(acc, index) in config.accounts" :key="t"> <template v-for="(acc, index) in config.accounts" :key="acc">
<code>@{{ acc }}</code> <code>@{{ acc }}</code>
<template v-if="index < config.accounts.length - 2">, </template> <template v-if="index < config.accounts.length - 2">, </template>
<template v-else-if="index == config.accounts.length - 2"> or </template> <template v-else-if="index == config.accounts.length - 2"> or </template>

View File

@ -5,7 +5,7 @@ import { type Config } from '@/types';
var siteConfig: Config | null = null; let siteConfig: Config | null = null;
const themes = ["dark", "light", "auto"]; const themes = ["dark", "light", "auto"];
const boolYes = ["", "y", "yes", "true"]; const boolYes = ["", "y", "yes", "true"];
@ -269,7 +269,7 @@ export function sanatizeConfig(config: any): Config {
} }
async function loadSideConfig() { async function loadSideConfig() {
var config; let config;
try { try {
config = await (await fetch(siteConfigUrl)).json() || {}; config = await (await fetch(siteConfigUrl)).json() || {};

View File

@ -109,7 +109,7 @@ const accountCache: Record<string, MastodonAccount | null> = {}
async function getLocalUser(user: string, domain: string): Promise<any> { async function getLocalUser(user: string, domain: string): Promise<any> {
const key = `${user}@${domain}` const key = `${user}@${domain}`
if (!accountCache.hasOwnProperty(key)) { if (!Object.hasOwnProperty.call(accountCache, key)) {
try { try {
accountCache[key] = (await fetchJson(domain, "v1/accounts/lookup", { acct: user })) as MastodonAccount accountCache[key] = (await fetchJson(domain, "v1/accounts/lookup", { acct: user })) as MastodonAccount
} catch (e) { } catch (e) {
@ -131,10 +131,10 @@ async function fetchJson(domain: string, path: string, query?: Record<string, an
const pairs = Object.entries(query).map(([key, value]) => [key, value.toString()]) const pairs = Object.entries(query).map(([key, value]) => [key, value.toString()])
url += "?" + new URLSearchParams(pairs).toString() url += "?" + new URLSearchParams(pairs).toString()
} }
var rs = await fetch(url) let rs = await fetch(url)
// Auto-retry rate limit errors // Auto-retry rate limit errors
var errCount = 0 let errCount = 0
while (!rs.ok) { while (!rs.ok) {
if (errCount++ > 3) if (errCount++ > 3)
break // Do not retry anymore break // Do not retry anymore
@ -206,12 +206,12 @@ const filterStatus = (cfg: Config, status: MastodonStatus) => {
* Convert a mastdon status object to a Post. * Convert a mastdon status object to a Post.
*/ */
const statusToWallPost = (status: MastodonStatus): Post => { const statusToWallPost = (status: MastodonStatus): Post => {
let date = status.created_at const date = status.created_at
if (status.reblog) if (status.reblog)
status = status.reblog status = status.reblog
var media; let media;
const image = status.media_attachments?.find((m: any) => m.type == "image") const image = status.media_attachments?.find((m: any) => m.type == "image")
if (image) if (image)
media = image.url media = image.url

View File

@ -1,21 +1,21 @@
import { fileURLToPath, URL } from 'node:url' import { fileURLToPath, URL } from "node:url";
import { defineConfig } from 'vite' import { defineConfig } from "vite";
import vue from '@vitejs/plugin-vue' import vue from "@vitejs/plugin-vue";
import viteCompression from 'vite-plugin-compression'; import viteCompression from "vite-plugin-compression";
import { gitDescribeSync } from 'git-describe'; import { gitDescribeSync } from "git-describe";
import viteLegacy from '@vitejs/plugin-legacy' import viteLegacy from "@vitejs/plugin-legacy";
var version; let version;
try { try {
var gitInfo = gitDescribeSync(); const gitInfo = gitDescribeSync();
if (gitInfo.tag) { if (gitInfo.tag) {
version = `${gitInfo.tag}`; version = `${gitInfo.tag}`;
if (gitInfo.distance) if (gitInfo.distance)
version += `-${gitInfo.distance}+${gitInfo.hash}` version += `-${gitInfo.distance}+${gitInfo.hash}`;
} }
} catch { } } catch { ; }
// https://vitejs.dev/config/ // https://vitejs.dev/config/
export default defineConfig({ export default defineConfig({
@ -30,7 +30,7 @@ export default defineConfig({
], ],
resolve: { resolve: {
alias: { alias: {
'@': fileURLToPath(new URL('./src', import.meta.url)) "@": fileURLToPath(new URL("./src", import.meta.url))
} }
} }
}) });