UNPKG

@speckle/shared

Version:

Shared code between various Speckle JS packages

42 lines 1.84 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.generateSlugFromName = exports.InvalidWorkspaceSlugError = exports.VALID_SLUG_BOUNDARY_REGEX = exports.VALID_SLUG_CHARACTERS_REGEX = void 0; exports.validateWorkspaceSlug = validateWorkspaceSlug; const constants_js_1 = require("../../core/constants.js"); exports.VALID_SLUG_CHARACTERS_REGEX = /^[a-z0-9-]+$/; exports.VALID_SLUG_BOUNDARY_REGEX = /^[a-z0-9].*[a-z0-9]$/; const MIN_SLUG_LENGTH = 3; const MAX_SLUG_LENGTH = 30; class InvalidWorkspaceSlugError extends Error { constructor(message) { super(message); this.name = 'InvalidWorkspaceSlugError'; } } exports.InvalidWorkspaceSlugError = InvalidWorkspaceSlugError; const generateSlugFromName = ({ name }) => { return name .replace(/ /g, '-') .toLowerCase() .replace(/[^a-z0-9-]/g, '') .slice(0, MAX_SLUG_LENGTH); }; exports.generateSlugFromName = generateSlugFromName; 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 (!exports.VALID_SLUG_CHARACTERS_REGEX.test(slug)) { throw new InvalidWorkspaceSlugError('Short ID must contain only lowercase letters, numbers, and hyphens.'); } if (!exports.VALID_SLUG_BOUNDARY_REGEX.test(slug)) { throw new InvalidWorkspaceSlugError('Short ID cannot start or end with a hyphen.'); } if (constants_js_1.blockedSlugs.includes(slug)) { throw new InvalidWorkspaceSlugError('This Short ID is reserved and cannot be used.'); } } //# sourceMappingURL=index.js.map