From 9dc770e3d38d03acd988a8f7e978c3046ae40937 Mon Sep 17 00:00:00 2001 From: n0099 Date: Tue, 27 Aug 2024 14:56:02 +0000 Subject: [PATCH] * fix https://github.com/moment/luxon/issues/1650 @ `` & `registerRelative()` @ `stores/relativeTime` * switch to flat config as `@tanstack/eslint-plugin-query`: https://github.com/TanStack/query/pull/7663, `eslint-plugin-pinia`: https://github.com/lisilinhart/eslint-plugin-pinia/issues/35 & `eslint-plugin-import-x`: https://github.com/un-ts/eslint-plugin-import-x/pull/122 now supports it @ eslint.config.js @ fe --- fe/eslint.config.js | 16 +++++++--------- fe/src/components/post/badge/TimeView.vue | 4 +++- fe/src/stores/relativeTime.ts | 4 +++- 3 files changed, 13 insertions(+), 11 deletions(-) diff --git a/fe/eslint.config.js b/fe/eslint.config.js index eeaf8d7b..d1b02dcf 100644 --- a/fe/eslint.config.js +++ b/fe/eslint.config.js @@ -520,15 +520,15 @@ const rules = [{ // as of eslint-plugin-unicorn@50.0.1 }, }]; -import withNuxt from './.nuxt/eslint.config.mjs'; +import { withNuxt } from './.nuxt/eslint.config.mjs'; import * as vueESLintParser from 'vue-eslint-parser'; // eslint-disable-next-line import-x/extensions import vueESLintConfigTypescriptRecommendedExtends from '@vue/eslint-config-typescript/recommended.js'; import pluginVue from 'eslint-plugin-vue'; -import { fixupConfigRules } from '@eslint/compat'; import { FlatCompat } from '@eslint/eslintrc'; import eslintJs from '@eslint/js'; import pluginStylistic from '@stylistic/eslint-plugin'; +import pluginTanstackQuery from '@tanstack/eslint-plugin-query'; import * as typescriptESLintParser from '@typescript-eslint/parser'; import pluginImportX from 'eslint-plugin-import-x'; import pluginPinia from 'eslint-plugin-pinia'; @@ -543,18 +543,16 @@ const compat = new FlatCompat(); export default withNuxt( eslintJs.configs.recommended, ...pluginVue.configs['flat/recommended'], - ...compat.config(vueESLintConfigTypescriptRecommendedExtends), // https://github.com/vuejs/eslint-config-typescript/issues/76#issuecomment-2051234597 + ...compat.config(vueESLintConfigTypescriptRecommendedExtends), // https://github.com/vuejs/eslint-config-typescript/issues/76#issuecomment-2148720004 ...compat.extends( // https://github.com/ota-meshi/typescript-eslint-parser-for-extra-files/issues/95#issuecomment-2148604881 'plugin:@typescript-eslint/strict-type-checked', 'plugin:@typescript-eslint/stylistic-type-checked', ), - ...compat.config(pluginImportX.configs.recommended), // https://github.com/un-ts/eslint-plugin-import-x/pull/85 - pluginImportX.configs.typescript, // https://github.com/import-js/eslint-plugin-import/issues/2556#issuecomment-2119520339 - ...fixupConfigRules(...compat.extends( - 'plugin:@tanstack/eslint-plugin-query/recommended', // https://github.com/TanStack/query/pull/7253 - )), + pluginImportX.flatConfigs.recommended, + pluginImportX.flatConfigs.typescript, + ...pluginTanstackQuery.configs['flat/recommended'], pluginUnicorn.configs['flat/recommended'], - ...compat.config(pluginPinia.configs.all), + pluginPinia.configs['all-flat'], { languageOptions: { ecmaVersion: 'latest' } }, { ignores: ['node_modules/', '.nuxt/', '.yarn/', '.pnp.*'] }, { linterOptions: { reportUnusedDisableDirectives: 'error' } }, diff --git a/fe/src/components/post/badge/TimeView.vue b/fe/src/components/post/badge/TimeView.vue index 16b944f7..c46cdd0b 100644 --- a/fe/src/components/post/badge/TimeView.vue +++ b/fe/src/components/post/badge/TimeView.vue @@ -37,7 +37,9 @@ const tippyCotentRelativeTo = computed(() => (props.relativeTo === undefined || ? '' : `${props.relativeToText}:
${props.relativeTo.toLocaleString(DateTime.DATETIME_FULL_WITH_SECONDS)}
- 相差 ${props.current.diff(props.relativeTo).rescale().toHuman()}`)); + 相差 ${props.current + .diff(props.relativeTo, undefined, { conversionAccuracy: 'longterm' }) + .rescale().toHuman()}`)); const tippyContent = computed(() => `本${props.postType}${props.timestampType}:
${hydrationStore.isHydratingOrSSR ? currentInChina.value.toLocaleString(DateTime.DATETIME_FULL_WITH_SECONDS) diff --git a/fe/src/stores/relativeTime.ts b/fe/src/stores/relativeTime.ts index 00acdb5b..87ad04a8 100644 --- a/fe/src/stores/relativeTime.ts +++ b/fe/src/stores/relativeTime.ts @@ -13,7 +13,9 @@ export const useRelativeTimeStore = defineStore('relativeTime', () => { }); } const registerRelative = (dateTime: DateTime, options?: ToRelativeOptions) => computed(() => { - const relativeDuration = dateTime.diff(DateTime.now()).shiftTo(...units); + const relativeDuration = dateTime + .diff(DateTime.now(), undefined, { conversionAccuracy: 'longterm' }) + .shiftTo(...units); // eslint-disable-next-line @typescript-eslint/no-non-null-assertion const { unit } = units .map(unit => ({ unit, value: relativeDuration.get(unit) }))