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

64 lines (53 loc) 2 kB
import { Feature, UsageLimit } from '../../../types'; const unlimitedValue = 100000000; export function isUsagelimit(item: Feature | UsageLimit) { const usageLimitTypes = ['non_renewable', 'renewable', 'time_driven', 'response_driven']; return usageLimitTypes.includes(item.type.toLowerCase()); } export function calculateOverriddenRow(items: Record<string, Feature | UsageLimit>): number[] { const values = []; for (const item of Object.values(items)) { values.push(calculateOverriddenValue(item)); } return values; } export function calculateOverriddenValue(item: Feature | UsageLimit): number { const defaultValue = 0; let value; if (item.valueType === 'NUMERIC' && item.value !== undefined && item.value !== null) { value = (item.value as number) > unlimitedValue ? unlimitedValue : (item.value as number); } else if (item.valueType === 'NUMERIC' && item.defaultValue !== undefined && item.defaultValue !== null) { value = (item.defaultValue as number) > unlimitedValue ? unlimitedValue : (item.defaultValue as number); } else if (item.valueType === 'BOOLEAN' && item.value !== undefined && item.value !== null) { value = item.value ? 1 : 0; } else if ( item.valueType === 'BOOLEAN' && item.defaultValue !== undefined && item.defaultValue !== null ) { value = item.defaultValue ? 1 : 0; } else if (item.valueType === 'TEXT' && item.value) { value = item.value.toString().length > 0 ? 1 : 0; } else if (item.valueType === 'TEXT' && item.defaultValue) { value = item.defaultValue.toString().length > 0 ? 1 : 0; } else { value = defaultValue; } return value; } export function valueToNumber(value?: string | number | boolean | string[]): number { switch (typeof value) { case 'boolean': return value ? 1 : 0; case 'number': return value === Infinity ? 1000000000 : value; case 'object': case 'string': return 1; case 'undefined': return 0; } }