feat(shared): Add workspace slug validation and errors (#3009)

This commit is contained in:
andrewwallacespeckle
2024-09-17 08:09:19 +01:00
committed by GitHub
parent bd8da2e4bf
commit f893ba29a2
3 changed files with 39 additions and 0 deletions
@@ -0,0 +1,37 @@
export const VALID_SLUG_CHARACTERS_REGEX = /^[a-z0-9-]+$/
export const VALID_SLUG_BOUNDARY_REGEX = /^[a-z0-9].*[a-z0-9]$/
const MIN_SLUG_LENGTH = 3
const MAX_SLUG_LENGTH = 30
export class InvalidWorkspaceSlugError extends Error {
constructor(message: string) {
super(message)
this.name = 'InvalidWorkspaceSlugError'
}
}
export function validateWorkspaceSlug(slug: string): void {
if (slug.length < MIN_SLUG_LENGTH) {
throw new InvalidWorkspaceSlugError(
`Workspace slug must be at least ${MIN_SLUG_LENGTH} characters long.`
)
}
if (slug.length > MAX_SLUG_LENGTH) {
throw new InvalidWorkspaceSlugError(
`Workspace slug must not exceed ${MAX_SLUG_LENGTH} characters.`
)
}
if (!VALID_SLUG_CHARACTERS_REGEX.test(slug)) {
throw new InvalidWorkspaceSlugError(
'Workspace slug must contain only lowercase letters, numbers, and hyphens.'
)
}
if (!VALID_SLUG_BOUNDARY_REGEX.test(slug)) {
throw new InvalidWorkspaceSlugError(
'Workspace slug cannot start or end with a hyphen.'
)
}
}
+1
View File
@@ -0,0 +1 @@
export * from './errors/index.js'