🚩 修复暗黑模式 增加自动填充

This commit is contained in:
7836246 2024-03-26 09:44:00 +08:00
parent f718f8b6c9
commit de0ec3536a
17 changed files with 304 additions and 229 deletions

27
app.config.ts Normal file
View File

@ -0,0 +1,27 @@
import {_colors, _fontFamily} from "#tailwind-config/theme.mjs";
export default defineAppConfig({
naiveui: {
themeConfig: {
shared: {
common: {
fontFamily: _fontFamily.sans.join(", "),
},
},
light: {
common: {
primaryColor: _colors.blue[600],
primaryColorHover: _colors.blue[500],
primaryColorPressed: _colors.blue[700],
},
},
dark: {
common: {
primaryColor: _colors.blue[500],
primaryColorHover: _colors.blue[400],
primaryColorPressed: _colors.blue[600],
},
},
},
},
});

37
app.vue
View File

@ -1,5 +1,11 @@
<template> <template>
<n-config-provider> <n-config-provider
:theme="theme"
:theme-overrides="themeOverrides"
inline-theme-disabled
preflight-style-disabled
>
<n-global-style/>
<n-modal-provider> <n-modal-provider>
<n-message-provider> <n-message-provider>
<NuxtLayout> <NuxtLayout>
@ -10,9 +16,17 @@
</n-message-provider> </n-message-provider>
</n-modal-provider> </n-modal-provider>
</n-config-provider> </n-config-provider>
</template> </template>
<script setup lang="ts"> <script setup lang="ts">
import {darkTheme, lightTheme} from 'naive-ui'
import {naiveThemeOverrides} from "~/settings/settings";
const colorMode = useColorMode()
const themeOverrides = naiveThemeOverrides
const theme = computed(() => {
return colorMode.value === 'system' ? (colorMode.value ? lightTheme : darkTheme) : colorMode.value === 'light' ? lightTheme : darkTheme
})
const whoisStore = useWhoisStore() const whoisStore = useWhoisStore()
const dnsStore = useDnsStore() const dnsStore = useDnsStore()
const domainStore = useDomainStore() const domainStore = useDomainStore()
@ -21,24 +35,5 @@ dnsStore.newDnsList()
domainStore.newDomainList() domainStore.newDomainList()
</script> </script>
<style> <style>
body {
background-color: #fff;
color: rgba(0, 0, 0, 0.8);
}
.dark-mode body {
background-color: #091a28;
color: #18181c;
}
.sepia-mode body {
background-color: #f1e7d0;
color: #433422;
}
.light-mode body {
background-color: #F1F3F4;
color: #433422;
}
</style> </style>

View File

@ -6,14 +6,14 @@ defineProps({
<template> <template>
<!-- 公告部分 --> <!-- 公告部分 -->
<div class="bg-gray-200 p-3 rounded-md mb-5 dark:bg-[#5b77af]"> <div class="bg-gray-200 p-3 rounded-md mb-5 dark:bg-[#000000FF]">
<div class="flex items-center"> <div class="flex items-center">
<i aria-hidden="true" class="icon fas fa-bullhorn mr-3"></i> <i aria-hidden="true" class="icon fas fa-bullhorn mr-3"></i>
</div> </div>
<div class="flex-grow"> <div class="flex-grow">
<div class="text-sm text-gray-800 dark:text-white"> <div class="text-sm text-gray-800 dark:text-white">
{{ text }} {{ text }}
<slot name="text" /> <slot name="text"/>
</div> </div>
</div> </div>
</div> </div>

View File

@ -33,7 +33,7 @@ const availableColor = ref([
<div <div
class="flex h-10 w-10 items-center justify-center rounded-lg bg-gray-100 dark:bg-gray-700" class="flex h-10 w-10 items-center justify-center rounded-lg bg-gray-100 dark:bg-gray-700"
> >
<Icon name="ph:palette-duotone" class=" text-lg dark:text-white" /> <Icon name="ph:palette-duotone" class=" text-lg dark:text-white"/>
</div> </div>
</HeadlessListboxButton> </HeadlessListboxButton>
<HeadlessListboxOptions <HeadlessListboxOptions
@ -55,7 +55,7 @@ const availableColor = ref([
{{ color.name }} {{ color.name }}
</span> </span>
<span class="flex items-center justify-center text-sm"> <span class="flex items-center justify-center text-sm">
<Icon :name="color.icon" class="text-base" /> <Icon :name="color.icon" class="text-base"/>
</span> </span>
</HeadlessListboxOption> </HeadlessListboxOption>
</HeadlessListboxOptions> </HeadlessListboxOptions>

View File

@ -1,9 +1,10 @@
<script setup lang="ts"> <script setup lang="ts">
const domainStore = useDomainListStore(); const domainListStore = useDomainListStore();
const SupportedTLDs = new Set(Object.keys(domainStore.SupportedTLDs)); const SupportedTLDs = domainListStore.getSupportedTLDKeys
const isOpen = ref(false) const isOpen = ref(false)
const {t} = useI18n() const {t} = useI18n()
</script> </script>
<template> <template>

View File

@ -3,15 +3,15 @@ const localePath = useLocalePath()
const {t} = useI18n() const {t} = useI18n()
</script> </script>
<template> <template>
<footer class="text-gray-800 h-[10vh] bg-[#F1F3F4] dark:text-white dark:bg-[#5b77af]"> <footer class="text-gray-800 h-[10vh] bg-[#F1F3F4] dark:text-white dark:bg-[#000000FF]">
<div class="max-w-5xl mx-auto py-4 px-4 flex justify-between items-center"> <div class="max-w-5xl mx-auto py-4 px-4 flex justify-between items-center">
<div class="text-sm"> <div class="text-sm">
{{ t('footer.text')}} {{ t('footer.text') }}
</div> </div>
<div class="flex items-center space-x-4"> <div class="flex items-center space-x-4">
<NuxtLink :to="localePath('/api.html')" class="hover:underline">{{ t('footer.api') }}</NuxtLink> <NuxtLink :to="localePath('/api.html')" class="hover:underline">{{ t('footer.api') }}</NuxtLink>
<NuxtLink to="https://github.com/7836246/Nuxt-Whois" class="hover:underline"> <NuxtLink to="https://github.com/7836246/Nuxt-Whois" class="hover:underline">
<Icon name="ant-design:github-outlined" class="h-6 w-6" /> <Icon name="ant-design:github-outlined" class="h-6 w-6"/>
</NuxtLink> </NuxtLink>
</div> </div>
</div> </div>

View File

@ -65,7 +65,7 @@ export default defineI18nLocale(async locale => {
formatDomain: '域名格式错误', formatDomain: '域名格式错误',
//域名必须包含有效的顶级域 //域名必须包含有效的顶级域
validDomain: '域名必须包含有效的顶级域', validDomain: '域名必须包含有效的顶级域',
notFound: '未找到域名信息', notFound: '未找到域名信息,可能是后缀不支持,也可能是当前 Api 不支持,请更换尝试!',
}, },
result: { result: {
result: '查询结果', result: '查询结果',

View File

@ -1,6 +1,4 @@
<script setup lang="ts"> <script setup lang="ts">
import {useApisStore} from "~/stores/api";
const {t} = useI18n() const {t} = useI18n()
const router = useRouter(); const router = useRouter();
const runtimeConfig = useRuntimeConfig() const runtimeConfig = useRuntimeConfig()
@ -8,7 +6,7 @@ const localePath = useLocalePath()
const settingsStore = useSettingsStore() const settingsStore = useSettingsStore()
const styleStore = useStyleStore() const styleStore = useStyleStore()
const clientMounted = ref(false); const clientMounted = ref(false);
const apisStore = useApisStore()
const message = useMessage() const message = useMessage()
const handleAction = async (url: any) => { const handleAction = async (url: any) => {
@ -29,10 +27,6 @@ const handleAction = async (url: any) => {
} }
onMounted(() => {
clientMounted.value = true;
});
const selectOptions = ref([ const selectOptions = ref([
{ {
label: 'Whois', label: 'Whois',
@ -45,23 +39,49 @@ const selectOptions = ref([
value: 'domain' value: 'domain'
} }
]) ])
const {selectedOption} = storeToRefs(settingsStore) const {selectedOption, domainSearch} = storeToRefs(settingsStore)
const handleSelectOptions = (value: any) => { const handleSelectOptions = (value: any) => {
settingsStore.setSelectedOption(value); settingsStore.setSelectedOption(value);
console.log(selectedOption.value)
} }
const domainListStore = useDomainListStore();
//
const supportedTLDs = ['com', 'net', 'org', 'io', 'tech', 'co', 'info', 'biz', 'edu', 'gov'];
//
const domainOptions = computed(() => {
if (!domainSearch.value) return [];
//
const prefix = domainSearch.value.split('.')[0];
//
return supportedTLDs.map(suffix => {
const value = `${prefix}.${suffix}`;
return {label: value, value};
});
});
const getShow = (value: any) => {
// value '.'
return typeof value === 'string' && value.endsWith('.');
}
onMounted(() => {
clientMounted.value = true;
});
</script> </script>
<template> <template>
<div <div
class="w-full text-xs dark:bg-transparent" class="w-full text-xs bg-[#F1F3F4] dark:bg-transparent"
:class="{ 'h-[90vh]': !styleStore.getIsPage && clientMounted }" :class="{ 'h-[90vh]': !styleStore.getIsPage && clientMounted }"
> >
<div <div
class=" max-w-screen-lg mx-auto px-[1em] pb-[10vh] " class=" max-w-screen-lg mx-auto px-[1em] pb-[10vh] "
:class="{ 'pt-[25vh]': !styleStore.getIsPage && clientMounted, 'pt-[5vh]': styleStore.getIsPage || !clientMounted }" :class="{ 'pt-[25vh]': !styleStore.getIsPage && clientMounted, 'pt-[5vh]': styleStore.getIsPage || !clientMounted }"
> >
<nav class=" w-full text-[#464747] h-5 dark:bg-gray-700"> <nav class=" w-full text-[#464747] h-5 ">
<NuxtLink class="mb-3 font-bold text-2xl inline-block text-current no-underline dark:text-white" <NuxtLink class="mb-3 font-bold text-2xl inline-block text-current no-underline dark:text-white"
:to="localePath('/')" :to="localePath('/')"
> >
@ -70,37 +90,43 @@ const handleSelectOptions = (value: any) => {
</NuxtLink> </NuxtLink>
</nav> </nav>
<div class="mt-6"> <div class="mt-6">
<div class="flex items-center space-x-2 mb-3 dark:text-white" <ClientOnly>
> <div class="flex items-center space-x-2 mb-3 dark:text-white"
<!-- 容器div用于水平布局 --> >
<div class="flex-grow"> <!-- 容器div用于水平布局 -->
<NInputGroup> <div class="flex-grow">
<n-select <NInputGroup>
:style="{ width: '20%' }" <n-select
size="large" :style="{ width: '20%' }"
v-model:value="selectedOption" size="large"
:options="selectOptions" v-model:value="selectedOption"
@update:value="handleSelectOptions" :options="selectOptions"
/> @update:value="handleSelectOptions"
<NInput />
v-model:value="settingsStore.domainSearch" <NAutoComplete
@keyup.enter="handleAction(settingsStore.selectedOption)" v-model:value="domainSearch"
type="text" @keyup.enter="handleAction(settingsStore.selectedOption)"
:placeholder="t('index.placeholder')" :input-props="{ autocomplete: 'off' }"
size="large" :options="domainOptions"
clearable :get-show="getShow"
autofocus type="text"
class="w-full "/> :placeholder="t('index.placeholder')"
</NInputGroup> size="large"
clearable
autofocus
class="w-full ">
</NAutoComplete>
</NInputGroup>
</div>
<!-- 使用v-if基于state.domain的值来控制按钮的显示 -->
<NButton type="primary"
size="large"
@click="handleAction(settingsStore.selectedOption)"
v-if="settingsStore.domainSearch">
{{ t('index.onSubmit') }}
</NButton>
</div> </div>
<!-- 使用v-if基于state.domain的值来控制按钮的显示 --> </ClientOnly>
<NButton type="primary"
size="large"
@click="handleAction(settingsStore.selectedOption)"
v-if="settingsStore.domainSearch">
{{ t('index.onSubmit') }}
</NButton>
</div>
</div> </div>
<ClientOnly> <ClientOnly>

View File

@ -1,66 +1,67 @@
// https://nuxt.com/docs/api/configuration/nuxt-config // https://nuxt.com/docs/api/configuration/nuxt-config
export default defineNuxtConfig({ export default defineNuxtConfig({
devtools: { enabled: true }, devtools: {enabled: true},
routeRules:{ routeRules: {
'/admin/**':{ ssr : false } '/admin/**': {ssr: false}
},
modules: [
'@nuxt/devtools', // Devtools开发工具
'@nuxtjs/i18n', // 多语言
'@pinia/nuxt', // Pinia 持久化状态管理
'@pinia-plugin-persistedstate/nuxt', // Pinia 持久化状态管理插件
'nuxt-simple-robots',
'nuxt-headlessui', // 组件库
'@bg-dev/nuxt-naiveui', // 组件库
'@nuxtjs/tailwindcss', // 组件库
'nuxt-icon',
'@nuxtjs/color-mode',
],
features:{
inlineStyles: true,
} ,
runtimeConfig: {
public: {
Domain: process.env.WebSiteDomain || 'Nuxt Whois',
DomainSuffix: process.env.WebSiteDomainSuffix || 'Dns',
}
},
app:{
head: {
title: process.env.WebSiteTitle || 'Nuxt Whois',
meta: [
{ charset: 'utf-8' },
{ name: 'viewport', content: 'width=device-width, initial-scale=1' },
],
link: [
{ rel: 'icon', type: 'image/x-icon', href: '/favicon.ico' }
]
}
},
i18n: {
strategy: 'prefix_except_default',
defaultLocale: 'zh',
detectBrowserLanguage: {
useCookie: true,
}, },
locales: [ modules: [
{ code: 'zh', iso: 'zh-Hans', file: 'zh.ts' }, '@nuxt/devtools', // Devtools开发工具
{ code: 'en', iso: 'en-US', file: 'en.ts' }, '@nuxtjs/i18n', // 多语言
{ code: 'tw', iso: 'zh-Hant', file: 'tw.ts' }, '@pinia/nuxt', // Pinia 持久化状态管理
'@pinia-plugin-persistedstate/nuxt', // Pinia 持久化状态管理插件
'nuxt-simple-robots',
'nuxt-headlessui', // 组件库
'@bg-dev/nuxt-naiveui', // 组件库
'@nuxtjs/tailwindcss', // 组件库
'nuxt-icon',
'@nuxtjs/color-mode',
], ],
langDir: 'lang/', features: {
}, inlineStyles: true,
headlessui: { },
prefix: 'Headless' runtimeConfig: {
}, public: {
naiveui:{ Domain: process.env.WebSiteDomain || 'Nuxt Whois',
DomainSuffix: process.env.WebSiteDomainSuffix || 'Dns',
}, }
colorMode: { },
preference: 'system', // default value of $colorMode.preference app: {
fallback: 'light', // fallback value if not system preference found head: {
classPrefix: '', title: process.env.WebSiteTitle || 'Nuxt Whois',
classSuffix: '-mode', meta: [
storageKey: 'nuxt-color-mode' {charset: 'utf-8'},
} {name: 'viewport', content: 'width=device-width, initial-scale=1'},
],
link: [
{rel: 'icon', type: 'image/x-icon', href: '/favicon.ico'}
]
}
},
i18n: {
strategy: 'prefix_except_default',
defaultLocale: 'zh',
detectBrowserLanguage: {
useCookie: true,
},
locales: [
{code: 'zh', iso: 'zh-Hans', file: 'zh.ts'},
{code: 'en', iso: 'en-US', file: 'en.ts'},
{code: 'tw', iso: 'zh-Hant', file: 'tw.ts'},
],
langDir: 'lang/',
},
headlessui: {
prefix: 'Headless'
},
naiveui: {
colorModePreference: "light",
},
colorMode: {
classSuffix: '',
},
tailwindcss: {
exposeConfig: {
write: true,
}
}
}) })

View File

@ -28,7 +28,7 @@
"less": "^4.2.0", "less": "^4.2.0",
"nuxt-headlessui": "^1.1.5", "nuxt-headlessui": "^1.1.5",
"nuxt-icon": "^0.6.10", "nuxt-icon": "^0.6.10",
"nuxt-simple-robots": "4.0.0-rc.15", "nuxt-simple-robots": "4.0.0-rc.16",
"sass": "^1.72.0", "sass": "^1.72.0",
"typescript": "5.4.3" "typescript": "5.4.3"
} }

View File

@ -27,7 +27,7 @@ const handleReset = async () => {
</script> </script>
<template> <template>
<div class="setting mt-5 settings-grid"> <div class="setting mt-8 settings-grid">
<n-h6 prefix="bar"> 基础设置</n-h6> <n-h6 prefix="bar"> 基础设置</n-h6>
<n-card class="set-item"> <n-card class="set-item">
<div class="top grid grid-cols-2 gap-4"> <div class="top grid grid-cols-2 gap-4">

View File

@ -7,13 +7,13 @@ const {domain} = route.params;
const {t} = useI18n() const {t} = useI18n()
const domainData = domain.replace(/_/g, '.') const domainData = typeof domain === "string" ? domain?.replace(/_/g, '.') : "";
const showRawData = ref(false); const showRawData = ref(false);
const timeStore = useTimeStore() const timeStore = useTimeStore()
const styleStore = useStyleStore() const styleStore = useStyleStore()
const settingsStore = useSettingsStore() const settingsStore = useSettingsStore()
styleStore.setIsPage(true)
const localePath = useLocalePath() const localePath = useLocalePath()
const {data, pending, error, refresh} = await useAsyncData( const {data, pending, error, refresh} = await useAsyncData(
@ -36,17 +36,17 @@ if (!error.value && settingsStore.getHistory) {
) )
} }
const parsedInfo = ParseWhois(data.value); const parsedInfo = data.value ? ParseWhois(data.value) : {};
styleStore.setIsPage(true)
useHead({ useHead({
title: `${domainData} - ${t('whois.title')}`, title: `${domainData} - ${t('whois.title')}`,
meta: [ meta: [
{ {
name: 'description', name: 'description',
content: t('whois.description', { domain: domainData }) content: t('whois.description', {domain: domainData})
},{ }, {
name: 'keywords', name: 'keywords',
content: t('whois.keywords', { domain: domainData }) content: t('whois.keywords', {domain: domainData})
} }
] ]
}) })
@ -54,6 +54,7 @@ useHead({
<template> <template>
<table <table
v-if="data != ''"
class="w-full bg-[#fffffe] p-4 shadow-lg rounded-lg mt-5 dark:bg-gray-800 dark:text-gray-200 text-white hover:bg-none"> class="w-full bg-[#fffffe] p-4 shadow-lg rounded-lg mt-5 dark:bg-gray-800 dark:text-gray-200 text-white hover:bg-none">
<tbody class="divide-y divide-gray-200 dark:divide-gray-700"> <tbody class="divide-y divide-gray-200 dark:divide-gray-700">
<tr v-if="parsedInfo.domainName" <tr v-if="parsedInfo.domainName"
@ -131,23 +132,23 @@ useHead({
class="hover:bg-gray-100 text-gray-900 dark:hover:bg-gray-700 text-gray-200"> class="hover:bg-gray-100 text-gray-900 dark:hover:bg-gray-700 text-gray-200">
<th class="p-4 text-left font-semibold text-gray-900 dark:text-gray-200">{{ t('result.rawData') }}</th> <th class="p-4 text-left font-semibold text-gray-900 dark:text-gray-200">{{ t('result.rawData') }}</th>
<td class="p-4 text-gray-900 dark:text-gray-200"> <td class="p-4 text-gray-900 dark:text-gray-200">
<NSwitch v-model:value="showRawData"/> <NSwitch v-model:value="showRawData"/>
</td> </td>
</tr> </tr>
</tbody> </tbody>
</table> </table>
<!-- 公告部分 --> <!-- 公告部分 -->
<CommonBulletin v-if="error" class="mt-5" > <CommonBulletin v-if="data == ''" class="mt-5">
<template #text> <template #text>
<Icon name="bx:error" size="16px" color="red" /> <Icon name="bx:error" size="16px" color="red"/>
{{ t('error.notFound') }} {{ t('error.notFound') }}
</template> </template>
</CommonBulletin> </CommonBulletin>
<div <div
class="w-full bg-[#fffffe] mt-5 p-4 shadow-lg rounded-lg whitespace-pre-wrap dark:text-gray-200 dark:bg-gray-800" class="w-full bg-[#fffffe] mt-5 p-4 shadow-lg rounded-lg whitespace-pre-wrap dark:text-gray-200 dark:bg-gray-800"
v-if="showRawData"> >
{{ data }} {{ data }}
</div> </div>
</template> </template>

View File

@ -0,0 +1,14 @@
export default defineNuxtPlugin((nuxtApp) => {
const colorMode = useColorMode()
// 页面加载完毕,如果是暗色模式则重新加载,见: https://github.com/tusen-ai/naive-ui/issues/3765#issuecomment-1283356344
nuxtApp.hook('page:finish', () => {
setTimeout(() => {
colorMode.value = 'light'
setTimeout(() => {
colorMode.value = colorMode.preference
}, 0)
}, 0)
})
})

162
pnpm-lock.yaml generated
View File

@ -56,8 +56,8 @@ devDependencies:
specifier: ^0.6.10 specifier: ^0.6.10
version: 0.6.10(nuxt@3.11.1)(rollup@4.13.0)(vite@5.2.6)(vue@3.4.21) version: 0.6.10(nuxt@3.11.1)(rollup@4.13.0)(vite@5.2.6)(vue@3.4.21)
nuxt-simple-robots: nuxt-simple-robots:
specifier: 4.0.0-rc.15 specifier: 4.0.0-rc.16
version: 4.0.0-rc.15(@nuxt/devtools@1.1.3)(@vue/compiler-core@3.4.21)(nuxt@3.11.1)(postcss@8.4.38)(rollup@4.13.0)(vite@5.2.6)(vue@3.4.21)(webpack@5.91.0) version: 4.0.0-rc.16(@nuxt/devtools@1.1.3)(@vue/compiler-core@3.4.21)(nuxt@3.11.1)(postcss@8.4.38)(rollup@4.13.0)(vite@5.2.6)(vue@3.4.21)(webpack@5.91.0)
sass: sass:
specifier: ^1.72.0 specifier: ^1.72.0
version: 1.72.0 version: 1.72.0
@ -766,8 +766,8 @@ packages:
'@iconify/types': 2.0.0 '@iconify/types': 2.0.0
dev: true dev: true
/@iconify/collections@1.0.407: /@iconify/collections@1.0.408:
resolution: {integrity: sha512-1Wn5xz6tsuXFWLyxc4RUoSMMC/WhOgnTd0uiRsRsIEp3HPPGT69vFmdfDamsZi8q3H4olgpkKGwMcY9W3uQ+3w==} resolution: {integrity: sha512-huq0rgLQveO5DeWw4SQpq69GwU2xBuC9UPw664Mh/yruc1BYYNvyfvWowQ2ZG4mpBO1BUmIB/T/EtTcLoCeuAA==}
dependencies: dependencies:
'@iconify/types': 2.0.0 '@iconify/types': 2.0.0
@ -1100,7 +1100,7 @@ packages:
'@npmcli/node-gyp': 3.0.0 '@npmcli/node-gyp': 3.0.0
'@npmcli/package-json': 5.0.0 '@npmcli/package-json': 5.0.0
'@npmcli/promise-spawn': 7.0.1 '@npmcli/promise-spawn': 7.0.1
node-gyp: 10.0.1 node-gyp: 10.1.0
which: 4.0.0 which: 4.0.0
transitivePeerDependencies: transitivePeerDependencies:
- bluebird - bluebird
@ -1201,9 +1201,9 @@ packages:
'@nuxt/devtools-kit': 1.1.3(nuxt@3.11.1)(rollup@4.13.0)(vite@5.2.6) '@nuxt/devtools-kit': 1.1.3(nuxt@3.11.1)(rollup@4.13.0)(vite@5.2.6)
'@nuxt/devtools-wizard': 1.1.3 '@nuxt/devtools-wizard': 1.1.3
'@nuxt/kit': 3.11.1(rollup@4.13.0) '@nuxt/kit': 3.11.1(rollup@4.13.0)
'@vue/devtools-applet': 7.0.20(@unocss/reset@0.58.6)(floating-vue@5.2.2)(unocss@0.58.6)(vite@5.2.6)(vue@3.4.21) '@vue/devtools-applet': 7.0.21(@unocss/reset@0.58.6)(floating-vue@5.2.2)(unocss@0.58.6)(vite@5.2.6)(vue@3.4.21)
'@vue/devtools-core': 7.0.20(vite@5.2.6)(vue@3.4.21) '@vue/devtools-core': 7.0.21(vite@5.2.6)(vue@3.4.21)
'@vue/devtools-kit': 7.0.20(vue@3.4.21) '@vue/devtools-kit': 7.0.21(vue@3.4.21)
birpc: 0.2.17 birpc: 0.2.17
consola: 3.2.3 consola: 3.2.3
cronstrue: 2.48.0 cronstrue: 2.48.0
@ -1395,7 +1395,7 @@ packages:
autoprefixer: 10.4.19(postcss@8.4.38) autoprefixer: 10.4.19(postcss@8.4.38)
clear: 0.1.0 clear: 0.1.0
consola: 3.2.3 consola: 3.2.3
cssnano: 6.1.1(postcss@8.4.38) cssnano: 6.1.2(postcss@8.4.38)
defu: 6.1.4 defu: 6.1.4
esbuild: 0.20.2 esbuild: 0.20.2
escape-string-regexp: 5.0.0 escape-string-regexp: 5.0.0
@ -1923,8 +1923,8 @@ packages:
dependencies: dependencies:
'@sigstore/protobuf-specs': 0.3.0 '@sigstore/protobuf-specs': 0.3.0
/@sigstore/core@1.0.0: /@sigstore/core@1.1.0:
resolution: {integrity: sha512-dW2qjbWLRKGu6MIDUTBuJwXCnR8zivcSpf5inUzk7y84zqy/dji0/uahppoIgMoKeR+6pUZucrwHfkQQtiG9Rw==} resolution: {integrity: sha512-JzBqdVIyqm2FRQCulY6nbQzMpJJpSiJ8XXWMhtOX9eKgaXXpfNOF53lzQEjIydlStnd/eFtuC1dW4VYdD93oRg==}
engines: {node: ^16.14.0 || >=18.0.0} engines: {node: ^16.14.0 || >=18.0.0}
/@sigstore/protobuf-specs@0.3.0: /@sigstore/protobuf-specs@0.3.0:
@ -1936,14 +1936,14 @@ packages:
engines: {node: ^16.14.0 || >=18.0.0} engines: {node: ^16.14.0 || >=18.0.0}
dependencies: dependencies:
'@sigstore/bundle': 2.2.0 '@sigstore/bundle': 2.2.0
'@sigstore/core': 1.0.0 '@sigstore/core': 1.1.0
'@sigstore/protobuf-specs': 0.3.0 '@sigstore/protobuf-specs': 0.3.0
make-fetch-happen: 13.0.0 make-fetch-happen: 13.0.0
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
/@sigstore/tuf@2.3.1: /@sigstore/tuf@2.3.2:
resolution: {integrity: sha512-9Iv40z652td/QbV0o5n/x25H9w6IYRt2pIGbTX55yFDYlApDQn/6YZomjz6+KBx69rXHLzHcbtTS586mDdFD+Q==} resolution: {integrity: sha512-mwbY1VrEGU4CO55t+Kl6I7WZzIl+ysSzEYdA1Nv/FTrl2bkeaPXo5PnWZAVfcY2zSdhOpsUTJW67/M2zHXGn5w==}
engines: {node: ^16.14.0 || >=18.0.0} engines: {node: ^16.14.0 || >=18.0.0}
dependencies: dependencies:
'@sigstore/protobuf-specs': 0.3.0 '@sigstore/protobuf-specs': 0.3.0
@ -1951,12 +1951,12 @@ packages:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
/@sigstore/verify@1.1.0: /@sigstore/verify@1.1.1:
resolution: {integrity: sha512-1fTqnqyTBWvV7cftUUFtDcHPdSox0N3Ub7C0lRyReYx4zZUlNTZjCV+HPy4Lre+r45dV7Qx5JLKvqqsgxuyYfg==} resolution: {integrity: sha512-BNANJms49rw9Q5J+fJjrDqOQSzjXDcOq/pgKDaVdDoIvQwqIfaoUriy+fQfh8sBX04hr4bkkrwu3EbhQqoQH7A==}
engines: {node: ^16.14.0 || >=18.0.0} engines: {node: ^16.14.0 || >=18.0.0}
dependencies: dependencies:
'@sigstore/bundle': 2.2.0 '@sigstore/bundle': 2.2.0
'@sigstore/core': 1.0.0 '@sigstore/core': 1.1.0
'@sigstore/protobuf-specs': 0.3.0 '@sigstore/protobuf-specs': 0.3.0
/@sindresorhus/merge-streams@2.3.0: /@sindresorhus/merge-streams@2.3.0:
@ -2074,38 +2074,38 @@ packages:
/@types/web-bluetooth@0.0.20: /@types/web-bluetooth@0.0.20:
resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==}
/@unhead/dom@1.8.20: /@unhead/dom@1.9.1:
resolution: {integrity: sha512-TXRQSVbqBOQc02m3wxgj55m93U8a3WBHV9xJi2zVX/iHEJgeQbZMJ+rV0YJkHy2OHAC0MfjVQA5NDLaVwtromw==} resolution: {integrity: sha512-5YVT8pyg7Mw8niWwklP8nFKK9WLIvaK4O3tXvqpW9OxSAexJG576bh6FR0hEtSDLBkJh+pI8mMMMIuzSdK/whA==}
dependencies: dependencies:
'@unhead/schema': 1.8.20 '@unhead/schema': 1.9.1
'@unhead/shared': 1.8.20 '@unhead/shared': 1.9.1
/@unhead/schema@1.8.20: /@unhead/schema@1.9.1:
resolution: {integrity: sha512-n0e5jsKino8JTHc4wpr4l8MXXIrj0muYYAEVa0WSYkIVnMiBr1Ik3l6elhCr4fdSyJ3M2DQQleea/oZCr11XCw==} resolution: {integrity: sha512-wCJKNx4l837NEVMWP3MnUfkgsnMyuXwYs7+5VvbYzAWbnZSvQt/K10xDV0N7ft9RSlPfgukVVG+gtARm1kGVHQ==}
dependencies: dependencies:
hookable: 5.5.3 hookable: 5.5.3
zhead: 2.2.4 zhead: 2.2.4
/@unhead/shared@1.8.20: /@unhead/shared@1.9.1:
resolution: {integrity: sha512-J0fdtavcMtXcG0g9jmVW03toqfr8A0G7k+Q6jdpwuUPhWk/vhfZn3aiRV+F8LlU91c/AbGWDv8T1MrtMQbb0Sg==} resolution: {integrity: sha512-rZgzXzOeF4vu2bJJAkHJckgPgWGfpDA3/vesPhJIZGs2NkGYi9lDwMUeJ90HKCMJv1+JRAcPOokjRi6vRlnQpg==}
dependencies: dependencies:
'@unhead/schema': 1.8.20 '@unhead/schema': 1.9.1
/@unhead/ssr@1.8.20: /@unhead/ssr@1.9.1:
resolution: {integrity: sha512-Cq1NcdYZ/IAkJ0muqdOBxJXb5dn+uV+RvIXDykRb9lGgriU/S0fzUw8XYTYMwLlvW6rSMrtRx319hz2D3ZrBkA==} resolution: {integrity: sha512-ojY5umX2rtEvmsAFX935DPxk+rZfmgLOEMP1etJGYmCh2GQskK4USjUp9uYJyf0DP0xh+42R4a06e5602CIWHQ==}
dependencies: dependencies:
'@unhead/schema': 1.8.20 '@unhead/schema': 1.9.1
'@unhead/shared': 1.8.20 '@unhead/shared': 1.9.1
/@unhead/vue@1.8.20(vue@3.4.21): /@unhead/vue@1.9.1(vue@3.4.21):
resolution: {integrity: sha512-Lm6cnbX/QGCh+pxGN1Tl6LVXxYs5bLlN8APfI2rQ5kMNRE6Yy7r2eY5wCZ0SfsSRonqJxzVlgMMh8JPEY5d4GQ==} resolution: {integrity: sha512-clSKIkwtw26Lx5tR7ecJ/zvyFJkghvJU+jt2liQ4XYQb/Qaveh8L7gqsI1RKUuKaXAjlo2Z4Jpp1v9nHxA0heg==}
peerDependencies: peerDependencies:
vue: '>=2.7 || >=3' vue: '>=2.7 || >=3'
dependencies: dependencies:
'@unhead/schema': 1.8.20 '@unhead/schema': 1.9.1
'@unhead/shared': 1.8.20 '@unhead/shared': 1.9.1
hookable: 5.5.3 hookable: 5.5.3
unhead: 1.8.20 unhead: 1.9.1
vue: 3.4.21(typescript@5.4.3) vue: 3.4.21(typescript@5.4.3)
/@unocss/astro@0.58.6(rollup@4.13.0)(vite@5.2.6): /@unocss/astro@0.58.6(rollup@4.13.0)(vite@5.2.6):
@ -2481,15 +2481,15 @@ packages:
/@vue/devtools-api@6.6.1: /@vue/devtools-api@6.6.1:
resolution: {integrity: sha512-LgPscpE3Vs0x96PzSSB4IGVSZXZBZHpfxs+ZA1d+VEPwHdOXowy/Y2CsvCAIFrf+ssVU1pD1jidj505EpUnfbA==} resolution: {integrity: sha512-LgPscpE3Vs0x96PzSSB4IGVSZXZBZHpfxs+ZA1d+VEPwHdOXowy/Y2CsvCAIFrf+ssVU1pD1jidj505EpUnfbA==}
/@vue/devtools-applet@7.0.20(@unocss/reset@0.58.6)(floating-vue@5.2.2)(unocss@0.58.6)(vite@5.2.6)(vue@3.4.21): /@vue/devtools-applet@7.0.21(@unocss/reset@0.58.6)(floating-vue@5.2.2)(unocss@0.58.6)(vite@5.2.6)(vue@3.4.21):
resolution: {integrity: sha512-q48RtnhFmC0kd4N+3Edfctv6oL2neN6crUapBydSr6szjR87dQJygTEYKlpyx0SHmVLVwq4mcgFuf1ftAKjd/w==} resolution: {integrity: sha512-XqMeZrRoMJBSybg0Lu1777UZzI3nzApPlT4ZgupGkcFWQqoUkuhDaGYDqxer/yQgg4hOZsZQnB9nOmIk+GjGPA==}
peerDependencies: peerDependencies:
vue: ^3.0.0 vue: ^3.0.0
dependencies: dependencies:
'@vue/devtools-core': 7.0.20(vite@5.2.6)(vue@3.4.21) '@vue/devtools-core': 7.0.21(vite@5.2.6)(vue@3.4.21)
'@vue/devtools-kit': 7.0.20(vue@3.4.21) '@vue/devtools-kit': 7.0.21(vue@3.4.21)
'@vue/devtools-shared': 7.0.20 '@vue/devtools-shared': 7.0.21
'@vue/devtools-ui': 7.0.20(@unocss/reset@0.58.6)(floating-vue@5.2.2)(unocss@0.58.6)(vue@3.4.21) '@vue/devtools-ui': 7.0.21(@unocss/reset@0.58.6)(floating-vue@5.2.2)(unocss@0.58.6)(vue@3.4.21)
perfect-debounce: 1.0.0 perfect-debounce: 1.0.0
splitpanes: 3.1.5 splitpanes: 3.1.5
vue: 3.4.21(typescript@5.4.3) vue: 3.4.21(typescript@5.4.3)
@ -2512,11 +2512,11 @@ packages:
- unocss - unocss
- vite - vite
/@vue/devtools-core@7.0.20(vite@5.2.6)(vue@3.4.21): /@vue/devtools-core@7.0.21(vite@5.2.6)(vue@3.4.21):
resolution: {integrity: sha512-JefAn0ljTUPtoEJ47PjEfcLQb9BVt3OH1R6aD8qZ7bNYwZH+xystXpVJ3pW+1iDnOXjfpLgc3bsHUZoxlfobpw==} resolution: {integrity: sha512-t5U1+lBZ9KmscJgcVtpZru2Le0fjckOBDwjodmqxccYEidj/7zst0bLbPwH9bYsNK6h6mtfZ6MtbcgTUcvNKsg==}
dependencies: dependencies:
'@vue/devtools-kit': 7.0.20(vue@3.4.21) '@vue/devtools-kit': 7.0.21(vue@3.4.21)
'@vue/devtools-shared': 7.0.20 '@vue/devtools-shared': 7.0.21
mitt: 3.0.1 mitt: 3.0.1
nanoid: 3.3.7 nanoid: 3.3.7
pathe: 1.1.2 pathe: 1.1.2
@ -2525,25 +2525,25 @@ packages:
- vite - vite
- vue - vue
/@vue/devtools-kit@7.0.20(vue@3.4.21): /@vue/devtools-kit@7.0.21(vue@3.4.21):
resolution: {integrity: sha512-FgFuPuqrhQ51rR/sVi52FnGgrxJ3X1bvNra/SkBzPhxJVhfyL5w2YUJZI1FgCvtLAyPSomJNdvlG415ZbJsr6w==} resolution: {integrity: sha512-tNDtcQkPHfLDH1wtZuSZ2ZfE+r/aGswkBmKmXjwfpZTsOTk/YXsgrMnBKtHOL6dpsG3GyP09gIgNkCkA5lBIPQ==}
peerDependencies: peerDependencies:
vue: ^3.0.0 vue: ^3.0.0
dependencies: dependencies:
'@vue/devtools-shared': 7.0.20 '@vue/devtools-shared': 7.0.21
hookable: 5.5.3 hookable: 5.5.3
mitt: 3.0.1 mitt: 3.0.1
perfect-debounce: 1.0.0 perfect-debounce: 1.0.0
speakingurl: 14.0.1 speakingurl: 14.0.1
vue: 3.4.21(typescript@5.4.3) vue: 3.4.21(typescript@5.4.3)
/@vue/devtools-shared@7.0.20: /@vue/devtools-shared@7.0.21:
resolution: {integrity: sha512-E6CiCaYr6ZWOCYJgWodXcPCXxB12vgbUA1X1sG0F1tK5Bo5I35GJuTR8LBJLFHV0VpwLWvyrIi9drT1ZbuJxlg==} resolution: {integrity: sha512-wuIakRkSqwsk9+Y4z5QTdsmhTJRAt4aX0ROXyOOEPL+ROrN26YsPbXyqlzroU5uoOoAvx81iObIlmwZWtZztgw==}
dependencies: dependencies:
rfdc: 1.3.1 rfdc: 1.3.1
/@vue/devtools-ui@7.0.20(@unocss/reset@0.58.6)(floating-vue@5.2.2)(unocss@0.58.6)(vue@3.4.21): /@vue/devtools-ui@7.0.21(@unocss/reset@0.58.6)(floating-vue@5.2.2)(unocss@0.58.6)(vue@3.4.21):
resolution: {integrity: sha512-0Jy+9l8gQKnEPitOBthib6bZPdf2FipPIpMZPZ90xH4z1nWGN2aHBqOHH3dMpNgnymlkgAR5QDvodj5RcxiUGw==} resolution: {integrity: sha512-hYLhMAKoTJ2/Lbol0pbZW0jq49x/fYheTqa6zpLw1Qti5eOD+sOS9WGQZL/T8nBuOG/yZJswI+R0qaUrJXiLrA==}
peerDependencies: peerDependencies:
'@unocss/reset': '>=0.50.0-0' '@unocss/reset': '>=0.50.0-0'
floating-vue: '>=2.0.0-0' floating-vue: '>=2.0.0-0'
@ -3472,8 +3472,8 @@ packages:
uWebSockets.js: uWebSockets.js:
optional: true optional: true
/css-declaration-sorter@7.1.1(postcss@8.4.38): /css-declaration-sorter@7.2.0(postcss@8.4.38):
resolution: {integrity: sha512-dZ3bVTEEc1vxr3Bek9vGwfB5Z6ESPULhcRvO472mfjVnj8jRcTnKO8/JTczlvxM10Myb+wBM++1MtdO76eWcaQ==} resolution: {integrity: sha512-h70rUM+3PNFuaBDTLe8wF/cdWu+dOZmb7pJt8Z2sedYbAcQVQV/tEchueg3GWxwqS0cxtbxmaHEdkNACqcvsow==}
engines: {node: ^14 || ^16 || >=18} engines: {node: ^14 || ^16 || >=18}
peerDependencies: peerDependencies:
postcss: ^8.0.9 postcss: ^8.0.9
@ -3519,14 +3519,14 @@ packages:
engines: {node: '>=4'} engines: {node: '>=4'}
hasBin: true hasBin: true
/cssnano-preset-default@6.1.1(postcss@8.4.38): /cssnano-preset-default@6.1.2(postcss@8.4.38):
resolution: {integrity: sha512-XW/dYN2p8Jdkp1lovFd0UVRh6RB0iMyXJbAE9Qm+taR3p2LGu492AW34lVaukUrXoK9IxK5aK3CUmFpUorU4oA==} resolution: {integrity: sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==}
engines: {node: ^14 || ^16 || >=18.0} engines: {node: ^14 || ^16 || >=18.0}
peerDependencies: peerDependencies:
postcss: ^8.4.31 postcss: ^8.4.31
dependencies: dependencies:
browserslist: 4.23.0 browserslist: 4.23.0
css-declaration-sorter: 7.1.1(postcss@8.4.38) css-declaration-sorter: 7.2.0(postcss@8.4.38)
cssnano-utils: 4.0.2(postcss@8.4.38) cssnano-utils: 4.0.2(postcss@8.4.38)
postcss: 8.4.38 postcss: 8.4.38
postcss-calc: 9.0.1(postcss@8.4.38) postcss-calc: 9.0.1(postcss@8.4.38)
@ -3565,13 +3565,13 @@ packages:
dependencies: dependencies:
postcss: 8.4.38 postcss: 8.4.38
/cssnano@6.1.1(postcss@8.4.38): /cssnano@6.1.2(postcss@8.4.38):
resolution: {integrity: sha512-paTFZuiVohpaXJuau8l7buFt9+FTmfjwEO70EKitzYOQw3frib/It4sb6cQ+gJyDEyY+myDSni6IbBvKZ0N8Lw==} resolution: {integrity: sha512-rYk5UeX7VAM/u0lNqewCdasdtPK81CgX8wJFLEIXHbV2oldWRgJAsZrdhRXkV1NJzA2g850KiFm9mMU2HxNxMA==}
engines: {node: ^14 || ^16 || >=18.0} engines: {node: ^14 || ^16 || >=18.0}
peerDependencies: peerDependencies:
postcss: ^8.4.31 postcss: ^8.4.31
dependencies: dependencies:
cssnano-preset-default: 6.1.1(postcss@8.4.38) cssnano-preset-default: 6.1.2(postcss@8.4.38)
lilconfig: 3.1.1 lilconfig: 3.1.1
postcss: 8.4.38 postcss: 8.4.38
@ -4274,7 +4274,7 @@ packages:
destr: 2.0.3 destr: 2.0.3
iron-webcrypto: 1.1.0 iron-webcrypto: 1.1.0
ohash: 1.1.3 ohash: 1.1.3
radix3: 1.1.1 radix3: 1.1.2
ufo: 1.5.3 ufo: 1.5.3
uncrypto: 0.1.3 uncrypto: 0.1.3
unenv: 1.9.0 unenv: 1.9.0
@ -5300,7 +5300,7 @@ packages:
perfect-debounce: 1.0.0 perfect-debounce: 1.0.0
pkg-types: 1.0.3 pkg-types: 1.0.3
pretty-bytes: 6.1.1 pretty-bytes: 6.1.1
radix3: 1.1.1 radix3: 1.1.2
rollup: 4.13.0 rollup: 4.13.0
rollup-plugin-visualizer: 5.12.0(rollup@4.13.0) rollup-plugin-visualizer: 5.12.0(rollup@4.13.0)
scule: 1.3.0 scule: 1.3.0
@ -5361,8 +5361,8 @@ packages:
resolution: {integrity: sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==} resolution: {integrity: sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==}
hasBin: true hasBin: true
/node-gyp@10.0.1: /node-gyp@10.1.0:
resolution: {integrity: sha512-gg3/bHehQfZivQVfqIyy8wTdSymF9yTyP4CJifK73imyNMU8AIGQE2pUa7dNWfmMeG9cDVF2eehiRMv0LC1iAg==} resolution: {integrity: sha512-B4J5M1cABxPc5PwfjhbV5hoy2DP9p8lFXASnEN6hugXOa61416tnTZ29x9sSwAd0o99XNIcpvDDy1swAExsVKA==}
engines: {node: ^16.14.0 || >=18.0.0} engines: {node: ^16.14.0 || >=18.0.0}
hasBin: true hasBin: true
dependencies: dependencies:
@ -5514,7 +5514,7 @@ packages:
/nuxt-icon@0.6.10(nuxt@3.11.1)(rollup@4.13.0)(vite@5.2.6)(vue@3.4.21): /nuxt-icon@0.6.10(nuxt@3.11.1)(rollup@4.13.0)(vite@5.2.6)(vue@3.4.21):
resolution: {integrity: sha512-S9zHVA66ox4ZSpMWvCjqKZC4ZogC0s2z3vZs+M4D95YXGPEXwxDZu+insMKvkbe8+k7gvEmtTk0eq3KusKlxiw==} resolution: {integrity: sha512-S9zHVA66ox4ZSpMWvCjqKZC4ZogC0s2z3vZs+M4D95YXGPEXwxDZu+insMKvkbe8+k7gvEmtTk0eq3KusKlxiw==}
dependencies: dependencies:
'@iconify/collections': 1.0.407 '@iconify/collections': 1.0.408
'@iconify/vue': 4.1.1(vue@3.4.21) '@iconify/vue': 4.1.1(vue@3.4.21)
'@nuxt/devtools-kit': 1.1.3(nuxt@3.11.1)(rollup@4.13.0)(vite@5.2.6) '@nuxt/devtools-kit': 1.1.3(nuxt@3.11.1)(rollup@4.13.0)(vite@5.2.6)
'@nuxt/kit': 3.11.1(rollup@4.13.0) '@nuxt/kit': 3.11.1(rollup@4.13.0)
@ -5525,8 +5525,8 @@ packages:
- vite - vite
- vue - vue
/nuxt-simple-robots@4.0.0-rc.15(@nuxt/devtools@1.1.3)(@vue/compiler-core@3.4.21)(nuxt@3.11.1)(postcss@8.4.38)(rollup@4.13.0)(vite@5.2.6)(vue@3.4.21)(webpack@5.91.0): /nuxt-simple-robots@4.0.0-rc.16(@nuxt/devtools@1.1.3)(@vue/compiler-core@3.4.21)(nuxt@3.11.1)(postcss@8.4.38)(rollup@4.13.0)(vite@5.2.6)(vue@3.4.21)(webpack@5.91.0):
resolution: {integrity: sha512-+kAk1MFUfDZWo29Py40cLTmt+of+QH7XB+aA3c5woAS/jdFb5WBq6c80H8XjnBiel3v/c5KXCw+0sHak/SsTmg==} resolution: {integrity: sha512-jRgDvjRrRgTAC4WOLs1dx3mHlVa5VHATgDhk8+0Mp5H4WjBipZGrZs9WOWX5Jymh17oTIESVKGHZRhaRiP+AKA==}
dependencies: dependencies:
'@nuxt/devtools-kit': 1.1.3(nuxt@3.11.1)(rollup@4.13.0)(vite@5.2.6) '@nuxt/devtools-kit': 1.1.3(nuxt@3.11.1)(rollup@4.13.0)(vite@5.2.6)
'@nuxt/kit': 3.11.1(rollup@4.13.0) '@nuxt/kit': 3.11.1(rollup@4.13.0)
@ -5643,9 +5643,9 @@ packages:
'@nuxt/telemetry': 2.5.3(rollup@4.13.0) '@nuxt/telemetry': 2.5.3(rollup@4.13.0)
'@nuxt/ui-templates': 1.3.1 '@nuxt/ui-templates': 1.3.1
'@nuxt/vite-builder': 3.11.1(less@4.2.0)(rollup@4.13.0)(sass@1.72.0)(typescript@5.4.3)(vue@3.4.21) '@nuxt/vite-builder': 3.11.1(less@4.2.0)(rollup@4.13.0)(sass@1.72.0)(typescript@5.4.3)(vue@3.4.21)
'@unhead/dom': 1.8.20 '@unhead/dom': 1.9.1
'@unhead/ssr': 1.8.20 '@unhead/ssr': 1.9.1
'@unhead/vue': 1.8.20(vue@3.4.21) '@unhead/vue': 1.9.1(vue@3.4.21)
'@vue/shared': 3.4.21 '@vue/shared': 3.4.21
acorn: 8.11.3 acorn: 8.11.3
c12: 1.10.0 c12: 1.10.0
@ -5674,7 +5674,7 @@ packages:
pathe: 1.1.2 pathe: 1.1.2
perfect-debounce: 1.0.0 perfect-debounce: 1.0.0
pkg-types: 1.0.3 pkg-types: 1.0.3
radix3: 1.1.1 radix3: 1.1.2
scule: 1.3.0 scule: 1.3.0
std-env: 3.7.0 std-env: 3.7.0
strip-literal: 2.0.0 strip-literal: 2.0.0
@ -6420,8 +6420,8 @@ packages:
/queue-tick@1.0.1: /queue-tick@1.0.1:
resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==} resolution: {integrity: sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==}
/radix3@1.1.1: /radix3@1.1.2:
resolution: {integrity: sha512-yUUd5VTiFtcMEx0qFUxGAv5gbMc1un4RvEO1JZdP7ZUl/RHygZK6PknIKntmQRZxnMY3ZXD2ISaw1ij8GYW1yg==} resolution: {integrity: sha512-b484I/7b8rDEdSDKckSSBA8knMpcdsXudlE/LNL639wFoHKwLbEkQFZHWEYwDC0wa0FKUcCY+GAF73Z7wxNVFA==}
/randombytes@2.1.0: /randombytes@2.1.0:
resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
@ -6747,11 +6747,11 @@ packages:
engines: {node: ^16.14.0 || >=18.0.0} engines: {node: ^16.14.0 || >=18.0.0}
dependencies: dependencies:
'@sigstore/bundle': 2.2.0 '@sigstore/bundle': 2.2.0
'@sigstore/core': 1.0.0 '@sigstore/core': 1.1.0
'@sigstore/protobuf-specs': 0.3.0 '@sigstore/protobuf-specs': 0.3.0
'@sigstore/sign': 2.2.3 '@sigstore/sign': 2.2.3
'@sigstore/tuf': 2.3.1 '@sigstore/tuf': 2.3.2
'@sigstore/verify': 1.1.0 '@sigstore/verify': 1.1.1
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
@ -7259,12 +7259,12 @@ packages:
node-fetch-native: 1.6.4 node-fetch-native: 1.6.4
pathe: 1.1.2 pathe: 1.1.2
/unhead@1.8.20: /unhead@1.9.1:
resolution: {integrity: sha512-IJOCYact/7Za3M7CeeCWs8Vze53kHvKDUy/EXtkTm/an5StgqOt2uCnS3HrkioIMKdHBpy/qtTc6E3BoGMOq7Q==} resolution: {integrity: sha512-qTyA0V6xjUrIJp6KWs0CqAayw4K2DE7rh0GO0vmcC2YuF0HITO/3zkVtG7zhJUd5VeGgGCO/82zatDOOhMyneA==}
dependencies: dependencies:
'@unhead/dom': 1.8.20 '@unhead/dom': 1.9.1
'@unhead/schema': 1.8.20 '@unhead/schema': 1.9.1
'@unhead/shared': 1.8.20 '@unhead/shared': 1.9.1
hookable: 5.5.3 hookable: 5.5.3
/unicorn-magic@0.1.0: /unicorn-magic@0.1.0:

View File

@ -6,6 +6,6 @@ export default defineEventHandler(async (event) => {
const res = await whois(body.domain) const res = await whois(body.domain)
return res._raw return res._raw
} catch (e) { } catch (e) {
return e return new Error("接口不支持或者查询有误")
} }
}) })

View File

@ -4,12 +4,14 @@ import serversData from '~/server/whois/json/whois-servers.json';
// 定义接口来描述state的结构 // 定义接口来描述state的结构
interface DomainState { interface DomainState {
SupportedTLDs: Record<string, string>; SupportedTLDs: Record<string, string>;
supportedTLDKeys: Set<string>;
} }
export const useDomainListStore = defineStore('useDomainListStore', { export const useDomainListStore = defineStore('useDomainListStore', {
// 使用箭头函数和类型注解定义state // 使用箭头函数和类型注解定义state
state: (): DomainState => ({ state: (): DomainState => ({
SupportedTLDs: {...serversData}, SupportedTLDs: {...serversData},
supportedTLDKeys: new Set(Object.keys(serversData)) as any,
}), }),
actions: { actions: {
async addSuffix(suffix: string, server: string) { async addSuffix(suffix: string, server: string) {
@ -43,6 +45,14 @@ export const useDomainListStore = defineStore('useDomainListStore', {
} }
} }
}, },
getters: {
getSupportedTLDs(state: any) {
return state.SupportedTLDs;
},
getSupportedTLDKeys(state: any) {
return state.supportedTLDKeys;
}
},
persist: { persist: {
storage: persistedState.localStorage, storage: persistedState.localStorage,
} }

View File

@ -27,5 +27,5 @@ export default {
corePlugins: { corePlugins: {
preflight: true, preflight: true,
}, },
darkMode: 'class', darkMode: "class"
} }