mirror of
https://github.com/TryGhost/Ghost.git
synced 2024-12-01 05:50:35 +03:00
78be4b55c9
no-issue This is only ever used in this directory so it makes sense to be colocated.
29 lines
773 B
JavaScript
29 lines
773 B
JavaScript
const {slugify} = require('@tryghost/string');
|
|
const ValueObject = require('./shared/ValueObject');
|
|
|
|
const InvalidOfferCode = require('../../errors').InvalidOfferCode;
|
|
|
|
/** @extends ValueObject<string> */
|
|
class OfferCode extends ValueObject {
|
|
/** @param {unknown} code */
|
|
static create(code) {
|
|
if (!code || typeof code !== 'string') {
|
|
throw new InvalidOfferCode({
|
|
message: 'Offer `code` must be a string.'
|
|
});
|
|
}
|
|
|
|
const slugged = slugify(code);
|
|
|
|
if (slugged.length > 191) {
|
|
throw new InvalidOfferCode({
|
|
message: 'Offer `code` can be a maximum of 191 characters.'
|
|
});
|
|
}
|
|
|
|
return new OfferCode(slugged);
|
|
}
|
|
}
|
|
|
|
module.exports = OfferCode;
|