UNPKG

pricing4ts

Version:

![NPM Version](https://img.shields.io/npm/v/pricing4ts) 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

173 lines (172 loc) 8.02 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.pricing2DZN = pricing2DZN; var _1 = require("."); var os_1 = require("os"); var addon_1 = require("../../../main/models/pricing2yaml/addon"); var plan_1 = require("../../../main/models/pricing2yaml/plan"); var feature_1 = require("../../../main/models/pricing2yaml/feature"); var usage_limit_1 = require("../../../main/models/pricing2yaml/usage-limit"); var string_utils_1 = require("./string-utils"); function pricing2DZN(pricing) { var numFeatures = (0, feature_1.getNumberOfFeatures)(pricing.features); var numUsageLimits = (0, usage_limit_1.getNumberOfUsageLimits)(pricing.usageLimits); var numPlans = pricing.plans ? Object.keys(pricing.plans).length : 0; var numAddOns = pricing.addOns ? Object.keys(pricing.addOns).length : 0; var variableChunks = [ { left: _1.DZNKeywords.NumberOfFeatures, value: JSON.stringify(numFeatures), }, { left: _1.DZNKeywords.NumberOfUsageLimits, value: JSON.stringify(numUsageLimits), }, { left: _1.DZNKeywords.NumberOfPlans, value: JSON.stringify(numPlans) }, { left: _1.DZNKeywords.NumberOfAddOns, value: JSON.stringify(numAddOns) }, ]; var variablesBlock = (0, string_utils_1.generateChunkBlock)(variableChunks); var featureNames = (0, feature_1.getFeatureNames)(pricing.features); var usageLimitNames = (0, usage_limit_1.getUsageLimitNames)(pricing.usageLimits); var planNames = (0, plan_1.getPlanNames)(pricing.plans); var addOnNames = (0, addon_1.getAddOnNames)(pricing.addOns); var namesChunks = [ { left: _1.DZNKeywords.Features, value: JSON.stringify(featureNames) }, { left: _1.DZNKeywords.UsageLimits, value: JSON.stringify(usageLimitNames), }, { left: _1.DZNKeywords.Plans, value: JSON.stringify(planNames) }, { left: _1.DZNKeywords.AddOns, value: JSON.stringify(addOnNames) }, ]; var namesBlock = (0, string_utils_1.generateChunkBlock)(namesChunks); var pricesChunk = generatePricesChunk(pricing.plans, pricing.addOns); var booleanUsageLimitsChunk = generateBooleanUsageLimitsChunk(pricing.usageLimits); var planChunks = generatePlanChunks(pricing.usageLimits || {}, pricing.plans); var linkedFeatures = generateLinkedFeaturesMatrix(pricing); var addOnsChunks = generateAddOnsChunks(pricing); return [variablesBlock, namesBlock, pricesChunk, booleanUsageLimitsChunk, linkedFeatures, planChunks, addOnsChunks].join(os_1.EOL); } function generatePricesChunk(plans, addOns) { var plansPrices = (0, plan_1.getPlanPrices)(plans); if (plans && Object.keys(plans).length !== 0 && plansPrices.every(function (p) { return p === null; })) { throw new Error("Either prices are not defined for all plans, or they are not numbers. Current parsed prices: ".concat(plansPrices)); } var addOnPrices = (0, addon_1.getAddOnPrices)(addOns); var pricesChunks = [ { left: _1.DZNKeywords.PlansPrices, value: JSON.stringify(plansPrices), }, { left: _1.DZNKeywords.AddOnsPrices, value: JSON.stringify(addOnPrices), }, ]; return (0, string_utils_1.generateChunkBlock)(pricesChunks); } function generateBooleanUsageLimitsChunk(usageLimits) { if (!usageLimits) { return ''; } var booleanUsageLimits = Object.values(usageLimits).map(function (ul) { return ul.valueType === 'BOOLEAN' ? 1 : 0; }); var booleanUsageLimitsChunks = [ { left: _1.DZNKeywords.BooleanUsageLimits, value: JSON.stringify(booleanUsageLimits), }, ]; return (0, string_utils_1.generateChunkBlock)(booleanUsageLimitsChunks); } function generatePlanChunks(usageLimits, plans) { if (!plans) { return ''; } var planNames = Object.values(plans).map(function (plan) { return plan.name; }); var planFeaturesMatrix = (0, plan_1.calculatePlanFeaturesMatrix)(plans); var planUsageLimitsMatrix = (0, plan_1.calculatePlanUsageLimitsMatrix)(usageLimits, plans); var addOnChunks = [ { left: _1.DZNKeywords.PlansFeatures, row: _1.DZNKeywords.Plans, col: _1.DZNKeywords.Features, value: (0, string_utils_1.formatMatrixToString)(planNames, planFeaturesMatrix), }, { left: _1.DZNKeywords.PlansUsageLimits, row: _1.DZNKeywords.Plans, col: _1.DZNKeywords.UsageLimits, value: (0, string_utils_1.formatMatrixToString)(planNames, planUsageLimitsMatrix), }, ]; return (0, string_utils_1.generateChunkBlock)(addOnChunks); } function generateAddOnsChunks(pricing) { if (!pricing.addOns) { return ''; } if (!pricing.usageLimits) { return ''; } var addOnNames = (0, addon_1.getAddOnNames)(pricing.addOns); var planNames = (0, plan_1.getPlanNames)(pricing.plans); var addOnsFeatureMatrix = (0, addon_1.calculateAddOnsFeaturesMatrix)(pricing.features, pricing.addOns); var addOnsUsageLimitsMatrix = (0, addon_1.calculateAddOnsUsageLimitsMatrix)(pricing.usageLimits, pricing.addOns); var addOnsUsageLimitsExtensionsMatrix = (0, addon_1.calculateAddOnsUsageLimitsExtensionsMatrix)(pricing.usageLimits, pricing.addOns); var addOnsAvailableForMatrix = (0, addon_1.calculateAddOnAvailableForMatrix)(planNames, pricing.addOns); var addOnsDependsOnMatrix = (0, addon_1.calculateAddOnsDependsOnOExcludesMatrix)(pricing.addOns); var addOnsExcludesOnMatrix = (0, addon_1.calculateAddOnsDependsOnOExcludesMatrix)(pricing.addOns, "excludes"); var addOnChunks = [ { left: _1.DZNKeywords.AddOnsFeatures, row: _1.DZNKeywords.AddOns, col: _1.DZNKeywords.Features, value: (0, string_utils_1.formatMatrixToString)(addOnNames, addOnsFeatureMatrix), }, { left: _1.DZNKeywords.AddOnsUsageLimits, row: _1.DZNKeywords.AddOns, col: _1.DZNKeywords.UsageLimits, value: (0, string_utils_1.formatMatrixToString)(addOnNames, addOnsUsageLimitsMatrix), }, { left: _1.DZNKeywords.AddOnsUsageLimitsExtensions, row: _1.DZNKeywords.AddOns, col: _1.DZNKeywords.UsageLimits, value: (0, string_utils_1.formatMatrixToString)(addOnNames, addOnsUsageLimitsExtensionsMatrix), }, { left: _1.DZNKeywords.AddOnsAvailableFor, row: _1.DZNKeywords.AddOns, col: _1.DZNKeywords.Plans, value: (0, string_utils_1.formatMatrixToString)(addOnNames, addOnsAvailableForMatrix), }, { left: _1.DZNKeywords.AddOnsDependsOn, row: _1.DZNKeywords.AddOns, col: _1.DZNKeywords.AddOns, value: (0, string_utils_1.formatMatrixToString)(addOnNames, addOnsDependsOnMatrix), }, { left: _1.DZNKeywords.AddOnsExcludes, row: _1.DZNKeywords.AddOns, col: _1.DZNKeywords.AddOns, value: (0, string_utils_1.formatMatrixToString)(addOnNames, addOnsExcludesOnMatrix), }, ]; return (0, string_utils_1.generateChunkBlock)(addOnChunks); } function generateLinkedFeaturesMatrix(pricing) { if (!pricing.usageLimits) { return ''; } var usageLimitsNames = (0, usage_limit_1.getUsageLimitNames)(pricing.usageLimits); var featureNames = (0, feature_1.getFeatureNames)(pricing.features); var linkedFeaturesMatrix = (0, usage_limit_1.calculateLinkedFeaturesMatrix)(pricing.usageLimits, featureNames); return (0, string_utils_1.generateChunk)({ left: _1.DZNKeywords.LinkedFeatures, row: _1.DZNKeywords.UsageLimits, col: _1.DZNKeywords.Features, value: (0, string_utils_1.formatMatrixToString)(usageLimitsNames, linkedFeaturesMatrix), }); }