🐛 Fix legacy publicId format validation
This commit is contained in:
@ -58,8 +58,7 @@ export const SharePage = () => {
|
|||||||
|
|
||||||
if (!isCorrectlyFormatted) {
|
if (!isCorrectlyFormatted) {
|
||||||
showToast({
|
showToast({
|
||||||
description:
|
description: 'Can only contain lowercase letters, numbers and dashes.',
|
||||||
'Should contain only contain letters, numbers. Words can be separated by dashes.',
|
|
||||||
})
|
})
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
@ -139,7 +139,12 @@ export const updateTypebot = authenticatedProcedure
|
|||||||
typebot.resultsTablePreferences === null
|
typebot.resultsTablePreferences === null
|
||||||
? Prisma.DbNull
|
? Prisma.DbNull
|
||||||
: typebot.resultsTablePreferences,
|
: typebot.resultsTablePreferences,
|
||||||
publicId: typebot.publicId === null ? null : typebot.publicId,
|
publicId:
|
||||||
|
typebot.publicId === null
|
||||||
|
? null
|
||||||
|
: typebot.publicId && isPublicIdValid(typebot.publicId)
|
||||||
|
? typebot.publicId
|
||||||
|
: undefined,
|
||||||
customDomain:
|
customDomain:
|
||||||
typebot.customDomain === null ? null : typebot.customDomain,
|
typebot.customDomain === null ? null : typebot.customDomain,
|
||||||
isClosed: typebot.isClosed,
|
isClosed: typebot.isClosed,
|
||||||
@ -149,3 +154,6 @@ export const updateTypebot = authenticatedProcedure
|
|||||||
return { typebot: typebotSchema.parse(newTypebot) }
|
return { typebot: typebotSchema.parse(newTypebot) }
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const isPublicIdValid = (str: string) =>
|
||||||
|
/^([a-z0-9]+-[a-z0-9]*)*$/.test(str) || /^[a-z0-9]*$/.test(str)
|
||||||
|
@ -1,7 +1,12 @@
|
|||||||
|
import { isNotEmpty } from '@typebot.io/lib'
|
||||||
|
|
||||||
export const toKebabCase = (value: string) => {
|
export const toKebabCase = (value: string) => {
|
||||||
const matched = value.match(
|
const matched = value.match(
|
||||||
/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g
|
/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g
|
||||||
)
|
)
|
||||||
if (!matched) return ''
|
if (!matched) return ''
|
||||||
return matched.map((x) => x.toLowerCase()).join('-')
|
return matched
|
||||||
|
.filter(isNotEmpty)
|
||||||
|
.map((x) => x.toLowerCase())
|
||||||
|
.join('-')
|
||||||
}
|
}
|
||||||
|
@ -38,9 +38,6 @@ const resultsTablePreferencesSchema = z.object({
|
|||||||
columnsWidth: z.record(z.string(), z.number()),
|
columnsWidth: z.record(z.string(), z.number()),
|
||||||
})
|
})
|
||||||
|
|
||||||
const isPathNameCompatible = (str: string) =>
|
|
||||||
/^([a-zA-Z0-9]+(-|.)[a-zA-z0-9]*)*$/.test(str) || /^[a-zA-Z0-9]*$/.test(str)
|
|
||||||
|
|
||||||
const isDomainNameWithPathNameCompatible = (str: string) =>
|
const isDomainNameWithPathNameCompatible = (str: string) =>
|
||||||
/^(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}(?:\/[\w-\/]*)?)$/.test(
|
/^(?:(?:[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?\.)+[a-zA-Z]{2,}(?:\/[\w-\/]*)?)$/.test(
|
||||||
str
|
str
|
||||||
@ -60,7 +57,10 @@ export const typebotSchema = z.object({
|
|||||||
updatedAt: z.date(),
|
updatedAt: z.date(),
|
||||||
icon: z.string().nullable(),
|
icon: z.string().nullable(),
|
||||||
folderId: z.string().nullable(),
|
folderId: z.string().nullable(),
|
||||||
publicId: z.string().refine(isPathNameCompatible).nullable(),
|
publicId: z
|
||||||
|
.string()
|
||||||
|
.refine((str) => /^[a-zA-Z0-9-.]+$/.test(str))
|
||||||
|
.nullable(),
|
||||||
customDomain: z
|
customDomain: z
|
||||||
.string()
|
.string()
|
||||||
.refine(isDomainNameWithPathNameCompatible)
|
.refine(isDomainNameWithPathNameCompatible)
|
||||||
|
Reference in New Issue
Block a user