diff --git a/auto-imports.d.ts b/auto-imports.d.ts new file mode 100644 index 0000000..48f1e9e --- /dev/null +++ b/auto-imports.d.ts @@ -0,0 +1,74 @@ +/* eslint-disable */ +/* prettier-ignore */ +// @ts-nocheck +// noinspection JSUnusedGlobalSymbols +// Generated by unplugin-auto-import +export {} +declare global { + const EffectScope: typeof import('vue')['EffectScope'] + const computed: typeof import('vue')['computed'] + const createApp: typeof import('vue')['createApp'] + const customRef: typeof import('vue')['customRef'] + const defineAsyncComponent: typeof import('vue')['defineAsyncComponent'] + const defineComponent: typeof import('vue')['defineComponent'] + const effectScope: typeof import('vue')['effectScope'] + const getCurrentInstance: typeof import('vue')['getCurrentInstance'] + const getCurrentScope: typeof import('vue')['getCurrentScope'] + const h: typeof import('vue')['h'] + const inject: typeof import('vue')['inject'] + const isProxy: typeof import('vue')['isProxy'] + const isReactive: typeof import('vue')['isReactive'] + const isReadonly: typeof import('vue')['isReadonly'] + const isRef: typeof import('vue')['isRef'] + const markRaw: typeof import('vue')['markRaw'] + const nextTick: typeof import('vue')['nextTick'] + const onActivated: typeof import('vue')['onActivated'] + const onBeforeMount: typeof import('vue')['onBeforeMount'] + const onBeforeUnmount: typeof import('vue')['onBeforeUnmount'] + const onBeforeUpdate: typeof import('vue')['onBeforeUpdate'] + const onDeactivated: typeof import('vue')['onDeactivated'] + const onErrorCaptured: typeof import('vue')['onErrorCaptured'] + const onMounted: typeof import('vue')['onMounted'] + const onRenderTracked: typeof import('vue')['onRenderTracked'] + const onRenderTriggered: typeof import('vue')['onRenderTriggered'] + const onScopeDispose: typeof import('vue')['onScopeDispose'] + const onServerPrefetch: typeof import('vue')['onServerPrefetch'] + const onUnmounted: typeof import('vue')['onUnmounted'] + const onUpdated: typeof import('vue')['onUpdated'] + const onWatcherCleanup: typeof import('vue')['onWatcherCleanup'] + const provide: typeof import('vue')['provide'] + const reactive: typeof import('vue')['reactive'] + const readonly: typeof import('vue')['readonly'] + const ref: typeof import('vue')['ref'] + const resolveComponent: typeof import('vue')['resolveComponent'] + const shallowReactive: typeof import('vue')['shallowReactive'] + const shallowReadonly: typeof import('vue')['shallowReadonly'] + const shallowRef: typeof import('vue')['shallowRef'] + const toRaw: typeof import('vue')['toRaw'] + const toRef: typeof import('vue')['toRef'] + const toRefs: typeof import('vue')['toRefs'] + const toValue: typeof import('vue')['toValue'] + const triggerRef: typeof import('vue')['triggerRef'] + const unref: typeof import('vue')['unref'] + const useAttrs: typeof import('vue')['useAttrs'] + const useCssModule: typeof import('vue')['useCssModule'] + const useCssVars: typeof import('vue')['useCssVars'] + const useDialog: typeof import('naive-ui')['useDialog'] + const useId: typeof import('vue')['useId'] + const useLoadingBar: typeof import('naive-ui')['useLoadingBar'] + const useMessage: typeof import('naive-ui')['useMessage'] + const useModel: typeof import('vue')['useModel'] + const useNotification: typeof import('naive-ui')['useNotification'] + const useSlots: typeof import('vue')['useSlots'] + const useTemplateRef: typeof import('vue')['useTemplateRef'] + const watch: typeof import('vue')['watch'] + const watchEffect: typeof import('vue')['watchEffect'] + const watchPostEffect: typeof import('vue')['watchPostEffect'] + const watchSyncEffect: typeof import('vue')['watchSyncEffect'] +} +// for type re-export +declare global { + // @ts-ignore + export type { Component, ComponentPublicInstance, ComputedRef, ExtractDefaultPropTypes, ExtractPropTypes, ExtractPublicPropTypes, InjectionKey, PropType, Ref, VNode, WritableComputedRef } from 'vue' + import('vue') +} diff --git a/components.d.ts b/components.d.ts new file mode 100644 index 0000000..a9f9b8a --- /dev/null +++ b/components.d.ts @@ -0,0 +1,79 @@ +/* eslint-disable */ +/* prettier-ignore */ +// @ts-nocheck +// Generated by unplugin-vue-components +// Read more: https://github.com/vuejs/core/pull/3399 +export {} + +declare module 'vue' { + export interface GlobalComponents { + GuestSidebar: typeof import('./src/components/sidebar/GuestSidebar.vue')['default'] + LoadingBar: typeof import('./src/components/LoadingBar.vue')['default'] + MainSidebar: typeof import('./src/components/sidebar/MainSidebar.vue')['default'] + NAlert: typeof import('naive-ui')['NAlert'] + NAvatar: typeof import('naive-ui')['NAvatar'] + NButton: typeof import('naive-ui')['NButton'] + NCard: typeof import('naive-ui')['NCard'] + NCode: typeof import('naive-ui')['NCode'] + NCollapse: typeof import('naive-ui')['NCollapse'] + NCollapseItem: typeof import('naive-ui')['NCollapseItem'] + NDivider: typeof import('naive-ui')['NDivider'] + NDrawer: typeof import('naive-ui')['NDrawer'] + NDrawerContent: typeof import('naive-ui')['NDrawerContent'] + NEl: typeof import('naive-ui')['NEl'] + NEllipsis: typeof import('naive-ui')['NEllipsis'] + NEmpty: typeof import('naive-ui')['NEmpty'] + NForm: typeof import('naive-ui')['NForm'] + NFormItem: typeof import('naive-ui')['NFormItem'] + NGi: typeof import('naive-ui')['NGi'] + NGradientText: typeof import('naive-ui')['NGradientText'] + NGrid: typeof import('naive-ui')['NGrid'] + NGridItem: typeof import('naive-ui')['NGridItem'] + NH1: typeof import('naive-ui')['NH1'] + NH2: typeof import('naive-ui')['NH2'] + NH3: typeof import('naive-ui')['NH3'] + NH4: typeof import('naive-ui')['NH4'] + NH5: typeof import('naive-ui')['NH5'] + NIcon: typeof import('naive-ui')['NIcon'] + NImage: typeof import('naive-ui')['NImage'] + NInput: typeof import('naive-ui')['NInput'] + NLayout: typeof import('naive-ui')['NLayout'] + NLayoutContent: typeof import('naive-ui')['NLayoutContent'] + NLayoutHeader: typeof import('naive-ui')['NLayoutHeader'] + NLayoutSider: typeof import('naive-ui')['NLayoutSider'] + NLi: typeof import('naive-ui')['NLi'] + NList: typeof import('naive-ui')['NList'] + NListItem: typeof import('naive-ui')['NListItem'] + NMenu: typeof import('naive-ui')['NMenu'] + NModal: typeof import('naive-ui')['NModal'] + NNumberAnimation: typeof import('naive-ui')['NNumberAnimation'] + NP: typeof import('naive-ui')['NP'] + NQrCode: typeof import('naive-ui')['NQrCode'] + NRadio: typeof import('naive-ui')['NRadio'] + NRadioButton: typeof import('naive-ui')['NRadioButton'] + NRadioGroup: typeof import('naive-ui')['NRadioGroup'] + NScrollbar: typeof import('naive-ui')['NScrollbar'] + NSelect: typeof import('naive-ui')['NSelect'] + NSkeleton: typeof import('naive-ui')['NSkeleton'] + NSpace: typeof import('naive-ui')['NSpace'] + NSpin: typeof import('naive-ui')['NSpin'] + NStatistic: typeof import('naive-ui')['NStatistic'] + NStep: typeof import('naive-ui')['NStep'] + NSteps: typeof import('naive-ui')['NSteps'] + NTabPane: typeof import('naive-ui')['NTabPane'] + NTabs: typeof import('naive-ui')['NTabs'] + NTag: typeof import('naive-ui')['NTag'] + NText: typeof import('naive-ui')['NText'] + NThing: typeof import('naive-ui')['NThing'] + NTooltip: typeof import('naive-ui')['NTooltip'] + NUl: typeof import('naive-ui')['NUl'] + RouterLink: typeof import('vue-router')['RouterLink'] + RouterView: typeof import('vue-router')['RouterView'] + TheDialog: typeof import('./src/components/TheDialog.vue')['default'] + TheFooter: typeof import('./src/components/TheFooter.vue')['default'] + TheHeader: typeof import('./src/components/TheHeader.vue')['default'] + TheMessage: typeof import('./src/components/TheMessage.vue')['default'] + TheNotification: typeof import('./src/components/TheNotification.vue')['default'] + UserInfo: typeof import('./src/components/UserInfo.vue')['default'] + } +} diff --git a/env.d.ts b/env.d.ts new file mode 100644 index 0000000..11f02fe --- /dev/null +++ b/env.d.ts @@ -0,0 +1 @@ +/// diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 0000000..3009bb4 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,19 @@ +import pluginVue from 'eslint-plugin-vue' +import vueTsEslintConfig from '@vue/eslint-config-typescript' +import skipFormatting from '@vue/eslint-config-prettier/skip-formatting' + +export default [ + { + name: 'app/files-to-lint', + files: ['**/*.{ts,mts,tsx,vue}'], + }, + + { + name: 'app/files-to-ignore', + ignores: ['**/dist/**', '**/dist-ssr/**', '**/coverage/**'], + }, + + ...pluginVue.configs['flat/essential'], + ...vueTsEslintConfig(), + skipFormatting, +] diff --git a/package.json b/package.json index 834707a..670f628 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,15 @@ { "name": "locyanfrp", - "private": true, "version": "2.4", + "private": true, "type": "module", "scripts": { "dev": "vite", "build": "vite build", "preview": "vite preview", + "build-ts-check": "run-p type-check \"build-only {@}\" --", + "type-check": "vue-tsc --build", + "lint": "eslint . --fix", "format": "prettier --write src/" }, "dependencies": { @@ -16,39 +19,45 @@ "@vicons/ionicons4": "^0.12.0", "@vicons/ionicons5": "^0.12.0", "@vicons/material": "^0.12.0", - "axios": "^1.7.7", + "axios": "^1.7.9", "highlight.js": "^11.10.0", "js-cookie": "^3.0.5", "json": "^11.0.0", "marked": "^11.2.0", - "nodejs-websocket": "^1.7.2", "postcss": "^8.4.47", "qs": "^6.13.0", "tailwindcss": "^3.4.12", "unplugin-auto-import": "^0.17.8", "unplugin-vue-components": "^0.26.0", "v-clipboard": "^3.0.0-next.1", - "vue": "^3.5.6", + "vue": "^3.5.13", "vue-axios": "^3.5.2", "vue-cookies": "^1.8.4", - "vue-native-websocket": "^2.0.15", "vue-route": "^1.5.1", - "vue-router": "^4.4.5", + "vue-router": "^4.5.0", "vue-turnstile": "^1.0.11", "vuex": "^4.1.0" }, "devDependencies": { - "@tsconfig/node20": "^20.1.4", + "@tsconfig/node22": "^22.0.0", + "@types/node": "^22.10.2", "@types/qs": "^6.9.16", - "@vitejs/plugin-vue": "^5.1.4", - "@vue/tsconfig": "^0.5.1", + "@vitejs/plugin-vue": "^5.2.1", + "@vue/eslint-config-prettier": "^10.1.0", + "@vue/eslint-config-typescript": "^14.1.3", + "@vue/tsconfig": "^0.7.0", + "eslint": "^9.14.0", + "eslint-plugin-vue": "^9.30.0", + "npm-run-all2": "^7.0.2", + "prettier": "^3.3.3", "autoprefixer": "^10.4.20", "cssnano": "^7.0.6", "git-revision-vite-plugin": "^0.0.11", "naive-ui": "2.38.2", - "prettier": "^3.3.3", "vfonts": "^0.1.0", - "vite": "^5.4.6", - "vite-plugin-vue-devtools": "^7.4.5" + "typescript": "~5.6.3", + "vite": "^6.0.5", + "vite-plugin-vue-devtools": "^7.6.8", + "vue-tsc": "^2.1.10" } -} \ No newline at end of file +} diff --git a/postcss.config.js b/postcss.config.ts similarity index 100% rename from postcss.config.js rename to postcss.config.ts diff --git a/tailwind.config.js b/tailwind.config.ts similarity index 100% rename from tailwind.config.js rename to tailwind.config.ts diff --git a/tsconfig.app.json b/tsconfig.app.json index 44a400b..913b8f2 100644 --- a/tsconfig.app.json +++ b/tsconfig.app.json @@ -3,15 +3,10 @@ "include": ["env.d.ts", "src/**/*", "src/**/*.vue"], "exclude": ["src/**/__tests__/*"], "compilerOptions": { - "composite": true, "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.app.tsbuildinfo", - "baseUrl": ".", "paths": { - "@/*": ["./src/*"], - "@views/*": ["./src/views/*"], - "@components/*": ["./src/components/*"], - "@router": ["./src//router/index.js"], + "@/*": ["./src/*"] } } } diff --git a/tsconfig.node.json b/tsconfig.node.json index 9dd56b8..4c399c2 100644 --- a/tsconfig.node.json +++ b/tsconfig.node.json @@ -1,10 +1,13 @@ { - "extends": "@tsconfig/node20/tsconfig.json", + "extends": "@tsconfig/node22/tsconfig.json", "include": [ - "vite.config.*" + "vite.config.*", + "vitest.config.*", + "cypress.config.*", + "nightwatch.conf.*", + "playwright.config.*" ], "compilerOptions": { - "composite": true, "noEmit": true, "tsBuildInfoFile": "./node_modules/.tmp/tsconfig.node.tsbuildinfo", diff --git a/vite.config.js b/vite.config.ts similarity index 65% rename from vite.config.js rename to vite.config.ts index 43b31f2..070c151 100644 --- a/vite.config.js +++ b/vite.config.ts @@ -1,18 +1,20 @@ +import { fileURLToPath, URL } from 'node:url' + import { defineConfig } from 'vite' import vue from '@vitejs/plugin-vue' -import path from 'path' +import vueDevTools from 'vite-plugin-vue-devtools' import GitRevisionVitePlugin from 'git-revision-vite-plugin' import cssnanoPlugin from 'cssnano' import autoprefixer from 'autoprefixer' import AutoImport from 'unplugin-auto-import/vite' import Components from 'unplugin-vue-components/vite' import { NaiveUiResolver } from 'unplugin-vue-components/resolvers' -import vueDevTools from 'vite-plugin-vue-devtools' -// https://vitejs.dev/config/ +// https://vite.dev/config/ export default defineConfig({ plugins: [ vue(), + vueDevTools(), GitRevisionVitePlugin({ commitHashCommand: 'rev-parse --short HEAD' }), @@ -27,7 +29,6 @@ export default defineConfig({ Components({ resolvers: [NaiveUiResolver()] }), - vueDevTools() ], server: { host: '0.0.0.0' @@ -39,19 +40,19 @@ export default defineConfig({ }, resolve: { alias: { - '@': path.resolve('./src'), // @代替src - '@views': path.resolve('./src/views'), - '@components': path.resolve('./src/components'), - '@router': path.resolve('./src/router/index.js') - } + '@': fileURLToPath(new URL('./src', import.meta.url)), + '@views': fileURLToPath(new URL('./src/views', import.meta.url)), + '@components': fileURLToPath(new URL('./src/components', import.meta.url)), + '@router': fileURLToPath(new URL('./src/router/index.js', import.meta.url)), + }, }, build: { rollupOptions: { - manualChunks(id) { - if (id.includes('node_modules')) { - return 'vendor' - } - } + // manualChunks(id) { + // if (id.includes('node_modules')) { + // return 'vendor' + // } + // } } } })