flagr-feature-typescript
Version:
76 lines (75 loc) • 4.04 kB
JavaScript
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.createFlag = exports.sleep = exports.randomString = exports.testCreateFeature = exports.testCreateEvaluator = void 0;
const flagr_client_1 = require("flagr-client");
const evaluator_1 = require("./evaluator");
const feature_1 = require("./feature");
const baseServer = new flagr_client_1.ServerConfiguration('http://flagr:18000/api/v1', {});
const configuration = (0, flagr_client_1.createConfiguration)({ baseServer });
const testCreateEvaluator = (config) => (0, evaluator_1.createEvaluator)(Object.assign(Object.assign({}, (config || {})), { flagrUrl: 'http://flagr:18000' }));
exports.testCreateEvaluator = testCreateEvaluator;
const testCreateFeature = (config) => (0, feature_1.createFeature)(Object.assign(Object.assign({}, (config || {})), { flagrUrl: 'http://flagr:18000' }));
exports.testCreateFeature = testCreateFeature;
const randomString = () => Math.random()
.toString(36)
.replace(/[^a-z0-9]+/g, '');
exports.randomString = randomString;
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
exports.sleep = sleep;
const createFlag = (tags = [], percent = 100) => __awaiter(void 0, void 0, void 0, function* () {
const flagApi = new flagr_client_1.FlagApi(configuration);
const tagApi = new flagr_client_1.TagApi(configuration);
const variantApi = new flagr_client_1.VariantApi(configuration);
const segmentApi = new flagr_client_1.SegmentApi(configuration);
const distributionApi = new flagr_client_1.DistributionApi(configuration);
const idSuffix = (0, exports.randomString)();
const request = new flagr_client_1.CreateFlagRequest();
request.description = `flag_${idSuffix}`;
request.key = `flag_${idSuffix}`;
const flag = yield flagApi.createFlag(request);
const enableFlag = new flagr_client_1.SetFlagEnabledRequest();
enableFlag.enabled = true;
yield flagApi.setFlagEnabled(flag.id, enableFlag);
const variantRequest = new flagr_client_1.CreateVariantRequest();
variantRequest.key = 'on';
const variant = yield variantApi.createVariant(flag.id, variantRequest);
variantRequest.key = 'off';
const variantOff = yield variantApi.createVariant(flag.id, variantRequest);
const segmentRequest = new flagr_client_1.CreateSegmentRequest();
segmentRequest.description = 'on';
segmentRequest.rolloutPercent = 100;
const segment = yield segmentApi.createSegment(flag.id, segmentRequest);
const distributionRequest = new flagr_client_1.PutDistributionsRequest();
distributionRequest.distributions = [
{ percent, variantID: variant.id, variantKey: variant.key },
];
if (percent < 100) {
distributionRequest.distributions.push({
percent: 100 - percent,
variantID: variantOff.id,
variantKey: variantOff.key,
});
}
const distribution = yield distributionApi.putDistributions(flag.id, segment.id, distributionRequest);
return {
flag,
variant,
segment,
distribution,
tags: yield Promise.all(tags.map((tag) => {
const tagRequest = new flagr_client_1.CreateTagRequest();
tagRequest.value = tag;
return tagApi.createTag(flag.id, tagRequest);
})),
};
});
exports.createFlag = createFlag;
;