@voyantjs/utils 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.
- package/LICENSE +109 -0
- package/README.md +42 -0
- package/dist/accounting-countries.d.ts +12 -0
- package/dist/accounting-countries.d.ts.map +1 -0
- package/dist/accounting-countries.js +307 -0
- package/dist/accounting-countries.js.map +1 -0
- package/dist/accounting-regions.d.ts +103 -0
- package/dist/accounting-regions.d.ts.map +1 -0
- package/dist/accounting-regions.js +38 -0
- package/dist/accounting-regions.js.map +1 -0
- package/dist/airlines.d.ts +960 -0
- package/dist/airlines.d.ts.map +1 -0
- package/dist/airlines.js +989 -0
- package/dist/airlines.js.map +1 -0
- package/dist/analytics/api-key-events.d.ts +89 -0
- package/dist/analytics/api-key-events.d.ts.map +1 -0
- package/dist/analytics/api-key-events.js +99 -0
- package/dist/analytics/api-key-events.js.map +1 -0
- package/dist/api-keys-client.d.ts +40 -0
- package/dist/api-keys-client.d.ts.map +1 -0
- package/dist/api-keys-client.js +63 -0
- package/dist/api-keys-client.js.map +1 -0
- package/dist/api-keys.d.ts +48 -0
- package/dist/api-keys.d.ts.map +1 -0
- package/dist/api-keys.js +108 -0
- package/dist/api-keys.js.map +1 -0
- package/dist/cache.d.ts +123 -0
- package/dist/cache.d.ts.map +1 -0
- package/dist/cache.js +182 -0
- package/dist/cache.js.map +1 -0
- package/dist/checkout-signature.d.ts +15 -0
- package/dist/checkout-signature.d.ts.map +1 -0
- package/dist/checkout-signature.js +64 -0
- package/dist/checkout-signature.js.map +1 -0
- package/dist/conditions.d.ts +36 -0
- package/dist/conditions.d.ts.map +1 -0
- package/dist/conditions.js +396 -0
- package/dist/conditions.js.map +1 -0
- package/dist/countries.d.ts +5 -0
- package/dist/countries.d.ts.map +1 -0
- package/dist/countries.js +251 -0
- package/dist/countries.js.map +1 -0
- package/dist/currencies.d.ts +1011 -0
- package/dist/currencies.d.ts.map +1 -0
- package/dist/currencies.js +1011 -0
- package/dist/currencies.js.map +1 -0
- package/dist/email/send.d.ts +20 -0
- package/dist/email/send.d.ts.map +1 -0
- package/dist/email/send.js +53 -0
- package/dist/email/send.js.map +1 -0
- package/dist/form-runtime.d.ts +38 -0
- package/dist/form-runtime.d.ts.map +1 -0
- package/dist/form-runtime.js +174 -0
- package/dist/form-runtime.js.map +1 -0
- package/dist/gcs/storage.d.ts +23 -0
- package/dist/gcs/storage.d.ts.map +1 -0
- package/dist/gcs/storage.js +25 -0
- package/dist/gcs/storage.js.map +1 -0
- package/dist/geo.d.ts +85 -0
- package/dist/geo.d.ts.map +1 -0
- package/dist/geo.js +141 -0
- package/dist/geo.js.map +1 -0
- package/dist/geographic-regions.d.ts +66 -0
- package/dist/geographic-regions.d.ts.map +1 -0
- package/dist/geographic-regions.js +326 -0
- package/dist/geographic-regions.js.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/kms-aws.d.ts +26 -0
- package/dist/kms-aws.d.ts.map +1 -0
- package/dist/kms-aws.js +133 -0
- package/dist/kms-aws.js.map +1 -0
- package/dist/kms-crypto.d.ts +20 -0
- package/dist/kms-crypto.d.ts.map +1 -0
- package/dist/kms-crypto.js +108 -0
- package/dist/kms-crypto.js.map +1 -0
- package/dist/kms-env.d.ts +13 -0
- package/dist/kms-env.d.ts.map +1 -0
- package/dist/kms-env.js +13 -0
- package/dist/kms-env.js.map +1 -0
- package/dist/kms-gcp.d.ts +32 -0
- package/dist/kms-gcp.d.ts.map +1 -0
- package/dist/kms-gcp.js +116 -0
- package/dist/kms-gcp.js.map +1 -0
- package/dist/kms-local.d.ts +13 -0
- package/dist/kms-local.d.ts.map +1 -0
- package/dist/kms-local.js +13 -0
- package/dist/kms-local.js.map +1 -0
- package/dist/kms-symmetric.d.ts +14 -0
- package/dist/kms-symmetric.d.ts.map +1 -0
- package/dist/kms-symmetric.js +67 -0
- package/dist/kms-symmetric.js.map +1 -0
- package/dist/kms.d.ts +66 -0
- package/dist/kms.d.ts.map +1 -0
- package/dist/kms.js +169 -0
- package/dist/kms.js.map +1 -0
- package/dist/kv-codecs.d.ts +6 -0
- package/dist/kv-codecs.d.ts.map +1 -0
- package/dist/kv-codecs.js +4 -0
- package/dist/kv-codecs.js.map +1 -0
- package/dist/kv.d.ts +10 -0
- package/dist/kv.d.ts.map +1 -0
- package/dist/kv.js +18 -0
- package/dist/kv.js.map +1 -0
- package/dist/languages.d.ts +187 -0
- package/dist/languages.d.ts.map +1 -0
- package/dist/languages.js +187 -0
- package/dist/languages.js.map +1 -0
- package/dist/localized-countries-regions.d.ts +15 -0
- package/dist/localized-countries-regions.d.ts.map +1 -0
- package/dist/localized-countries-regions.js +674 -0
- package/dist/localized-countries-regions.js.map +1 -0
- package/dist/localized-regions.d.ts +33 -0
- package/dist/localized-regions.d.ts.map +1 -0
- package/dist/localized-regions.js +63 -0
- package/dist/localized-regions.js.map +1 -0
- package/dist/price/resolve.d.ts +91 -0
- package/dist/price/resolve.d.ts.map +1 -0
- package/dist/price/resolve.js +227 -0
- package/dist/price/resolve.js.map +1 -0
- package/dist/rate-limits.d.ts +39 -0
- package/dist/rate-limits.d.ts.map +1 -0
- package/dist/rate-limits.js +86 -0
- package/dist/rate-limits.js.map +1 -0
- package/dist/redis.d.ts +13 -0
- package/dist/redis.d.ts.map +1 -0
- package/dist/redis.js +16 -0
- package/dist/redis.js.map +1 -0
- package/dist/region-only.d.ts +11 -0
- package/dist/region-only.d.ts.map +1 -0
- package/dist/region-only.js +49 -0
- package/dist/region-only.js.map +1 -0
- package/dist/region.d.ts +11 -0
- package/dist/region.d.ts.map +1 -0
- package/dist/region.js +47 -0
- package/dist/region.js.map +1 -0
- package/dist/romania-bucharest-sectors.d.ts +6 -0
- package/dist/romania-bucharest-sectors.d.ts.map +1 -0
- package/dist/romania-bucharest-sectors.js +27 -0
- package/dist/romania-bucharest-sectors.js.map +1 -0
- package/dist/romania-counties.d.ts +6 -0
- package/dist/romania-counties.d.ts.map +1 -0
- package/dist/romania-counties.js +171 -0
- package/dist/romania-counties.js.map +1 -0
- package/dist/session-claims.d.ts +40 -0
- package/dist/session-claims.d.ts.map +1 -0
- package/dist/session-claims.js +184 -0
- package/dist/session-claims.js.map +1 -0
- package/dist/sms/provider.d.ts +28 -0
- package/dist/sms/provider.d.ts.map +1 -0
- package/dist/sms/provider.js +50 -0
- package/dist/sms/provider.js.map +1 -0
- package/dist/sms/segments.d.ts +3 -0
- package/dist/sms/segments.d.ts.map +1 -0
- package/dist/sms/segments.js +33 -0
- package/dist/sms/segments.js.map +1 -0
- package/dist/temporal.d.ts +2 -0
- package/dist/temporal.d.ts.map +1 -0
- package/dist/temporal.js +6 -0
- package/dist/temporal.js.map +1 -0
- package/dist/timezones.d.ts +9 -0
- package/dist/timezones.d.ts.map +1 -0
- package/dist/timezones.js +1217 -0
- package/dist/timezones.js.map +1 -0
- package/dist/twilio/client.d.ts +13 -0
- package/dist/twilio/client.d.ts.map +1 -0
- package/dist/twilio/client.js +26 -0
- package/dist/twilio/client.js.map +1 -0
- package/dist/usage/index.d.ts +34 -0
- package/dist/usage/index.d.ts.map +1 -0
- package/dist/usage/index.js +18 -0
- package/dist/usage/index.js.map +1 -0
- package/dist/usage/policy.d.ts +27 -0
- package/dist/usage/policy.d.ts.map +1 -0
- package/dist/usage/policy.js +17 -0
- package/dist/usage/policy.js.map +1 -0
- package/dist/validation/log.d.ts +10 -0
- package/dist/validation/log.d.ts.map +1 -0
- package/dist/validation/log.js +37 -0
- package/dist/validation/log.js.map +1 -0
- package/dist/with-timeout.d.ts +2 -0
- package/dist/with-timeout.d.ts.map +1 -0
- package/dist/with-timeout.js +15 -0
- package/dist/with-timeout.js.map +1 -0
- package/dist/zod-form-builder.d.ts +45 -0
- package/dist/zod-form-builder.d.ts.map +1 -0
- package/dist/zod-form-builder.js +216 -0
- package/dist/zod-form-builder.js.map +1 -0
- package/package.json +92 -0
|
@@ -0,0 +1,396 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Predicate Evaluator for Form Conditions
|
|
3
|
+
*
|
|
4
|
+
* Provides a safe, deterministic evaluator for condition expressions
|
|
5
|
+
* used in booking form visibility and requirement rules.
|
|
6
|
+
*/
|
|
7
|
+
import { computeRegionsFromCountries, getCountryRegions } from "./geo.js";
|
|
8
|
+
/**
|
|
9
|
+
* Whitelist of allowed field references
|
|
10
|
+
*/
|
|
11
|
+
// Whitelist derives from @pxmstudio/voyant-types PREDICATE_ALLOWED_FIELDS plus itinerary.items.*
|
|
12
|
+
const ALLOWED_FIELDS = new Set([
|
|
13
|
+
"billing.buyerType",
|
|
14
|
+
"billing.country",
|
|
15
|
+
"passenger.country",
|
|
16
|
+
"itinerary.countries_any",
|
|
17
|
+
"itinerary.countries_all",
|
|
18
|
+
"itinerary.countries_only",
|
|
19
|
+
"itinerary.jurisdictions",
|
|
20
|
+
"itinerary.region",
|
|
21
|
+
// Support per-item derived context (countries/regions)
|
|
22
|
+
"itinerary.items.country",
|
|
23
|
+
"itinerary.items.region",
|
|
24
|
+
"product.categoryKey",
|
|
25
|
+
"extensions.countries_any",
|
|
26
|
+
]);
|
|
27
|
+
/**
|
|
28
|
+
* Error thrown when predicate evaluation fails
|
|
29
|
+
*/
|
|
30
|
+
export class PredicateEvaluationError extends Error {
|
|
31
|
+
field;
|
|
32
|
+
constructor(message, field) {
|
|
33
|
+
super(message);
|
|
34
|
+
this.field = field;
|
|
35
|
+
this.name = "PredicateEvaluationError";
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Safely get nested value from context object
|
|
40
|
+
*/
|
|
41
|
+
function getFieldValue(context, field) {
|
|
42
|
+
// Fast-path for derived itinerary regions to avoid whitelist error and to compute when missing
|
|
43
|
+
if (field === "itinerary.items.region") {
|
|
44
|
+
try {
|
|
45
|
+
const items = context?.itinerary?.items || {};
|
|
46
|
+
const direct = items?.region;
|
|
47
|
+
if (Array.isArray(direct) && direct.length > 0)
|
|
48
|
+
return direct;
|
|
49
|
+
const byItems = Array.isArray(items?.country) ? items.country : [];
|
|
50
|
+
if (byItems.length > 0)
|
|
51
|
+
return computeRegionsFromCountries(byItems);
|
|
52
|
+
const any = Array.isArray(context?.itinerary?.countries_any)
|
|
53
|
+
? context.itinerary.countries_any
|
|
54
|
+
: [];
|
|
55
|
+
if (any.length > 0)
|
|
56
|
+
return computeRegionsFromCountries(any);
|
|
57
|
+
return [];
|
|
58
|
+
}
|
|
59
|
+
catch {
|
|
60
|
+
return [];
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (!ALLOWED_FIELDS.has(field) && !field.startsWith("input.")) {
|
|
64
|
+
throw new PredicateEvaluationError(`Field "${field}" is not in the allowed whitelist`, field);
|
|
65
|
+
}
|
|
66
|
+
const parts = field.split(".");
|
|
67
|
+
let value = context;
|
|
68
|
+
for (const part of parts) {
|
|
69
|
+
if (value === null || value === undefined) {
|
|
70
|
+
return undefined;
|
|
71
|
+
}
|
|
72
|
+
// Prevent prototype pollution
|
|
73
|
+
if (part === "__proto__" || part === "constructor" || part === "prototype") {
|
|
74
|
+
throw new PredicateEvaluationError(`Unsafe field access attempted: ${field}`, field);
|
|
75
|
+
}
|
|
76
|
+
value = value[part];
|
|
77
|
+
}
|
|
78
|
+
return value;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Coerce value to boolean for comparison
|
|
82
|
+
*/
|
|
83
|
+
function toBoolean(value) {
|
|
84
|
+
if (typeof value === "boolean")
|
|
85
|
+
return value;
|
|
86
|
+
if (typeof value === "string") {
|
|
87
|
+
const lower = value.toLowerCase();
|
|
88
|
+
if (lower === "true" || lower === "1")
|
|
89
|
+
return true;
|
|
90
|
+
if (lower === "false" || lower === "0")
|
|
91
|
+
return false;
|
|
92
|
+
}
|
|
93
|
+
if (typeof value === "number")
|
|
94
|
+
return value !== 0;
|
|
95
|
+
return Boolean(value);
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Coerce value to number for comparison
|
|
99
|
+
*/
|
|
100
|
+
function toNumber(value) {
|
|
101
|
+
if (typeof value === "number")
|
|
102
|
+
return value;
|
|
103
|
+
if (typeof value === "string") {
|
|
104
|
+
const num = parseFloat(value);
|
|
105
|
+
return isNaN(num) ? null : num;
|
|
106
|
+
}
|
|
107
|
+
if (typeof value === "boolean")
|
|
108
|
+
return value ? 1 : 0;
|
|
109
|
+
return null;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Check if value is an array
|
|
113
|
+
*/
|
|
114
|
+
function isArray(value) {
|
|
115
|
+
return Array.isArray(value);
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Normalize value for comparison (case-insensitive string comparison)
|
|
119
|
+
*/
|
|
120
|
+
function normalizeForComparison(value) {
|
|
121
|
+
if (typeof value === "string") {
|
|
122
|
+
return value.trim().toLowerCase();
|
|
123
|
+
}
|
|
124
|
+
return value;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Evaluate a leaf condition
|
|
128
|
+
*/
|
|
129
|
+
function evaluateLeafCondition(condition, context) {
|
|
130
|
+
const { op, value } = condition;
|
|
131
|
+
switch (op) {
|
|
132
|
+
case "exists": {
|
|
133
|
+
const fieldValue = getFieldValue(context, condition.field);
|
|
134
|
+
return fieldValue !== null && fieldValue !== undefined && fieldValue !== "";
|
|
135
|
+
}
|
|
136
|
+
case "not_exists": {
|
|
137
|
+
const fieldValue = getFieldValue(context, condition.field);
|
|
138
|
+
return fieldValue === null || fieldValue === undefined || fieldValue === "";
|
|
139
|
+
}
|
|
140
|
+
case "equals": {
|
|
141
|
+
// Special handling: when comparing a region field, "equals" means ALL countries are in that region
|
|
142
|
+
if (condition.field === "itinerary.items.region") {
|
|
143
|
+
const countries = context?.itinerary?.items?.country ?? context?.itinerary?.countries_any;
|
|
144
|
+
if (Array.isArray(countries) && typeof value === "string" && value.trim() !== "") {
|
|
145
|
+
const region = String(value).trim().toLowerCase();
|
|
146
|
+
if (countries.length === 0)
|
|
147
|
+
return false;
|
|
148
|
+
return countries.every((c) => {
|
|
149
|
+
const regions = getCountryRegions(String(c || ""));
|
|
150
|
+
return regions.map((r) => String(r).toLowerCase()).includes(region);
|
|
151
|
+
});
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
// Special handling: when comparing country list, treat "equals" as array inclusion check
|
|
155
|
+
if (condition.field === "itinerary.items.country") {
|
|
156
|
+
const countries = context?.itinerary?.items?.country ?? context?.itinerary?.countries_any;
|
|
157
|
+
if (Array.isArray(countries) && typeof value === "string") {
|
|
158
|
+
const code = String(value).trim().toUpperCase();
|
|
159
|
+
if (!code)
|
|
160
|
+
return false;
|
|
161
|
+
return countries.some((c) => String(c || "")
|
|
162
|
+
.trim()
|
|
163
|
+
.toUpperCase() === code);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
// Fallback to default: compare scalar field value
|
|
167
|
+
const fieldValue = getFieldValue(context, condition.field);
|
|
168
|
+
const normalizedField = normalizeForComparison(fieldValue);
|
|
169
|
+
const normalizedValue = normalizeForComparison(value);
|
|
170
|
+
return normalizedField === normalizedValue;
|
|
171
|
+
}
|
|
172
|
+
case "not_equals": {
|
|
173
|
+
// Special handling: when comparing a region field, "not_equals" means ALL countries are NOT in that region
|
|
174
|
+
if (condition.field === "itinerary.items.region") {
|
|
175
|
+
const countries = context?.itinerary?.items?.country ?? context?.itinerary?.countries_any;
|
|
176
|
+
if (Array.isArray(countries) && typeof value === "string" && value.trim() !== "") {
|
|
177
|
+
const region = String(value).trim().toLowerCase();
|
|
178
|
+
if (countries.length === 0)
|
|
179
|
+
return false;
|
|
180
|
+
return countries.every((c) => {
|
|
181
|
+
const regions = getCountryRegions(String(c || ""));
|
|
182
|
+
return !regions.map((r) => String(r).toLowerCase()).includes(region);
|
|
183
|
+
});
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
// Special handling: for country list, treat not_equals as array not containing value
|
|
187
|
+
if (condition.field === "itinerary.items.country") {
|
|
188
|
+
const countries = context?.itinerary?.items?.country ?? context?.itinerary?.countries_any;
|
|
189
|
+
if (Array.isArray(countries) && typeof value === "string") {
|
|
190
|
+
const code = String(value).trim().toUpperCase();
|
|
191
|
+
if (!code)
|
|
192
|
+
return true;
|
|
193
|
+
return !countries.some((c) => String(c || "")
|
|
194
|
+
.trim()
|
|
195
|
+
.toUpperCase() === code);
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
const fieldValue = getFieldValue(context, condition.field);
|
|
199
|
+
const normalizedField = normalizeForComparison(fieldValue);
|
|
200
|
+
const normalizedValue = normalizeForComparison(value);
|
|
201
|
+
return normalizedField !== normalizedValue;
|
|
202
|
+
}
|
|
203
|
+
case "in": {
|
|
204
|
+
// Two modes:
|
|
205
|
+
// 1. Field value is scalar, check if it's in the provided array
|
|
206
|
+
// 2. Field value is array, check if it contains the provided scalar
|
|
207
|
+
const fieldValue = getFieldValue(context, condition.field);
|
|
208
|
+
if (isArray(value)) {
|
|
209
|
+
// Mode 1: scalar field in array value
|
|
210
|
+
const normalized = normalizeForComparison(fieldValue);
|
|
211
|
+
return value.some((v) => normalizeForComparison(v) === normalized);
|
|
212
|
+
}
|
|
213
|
+
else if (isArray(fieldValue)) {
|
|
214
|
+
// Mode 2: array field contains scalar value
|
|
215
|
+
const normalized = normalizeForComparison(value);
|
|
216
|
+
return fieldValue.some((v) => normalizeForComparison(v) === normalized);
|
|
217
|
+
}
|
|
218
|
+
return false;
|
|
219
|
+
}
|
|
220
|
+
case "contains": {
|
|
221
|
+
// For array fields, check if array contains the scalar value
|
|
222
|
+
const fieldValue = getFieldValue(context, condition.field);
|
|
223
|
+
if (isArray(fieldValue)) {
|
|
224
|
+
const normalized = normalizeForComparison(value);
|
|
225
|
+
return fieldValue.some((v) => normalizeForComparison(v) === normalized);
|
|
226
|
+
}
|
|
227
|
+
// For string fields, check substring
|
|
228
|
+
if (typeof fieldValue === "string" &&
|
|
229
|
+
(typeof value === "string" || typeof value === "number")) {
|
|
230
|
+
return fieldValue.toLowerCase().includes(String(value).toLowerCase());
|
|
231
|
+
}
|
|
232
|
+
return false;
|
|
233
|
+
}
|
|
234
|
+
case "not_contains": {
|
|
235
|
+
// Opposite of contains
|
|
236
|
+
const fieldValue = getFieldValue(context, condition.field);
|
|
237
|
+
if (isArray(fieldValue)) {
|
|
238
|
+
const normalized = normalizeForComparison(value);
|
|
239
|
+
return !fieldValue.some((v) => normalizeForComparison(v) === normalized);
|
|
240
|
+
}
|
|
241
|
+
if (typeof fieldValue === "string" &&
|
|
242
|
+
(typeof value === "string" || typeof value === "number")) {
|
|
243
|
+
return !fieldValue.toLowerCase().includes(String(value).toLowerCase());
|
|
244
|
+
}
|
|
245
|
+
// If incompatible types, treat as not containing
|
|
246
|
+
return true;
|
|
247
|
+
}
|
|
248
|
+
default:
|
|
249
|
+
throw new PredicateEvaluationError(`Unknown operator: ${op}`, condition.field);
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Evaluate a predicate expression
|
|
254
|
+
*
|
|
255
|
+
* @param predicate - The predicate to evaluate
|
|
256
|
+
* @param context - The evaluation context
|
|
257
|
+
* @returns boolean result
|
|
258
|
+
*/
|
|
259
|
+
export function evaluatePredicate(predicate, context) {
|
|
260
|
+
// Handle AND (all) group
|
|
261
|
+
if ("all" in predicate) {
|
|
262
|
+
if (!Array.isArray(predicate.all)) {
|
|
263
|
+
throw new PredicateEvaluationError("'all' must be an array");
|
|
264
|
+
}
|
|
265
|
+
// Special combine logic: region == X + explicit country contains exceptions
|
|
266
|
+
try {
|
|
267
|
+
const group = predicate.all;
|
|
268
|
+
const regionEqIndex = group.findIndex((p) => p &&
|
|
269
|
+
typeof p === "object" &&
|
|
270
|
+
"field" in p &&
|
|
271
|
+
"op" in p &&
|
|
272
|
+
p.field === "itinerary.items.region" &&
|
|
273
|
+
p.op === "equals");
|
|
274
|
+
if (regionEqIndex >= 0) {
|
|
275
|
+
const regionValue = String((group[regionEqIndex])?.value || "")
|
|
276
|
+
.trim()
|
|
277
|
+
.toLowerCase();
|
|
278
|
+
const countryContainsIndices = [];
|
|
279
|
+
const allowedCountries = new Set();
|
|
280
|
+
for (let i = 0; i < group.length; i++) {
|
|
281
|
+
const p = group[i];
|
|
282
|
+
if (p &&
|
|
283
|
+
typeof p === "object" &&
|
|
284
|
+
"field" in p &&
|
|
285
|
+
"op" in p &&
|
|
286
|
+
p.field === "itinerary.items.country" &&
|
|
287
|
+
(p.op === "contains" || p.op === "equals")) {
|
|
288
|
+
const v = (p).value;
|
|
289
|
+
if (typeof v === "string" && v.trim().length === 2) {
|
|
290
|
+
allowedCountries.add(v.trim().toUpperCase());
|
|
291
|
+
countryContainsIndices.push(i);
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
if (regionValue) {
|
|
296
|
+
const items = context?.itinerary?.items || {};
|
|
297
|
+
const countries = Array.isArray(items?.country)
|
|
298
|
+
? items.country
|
|
299
|
+
: Array.isArray(context?.itinerary?.countries_any)
|
|
300
|
+
? context.itinerary.countries_any
|
|
301
|
+
: [];
|
|
302
|
+
const allRegions = computeRegionsFromCountries(countries);
|
|
303
|
+
const pass = countries.every((c) => {
|
|
304
|
+
const code = String(c || "")
|
|
305
|
+
.trim()
|
|
306
|
+
.toUpperCase();
|
|
307
|
+
if (allowedCountries.has(code))
|
|
308
|
+
return true;
|
|
309
|
+
const regs = getCountryRegions(code).map((r) => String(r).toLowerCase());
|
|
310
|
+
return regs.includes(regionValue);
|
|
311
|
+
});
|
|
312
|
+
if (!pass)
|
|
313
|
+
return false;
|
|
314
|
+
// Evaluate the rest of predicates excluding the combined ones
|
|
315
|
+
for (let i = 0; i < group.length; i++) {
|
|
316
|
+
if (i === regionEqIndex)
|
|
317
|
+
continue;
|
|
318
|
+
if (countryContainsIndices.includes(i))
|
|
319
|
+
continue;
|
|
320
|
+
if (!evaluatePredicate(group[i], context))
|
|
321
|
+
return false;
|
|
322
|
+
}
|
|
323
|
+
return true;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
catch (e) {
|
|
328
|
+
// Fall through to default behavior on any error
|
|
329
|
+
}
|
|
330
|
+
return predicate.all.every((p) => evaluatePredicate(p, context));
|
|
331
|
+
}
|
|
332
|
+
// Handle OR (any) group
|
|
333
|
+
if ("any" in predicate) {
|
|
334
|
+
if (!Array.isArray(predicate.any)) {
|
|
335
|
+
throw new PredicateEvaluationError("'any' must be an array");
|
|
336
|
+
}
|
|
337
|
+
return predicate.any.some((p) => evaluatePredicate(p, context));
|
|
338
|
+
}
|
|
339
|
+
// Handle leaf condition
|
|
340
|
+
if ("field" in predicate && "op" in predicate) {
|
|
341
|
+
return evaluateLeafCondition(predicate, context);
|
|
342
|
+
}
|
|
343
|
+
throw new PredicateEvaluationError("Invalid predicate structure: must have 'all', 'any', or 'field' and 'op'");
|
|
344
|
+
}
|
|
345
|
+
/**
|
|
346
|
+
* Validate a predicate structure without evaluating it
|
|
347
|
+
* Useful for configuration validation
|
|
348
|
+
*
|
|
349
|
+
* @param predicate - The predicate to validate
|
|
350
|
+
* @returns true if valid, throws PredicateEvaluationError if invalid
|
|
351
|
+
*/
|
|
352
|
+
export function validatePredicate(predicate) {
|
|
353
|
+
// Handle AND (all) group
|
|
354
|
+
if ("all" in predicate) {
|
|
355
|
+
if (!Array.isArray(predicate.all)) {
|
|
356
|
+
throw new PredicateEvaluationError("'all' must be an array");
|
|
357
|
+
}
|
|
358
|
+
predicate.all.forEach((p) => validatePredicate(p));
|
|
359
|
+
return true;
|
|
360
|
+
}
|
|
361
|
+
// Handle OR (any) group
|
|
362
|
+
if ("any" in predicate) {
|
|
363
|
+
if (!Array.isArray(predicate.any)) {
|
|
364
|
+
throw new PredicateEvaluationError("'any' must be an array");
|
|
365
|
+
}
|
|
366
|
+
predicate.any.forEach((p) => validatePredicate(p));
|
|
367
|
+
return true;
|
|
368
|
+
}
|
|
369
|
+
// Handle leaf condition
|
|
370
|
+
if ("field" in predicate && "op" in predicate) {
|
|
371
|
+
const { field, op } = predicate;
|
|
372
|
+
if (!ALLOWED_FIELDS.has(field) && !field.startsWith("input.")) {
|
|
373
|
+
throw new PredicateEvaluationError(`Field "${field}" is not in the allowed whitelist`, field);
|
|
374
|
+
}
|
|
375
|
+
const validOps = ["equals", "not_equals", "in", "contains", "exists", "not_exists"];
|
|
376
|
+
if (!validOps.includes(op)) {
|
|
377
|
+
throw new PredicateEvaluationError(`Unknown operator: ${op}`, field);
|
|
378
|
+
}
|
|
379
|
+
return true;
|
|
380
|
+
}
|
|
381
|
+
throw new PredicateEvaluationError("Invalid predicate structure: must have 'all', 'any', or 'field' and 'op'");
|
|
382
|
+
}
|
|
383
|
+
/**
|
|
384
|
+
* Safe evaluation that catches errors and returns false
|
|
385
|
+
* Useful for non-critical conditional logic
|
|
386
|
+
*/
|
|
387
|
+
export function safeEvaluatePredicate(predicate, context) {
|
|
388
|
+
try {
|
|
389
|
+
return evaluatePredicate(predicate, context);
|
|
390
|
+
}
|
|
391
|
+
catch (error) {
|
|
392
|
+
console.error("Predicate evaluation error:", error);
|
|
393
|
+
return false;
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
//# sourceMappingURL=conditions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"conditions.js","sourceRoot":"","sources":["../src/conditions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"countries.d.ts","sourceRoot":"","sources":["../src/countries.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,SAAS;;;KAyPrB,CAAA"}
|