vwo-fme-node-sdk
Version:
VWO Node/JavaScript SDK for Feature Management and Experimentation
163 lines (142 loc) • 4.79 kB
text/typescript
/**
* Copyright 2024-2025 Wingify Software Pvt. Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { dynamic } from '../../types/Common';
import { MetricModel } from './MetricModel';
import { VariableModel } from './VariableModel';
import { VariationModel } from './VariationModel';
export class CampaignModel {
private id: number;
private segments: Record<string, dynamic>;
private salt: string;
private percentTraffic: number;
private isUserListEnabled: boolean;
private key: string;
private type: string;
private name: string;
private isForcedVariationEnabled: boolean;
private variations: Array<VariationModel> = [];
private metrics: Array<MetricModel> = [];
private variables: Array<VariableModel> = [];
private variationId: number;
private campaignId: number;
private ruleKey: string;
copy(campaignModel: CampaignModel): void {
this.metrics = campaignModel.metrics;
this.variations = campaignModel.variations;
this.variables = campaignModel.variables;
this.processCampaignKeys(campaignModel);
}
modelFromDictionary(campaign: CampaignModel): this {
this.processCampaignProperties(campaign);
this.processCampaignKeys(campaign);
return this;
}
processCampaignProperties(campaign: CampaignModel): void {
if (campaign.variables) {
// campaign.var ||
if (
// (campaign.var && campaign.var.constructor === {}.constructor) ||
campaign.variables.constructor === {}.constructor
) {
this.variables = [];
} else {
const variableList: Array<VariableModel> = campaign.variables; // campaign.var ||
variableList.forEach((variable: any) => {
this.variables.push(VariableModel.modelFromDictionary(variable));
});
}
}
if (campaign.variations) {
// campaign.v ||
if (
// (campaign.v && campaign.v.constructor === {}.constructor) ||
campaign.variations.constructor === {}.constructor
) {
this.variations = [];
} else {
const variationList: Array<VariationModel> = campaign.variations; // campaign.v ||
variationList.forEach((variation: any) => {
this.variations.push(new VariationModel().modelFromDictionary(variation));
});
}
}
if (campaign.metrics) {
// campaign.m ||
if (campaign.metrics && campaign.metrics.constructor === {}.constructor) {
this.metrics = [];
} else {
const metricsList: Array<MetricModel> = campaign.metrics || [];
metricsList.forEach((metric: any) => {
this.metrics.push(new MetricModel().modelFromDictionary(metric));
});
}
}
}
processCampaignKeys(campaign: CampaignModel): void {
this.id = campaign.id;
this.percentTraffic = campaign.percentTraffic; // campaign.pT ||
this.name = campaign.name; // campaign.n ||
this.variationId = campaign.variationId; // campaign.vId ||
this.campaignId = campaign.campaignId; // campaign.cId ||
this.ruleKey = campaign.ruleKey; // campaign.rK ||
this.isForcedVariationEnabled = campaign.isForcedVariationEnabled; // campaign.iFVE ||
this.isUserListEnabled = campaign.isUserListEnabled; // campaign.iULE ||
this.segments = campaign.segments;
this.key = campaign.key; // campaign.k ||
// this.priority = campaign.pr || campaign.priority;
this.type = campaign.type; // campaign.t ||
this.salt = campaign.salt;
}
getId(): number {
return this.id;
}
getName(): string {
return this.name;
}
getSegments(): Record<string, dynamic> {
return this.segments;
}
getTraffic(): number {
return this.percentTraffic;
}
getType(): string {
return this.type;
}
getIsForcedVariationEnabled(): boolean {
return this.isForcedVariationEnabled;
}
getIsUserListEnabled(): boolean {
return this.isUserListEnabled;
}
getKey(): string {
return this.key;
}
getMetrics(): Array<MetricModel> {
return this.metrics;
}
getVariations(): Array<VariationModel> {
return this.variations;
}
getVariables(): Array<VariableModel> {
return this.variables;
}
getRuleKey(): string {
return this.ruleKey;
}
getSalt(): string {
return this.salt;
}
}