pricing-renderer 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (85) hide show
  1. package/CHANGELOG.md +21 -0
  2. package/LICENSE +21 -0
  3. package/README.md +419 -0
  4. package/THIRD_PARTY_NOTICES.md +10 -0
  5. package/custom-elements.json +122 -0
  6. package/dist/core/config.d.ts +6 -0
  7. package/dist/core/config.d.ts.map +1 -0
  8. package/dist/core/config.js +62 -0
  9. package/dist/core/config.js.map +1 -0
  10. package/dist/core/expression.d.ts +4 -0
  11. package/dist/core/expression.d.ts.map +1 -0
  12. package/dist/core/expression.js +583 -0
  13. package/dist/core/expression.js.map +1 -0
  14. package/dist/core/i18n.d.ts +10 -0
  15. package/dist/core/i18n.d.ts.map +1 -0
  16. package/dist/core/i18n.js +207 -0
  17. package/dist/core/i18n.js.map +1 -0
  18. package/dist/core/index.d.ts +9 -0
  19. package/dist/core/index.d.ts.map +1 -0
  20. package/dist/core/index.js +8 -0
  21. package/dist/core/index.js.map +1 -0
  22. package/dist/core/normalize.d.ts +4 -0
  23. package/dist/core/normalize.d.ts.map +1 -0
  24. package/dist/core/normalize.js +301 -0
  25. package/dist/core/normalize.js.map +1 -0
  26. package/dist/core/resolve.d.ts +6 -0
  27. package/dist/core/resolve.d.ts.map +1 -0
  28. package/dist/core/resolve.js +123 -0
  29. package/dist/core/resolve.js.map +1 -0
  30. package/dist/core/types.d.ts +308 -0
  31. package/dist/core/types.d.ts.map +1 -0
  32. package/dist/core/types.js +2 -0
  33. package/dist/core/types.js.map +1 -0
  34. package/dist/core/utils.d.ts +16 -0
  35. package/dist/core/utils.d.ts.map +1 -0
  36. package/dist/core/utils.js +125 -0
  37. package/dist/core/utils.js.map +1 -0
  38. package/dist/core/view-model.d.ts +9 -0
  39. package/dist/core/view-model.d.ts.map +1 -0
  40. package/dist/core/view-model.js +427 -0
  41. package/dist/core/view-model.js.map +1 -0
  42. package/dist/element/define.d.ts +6 -0
  43. package/dist/element/define.d.ts.map +1 -0
  44. package/dist/element/define.js +20 -0
  45. package/dist/element/define.js.map +1 -0
  46. package/dist/element/events.d.ts +31 -0
  47. package/dist/element/events.d.ts.map +1 -0
  48. package/dist/element/events.js +2 -0
  49. package/dist/element/events.js.map +1 -0
  50. package/dist/element/index.d.ts +8 -0
  51. package/dist/element/index.d.ts.map +1 -0
  52. package/dist/element/index.js +2 -0
  53. package/dist/element/index.js.map +1 -0
  54. package/dist/element/pricing-renderer-element.d.ts +152 -0
  55. package/dist/element/pricing-renderer-element.d.ts.map +1 -0
  56. package/dist/element/pricing-renderer-element.js +598 -0
  57. package/dist/element/pricing-renderer-element.js.map +1 -0
  58. package/dist/element/renderers.d.ts +43 -0
  59. package/dist/element/renderers.d.ts.map +1 -0
  60. package/dist/element/renderers.js +866 -0
  61. package/dist/element/renderers.js.map +1 -0
  62. package/dist/react/index.d.ts +55 -0
  63. package/dist/react/index.d.ts.map +1 -0
  64. package/dist/react/index.js +23 -0
  65. package/dist/react/index.js.map +1 -0
  66. package/dist/styles/base.css +1110 -0
  67. package/dist/styles/styles.css +2 -0
  68. package/dist/styles/theme.css +84 -0
  69. package/dist/yaml/index.d.ts +4 -0
  70. package/dist/yaml/index.d.ts.map +1 -0
  71. package/dist/yaml/index.js +3 -0
  72. package/dist/yaml/index.js.map +1 -0
  73. package/dist/yaml/load.d.ts +3 -0
  74. package/dist/yaml/load.d.ts.map +1 -0
  75. package/dist/yaml/load.js +97 -0
  76. package/dist/yaml/load.js.map +1 -0
  77. package/dist/yaml/parser.d.ts +4 -0
  78. package/dist/yaml/parser.d.ts.map +1 -0
  79. package/dist/yaml/parser.js +80 -0
  80. package/dist/yaml/parser.js.map +1 -0
  81. package/dist/yaml/types.d.ts +27 -0
  82. package/dist/yaml/types.d.ts.map +1 -0
  83. package/dist/yaml/types.js +2 -0
  84. package/dist/yaml/types.js.map +1 -0
  85. package/package.json +132 -0
@@ -0,0 +1,123 @@
1
+ import { evaluatePriceExpression } from './expression.js';
2
+ import { cloneValue } from './utils.js';
3
+ export function createDefaultSelection(pricing) {
4
+ const preferredBilling = pricing.billing.find((period) => period.multiplier === 1)?.id ?? pricing.billing[0]?.id;
5
+ const firstPublicPlan = pricing.plans.find((plan) => !plan.private)?.id ?? pricing.plans[0]?.id;
6
+ return {
7
+ ...(firstPublicPlan ? { planId: firstPublicPlan } : {}),
8
+ ...(preferredBilling ? { billingPeriod: preferredBilling } : {}),
9
+ variables: cloneValue(pricing.variables),
10
+ addOns: {},
11
+ };
12
+ }
13
+ export function mergeSelection(pricing, selection) {
14
+ const defaults = createDefaultSelection(pricing);
15
+ return {
16
+ ...defaults,
17
+ ...selection,
18
+ variables: { ...defaults.variables, ...(selection?.variables ?? {}) },
19
+ addOns: { ...defaults.addOns, ...(selection?.addOns ?? {}) },
20
+ };
21
+ }
22
+ function resolvePriceSource(price, variables, billingMultiplier, quantity, options) {
23
+ if (price.kind === 'label') {
24
+ return { kind: 'label', label: price.text, quantity };
25
+ }
26
+ if (price.kind === 'fixed') {
27
+ return {
28
+ kind: 'amount',
29
+ amount: price.amount * billingMultiplier * quantity,
30
+ baseAmount: price.amount,
31
+ billingMultiplier,
32
+ quantity,
33
+ };
34
+ }
35
+ const result = evaluatePriceExpression(price.source, variables, options.expression);
36
+ if (result.value === undefined) {
37
+ return {
38
+ kind: 'error',
39
+ message: result.error ?? 'Expression could not be resolved.',
40
+ quantity,
41
+ };
42
+ }
43
+ return {
44
+ kind: 'amount',
45
+ amount: result.value * billingMultiplier * quantity,
46
+ baseAmount: result.value,
47
+ billingMultiplier,
48
+ quantity,
49
+ };
50
+ }
51
+ export function normalizeAddOnQuantity(pricing, addOnId, selection) {
52
+ const addOn = pricing.addOns.find((candidate) => candidate.id === addOnId);
53
+ if (!addOn || !selection?.selected) {
54
+ return 0;
55
+ }
56
+ const constraints = addOn.subscriptionConstraints;
57
+ if (!constraints) {
58
+ return 1;
59
+ }
60
+ const minimum = constraints.minQuantity;
61
+ const maximum = constraints.maxQuantity ?? Number.POSITIVE_INFINITY;
62
+ const raw = Number.isFinite(selection.quantity) ? selection.quantity : minimum;
63
+ const stepped = minimum + Math.round((raw - minimum) / constraints.quantityStep) * constraints.quantityStep;
64
+ return Math.min(maximum, Math.max(minimum, stepped));
65
+ }
66
+ export function resolvePricing(pricing, selectionInput, options = {}) {
67
+ const selection = mergeSelection(pricing, selectionInput);
68
+ const billingMultiplier = pricing.billing.find((period) => period.id === selection.billingPeriod)?.multiplier ?? 1;
69
+ const diagnostics = [];
70
+ const planPrices = {};
71
+ const addOnPrices = {};
72
+ for (const plan of pricing.plans) {
73
+ const resolved = resolvePriceSource(plan.price, selection.variables, billingMultiplier, 1, options);
74
+ planPrices[plan.id] = resolved;
75
+ if (resolved.kind === 'error') {
76
+ diagnostics.push({
77
+ code: 'PR_EXPRESSION_RESOLUTION_FAILED',
78
+ severity: 'error',
79
+ message: resolved.message,
80
+ path: `plans.${plan.id}.price`,
81
+ });
82
+ }
83
+ }
84
+ for (const addOn of pricing.addOns) {
85
+ const quantity = normalizeAddOnQuantity(pricing, addOn.id, selection.addOns[addOn.id]);
86
+ const resolved = resolvePriceSource(addOn.price, selection.variables, billingMultiplier, quantity || 1, options);
87
+ addOnPrices[addOn.id] = resolved;
88
+ if (resolved.kind === 'error') {
89
+ diagnostics.push({
90
+ code: 'PR_EXPRESSION_RESOLUTION_FAILED',
91
+ severity: 'error',
92
+ message: resolved.message,
93
+ path: `addOns.${addOn.id}.price`,
94
+ });
95
+ }
96
+ }
97
+ const selectedPlanPrice = selection.planId ? planPrices[selection.planId] : undefined;
98
+ let subtotal = selectedPlanPrice?.kind === 'amount' ? selectedPlanPrice.amount : 0;
99
+ let requiresQuote = selectedPlanPrice === undefined ||
100
+ selectedPlanPrice.kind === 'label' ||
101
+ selectedPlanPrice.kind === 'error';
102
+ for (const [addOnId, state] of Object.entries(selection.addOns)) {
103
+ if (!state.selected)
104
+ continue;
105
+ const resolved = addOnPrices[addOnId];
106
+ if (resolved?.kind === 'amount') {
107
+ const quantity = normalizeAddOnQuantity(pricing, addOnId, state);
108
+ subtotal += resolved.baseAmount * resolved.billingMultiplier * quantity;
109
+ }
110
+ else {
111
+ requiresQuote = true;
112
+ }
113
+ }
114
+ return {
115
+ selection,
116
+ planPrices,
117
+ addOnPrices,
118
+ subtotal,
119
+ requiresQuote,
120
+ diagnostics,
121
+ };
122
+ }
123
+ //# sourceMappingURL=resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/core/resolve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,308 @@
1
+ export type UnknownRecord = Record<string, unknown>;
2
+ export type IPricingLike = UnknownRecord & {
3
+ syntaxVersion?: unknown;
4
+ saasName?: unknown;
5
+ version?: unknown;
6
+ createdAt?: unknown;
7
+ url?: unknown;
8
+ tags?: unknown;
9
+ currency?: unknown;
10
+ billing?: unknown;
11
+ variables?: unknown;
12
+ features?: unknown;
13
+ usageLimits?: unknown;
14
+ plans?: unknown;
15
+ addOns?: unknown;
16
+ custom?: unknown;
17
+ };
18
+ export type DiagnosticSeverity = 'info' | 'warning' | 'error';
19
+ export interface PricingDiagnostic {
20
+ code: string;
21
+ severity: DiagnosticSeverity;
22
+ message: string;
23
+ path?: string;
24
+ details?: UnknownRecord;
25
+ }
26
+ export interface PricingResult<T> {
27
+ ok: boolean;
28
+ value?: T;
29
+ diagnostics: PricingDiagnostic[];
30
+ }
31
+ export type ExpressionFunction = (...argumentsList: unknown[]) => unknown;
32
+ export interface ExpressionOptions {
33
+ functions?: Readonly<Record<string, ExpressionFunction>>;
34
+ }
35
+ export type RenderMode = 'auto' | 'enabled' | 'disabled';
36
+ export type PriceSource = {
37
+ kind: 'fixed';
38
+ amount: number;
39
+ } | {
40
+ kind: 'label';
41
+ text: string;
42
+ } | {
43
+ kind: 'expression';
44
+ source: string;
45
+ dependencies: string[];
46
+ };
47
+ export interface PricingMetadata {
48
+ syntaxVersion: string;
49
+ saasName: string;
50
+ version?: string;
51
+ createdAt?: string;
52
+ url?: string;
53
+ tags: string[];
54
+ currency: string;
55
+ }
56
+ export interface NormalizedBillingPeriod {
57
+ id: string;
58
+ label: string;
59
+ multiplier: number;
60
+ }
61
+ export interface NormalizedFeature {
62
+ id: string;
63
+ name: string;
64
+ description?: string;
65
+ tag: string;
66
+ type?: string;
67
+ subtype?: string;
68
+ valueType?: string;
69
+ defaultValue?: unknown;
70
+ expression?: string;
71
+ serverExpression?: string;
72
+ automationType?: string;
73
+ docUrl?: string;
74
+ integrationType?: string;
75
+ pricingUrls: string[];
76
+ render: RenderMode;
77
+ raw: UnknownRecord;
78
+ }
79
+ export interface NormalizedUsageLimit {
80
+ id: string;
81
+ name: string;
82
+ description?: string;
83
+ tag: string;
84
+ type?: string;
85
+ period?: string;
86
+ trackable?: boolean;
87
+ valueType?: string;
88
+ defaultValue?: unknown;
89
+ unit?: string;
90
+ linkedFeatures: string[];
91
+ render: RenderMode;
92
+ raw: UnknownRecord;
93
+ }
94
+ export interface NormalizedPlan {
95
+ id: string;
96
+ name: string;
97
+ description?: string;
98
+ private: boolean;
99
+ price: PriceSource;
100
+ unit?: string;
101
+ features: Record<string, unknown>;
102
+ usageLimits: Record<string, unknown>;
103
+ raw: UnknownRecord;
104
+ }
105
+ export interface SubscriptionConstraints {
106
+ minQuantity: number;
107
+ maxQuantity?: number;
108
+ quantityStep: number;
109
+ }
110
+ export interface NormalizedAddOn {
111
+ id: string;
112
+ name: string;
113
+ description?: string;
114
+ private: boolean;
115
+ availableFor: string[];
116
+ dependsOn: string[];
117
+ excludes: string[];
118
+ price: PriceSource;
119
+ unit?: string;
120
+ features: Record<string, unknown>;
121
+ usageLimits: Record<string, unknown>;
122
+ usageLimitsExtensions: Record<string, unknown>;
123
+ subscriptionConstraints?: SubscriptionConstraints;
124
+ raw: UnknownRecord;
125
+ }
126
+ export interface NormalizedPricing {
127
+ metadata: PricingMetadata;
128
+ billing: NormalizedBillingPeriod[];
129
+ variables: Record<string, unknown>;
130
+ features: NormalizedFeature[];
131
+ usageLimits: NormalizedUsageLimit[];
132
+ plans: NormalizedPlan[];
133
+ addOns: NormalizedAddOn[];
134
+ custom: UnknownRecord;
135
+ raw: IPricingLike;
136
+ }
137
+ export interface PricingSyntaxAdapter {
138
+ id: string;
139
+ supports: (syntaxVersion: string) => boolean;
140
+ adapt: (pricing: IPricingLike) => IPricingLike;
141
+ }
142
+ export interface NormalizePricingOptions {
143
+ syntaxAdapters?: readonly PricingSyntaxAdapter[];
144
+ }
145
+ export interface AddOnSelection {
146
+ selected: boolean;
147
+ quantity: number;
148
+ }
149
+ export interface PricingSelection {
150
+ planId?: string;
151
+ billingPeriod?: string;
152
+ variables: Record<string, unknown>;
153
+ addOns: Record<string, AddOnSelection>;
154
+ }
155
+ export type ResolvedPrice = {
156
+ kind: 'amount';
157
+ amount: number;
158
+ baseAmount: number;
159
+ billingMultiplier: number;
160
+ quantity: number;
161
+ } | {
162
+ kind: 'label';
163
+ label: string;
164
+ quantity: number;
165
+ } | {
166
+ kind: 'error';
167
+ message: string;
168
+ quantity: number;
169
+ };
170
+ export interface ResolvedPricing {
171
+ selection: PricingSelection;
172
+ planPrices: Record<string, ResolvedPrice>;
173
+ addOnPrices: Record<string, ResolvedPrice>;
174
+ subtotal: number;
175
+ requiresQuote: boolean;
176
+ diagnostics: PricingDiagnostic[];
177
+ }
178
+ export interface ResolvePricingOptions {
179
+ expression?: ExpressionOptions;
180
+ }
181
+ export type VariableControlType = 'boolean' | 'number' | 'text' | 'select' | 'slider';
182
+ export interface VariableControlOption {
183
+ value: unknown;
184
+ label: string;
185
+ }
186
+ export interface VariableControl {
187
+ path: string;
188
+ label?: string;
189
+ description?: string;
190
+ type: VariableControlType;
191
+ min?: number;
192
+ max?: number;
193
+ step?: number;
194
+ options?: VariableControlOption[];
195
+ hidden?: boolean;
196
+ }
197
+ export interface PricingCta {
198
+ id: string;
199
+ label: string;
200
+ href?: string;
201
+ target?: '_self' | '_blank';
202
+ planId?: string;
203
+ kind?: 'primary' | 'secondary';
204
+ metadata?: UnknownRecord;
205
+ }
206
+ export type PricingHighlightKind = 'feature' | 'usage-limit';
207
+ export type PricingHighlightMode = 'auto' | 'manual' | 'hybrid';
208
+ export interface PricingHighlightReference {
209
+ id: string;
210
+ kind?: PricingHighlightKind;
211
+ }
212
+ export interface PricingPlanInheritance {
213
+ planId: string;
214
+ label?: string;
215
+ }
216
+ export type PricingPlanInheritanceSetting = false | 'auto' | PricingPlanInheritance;
217
+ export interface PricingPlanHighlightConfiguration {
218
+ mode?: PricingHighlightMode;
219
+ items?: Array<string | PricingHighlightReference>;
220
+ inheritsFrom?: PricingPlanInheritanceSetting;
221
+ maxItems?: number;
222
+ }
223
+ export type PricingPlanHighlightSetting = PricingPlanHighlightConfiguration | Array<string | PricingHighlightReference>;
224
+ export type PricingBadgeTone = 'accent' | 'success' | 'warning' | 'neutral';
225
+ export interface PricingPlanBadge {
226
+ id: string;
227
+ label: string;
228
+ tone?: PricingBadgeTone;
229
+ emphasize?: boolean;
230
+ }
231
+ export interface PricingPresentation {
232
+ title?: string;
233
+ subtitle?: string;
234
+ planBadges?: Record<string, PricingPlanBadge[]>;
235
+ planHighlights?: Record<string, PricingPlanHighlightSetting>;
236
+ planInheritance?: false | 'auto';
237
+ ctas?: PricingCta[];
238
+ variableControls?: 'auto' | false | VariableControl[];
239
+ billingLabels?: Record<string, string>;
240
+ maxHighlights?: number;
241
+ }
242
+ export type PricingMode = 'commercial' | 'catalog';
243
+ export type PricingLayout = 'auto' | 'compact' | 'table';
244
+ export type PricingVisibility = 'public-only' | 'all';
245
+ export type MessageCatalog = Record<string, string>;
246
+ export interface PricingRendererConfig {
247
+ locale: string;
248
+ pricingPath: string;
249
+ selectionEnabled: boolean;
250
+ ctaEnabled: boolean;
251
+ variablesEnabled: boolean;
252
+ presentation: PricingPresentation;
253
+ }
254
+ export interface ViewModelOptions {
255
+ locale?: string;
256
+ messages?: MessageCatalog;
257
+ mode?: PricingMode;
258
+ visibility?: PricingVisibility;
259
+ presentation?: PricingPresentation;
260
+ expression?: ExpressionOptions;
261
+ }
262
+ export interface PricingValueCell {
263
+ planId: string;
264
+ value: unknown;
265
+ }
266
+ export interface PricingComparisonRow {
267
+ id: string;
268
+ kind: PricingHighlightKind;
269
+ name: string;
270
+ description?: string;
271
+ category: string;
272
+ unit?: string;
273
+ docUrl?: string;
274
+ values: PricingValueCell[];
275
+ raw: UnknownRecord;
276
+ }
277
+ export interface PricingPlanHighlightSummary {
278
+ rows: PricingComparisonRow[];
279
+ badges: PricingPlanBadge[];
280
+ inheritedFrom?: {
281
+ planId: string;
282
+ planName: string;
283
+ label: string;
284
+ };
285
+ }
286
+ export interface PricingComparisonGroup {
287
+ id: string;
288
+ name: string;
289
+ rows: PricingComparisonRow[];
290
+ }
291
+ export interface PricingViewModel {
292
+ pricing: NormalizedPricing;
293
+ resolved: ResolvedPricing;
294
+ plans: NormalizedPlan[];
295
+ addOns: NormalizedAddOn[];
296
+ comparisonGroups: PricingComparisonGroup[];
297
+ variableControls: VariableControl[];
298
+ presentation: PricingPresentation;
299
+ locale: string;
300
+ messages: MessageCatalog;
301
+ mode: PricingMode;
302
+ visibility: PricingVisibility;
303
+ }
304
+ export interface ExpressionEvaluation {
305
+ value?: number;
306
+ error?: string;
307
+ }
308
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,16 @@
1
+ import type { UnknownRecord } from './types.js';
2
+ export declare function isRecord(value: unknown): value is UnknownRecord;
3
+ export declare function asRecord(value: unknown): UnknownRecord;
4
+ export declare function asString(value: unknown): string | undefined;
5
+ export declare function asBoolean(value: unknown, fallback?: boolean): boolean;
6
+ export declare function asFiniteNumber(value: unknown): number | undefined;
7
+ export declare function asStringArray(value: unknown): string[];
8
+ export declare function entries(value: unknown): [string, unknown][];
9
+ export declare function humanizeIdentifier(identifier: string): string;
10
+ export declare function normalizeRenderMode(value: unknown): 'auto' | 'enabled' | 'disabled';
11
+ export declare function unwrapValue(value: unknown): unknown;
12
+ export declare function cloneValue<T>(value: T): T;
13
+ export declare function getAtPath(source: unknown, path: string): unknown;
14
+ export declare function setAtPath(source: Record<string, unknown>, path: string, value: unknown): void;
15
+ export declare function deepEqual(left: unknown, right: unknown): boolean;
16
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../src/core/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAE/D;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,aAAa,CAEtD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAE3D;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,UAAQ,GAAG,OAAO,CAEnE;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAKjE;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,EAAE,CAKtD;AAED,wBAAgB,OAAO,CAAC,KAAK,EAAE,OAAO,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAE3D;AAED,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAM7D;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,CAMnF;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAKnD;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,CAAC,CAUzC;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAgBhE;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,IAAI,CAiC7F;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAkBhE"}
@@ -0,0 +1,125 @@
1
+ export function isRecord(value) {
2
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
3
+ }
4
+ export function asRecord(value) {
5
+ return isRecord(value) ? value : {};
6
+ }
7
+ export function asString(value) {
8
+ return typeof value === 'string' && value.trim() ? value.trim() : undefined;
9
+ }
10
+ export function asBoolean(value, fallback = false) {
11
+ return typeof value === 'boolean' ? value : fallback;
12
+ }
13
+ export function asFiniteNumber(value) {
14
+ if (typeof value === 'number' && Number.isFinite(value)) {
15
+ return value;
16
+ }
17
+ return undefined;
18
+ }
19
+ export function asStringArray(value) {
20
+ if (!Array.isArray(value)) {
21
+ return [];
22
+ }
23
+ return value.filter((item) => typeof item === 'string');
24
+ }
25
+ export function entries(value) {
26
+ return Object.entries(asRecord(value));
27
+ }
28
+ export function humanizeIdentifier(identifier) {
29
+ const spaced = identifier
30
+ .replace(/([a-z0-9])([A-Z])/g, '$1 $2')
31
+ .replace(/[-_]+/g, ' ')
32
+ .trim();
33
+ return spaced ? spaced.charAt(0).toUpperCase() + spaced.slice(1) : identifier;
34
+ }
35
+ export function normalizeRenderMode(value) {
36
+ const normalized = typeof value === 'string' ? value.toLowerCase() : 'auto';
37
+ if (normalized === 'enabled' || normalized === 'disabled') {
38
+ return normalized;
39
+ }
40
+ return 'auto';
41
+ }
42
+ export function unwrapValue(value) {
43
+ if (isRecord(value) && 'value' in value) {
44
+ return value.value;
45
+ }
46
+ return value;
47
+ }
48
+ export function cloneValue(value) {
49
+ if (Array.isArray(value)) {
50
+ return value.map((item) => cloneValue(item));
51
+ }
52
+ if (isRecord(value)) {
53
+ return Object.fromEntries(Object.entries(value).map(([key, item]) => [key, cloneValue(item)]));
54
+ }
55
+ return value;
56
+ }
57
+ export function getAtPath(source, path) {
58
+ const segments = path
59
+ .replace(/\[(\d+)\]/g, '.$1')
60
+ .split('.')
61
+ .filter(Boolean);
62
+ let current = source;
63
+ for (const segment of segments) {
64
+ if (Array.isArray(current)) {
65
+ current = current[Number(segment)];
66
+ }
67
+ else if (isRecord(current)) {
68
+ current = current[segment];
69
+ }
70
+ else {
71
+ return undefined;
72
+ }
73
+ }
74
+ return current;
75
+ }
76
+ export function setAtPath(source, path, value) {
77
+ const segments = path
78
+ .replace(/\[(\d+)\]/g, '.$1')
79
+ .split('.')
80
+ .filter(Boolean);
81
+ if (segments.length === 0) {
82
+ return;
83
+ }
84
+ let current = source;
85
+ for (let index = 0; index < segments.length - 1; index += 1) {
86
+ const segment = segments[index];
87
+ const next = segments[index + 1];
88
+ if (Array.isArray(current)) {
89
+ const numericIndex = Number(segment);
90
+ if (current[numericIndex] === undefined) {
91
+ current[numericIndex] = /^\d+$/.test(next) ? [] : {};
92
+ }
93
+ current = current[numericIndex];
94
+ }
95
+ else if (isRecord(current)) {
96
+ if (current[segment] === undefined) {
97
+ current[segment] = /^\d+$/.test(next) ? [] : {};
98
+ }
99
+ current = current[segment];
100
+ }
101
+ }
102
+ const finalSegment = segments[segments.length - 1];
103
+ if (Array.isArray(current)) {
104
+ current[Number(finalSegment)] = value;
105
+ }
106
+ else if (isRecord(current)) {
107
+ current[finalSegment] = value;
108
+ }
109
+ }
110
+ export function deepEqual(left, right) {
111
+ if (Object.is(left, right)) {
112
+ return true;
113
+ }
114
+ if (Array.isArray(left) && Array.isArray(right)) {
115
+ return (left.length === right.length && left.every((value, index) => deepEqual(value, right[index])));
116
+ }
117
+ if (isRecord(left) && isRecord(right)) {
118
+ const leftKeys = Object.keys(left);
119
+ const rightKeys = Object.keys(right);
120
+ return (leftKeys.length === rightKeys.length &&
121
+ leftKeys.every((key) => key in right && deepEqual(left[key], right[key])));
122
+ }
123
+ return false;
124
+ }
125
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/core/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { NormalizedPricing, PricingCta, PricingPlanHighlightSummary, PricingPresentation, PricingSelection, PricingViewModel, UnknownRecord, ViewModelOptions } from './types.js';
2
+ export declare function mergePresentation(pricing: NormalizedPricing, provided?: PricingPresentation): PricingPresentation;
3
+ export declare function mergePresentationOptions(defaults?: PricingPresentation, provided?: PricingPresentation): PricingPresentation;
4
+ export declare function createPricingViewModel(pricing: NormalizedPricing, selection?: Partial<PricingSelection>, options?: ViewModelOptions): PricingViewModel;
5
+ export declare function getPlanHighlightSummary(viewModel: PricingViewModel, planId: string): PricingPlanHighlightSummary;
6
+ export declare function getPlanCta(presentation: PricingPresentation, planId: string): PricingCta | undefined;
7
+ export declare function isSafeLink(value: string | undefined): boolean;
8
+ export declare function getCustomDetails(pricing: NormalizedPricing): UnknownRecord;
9
+ //# sourceMappingURL=view-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"view-model.d.ts","sourceRoot":"","sources":["../../src/core/view-model.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EACV,iBAAiB,EAGjB,UAAU,EAKV,2BAA2B,EAE3B,mBAAmB,EACnB,gBAAgB,EAChB,gBAAgB,EAChB,aAAa,EAEb,gBAAgB,EACjB,MAAM,YAAY,CAAC;AA8LpB,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,iBAAiB,EAC1B,QAAQ,CAAC,EAAE,mBAAmB,GAC7B,mBAAmB,CAOrB;AAED,wBAAgB,wBAAwB,CACtC,QAAQ,CAAC,EAAE,mBAAmB,EAC9B,QAAQ,CAAC,EAAE,mBAAmB,GAC7B,mBAAmB,CAuBrB;AAsFD,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,iBAAiB,EAC1B,SAAS,CAAC,EAAE,OAAO,CAAC,gBAAgB,CAAC,EACrC,OAAO,GAAE,gBAAqB,GAC7B,gBAAgB,CA2BlB;AAkDD,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,gBAAgB,EAC3B,MAAM,EAAE,MAAM,GACb,2BAA2B,CA4E7B;AAED,wBAAgB,UAAU,CACxB,YAAY,EAAE,mBAAmB,EACjC,MAAM,EAAE,MAAM,GACb,UAAU,GAAG,SAAS,CAExB;AAED,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAK7D;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,iBAAiB,GAAG,aAAa,CAE1E"}