Merge branch 'dev' into preview

This commit is contained in:
ccbikai 2024-08-18 19:43:36 +08:00
commit 20eed15967
10 changed files with 1365 additions and 1170 deletions

View file

@ -113,5 +113,5 @@ We welcome your contributions and PRs.
## ☕ Sponsor ## ☕ Sponsor
1. [Follow Me on X(Twitter)](https://x.com/xkaibi). 1. [Follow Me on X(Twitter)](https://x.com/0xKaiBi).
2. [Become a sponsor to on GitHub](https://github.com/sponsors/ccbikai). 2. [Become a sponsor to on GitHub](https://github.com/sponsors/ccbikai).

View file

@ -114,8 +114,13 @@ async function onSubmit(formData) {
body: link, body: link,
}) })
dialogOpen.value = false dialogOpen.value = false
emit('update:link', newLink, isEdit ? 'edit' : 'create') emit('update:link', newLink)
isEdit ? toast('Link updated successfully') : toast('Link created successfully') if (isEdit) {
toast('Link updated successfully')
}
else {
toast('Link created successfully')
}
} }
const { previewMode } = useRuntimeConfig().public const { previewMode } = useRuntimeConfig().public

View file

@ -6,21 +6,23 @@ import {
DebianIcon, DebianIcon,
FacebookIcon, FacebookIcon,
FirefoxBrowserIcon, FirefoxBrowserIcon,
GnuIcon,
GoogleChromeIcon, GoogleChromeIcon,
GoogleIcon, GoogleIcon,
HuaweiIcon, HuaweiIcon,
IOsIcon, IOsIcon,
InternetExplorerIcon, // InternetExplorerIcon,
LinuxIcon, LinuxIcon,
MacOsIcon, MacOsIcon,
MicrosoftEdgeIcon, // MicrosoftEdgeIcon,
OperaIcon, OperaIcon,
SafariIcon, SafariIcon,
SamsungIcon, SamsungIcon,
UbuntuIcon, UbuntuIcon,
VivoIcon, VivoIcon,
WeChatIcon, WeChatIcon,
WindowsIcon, WearOsIcon,
// WindowsIcon,
XiaomiIcon, XiaomiIcon,
YandexCloudIcon, YandexCloudIcon,
} from 'vue3-simple-icons' } from 'vue3-simple-icons'
@ -47,6 +49,7 @@ defineProps({
const iconMaps = { const iconMaps = {
'android': AndroidIcon, 'android': AndroidIcon,
'android browser': AndroidIcon,
'browser': Globe, 'browser': Globe,
'chrome': GoogleChromeIcon, 'chrome': GoogleChromeIcon,
'chrome headless': GoogleChromeIcon, 'chrome headless': GoogleChromeIcon,
@ -55,15 +58,15 @@ const iconMaps = {
'curl': Terminal, 'curl': Terminal,
'debian': DebianIcon, 'debian': DebianIcon,
'desktop': MonitorCheck, 'desktop': MonitorCheck,
'edge': MicrosoftEdgeIcon,
'facebook': FacebookIcon, 'facebook': FacebookIcon,
'facebookexternalhit': FacebookIcon, 'facebookexternalhit': FacebookIcon,
'firefox': FirefoxBrowserIcon, 'firefox': FirefoxBrowserIcon,
'googlebot': GoogleIcon, 'googlebot': GoogleIcon,
'googlebot-image': GoogleIcon, 'googlebot-image': GoogleIcon,
'gnu': GnuIcon,
'harmonyos': HuaweiIcon, 'harmonyos': HuaweiIcon,
'huawei browser': HuaweiIcon, 'huawei browser': HuaweiIcon,
'ie': InternetExplorerIcon, // 'ie': InternetExplorerIcon,
'ios': IOsIcon, 'ios': IOsIcon,
'ipad': AppleIcon, 'ipad': AppleIcon,
'iphone': AppleIcon, 'iphone': AppleIcon,
@ -82,10 +85,11 @@ const iconMaps = {
'safari': SafariIcon, 'safari': SafariIcon,
'samsung internet': SamsungIcon, 'samsung internet': SamsungIcon,
'tablet': Tablet, 'tablet': Tablet,
'twitterbot': XIcon,
'ubuntu': UbuntuIcon, 'ubuntu': UbuntuIcon,
'vivo browser': VivoIcon, 'vivo browser': VivoIcon,
'wechat': WeChatIcon, 'wechat': WeChatIcon,
'windows': WindowsIcon, 'wearable': WearOsIcon,
'yandex': YandexCloudIcon, 'yandex': YandexCloudIcon,
} }
</script> </script>

View file

@ -5,7 +5,7 @@ import { ArrowRight } from 'lucide-vue-next'
<template> <template>
<a <a
href="https://x.com/xkaibi" href="https://x.com/0xKaiBi"
target="_blank" target="_blank"
title="X(Twitter)" title="X(Twitter)"
class="inline-flex items-center px-3 py-1 mx-auto my-4 space-x-1 text-sm font-medium rounded-lg bg-muted" class="inline-flex items-center px-3 py-1 mx-auto my-4 space-x-1 text-sm font-medium rounded-lg bg-muted"

View file

@ -61,7 +61,7 @@ onMounted(() => {
</a> </a>
<a <a
href="https://x.com/xkaibi" href="https://x.com/0xKaiBi"
target="_blank" target="_blank"
title="Twitter" title="Twitter"
class="text-gray-400 hover:text-gray-500" class="text-gray-400 hover:text-gray-500"

View file

@ -27,7 +27,7 @@ export default defineNuxtConfig({
}, },
hub: { hub: {
// ai: true, ai: true,
analytics: true, analytics: true,
blob: false, blob: false,
cache: false, cache: false,
@ -58,7 +58,7 @@ export default defineNuxtConfig({
cfAccountId: '', cfAccountId: '',
cfApiToken: '', cfApiToken: '',
dataset: 'sink', dataset: 'sink',
aiModel: '@cf/meta/llama-3-8b-instruct', aiModel: '@cf/meta/llama-3.1-8b-instruct',
aiPrompt: `You are a URL shortening assistant, please shorten the URL provided by the user into a SLUG. The SLUG information must come from the URL itself, do not make any assumptions. A SLUG is human-readable and should not exceed three words and can be validated using regular expressions {slugRegex} . Only the best one is returned, the format must be JSON reference {"slug": "example-slug"}`, aiPrompt: `You are a URL shortening assistant, please shorten the URL provided by the user into a SLUG. The SLUG information must come from the URL itself, do not make any assumptions. A SLUG is human-readable and should not exceed three words and can be validated using regular expressions {slugRegex} . Only the best one is returned, the format must be JSON reference {"slug": "example-slug"}`,
public: { public: {
previewMode: '', previewMode: '',

View file

@ -1,9 +1,9 @@
{ {
"name": "sink", "name": "sink",
"type": "module", "type": "module",
"version": "0.1.2", "version": "0.1.3",
"private": true, "private": true,
"packageManager": "pnpm@9.5.0", "packageManager": "pnpm@9.7.1",
"engines": { "engines": {
"node": ">=20.11" "node": ">=20.11"
}, },
@ -21,42 +21,42 @@
"lint-staged": "lint-staged" "lint-staged": "lint-staged"
}, },
"dependencies": { "dependencies": {
"@unovis/ts": "^1.4.2", "@unovis/ts": "^1.4.4",
"@unovis/vue": "^1.4.2", "@unovis/vue": "^1.4.4",
"@vee-validate/zod": "^4.13.2", "@vee-validate/zod": "^4.13.2",
"@vueuse/core": "^10.11.0", "@vueuse/core": "^11.0.0",
"intl-parse-accept-language": "^1.0.0", "intl-parse-accept-language": "^1.0.0",
"lucide-vue-next": "^0.401.0", "lucide-vue-next": "^0.428.0",
"mysql-bricks": "^1.1.2", "mysql-bricks": "^1.1.2",
"nanoid": "^5.0.7", "nanoid": "^5.0.7",
"pluralize": "^8.0.0", "pluralize": "^8.0.0",
"qr-code-styling": "1.6.0-rc.1", "qr-code-styling": "1.6.0-rc.1",
"radix-vue": "^1.9.0", "radix-vue": "^1.9.4",
"ua-parser-js": "next", "ua-parser-js": "next",
"vee-validate": "^4.13.2", "vee-validate": "^4.13.2",
"virtua": "^0.33.2", "virtua": "^0.33.7",
"vue-sonner": "^1.1.3", "vue-sonner": "^1.1.4",
"vue3-simple-icons": "^12.0.0", "vue3-simple-icons": "^13.2.0",
"zod": "^3.23.8" "zod": "^3.23.8"
}, },
"devDependencies": { "devDependencies": {
"@antfu/eslint-config": "^2.21.3", "@antfu/eslint-config": "^2.26.0",
"@nuxt/eslint": "^0.3.13", "@nuxt/eslint": "^0.5.0",
"@nuxt/eslint-config": "^0.3.13", "@nuxt/eslint-config": "^0.5.0",
"@nuxthub/core": "^0.7.0", "@nuxthub/core": "^0.7.3",
"@nuxtjs/color-mode": "^3.4.2", "@nuxtjs/color-mode": "^3.4.4",
"@nuxtjs/tailwindcss": "^6.12.0", "@nuxtjs/tailwindcss": "^6.12.1",
"class-variance-authority": "^0.7.0", "class-variance-authority": "^0.7.0",
"clsx": "^2.1.1", "clsx": "^2.1.1",
"eslint": "^8.57.0", "eslint": "^9.9.0",
"lint-staged": "^15.2.7", "lint-staged": "^15.2.9",
"nuxt": "^3.12.3", "nuxt": "^3.12.4",
"shadcn-nuxt": "^0.10.4", "shadcn-nuxt": "^0.10.4",
"simple-git-hooks": "^2.11.1", "simple-git-hooks": "^2.11.1",
"tailwind-merge": "^2.4.0", "tailwind-merge": "^2.5.2",
"tailwindcss-animate": "^1.0.7", "tailwindcss-animate": "^1.0.7",
"vue-tsc": "^2.0.26", "vue-tsc": "^2.0.29",
"wrangler": "^3.63.1" "wrangler": "^3.72.0"
}, },
"simple-git-hooks": { "simple-git-hooks": {
"pre-commit": "npm run lint-staged" "pre-commit": "npm run lint-staged"

File diff suppressed because it is too large Load diff

View file

@ -5,7 +5,7 @@ const { slugRegex } = useAppConfig()
const slugDefaultLength = +useRuntimeConfig().public.slugDefaultLength const slugDefaultLength = +useRuntimeConfig().public.slugDefaultLength
export const nanoid = (length: number = slugDefaultLength) => customAlphabet('0123456789abcdefghijklmnopqrstuvwxyz', length) export const nanoid = (length: number = slugDefaultLength) => customAlphabet('23456789abcdefghjkmnpqrstuvwxyz', length)
export const LinkSchema = z.object({ export const LinkSchema = z.object({
id: z.string().trim().max(26).default(nanoid(10)), id: z.string().trim().max(26).default(nanoid(10)),

View file

@ -31,7 +31,8 @@ export default eventHandler(async (event) => {
content: url, content: url,
}, },
] ]
const { response } = await AI.run(aiModel, { messages }) // @ts-expect-error Workers AI is not typed
const { response } = await hubAI().run(aiModel, { messages })
return destr(response) return destr(response)
} }
else { else {