UNPKG

flagr-feature-typescript

Version:
76 lines (75 loc) 4.04 kB
"use strict"; 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;