Skip to content

Commit

Permalink
feat: add config to switch case sensitivities
Browse files Browse the repository at this point in the history
  • Loading branch information
ZL-Asica committed Dec 3, 2024
1 parent 09cae1b commit 326939f
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 4 deletions.
4 changes: 3 additions & 1 deletion components/dashboard/links/Editor.vue
Original file line number Diff line number Diff line change
Expand Up @@ -102,10 +102,12 @@ onMounted(() => {
}
})
const { caseSensitive } = useRuntimeConfig()
async function onSubmit(formData) {
const link = {
url: formData.url,
slug: formData.slug,
slug: caseSensitive ? formData.slug : formData.slug.toLowerCase(),
...(formData.optional || []),
expiration: formData.optional?.expiration ? date2unix(formData.optional?.expiration, 'end') : undefined,
}
Expand Down
1 change: 1 addition & 0 deletions nuxt.config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ export default defineNuxtConfig({
dataset: 'sink',
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"}`,
caseSensitive: false,
public: {
previewMode: '',
slugDefaultLength: '6',
Expand Down
7 changes: 6 additions & 1 deletion schemas/link.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,10 +2,15 @@ import { z } from 'zod'
import { customAlphabet } from 'nanoid'

const { slugRegex } = useAppConfig()
const { caseSensitive } = useRuntimeConfig()

const slugDefaultLength = +useRuntimeConfig().public.slugDefaultLength

export const nanoid = (length: number = slugDefaultLength) => customAlphabet('23456789abcdefghjkmnpqrstuvwxyz', length)
export function nanoid(length: number = slugDefaultLength) {
return caseSensitive
? customAlphabet('23456789abcdefghjkmnpqrstuvwxyzABCDEFGHJKMNPQRSTUVWXYZ', length)
: customAlphabet('23456789abcdefghjkmnpqrstuvwxyz', length)
}

export const LinkSchema = z.object({
id: z.string().trim().max(26).default(nanoid(10)),
Expand Down
8 changes: 6 additions & 2 deletions server/middleware/1.redirect.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,19 @@ import type { LinkSchema } from '@/schemas/link'
export default eventHandler(async (event) => {
const { pathname: slug } = parsePath(event.path.replace(/^\/|\/$/g, '')) // remove leading and trailing slashes
const { slugRegex, reserveSlug } = useAppConfig(event)
const { homeURL, linkCacheTtl, redirectWithQuery } = useRuntimeConfig(event)
const { homeURL, linkCacheTtl, redirectWithQuery, caseSensitive } = useRuntimeConfig(event)
const { cloudflare } = event.context

if (event.path === '/' && homeURL)
return sendRedirect(event, homeURL)

if (slug && !reserveSlug.includes(slug) && slugRegex.test(slug) && cloudflare) {
const { KV } = cloudflare.env
const link: z.infer<typeof LinkSchema> | null = await KV.get(`link:${slug}`, { type: 'json', cacheTtl: linkCacheTtl })
const link: z.infer<typeof LinkSchema> | null = await KV.get(
`link:${caseSensitive ? slug : slug.toLowerCase()}`,
{ type: 'json', cacheTtl: linkCacheTtl },
)

if (link) {
event.context.link = link
try {
Expand Down

0 comments on commit 326939f

Please sign in to comment.