@speckle/shared
Version:
Shared code between various Speckle JS packages
42 lines • 1.84 kB
JavaScript
;
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