UNPKG

@speckle/shared

Version:

Shared code between various Speckle JS packages

36 lines 1.44 kB
import { blockedSlugs } from '../../core/constants.js'; 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) { super(message); this.name = 'InvalidWorkspaceSlugError'; } } export const generateSlugFromName = ({ name }) => { return name .replace(/ /g, '-') .toLowerCase() .replace(/[^a-z0-9-]/g, '') .slice(0, MAX_SLUG_LENGTH); }; export function validateWorkspaceSlug(slug) { if (slug.length < MIN_SLUG_LENGTH) { throw new InvalidWorkspaceSlugError(`Short ID must be at least ${MIN_SLUG_LENGTH} characters long.`); } if (slug.length > MAX_SLUG_LENGTH) { throw new InvalidWorkspaceSlugError(`Short ID must not exceed ${MAX_SLUG_LENGTH} characters.`); } if (!VALID_SLUG_CHARACTERS_REGEX.test(slug)) { throw new InvalidWorkspaceSlugError('Short ID must contain only lowercase letters, numbers, and hyphens.'); } if (!VALID_SLUG_BOUNDARY_REGEX.test(slug)) { throw new InvalidWorkspaceSlugError('Short ID cannot start or end with a hyphen.'); } if (blockedSlugs.includes(slug)) { throw new InvalidWorkspaceSlugError('This Short ID is reserved and cannot be used.'); } } //# sourceMappingURL=index.js.map