@gnwebsoft/ui 4.0.18 → 4.0.20
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/dist/chunk-36JPY5JK.js +2399 -0
- package/dist/{chunk-ML5UQCRH.js → chunk-443ILX4Y.js} +3 -3
- package/dist/chunk-HDL5E7XD.js +523 -0
- package/dist/{chunk-3CHF3PN3.cjs → chunk-OOYORGC6.cjs} +3 -3
- package/dist/{chunk-Y3QTSDLJ.cjs → chunk-QYHJIPSZ.cjs} +1 -1
- package/dist/chunk-UZ2KNGOF.cjs +523 -0
- package/dist/{chunk-ANM72IBT.cjs → chunk-WLWENVDE.cjs} +19 -9
- package/dist/core/index.cjs +2 -2
- package/dist/core/index.js +1 -1
- package/dist/hooks/index.cjs +4 -5
- package/dist/hooks/index.js +1 -2
- package/dist/index.cjs +6 -7
- package/dist/index.js +4 -5
- package/dist/types/AsyncMultiSelectPayload.d.ts +5 -0
- package/dist/types/AsyncMultiSelectPayload.d.ts.map +1 -0
- package/dist/types/index.d.ts +1 -1
- package/dist/utils/index.cjs +2 -2
- package/dist/utils/index.js +1 -1
- package/dist/utils/schemaTools.d.ts +133 -6
- package/dist/utils/schemaTools.d.ts.map +1 -1
- package/dist/wrappers/AsyncMultiSelect/types.d.ts +2 -2
- package/dist/wrappers/CheckboxGroup/CheckboxGroup.d.ts +3 -1
- package/dist/wrappers/CheckboxGroup/CheckboxGroup.d.ts.map +1 -1
- package/dist/wrappers/NumberFieldElement/NumberFieldElement.d.ts +3 -2
- package/dist/wrappers/NumberFieldElement/NumberFieldElement.d.ts.map +1 -1
- package/dist/wrappers/index.cjs +3 -3
- package/dist/wrappers/index.js +2 -2
- package/package.json +1 -1
- package/dist/chunk-6PMJWQ4R.cjs +0 -239
- package/dist/chunk-LGGBLZJM.js +0 -239
- package/dist/chunk-MVPLBJRK.cjs +0 -1
- package/dist/chunk-OJF67RNM.js +0 -1
- package/dist/chunk-YTUT34X2.js +0 -2389
- package/dist/types/AsyncSelectMultiPayload.d.ts +0 -5
- package/dist/types/AsyncSelectMultiPayload.d.ts.map +0 -1
- /package/dist/{chunk-GVWCGJ3F.js → chunk-PW777IOX.js} +0 -0
|
@@ -0,0 +1,523 @@
|
|
|
1
|
+
"use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }// src/utils/flattenObjectKeys.ts
|
|
2
|
+
var isNested = (obj) => typeof obj === "object" && obj !== null && !Array.isArray(obj);
|
|
3
|
+
var isArray = (obj) => Array.isArray(obj);
|
|
4
|
+
var flattenObjectKeys = (obj, prefix = "") => {
|
|
5
|
+
if (!isNested(obj)) {
|
|
6
|
+
return {
|
|
7
|
+
[prefix]: obj
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
return Object.keys(obj).reduce((acc, key) => {
|
|
11
|
+
const currentPrefix = prefix.length ? `${prefix}.` : "";
|
|
12
|
+
if (isNested(obj[key]) && Object.keys(obj[key]).length) {
|
|
13
|
+
if (isArray(obj[key]) && obj[key].length) {
|
|
14
|
+
obj[key].forEach((item, index) => {
|
|
15
|
+
Object.assign(
|
|
16
|
+
acc,
|
|
17
|
+
flattenObjectKeys(item, `${currentPrefix + key}.${index}`)
|
|
18
|
+
);
|
|
19
|
+
});
|
|
20
|
+
} else {
|
|
21
|
+
Object.assign(acc, flattenObjectKeys(obj[key], currentPrefix + key));
|
|
22
|
+
}
|
|
23
|
+
acc[currentPrefix + key] = obj[key];
|
|
24
|
+
} else {
|
|
25
|
+
acc[currentPrefix + key] = obj[key];
|
|
26
|
+
}
|
|
27
|
+
return acc;
|
|
28
|
+
}, {});
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
// src/utils/getTimezone.ts
|
|
32
|
+
function getTimezone(adapter, value) {
|
|
33
|
+
return value == null || !adapter.utils.isValid(value) ? null : adapter.utils.getTimezone(value);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// src/utils/handleServerErrors.ts
|
|
37
|
+
var handleServerErrors = function handleServerErrors2(args) {
|
|
38
|
+
const { errors, setError } = args;
|
|
39
|
+
for (const key in errors) {
|
|
40
|
+
const isKeyInVariables = Object.keys(flattenObjectKeys(errors)).includes(
|
|
41
|
+
key
|
|
42
|
+
);
|
|
43
|
+
if (!isKeyInVariables) {
|
|
44
|
+
continue;
|
|
45
|
+
}
|
|
46
|
+
const fieldError = errors[key];
|
|
47
|
+
let errorMessage = "";
|
|
48
|
+
if (Array.isArray(fieldError)) {
|
|
49
|
+
errorMessage = fieldError.join(" ");
|
|
50
|
+
}
|
|
51
|
+
if (typeof fieldError === "string") {
|
|
52
|
+
errorMessage = fieldError;
|
|
53
|
+
}
|
|
54
|
+
if (typeof fieldError === "boolean" && fieldError) {
|
|
55
|
+
errorMessage = "Field is not valid.";
|
|
56
|
+
}
|
|
57
|
+
setError(key, {
|
|
58
|
+
message: errorMessage
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
};
|
|
62
|
+
|
|
63
|
+
// src/utils/propertyExists.ts
|
|
64
|
+
function propertyExists(obj, prop) {
|
|
65
|
+
return typeof obj === "object" && obj !== null && Object.prototype.hasOwnProperty.call(obj, prop);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// src/utils/removeLeadingTrailingSlashes.ts
|
|
69
|
+
var removeLeadingTrailingSlashes = (route) => {
|
|
70
|
+
return route.replace(/^\/|\/$/g, "");
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
// src/utils/schemaTools.ts
|
|
74
|
+
var _dayjs = require('dayjs'); var _dayjs2 = _interopRequireDefault(_dayjs);
|
|
75
|
+
var _zod = require('zod');
|
|
76
|
+
function isValidLuhn(value) {
|
|
77
|
+
if (!value || value.trim() === "") {
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
const number = value.replace(/[\s-]/g, "");
|
|
81
|
+
if (!/^\d+$/.test(number)) {
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
if (number.length < 13 || number.length > 19) {
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
let sum = 0;
|
|
88
|
+
let alternate = false;
|
|
89
|
+
for (let i = number.length - 1; i >= 0; i--) {
|
|
90
|
+
let digit = parseInt(number.charAt(i), 10);
|
|
91
|
+
if (alternate) {
|
|
92
|
+
digit *= 2;
|
|
93
|
+
if (digit > 9) {
|
|
94
|
+
digit -= 9;
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
sum += digit;
|
|
98
|
+
alternate = !alternate;
|
|
99
|
+
}
|
|
100
|
+
return sum % 10 === 0;
|
|
101
|
+
}
|
|
102
|
+
var schemaTools = {
|
|
103
|
+
// Date validations
|
|
104
|
+
date: ({ message } = {}) => _zod.z.coerce.string().transform((c) => c === "null" || c === "undefined" ? null : c).refine((c) => !!c, { message: message || "Date is required" }).refine((c) => c ? _dayjs2.default.call(void 0, c).isValid() : true, {
|
|
105
|
+
message: message || "Invalid date"
|
|
106
|
+
}),
|
|
107
|
+
nullableDate: ({ message } = {}) => _zod.z.coerce.string().transform((c) => c === "null" ? null : c).transform((c) => c === "undefined" ? null : c).refine((c) => !c && c !== null ? _dayjs2.default.call(void 0, c).isValid() : true, {
|
|
108
|
+
message: message || "Invalid date"
|
|
109
|
+
}),
|
|
110
|
+
pastDate: ({ message } = {}) => _zod.z.coerce.date().refine((date) => date < /* @__PURE__ */ new Date(), {
|
|
111
|
+
message: message || "Must be a past date"
|
|
112
|
+
}),
|
|
113
|
+
futureDate: ({ message } = {}) => _zod.z.coerce.date().refine((date) => date > /* @__PURE__ */ new Date(), {
|
|
114
|
+
message: message || "Must be a future date"
|
|
115
|
+
}),
|
|
116
|
+
todayOrFutureDate: ({ message } = {}) => _zod.z.coerce.date().refine(
|
|
117
|
+
(date) => {
|
|
118
|
+
const today = /* @__PURE__ */ new Date();
|
|
119
|
+
today.setHours(0, 0, 0, 0);
|
|
120
|
+
return date.setHours(0, 0, 0, 0) >= today.getTime();
|
|
121
|
+
},
|
|
122
|
+
{ message: message || "Must be today or a future date" }
|
|
123
|
+
),
|
|
124
|
+
todayOrPastDate: ({ message } = {}) => _zod.z.coerce.date().refine(
|
|
125
|
+
(date) => {
|
|
126
|
+
const today = /* @__PURE__ */ new Date();
|
|
127
|
+
today.setHours(0, 0, 0, 0);
|
|
128
|
+
return date.setHours(0, 0, 0, 0) <= today.getTime();
|
|
129
|
+
},
|
|
130
|
+
{ message: message || "Must be today or a past date" }
|
|
131
|
+
),
|
|
132
|
+
adult: ({ message } = {}) => _zod.z.coerce.date().refine(
|
|
133
|
+
(date) => {
|
|
134
|
+
const eighteenYearsAgo = /* @__PURE__ */ new Date();
|
|
135
|
+
eighteenYearsAgo.setFullYear(eighteenYearsAgo.getFullYear() - 18);
|
|
136
|
+
eighteenYearsAgo.setHours(0, 0, 0, 0);
|
|
137
|
+
const dob = new Date(date);
|
|
138
|
+
dob.setHours(0, 0, 0, 0);
|
|
139
|
+
return dob <= eighteenYearsAgo;
|
|
140
|
+
},
|
|
141
|
+
{ message: message || "Must be at least 18 years old" }
|
|
142
|
+
),
|
|
143
|
+
minimumAge: ({
|
|
144
|
+
message,
|
|
145
|
+
minimumAge
|
|
146
|
+
} = {}) => _zod.z.coerce.date().refine(
|
|
147
|
+
(date) => {
|
|
148
|
+
if (typeof minimumAge !== "number") return false;
|
|
149
|
+
const minYearsAgo = /* @__PURE__ */ new Date();
|
|
150
|
+
minYearsAgo.setFullYear(minYearsAgo.getFullYear() - minimumAge);
|
|
151
|
+
minYearsAgo.setHours(0, 0, 0, 0);
|
|
152
|
+
const dob = new Date(date);
|
|
153
|
+
dob.setHours(0, 0, 0, 0);
|
|
154
|
+
return dob <= minYearsAgo;
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
message: message || `Must be at least ${_nullishCoalesce(minimumAge, () => ( "the required"))} years old`
|
|
158
|
+
}
|
|
159
|
+
),
|
|
160
|
+
withinDays: ({ message, days } = {}) => _zod.z.coerce.date().refine(
|
|
161
|
+
(date) => {
|
|
162
|
+
const today = /* @__PURE__ */ new Date();
|
|
163
|
+
today.setHours(0, 0, 0, 0);
|
|
164
|
+
const inputDate = new Date(date);
|
|
165
|
+
inputDate.setHours(0, 0, 0, 0);
|
|
166
|
+
const diffTime = Math.abs(inputDate.getTime() - today.getTime());
|
|
167
|
+
const diffDays = Math.ceil(diffTime / (1e3 * 60 * 60 * 24));
|
|
168
|
+
return typeof days === "number" ? diffDays <= days : false;
|
|
169
|
+
},
|
|
170
|
+
{ message: message || `Must be within ${days} days of today` }
|
|
171
|
+
),
|
|
172
|
+
weekday: ({ message } = {}) => _zod.z.coerce.date().refine(
|
|
173
|
+
(date) => {
|
|
174
|
+
const day = date.getDay();
|
|
175
|
+
return day !== 0 && day !== 6;
|
|
176
|
+
},
|
|
177
|
+
{ message: message || "Must be a weekday" }
|
|
178
|
+
),
|
|
179
|
+
dateRange: ({ message } = {}) => _zod.z.object({
|
|
180
|
+
start: _zod.z.coerce.date(),
|
|
181
|
+
end: _zod.z.coerce.date()
|
|
182
|
+
}).refine((data) => data.start <= data.end, {
|
|
183
|
+
message: message || "Start date must be before or equal to end date"
|
|
184
|
+
}),
|
|
185
|
+
// String validations
|
|
186
|
+
requiredString: ({
|
|
187
|
+
message,
|
|
188
|
+
min,
|
|
189
|
+
max
|
|
190
|
+
} = {}) => _zod.z.string().trim().min(
|
|
191
|
+
min || 1,
|
|
192
|
+
message || `String must be at least ${min || 1} characters`
|
|
193
|
+
).max(
|
|
194
|
+
max || 255,
|
|
195
|
+
message || `String must be at most ${max || 255} characters`
|
|
196
|
+
),
|
|
197
|
+
email: ({ message } = {}) => _zod.z.string().email(message || "Invalid email address").max(254, "Email must be at most 254 characters"),
|
|
198
|
+
url: ({ message } = {}) => _zod.z.string().url(message || "Invalid URL format"),
|
|
199
|
+
phone: ({ message } = {}) => _zod.z.string().regex(/^[+]?[1-9][\d]{0,15}$/, message || "Invalid phone number format"),
|
|
200
|
+
creditCard: ({ message } = {}) => _zod.z.string().refine((value) => isValidLuhn(value), {
|
|
201
|
+
message: message || "Must be a valid credit card number"
|
|
202
|
+
}),
|
|
203
|
+
indianMobile: ({ message } = {}) => _zod.z.string().regex(/^[6-9]\d{9}$/, message || "Must be a valid Indian mobile number"),
|
|
204
|
+
internationalPhone: ({ message } = {}) => _zod.z.string().regex(
|
|
205
|
+
/^\+?[1-9]\d{6,14}$/,
|
|
206
|
+
message || "Must be a valid international phone number"
|
|
207
|
+
),
|
|
208
|
+
alphabetic: ({ message } = {}) => _zod.z.string().regex(
|
|
209
|
+
/^[A-Za-z, ]+$/,
|
|
210
|
+
message || "Must contain only letters, commas, and spaces"
|
|
211
|
+
),
|
|
212
|
+
guid: ({ message } = {}) => _zod.z.string().uuid(message || "Must be a valid GUID"),
|
|
213
|
+
nonEmptyOrWhitespace: ({ message } = {}) => _zod.z.string().trim().min(1, message || "Must not be empty or whitespace"),
|
|
214
|
+
username: ({ message } = {}) => _zod.z.string().regex(
|
|
215
|
+
/^[a-zA-Z][a-zA-Z0-9_]{2,29}$/,
|
|
216
|
+
message || "Must be 3-30 characters, start with a letter, and contain only letters, numbers, and underscores"
|
|
217
|
+
),
|
|
218
|
+
exactLength: ({
|
|
219
|
+
message,
|
|
220
|
+
length
|
|
221
|
+
} = {}) => {
|
|
222
|
+
if (typeof length !== "number") {
|
|
223
|
+
throw new Error("Length must be provided for exactLength validator");
|
|
224
|
+
}
|
|
225
|
+
return _zod.z.string().length(length, message || `Must be exactly ${length} characters`);
|
|
226
|
+
},
|
|
227
|
+
minWords: ({
|
|
228
|
+
message,
|
|
229
|
+
minWords
|
|
230
|
+
} = {}) => _zod.z.string().refine(
|
|
231
|
+
(value) => {
|
|
232
|
+
if (!value) return true;
|
|
233
|
+
const words = value.split(/[\s\t\n\r]+/).filter(Boolean);
|
|
234
|
+
return words.length >= (typeof minWords === "number" ? minWords : 0);
|
|
235
|
+
},
|
|
236
|
+
{ message: message || `Must have at least ${minWords} word(s)` }
|
|
237
|
+
),
|
|
238
|
+
maxWords: ({
|
|
239
|
+
message,
|
|
240
|
+
maxWords
|
|
241
|
+
} = {}) => _zod.z.string().refine(
|
|
242
|
+
(value) => {
|
|
243
|
+
if (!value) return true;
|
|
244
|
+
const words = value.split(/[\s\t\n\r]+/).filter(Boolean);
|
|
245
|
+
return words.length <= (typeof maxWords === "number" ? maxWords : 0);
|
|
246
|
+
},
|
|
247
|
+
{ message: message || `Must have at most ${maxWords} word(s)` }
|
|
248
|
+
),
|
|
249
|
+
strongPassword: ({ message } = {}) => _zod.z.string().regex(
|
|
250
|
+
/^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/,
|
|
251
|
+
message || "Must be at least 8 characters and contain uppercase, lowercase, number, and special character"
|
|
252
|
+
),
|
|
253
|
+
noHtml: ({ message } = {}) => _zod.z.string().refine(
|
|
254
|
+
(value) => !value || !/<[^>]*>/.test(value),
|
|
255
|
+
message || "Must not contain HTML tags"
|
|
256
|
+
),
|
|
257
|
+
noScriptInjection: ({ message } = {}) => _zod.z.string().refine(
|
|
258
|
+
(value) => !value || !/<script|javascript:|on\w+\s*=/i.test(value),
|
|
259
|
+
message || "Contains potentially unsafe content"
|
|
260
|
+
),
|
|
261
|
+
noSqlInjection: ({ message } = {}) => _zod.z.string().refine(
|
|
262
|
+
(value) => !value || !/('|--|;|\b(SELECT|INSERT|UPDATE|DELETE|DROP|UNION|ALTER|CREATE|EXEC|EXECUTE)\b)/i.test(
|
|
263
|
+
value
|
|
264
|
+
),
|
|
265
|
+
message || "Contains potentially unsafe content"
|
|
266
|
+
),
|
|
267
|
+
indianPinCode: ({ message } = {}) => _zod.z.string().regex(/^[1-9][0-9]{5}$/, message || "Must be a valid 6-digit PIN code"),
|
|
268
|
+
usZipCode: ({ message } = {}) => _zod.z.string().regex(/^\d{5}(-\d{4})?$/, message || "Must be a valid US ZIP code"),
|
|
269
|
+
ukPostalCode: ({ message } = {}) => _zod.z.string().regex(
|
|
270
|
+
/^[A-Z]{1,2}[0-9][0-9A-Z]?\s?[0-9][A-Z]{2}$/i,
|
|
271
|
+
message || "Must be a valid UK postal code"
|
|
272
|
+
),
|
|
273
|
+
ipv4: ({ message } = {}) => _zod.z.string().regex(
|
|
274
|
+
/^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/,
|
|
275
|
+
message || "Must be a valid IPv4 address"
|
|
276
|
+
),
|
|
277
|
+
ipv6: ({ message } = {}) => _zod.z.string().regex(
|
|
278
|
+
/^([0-9a-fA-F]{1,4}:){7}[0-9a-fA-F]{1,4}$|^::$|^::1$|^([0-9a-fA-F]{1,4}:){1,7}:$/,
|
|
279
|
+
message || "Must be a valid IPv6 address"
|
|
280
|
+
),
|
|
281
|
+
macAddress: ({ message } = {}) => _zod.z.string().regex(
|
|
282
|
+
/^([0-9A-Fa-f]{2}[:-]){5}([0-9A-Fa-f]{2})$/,
|
|
283
|
+
message || "Must be a valid MAC address"
|
|
284
|
+
),
|
|
285
|
+
allowedFileExtension: ({
|
|
286
|
+
message,
|
|
287
|
+
allowedExtensions
|
|
288
|
+
} = {}) => _zod.z.string().refine(
|
|
289
|
+
(fileName) => {
|
|
290
|
+
if (!fileName) return true;
|
|
291
|
+
const extension = _optionalChain([fileName, 'access', _ => _.split, 'call', _2 => _2("."), 'access', _3 => _3.pop, 'call', _4 => _4(), 'optionalAccess', _5 => _5.toLowerCase, 'call', _6 => _6()]);
|
|
292
|
+
const lowerAllowed = _optionalChain([allowedExtensions, 'optionalAccess', _7 => _7.map, 'call', _8 => _8(
|
|
293
|
+
(ext) => ext.toLowerCase().startsWith(".") ? ext.toLowerCase() : `.${ext.toLowerCase()}`
|
|
294
|
+
)]);
|
|
295
|
+
return extension && _optionalChain([lowerAllowed, 'optionalAccess', _9 => _9.includes, 'call', _10 => _10(`.${extension}`)]);
|
|
296
|
+
},
|
|
297
|
+
{
|
|
298
|
+
message: message || `Must have one of the following extensions: ${_optionalChain([allowedExtensions, 'optionalAccess', _11 => _11.join, 'call', _12 => _12(", ")])}`
|
|
299
|
+
}
|
|
300
|
+
),
|
|
301
|
+
validImageExtension: ({ message } = {}) => schemaTools.allowedFileExtension({
|
|
302
|
+
allowedExtensions: [".jpg", ".jpeg", ".png", ".gif", ".bmp", ".webp"],
|
|
303
|
+
message: message || "Must have a valid image extension (.jpg, .jpeg, .png, .gif, .bmp, .webp)"
|
|
304
|
+
}),
|
|
305
|
+
validDocumentExtension: ({ message } = {}) => schemaTools.allowedFileExtension({
|
|
306
|
+
allowedExtensions: [".pdf", ".doc", ".docx", ".xls", ".xlsx", ".txt"],
|
|
307
|
+
message: message || "Must have a valid document extension (.pdf, .doc, .docx, .xls, .xlsx, .txt)"
|
|
308
|
+
}),
|
|
309
|
+
panCard: ({ message } = {}) => _zod.z.string().regex(
|
|
310
|
+
/^[A-Z]{5}[0-9]{4}[A-Z]{1}$/,
|
|
311
|
+
message || "Must be a valid PAN card number"
|
|
312
|
+
),
|
|
313
|
+
aadhaar: ({ message } = {}) => _zod.z.string().regex(
|
|
314
|
+
/^[2-9]{1}[0-9]{11}$/,
|
|
315
|
+
message || "Must be a valid Aadhaar number"
|
|
316
|
+
),
|
|
317
|
+
gstin: ({ message } = {}) => _zod.z.string().regex(
|
|
318
|
+
/^[0-9]{2}[A-Z]{5}[0-9]{4}[A-Z]{1}[1-9A-Z]{1}Z[0-9A-Z]{1}$/,
|
|
319
|
+
message || "Must be a valid GSTIN"
|
|
320
|
+
),
|
|
321
|
+
ifsc: ({ message } = {}) => _zod.z.string().regex(/^[A-Z]{4}0[A-Z0-9]{6}$/, message || "Must be a valid IFSC code"),
|
|
322
|
+
alphanumeric: ({ message } = {}) => _zod.z.string().regex(
|
|
323
|
+
/^[a-zA-Z0-9]+$/,
|
|
324
|
+
message || "Only letters and numbers are allowed"
|
|
325
|
+
),
|
|
326
|
+
slug: ({ message } = {}) => _zod.z.string().regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/, message || "Invalid slug format"),
|
|
327
|
+
// Number validations
|
|
328
|
+
positiveNumber: ({
|
|
329
|
+
message,
|
|
330
|
+
min,
|
|
331
|
+
max
|
|
332
|
+
} = {}) => _zod.z.number().positive(message || "Number must be positive").min(min || 0.01, `Number must be at least ${min || 0.01}`).max(
|
|
333
|
+
max || Number.MAX_SAFE_INTEGER,
|
|
334
|
+
`Number must be at most ${max || Number.MAX_SAFE_INTEGER}`
|
|
335
|
+
),
|
|
336
|
+
maxDecimalPlaces: ({
|
|
337
|
+
message,
|
|
338
|
+
maxPlaces
|
|
339
|
+
} = {}) => _zod.z.number().refine(
|
|
340
|
+
(value) => {
|
|
341
|
+
if (value === null || value === void 0) return true;
|
|
342
|
+
const decimalPart = value.toString().split(".")[1];
|
|
343
|
+
return !decimalPart || decimalPart.length <= (typeof maxPlaces === "number" ? maxPlaces : 0);
|
|
344
|
+
},
|
|
345
|
+
{ message: message || `Must have at most ${maxPlaces} decimal places` }
|
|
346
|
+
),
|
|
347
|
+
currency: ({ message } = {}) => _zod.z.number().min(0, message || "Must be a valid currency amount (positive)").refine(
|
|
348
|
+
(value) => {
|
|
349
|
+
if (value === null || value === void 0) return true;
|
|
350
|
+
const decimalPart = value.toString().split(".")[1];
|
|
351
|
+
return !decimalPart || decimalPart.length <= 2;
|
|
352
|
+
},
|
|
353
|
+
{
|
|
354
|
+
message: message || "Must be a valid currency amount (max 2 decimal places)"
|
|
355
|
+
}
|
|
356
|
+
),
|
|
357
|
+
validAge: ({ message } = {}) => _zod.z.number().int("Must be an integer").min(0, message || "Must be a valid age (between 0 and 150)").max(150, message || "Must be a valid age (between 0 and 150)"),
|
|
358
|
+
nonNegativeNumber: ({
|
|
359
|
+
message,
|
|
360
|
+
max
|
|
361
|
+
} = {}) => _zod.z.number().min(0, message || "Number must be non-negative").max(
|
|
362
|
+
max || Number.MAX_SAFE_INTEGER,
|
|
363
|
+
`Number must be at most ${max || Number.MAX_SAFE_INTEGER}`
|
|
364
|
+
),
|
|
365
|
+
integer: ({
|
|
366
|
+
message,
|
|
367
|
+
min,
|
|
368
|
+
max
|
|
369
|
+
} = {}) => _zod.z.number().int(message || "Must be an integer").min(
|
|
370
|
+
min || Number.MIN_SAFE_INTEGER,
|
|
371
|
+
`Number must be at least ${min || Number.MIN_SAFE_INTEGER}`
|
|
372
|
+
).max(
|
|
373
|
+
max || Number.MAX_SAFE_INTEGER,
|
|
374
|
+
`Number must be at most ${max || Number.MAX_SAFE_INTEGER}`
|
|
375
|
+
),
|
|
376
|
+
percentage: ({ message } = {}) => _zod.z.number().min(0, message || "Percentage must be between 0 and 100").max(100, message || "Percentage must be between 0 and 100"),
|
|
377
|
+
// Array validations
|
|
378
|
+
nonEmptyArray: (schema, { message } = {}) => _zod.z.array(schema).min(1, message || "At least one item is required"),
|
|
379
|
+
uniqueArray: (schema, { message } = {}) => _zod.z.array(schema).refine((items) => new Set(items).size === items.length, {
|
|
380
|
+
message: message || "All items must be unique"
|
|
381
|
+
}),
|
|
382
|
+
noNullArrayItems: (schema, { message } = {}) => _zod.z.array(schema.nullable()).refine((items) => items.every((item) => item !== null), {
|
|
383
|
+
message: message || "Must not contain null items"
|
|
384
|
+
}),
|
|
385
|
+
// Boolean validations
|
|
386
|
+
requiredBoolean: ({ message } = {}) => _zod.z.boolean({
|
|
387
|
+
message: message || "This field is required"
|
|
388
|
+
}),
|
|
389
|
+
// Object validations
|
|
390
|
+
nonEmptyObject: (schema, { message } = {}) => schema.refine((obj) => Object.keys(obj).length > 0, {
|
|
391
|
+
message: message || "Object cannot be empty"
|
|
392
|
+
}),
|
|
393
|
+
// File validations
|
|
394
|
+
requiredFile: ({ message } = {}) => _zod.z.instanceof(File, { message: message || "File is required" }).refine((file) => file.size > 0, {
|
|
395
|
+
message: message || "File cannot be empty"
|
|
396
|
+
}),
|
|
397
|
+
fileSize: ({ maxSize, message }) => _zod.z.instanceof(File).refine((file) => file.size <= maxSize, {
|
|
398
|
+
message: message || `File size must be less than ${Math.round(maxSize / 1024 / 1024)}MB`
|
|
399
|
+
}),
|
|
400
|
+
fileType: ({
|
|
401
|
+
allowedTypes,
|
|
402
|
+
message
|
|
403
|
+
}) => _zod.z.instanceof(File).refine((file) => allowedTypes.includes(file.type), {
|
|
404
|
+
message: message || `File type must be one of: ${allowedTypes.join(", ")}`
|
|
405
|
+
}),
|
|
406
|
+
// Custom validators
|
|
407
|
+
conditional: (condition, trueSchema, falseSchema) => _zod.z.union([trueSchema, falseSchema]).superRefine((data, ctx) => {
|
|
408
|
+
const shouldUseTrue = condition(data);
|
|
409
|
+
const schema = shouldUseTrue ? trueSchema : falseSchema;
|
|
410
|
+
const result = schema.safeParse(data);
|
|
411
|
+
if (!result.success) {
|
|
412
|
+
ctx.addIssue({
|
|
413
|
+
code: _zod.z.ZodIssueCode.custom,
|
|
414
|
+
message: result.error.message
|
|
415
|
+
});
|
|
416
|
+
}
|
|
417
|
+
}),
|
|
418
|
+
transform: {
|
|
419
|
+
toLowerCase: _zod.z.string().transform((val) => val.toLowerCase()),
|
|
420
|
+
toUpperCase: _zod.z.string().transform((val) => val.toUpperCase()),
|
|
421
|
+
trim: _zod.z.string().transform((val) => val.trim()),
|
|
422
|
+
toNumber: _zod.z.string().transform((val) => Number(val)),
|
|
423
|
+
toBoolean: _zod.z.string().transform((val) => val === "true"),
|
|
424
|
+
parseJson: (schema) => _zod.z.string().transform((val, ctx) => {
|
|
425
|
+
try {
|
|
426
|
+
const parsed = JSON.parse(val);
|
|
427
|
+
const result = schema.safeParse(parsed);
|
|
428
|
+
if (result.success) return result.data;
|
|
429
|
+
ctx.addIssue({
|
|
430
|
+
code: _zod.z.ZodIssueCode.custom,
|
|
431
|
+
message: result.error.message
|
|
432
|
+
});
|
|
433
|
+
return _zod.z.NEVER;
|
|
434
|
+
} catch (e) {
|
|
435
|
+
ctx.addIssue({
|
|
436
|
+
code: _zod.z.ZodIssueCode.custom,
|
|
437
|
+
message: "Invalid JSON"
|
|
438
|
+
});
|
|
439
|
+
return _zod.z.NEVER;
|
|
440
|
+
}
|
|
441
|
+
})
|
|
442
|
+
}
|
|
443
|
+
};
|
|
444
|
+
|
|
445
|
+
// src/utils/typeGuards.ts
|
|
446
|
+
function isRecord(value) {
|
|
447
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
448
|
+
}
|
|
449
|
+
function hasProperty(obj, key) {
|
|
450
|
+
return isRecord(obj) && key in obj;
|
|
451
|
+
}
|
|
452
|
+
function isNonEmptyString(value) {
|
|
453
|
+
return typeof value === "string" && value.length > 0;
|
|
454
|
+
}
|
|
455
|
+
function isArray2(value) {
|
|
456
|
+
return Array.isArray(value);
|
|
457
|
+
}
|
|
458
|
+
function isNonEmptyArray(value) {
|
|
459
|
+
return Array.isArray(value) && value.length > 0;
|
|
460
|
+
}
|
|
461
|
+
function isFunction(value) {
|
|
462
|
+
return typeof value === "function";
|
|
463
|
+
}
|
|
464
|
+
function isString(value) {
|
|
465
|
+
return typeof value === "string";
|
|
466
|
+
}
|
|
467
|
+
function isNumber(value) {
|
|
468
|
+
return typeof value === "number" && !isNaN(value);
|
|
469
|
+
}
|
|
470
|
+
function isBoolean(value) {
|
|
471
|
+
return typeof value === "boolean";
|
|
472
|
+
}
|
|
473
|
+
function isNull(value) {
|
|
474
|
+
return value === null;
|
|
475
|
+
}
|
|
476
|
+
function isUndefined(value) {
|
|
477
|
+
return value === void 0;
|
|
478
|
+
}
|
|
479
|
+
function isNullish(value) {
|
|
480
|
+
return value === null || value === void 0;
|
|
481
|
+
}
|
|
482
|
+
function isDefined(value) {
|
|
483
|
+
return value !== null && value !== void 0;
|
|
484
|
+
}
|
|
485
|
+
function isDate(value) {
|
|
486
|
+
return value instanceof Date && !isNaN(value.getTime());
|
|
487
|
+
}
|
|
488
|
+
function isPromise(value) {
|
|
489
|
+
return value instanceof Promise || isRecord(value) && typeof value.then === "function";
|
|
490
|
+
}
|
|
491
|
+
function isError(error) {
|
|
492
|
+
return error instanceof Error;
|
|
493
|
+
}
|
|
494
|
+
function matches(value, validator) {
|
|
495
|
+
return validator(value);
|
|
496
|
+
}
|
|
497
|
+
|
|
498
|
+
|
|
499
|
+
|
|
500
|
+
|
|
501
|
+
|
|
502
|
+
|
|
503
|
+
|
|
504
|
+
|
|
505
|
+
|
|
506
|
+
|
|
507
|
+
|
|
508
|
+
|
|
509
|
+
|
|
510
|
+
|
|
511
|
+
|
|
512
|
+
|
|
513
|
+
|
|
514
|
+
|
|
515
|
+
|
|
516
|
+
|
|
517
|
+
|
|
518
|
+
|
|
519
|
+
|
|
520
|
+
|
|
521
|
+
|
|
522
|
+
exports.flattenObjectKeys = flattenObjectKeys; exports.getTimezone = getTimezone; exports.handleServerErrors = handleServerErrors; exports.propertyExists = propertyExists; exports.removeLeadingTrailingSlashes = removeLeadingTrailingSlashes; exports.schemaTools = schemaTools; exports.isRecord = isRecord; exports.hasProperty = hasProperty; exports.isNonEmptyString = isNonEmptyString; exports.isArray = isArray2; exports.isNonEmptyArray = isNonEmptyArray; exports.isFunction = isFunction; exports.isString = isString; exports.isNumber = isNumber; exports.isBoolean = isBoolean; exports.isNull = isNull; exports.isUndefined = isUndefined; exports.isNullish = isNullish; exports.isDefined = isDefined; exports.isDate = isDate; exports.isPromise = isPromise; exports.isError = isError; exports.matches = matches;
|
|
523
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbImM6XFxVdHRhbVxcUHJvamVjdHNcXEdOV2ViU29mdC5VSVxccGFja2FnZXNcXHVpXFxkaXN0XFxjaHVuay1VWjJLTkdPRi5janMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7QUFDQSxJQUFJLFNBQVMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLE9BQU8sSUFBSSxJQUFJLFNBQVMsR0FBRyxJQUFJLElBQUksS0FBSyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUM7QUFDdEYsSUFBSSxRQUFRLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQztBQUN6QyxJQUFJLGtCQUFrQixFQUFFLENBQUMsR0FBRyxFQUFFLE9BQU8sRUFBRSxFQUFFLEVBQUUsR0FBRztBQUM5QyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQUMsRUFBRTtBQUN0QixJQUFJLE9BQU87QUFDWCxNQUFNLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDaEIsSUFBSSxDQUFDO0FBQ0wsRUFBRTtBQUNGLEVBQUUsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRztBQUMvQyxJQUFJLE1BQU0sY0FBYyxFQUFFLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxFQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsVUFBQTtBQUNBLFlBQUE7QUFDQSxZQUFBO0FBQ0EsVUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxNQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0E7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsSUFBQTtBQUNBLEVBQUE7QUFDQTtBQUNBLEVBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsTUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsTUFBQTtBQUNBLElBQUE7QUFDQSxFQUFBO0FBQ0EsRUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLElBQUE7QUFDQSxJQUFBO0FBQ0EsSUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLFFBQUE7QUFDQSxRQUFBO0FBQ0EsVUFBQTtBQUNBLFVBQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxRQUFBO0FBQ0EsVUFBQTtBQUNBLFVBQUE7QUFDQSxRQUFBO0FBQ0EsUUFBQTtBQUNBLE1BQUE7QUFDQSxJQUFBO0FBQ0EsRUFBQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBQTtBQUNBO0FBQ0E7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQTtBQUNBO0FBQ0EsRUFBQTtBQUNBO0FBQ0E7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQTtBQUNBO0FBQ0EsRUFBQTtBQUNBO0FBQ0E7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQTtBQUNBO0FBQ0EsRUFBQTtBQUNBO0FBQ0E7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQTtBQUNBO0FBQ0EsRUFBQTtBQUNBO0FBQ0E7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBLEVBQUE7QUFDQTtBQUNBO0FBQ0EsRUFBQTtBQUNBO0FBQ0E7QUFDQSxFQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBIiwiZmlsZSI6IkM6XFxVdHRhbVxcUHJvamVjdHNcXEdOV2ViU29mdC5VSVxccGFja2FnZXNcXHVpXFxkaXN0XFxjaHVuay1VWjJLTkdPRi5janMiLCJzb3VyY2VzQ29udGVudCI6W251bGxdfQ==
|