unleash-server
Version:
Unleash is an enterprise ready feature toggles service. It provides different strategies for handling feature toggles.
121 lines • 5.29 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.FeatureEventFormatterMd = exports.LinkStyle = void 0;
const events_1 = require("../types/events");
var LinkStyle;
(function (LinkStyle) {
LinkStyle[LinkStyle["SLACK"] = 0] = "SLACK";
LinkStyle[LinkStyle["MD"] = 1] = "MD";
})(LinkStyle = exports.LinkStyle || (exports.LinkStyle = {}));
class FeatureEventFormatterMd {
constructor(unleashUrl, linkStyle = LinkStyle.MD) {
this.unleashUrl = unleashUrl;
this.linkStyle = linkStyle;
}
generateArchivedText(event) {
const { createdBy, type } = event;
const action = type === events_1.FEATURE_ARCHIVED ? 'archived' : 'revived';
const feature = this.generateFeatureLink(event);
return ` ${createdBy} just ${action} feature toggle *${feature}*`;
}
generateFeatureLink(event) {
if (this.linkStyle === LinkStyle.SLACK) {
return `<${this.featureLink(event)}|${event.featureName}>`;
}
else {
return `[${event.featureName}](${this.featureLink(event)})`;
}
}
generateStaleText(event) {
const { createdBy, type } = event;
const isStale = type === events_1.FEATURE_STALE_ON;
const feature = this.generateFeatureLink(event);
if (isStale) {
return `${createdBy} marked ${feature} as stale and this feature toggle is now *ready to be removed* from the code.`;
}
return `${createdBy} removed the stale marking on *${feature}*.`;
}
generateEnvironmentToggleText(event) {
const { createdBy, environment, type, project } = event;
const toggleStatus = type === events_1.FEATURE_ENVIRONMENT_ENABLED ? 'enabled' : 'disabled';
const feature = this.generateFeatureLink(event);
return `${createdBy} *${toggleStatus}* ${feature} in *${environment}* environment in project *${project}*`;
}
generateStrategyChangeText(event) {
const { createdBy, environment, project, data, preData, type } = event;
const feature = this.generateFeatureLink(event);
let strategyText = '';
if (events_1.FEATURE_STRATEGY_UPDATE === type) {
strategyText = `by updating strategy ${data?.name} in *${environment}*`;
}
else if (events_1.FEATURE_STRATEGY_ADD === type) {
strategyText = `by adding strategy ${data?.name} in *${environment}*`;
}
else if (events_1.FEATURE_STRATEGY_REMOVE === type) {
strategyText = `by removing strategy ${preData?.name} in *${environment}*`;
}
return `${createdBy} updated *${feature}* in project *${project}* ${strategyText}`;
}
generateMetadataText(event) {
const { createdBy, project } = event;
const feature = this.generateFeatureLink(event);
return `${createdBy} updated the metadata for ${feature} in project *${project}*`;
}
generateProjectChangeText(event) {
const { createdBy, project, featureName } = event;
return `${createdBy} moved ${featureName} to ${project}`;
}
featureLink(event) {
const { type, project = '', featureName } = event;
if (type === events_1.FEATURE_ARCHIVED) {
if (project) {
return `${this.unleashUrl}/projects/${project}/archive`;
}
return `${this.unleashUrl}/archive`;
}
return `${this.unleashUrl}/projects/${project}/features/${featureName}`;
}
getAction(type) {
switch (type) {
case events_1.FEATURE_CREATED:
return 'created';
case events_1.FEATURE_UPDATED:
return 'updated';
case events_1.FEATURE_VARIANTS_UPDATED:
return 'updated variants for';
default:
return type;
}
}
defaultText(event) {
const { createdBy, project, type } = event;
const action = this.getAction(type);
const feature = this.generateFeatureLink(event);
return `${createdBy} ${action} feature toggle ${feature} in project *${project}*`;
}
format(event) {
switch (event.type) {
case events_1.FEATURE_ARCHIVED:
case events_1.FEATURE_REVIVED:
return this.generateArchivedText(event);
case events_1.FEATURE_STALE_ON:
case events_1.FEATURE_STALE_OFF:
return this.generateStaleText(event);
case events_1.FEATURE_ENVIRONMENT_DISABLED:
case events_1.FEATURE_ENVIRONMENT_ENABLED:
return this.generateEnvironmentToggleText(event);
case events_1.FEATURE_STRATEGY_ADD:
case events_1.FEATURE_STRATEGY_REMOVE:
case events_1.FEATURE_STRATEGY_UPDATE:
return this.generateStrategyChangeText(event);
case events_1.FEATURE_METADATA_UPDATED:
return this.generateMetadataText(event);
case events_1.FEATURE_PROJECT_CHANGE:
return this.generateProjectChangeText(event);
default:
return this.defaultText(event);
}
}
}
exports.FeatureEventFormatterMd = FeatureEventFormatterMd;
//# sourceMappingURL=feature-event-formatter-md.js.map