pricing4ts
Version:
 Pricing4TS is a TypeScript-based toolkit designed to enhance the server-side functionality of a pricing-driven SaaS by enabling the seamless integration of pricing plans into the application logic. T
156 lines (155 loc) • 5.88 kB
JavaScript
"use strict";
var __assign = (this && this.__assign) || function () {
__assign = Object.assign || function(t) {
for (var s, i = 1, n = arguments.length; i < n; i++) {
s = arguments[i];
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
t[p] = s[p];
}
return t;
};
return __assign.apply(this, arguments);
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.getAddOnNames = getAddOnNames;
exports.getAddOnPrices = getAddOnPrices;
exports.calculateAddOnsFeaturesMatrix = calculateAddOnsFeaturesMatrix;
exports.calculateAddOnsUsageLimitsMatrix = calculateAddOnsUsageLimitsMatrix;
exports.calculateAddOnsUsageLimitsExtensionsMatrix = calculateAddOnsUsageLimitsExtensionsMatrix;
exports.calculateAddOnAvailableForMatrix = calculateAddOnAvailableForMatrix;
exports.calculateAddOnsDependsOnOExcludesMatrix = calculateAddOnsDependsOnOExcludesMatrix;
var number_utils_1 = require("../../../server/utils/dzn-exporter/number-utils");
function getAddOnNames(addOns) {
if (!addOns) {
return [];
}
return Object.values(addOns).map(function (addOn) { return addOn.name; });
}
function getAddOnPrices(addOns) {
var prices = [];
if (!addOns) {
return prices;
}
for (var _i = 0, _a = Object.values(addOns); _i < _a.length; _i++) {
var addOn = _a[_i];
var price = addOn.price;
if (typeof price === 'number') {
prices.push(price);
}
else if (typeof price === 'string') {
prices.push(100);
}
}
return prices;
}
function calculateAddOnsFeaturesMatrix(features, addOns) {
var matrix = [];
for (var _i = 0, _a = Object.values(addOns); _i < _a.length; _i++) {
var addOn = _a[_i];
var addOnFeatures = addOn.features;
if (!addOnFeatures) {
matrix.push(new Array(Object.values(features).length).fill(0));
continue;
}
var row = [];
for (var _b = 0, _c = Object.values(features); _b < _c.length; _b++) {
var feature = _c[_b];
var value = 0;
var overriddenValue = addOnFeatures[feature.name] ? (0, number_utils_1.calculateOverriddenValue)(__assign(__assign({}, addOnFeatures[feature.name]), { valueType: feature.valueType })) : undefined;
if (overriddenValue) {
value = 1;
}
row.push(value);
}
matrix.push(row);
}
return matrix;
}
function calculateAddOnsUsageLimitsMatrix(usageLimits, addOns) {
var matrix = [];
if (Object.keys(usageLimits).length === 0) {
return matrix;
}
for (var _i = 0, _a = Object.values(addOns); _i < _a.length; _i++) {
var addOn = _a[_i];
var addOnUsageLimits = addOn.usageLimits || {};
var numberOfOverriddenAddOns = Object.keys(addOnUsageLimits).length;
if (numberOfOverriddenAddOns === 0) {
matrix.push(new Array(Object.keys(usageLimits).length).fill(0));
continue;
}
var row = [];
for (var _b = 0, _c = Object.values(usageLimits); _b < _c.length; _b++) {
var usageLimit = _c[_b];
var value = addOnUsageLimits[usageLimit.name] ? (0, number_utils_1.calculateOverriddenValue)(__assign(__assign({}, addOnUsageLimits[usageLimit.name]), { valueType: usageLimit.valueType })) : 0;
row.push(value);
}
matrix.push(row);
}
return matrix;
}
function calculateAddOnsUsageLimitsExtensionsMatrix(usageLimits, addOns) {
var matrix = [];
if (Object.keys(usageLimits).length === 0) {
return matrix;
}
for (var _i = 0, _a = Object.values(addOns); _i < _a.length; _i++) {
var addOn = _a[_i];
var addOnUsageLimits = addOn.usageLimitsExtensions || {};
var numberOfOverriddenAddOns = Object.keys(addOnUsageLimits).length;
if (numberOfOverriddenAddOns === 0) {
matrix.push(new Array(Object.keys(usageLimits).length).fill(0));
continue;
}
var row = [];
for (var _b = 0, _c = Object.values(usageLimits); _b < _c.length; _b++) {
var usageLimit = _c[_b];
var value = addOnUsageLimits[usageLimit.name]
? (0, number_utils_1.valueToNumber)(addOnUsageLimits[usageLimit.name].value)
: 0;
row.push(value);
}
matrix.push(row);
}
return matrix;
}
function calculateAddOnAvailableForMatrix(planNames, addOns) {
var matrix = [];
if (!addOns || planNames.length === 0) {
return matrix;
}
for (var _i = 0, _a = Object.values(addOns); _i < _a.length; _i++) {
var addOn = _a[_i];
var row = [];
for (var _b = 0, planNames_1 = planNames; _b < planNames_1.length; _b++) {
var planName = planNames_1[_b];
var value = addOn.availableFor.includes(planName) ? 1 : 0;
row.push(value);
}
matrix.push(row);
}
return matrix;
}
function calculateAddOnsDependsOnOExcludesMatrix(addOns, field) {
if (field === void 0) { field = "dependsOn"; }
var matrix = [];
if (!addOns) {
return matrix;
}
for (var _i = 0, _a = Object.values(addOns); _i < _a.length; _i++) {
var addOn = _a[_i];
var selectedField = field === "dependsOn" ? addOn.dependsOn : addOn.excludes;
var row = [];
if (!selectedField) {
row.push(new Array(Object.values(addOns).length).fill(0));
continue;
}
for (var _b = 0, _c = Object.values(addOns); _b < _c.length; _b++) {
var innerAddOn = _c[_b];
var value = selectedField.includes(innerAddOn.name) ? 1 : 0;
row.push(value);
}
matrix.push(row);
}
return matrix;
}