@objectql/core 4.0.1 → 4.0.3

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 (103) hide show
  1. package/.turbo/turbo-build.log +4 -0
  2. package/CHANGELOG.md +32 -0
  3. package/README.md +14 -12
  4. package/dist/app.d.ts +9 -6
  5. package/dist/app.js +151 -29
  6. package/dist/app.js.map +1 -1
  7. package/dist/index.d.ts +6 -9
  8. package/dist/index.js +2 -5
  9. package/dist/index.js.map +1 -1
  10. package/dist/optimizations/CompiledHookManager.d.ts +55 -0
  11. package/dist/optimizations/CompiledHookManager.js +164 -0
  12. package/dist/optimizations/CompiledHookManager.js.map +1 -0
  13. package/dist/optimizations/DependencyGraph.d.ts +82 -0
  14. package/dist/optimizations/DependencyGraph.js +211 -0
  15. package/dist/optimizations/DependencyGraph.js.map +1 -0
  16. package/dist/optimizations/GlobalConnectionPool.d.ts +89 -0
  17. package/dist/optimizations/GlobalConnectionPool.js +193 -0
  18. package/dist/optimizations/GlobalConnectionPool.js.map +1 -0
  19. package/dist/optimizations/LazyMetadataLoader.d.ts +75 -0
  20. package/dist/optimizations/LazyMetadataLoader.js +149 -0
  21. package/dist/optimizations/LazyMetadataLoader.js.map +1 -0
  22. package/dist/optimizations/OptimizedMetadataRegistry.d.ts +26 -0
  23. package/dist/optimizations/OptimizedMetadataRegistry.js +117 -0
  24. package/dist/optimizations/OptimizedMetadataRegistry.js.map +1 -0
  25. package/dist/optimizations/OptimizedValidationEngine.d.ts +73 -0
  26. package/dist/optimizations/OptimizedValidationEngine.js +141 -0
  27. package/dist/optimizations/OptimizedValidationEngine.js.map +1 -0
  28. package/dist/optimizations/QueryCompiler.d.ts +51 -0
  29. package/dist/optimizations/QueryCompiler.js +216 -0
  30. package/dist/optimizations/QueryCompiler.js.map +1 -0
  31. package/dist/optimizations/SQLQueryOptimizer.d.ts +96 -0
  32. package/dist/optimizations/SQLQueryOptimizer.js +265 -0
  33. package/dist/optimizations/SQLQueryOptimizer.js.map +1 -0
  34. package/dist/optimizations/index.d.ts +32 -0
  35. package/dist/optimizations/index.js +44 -0
  36. package/dist/optimizations/index.js.map +1 -0
  37. package/dist/plugin.d.ts +6 -7
  38. package/dist/plugin.js +39 -22
  39. package/dist/plugin.js.map +1 -1
  40. package/dist/query/filter-translator.d.ts +6 -18
  41. package/dist/query/filter-translator.js +6 -103
  42. package/dist/query/filter-translator.js.map +1 -1
  43. package/dist/query/query-analyzer.js +24 -25
  44. package/dist/query/query-analyzer.js.map +1 -1
  45. package/dist/query/query-builder.d.ts +9 -3
  46. package/dist/query/query-builder.js +25 -35
  47. package/dist/query/query-builder.js.map +1 -1
  48. package/dist/query/query-service.d.ts +2 -2
  49. package/dist/query/query-service.js +5 -5
  50. package/dist/query/query-service.js.map +1 -1
  51. package/dist/repository.d.ts +2 -0
  52. package/dist/repository.js +24 -17
  53. package/dist/repository.js.map +1 -1
  54. package/jest.config.js +3 -3
  55. package/package.json +8 -5
  56. package/src/app.ts +173 -47
  57. package/src/index.ts +7 -8
  58. package/src/optimizations/CompiledHookManager.ts +185 -0
  59. package/src/optimizations/DependencyGraph.ts +255 -0
  60. package/src/optimizations/GlobalConnectionPool.ts +251 -0
  61. package/src/optimizations/LazyMetadataLoader.ts +180 -0
  62. package/src/optimizations/OptimizedMetadataRegistry.ts +132 -0
  63. package/src/optimizations/OptimizedValidationEngine.ts +172 -0
  64. package/src/optimizations/QueryCompiler.ts +242 -0
  65. package/src/optimizations/SQLQueryOptimizer.ts +329 -0
  66. package/src/optimizations/index.ts +34 -0
  67. package/src/plugin.ts +51 -28
  68. package/src/query/filter-translator.ts +8 -115
  69. package/src/query/query-analyzer.ts +25 -29
  70. package/src/query/query-builder.ts +26 -43
  71. package/src/query/query-service.ts +6 -6
  72. package/src/repository.ts +35 -22
  73. package/test/__mocks__/@objectstack/runtime.ts +8 -8
  74. package/test/app.test.ts +11 -8
  75. package/test/optimizations.test.ts +440 -0
  76. package/test/plugin-integration.test.ts +30 -19
  77. package/tsconfig.json +4 -6
  78. package/tsconfig.tsbuildinfo +1 -1
  79. package/dist/ai-agent.d.ts +0 -176
  80. package/dist/ai-agent.js +0 -722
  81. package/dist/ai-agent.js.map +0 -1
  82. package/dist/formula-engine.d.ts +0 -102
  83. package/dist/formula-engine.js +0 -433
  84. package/dist/formula-engine.js.map +0 -1
  85. package/dist/formula-plugin.d.ts +0 -52
  86. package/dist/formula-plugin.js +0 -107
  87. package/dist/formula-plugin.js.map +0 -1
  88. package/dist/validator-plugin.d.ts +0 -56
  89. package/dist/validator-plugin.js +0 -106
  90. package/dist/validator-plugin.js.map +0 -1
  91. package/dist/validator.d.ts +0 -80
  92. package/dist/validator.js +0 -625
  93. package/dist/validator.js.map +0 -1
  94. package/src/ai-agent.ts +0 -868
  95. package/src/formula-engine.ts +0 -572
  96. package/src/formula-plugin.ts +0 -141
  97. package/src/validator-plugin.ts +0 -140
  98. package/src/validator.ts +0 -743
  99. package/test/formula-engine.test.ts +0 -725
  100. package/test/formula-integration.test.ts +0 -286
  101. package/test/formula-plugin.test.ts +0 -197
  102. package/test/validator-plugin.test.ts +0 -126
  103. package/test/validator.test.ts +0 -440
package/dist/validator.js DELETED
@@ -1,625 +0,0 @@
1
- "use strict";
2
- /**
3
- * ObjectQL
4
- * Copyright (c) 2026-present ObjectStack Inc.
5
- *
6
- * This source code is licensed under the MIT license found in the
7
- * LICENSE file in the root directory of this source tree.
8
- */
9
- Object.defineProperty(exports, "__esModule", { value: true });
10
- exports.Validator = void 0;
11
- /**
12
- * Validator class that executes validation rules.
13
- */
14
- class Validator {
15
- constructor(options = {}) {
16
- this.options = {
17
- language: options.language || 'en',
18
- languageFallback: options.languageFallback || ['en', 'zh-CN'],
19
- };
20
- }
21
- /**
22
- * Validate a record against a set of rules.
23
- */
24
- async validate(rules, context) {
25
- const results = [];
26
- for (const rule of rules) {
27
- // Check if rule should be applied
28
- if (!this.shouldApplyRule(rule, context)) {
29
- continue;
30
- }
31
- // Execute validation based on rule type
32
- let result;
33
- try {
34
- switch (rule.type) {
35
- case 'cross_field':
36
- result = await this.validateCrossField(rule, context);
37
- break;
38
- case 'state_machine':
39
- result = await this.validateStateMachine(rule, context);
40
- break;
41
- case 'unique':
42
- result = await this.validateUniqueness(rule, context);
43
- break;
44
- case 'business_rule':
45
- result = await this.validateBusinessRule(rule, context);
46
- break;
47
- case 'custom':
48
- result = await this.validateCustom(rule, context);
49
- break;
50
- default:
51
- // Generic validation
52
- result = {
53
- rule: rule.name,
54
- valid: true,
55
- };
56
- }
57
- }
58
- catch (error) {
59
- result = {
60
- rule: rule.name,
61
- valid: false,
62
- message: error instanceof Error ? error.message : 'Validation error',
63
- severity: rule.severity || 'error',
64
- };
65
- }
66
- results.push(result);
67
- }
68
- // Categorize results
69
- const errors = results.filter(r => !r.valid && r.severity === 'error');
70
- const warnings = results.filter(r => !r.valid && r.severity === 'warning');
71
- const info = results.filter(r => !r.valid && r.severity === 'info');
72
- return {
73
- valid: errors.length === 0,
74
- results,
75
- errors,
76
- warnings,
77
- info,
78
- };
79
- }
80
- /**
81
- * Validate field-level rules.
82
- */
83
- async validateField(fieldName, fieldConfig, value, context) {
84
- var _a;
85
- const results = [];
86
- // Required field validation
87
- if (fieldConfig.required && (value === null || value === undefined || value === '')) {
88
- results.push({
89
- rule: `${fieldName}_required`,
90
- valid: false,
91
- message: ((_a = fieldConfig.validation) === null || _a === void 0 ? void 0 : _a.message) || `${fieldConfig.label || fieldName} is required`,
92
- severity: 'error',
93
- fields: [fieldName],
94
- });
95
- }
96
- // Skip further validation if value is empty and not required
97
- if (value === null || value === undefined || value === '') {
98
- return results;
99
- }
100
- // Type-specific validation
101
- if (fieldConfig.validation) {
102
- const validation = fieldConfig.validation;
103
- // Email format
104
- if (validation.format === 'email') {
105
- // NOTE: This is a basic email validation regex. For production use,
106
- // consider using a more comprehensive email validation library or regex
107
- // that handles international domains, quoted strings, etc.
108
- const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
109
- if (!emailRegex.test(value)) {
110
- results.push({
111
- rule: `${fieldName}_email_format`,
112
- valid: false,
113
- message: validation.message || 'Invalid email format',
114
- severity: 'error',
115
- fields: [fieldName],
116
- });
117
- }
118
- }
119
- // URL format
120
- if (validation.format === 'url') {
121
- try {
122
- const url = new URL(value);
123
- if (validation.protocols && !validation.protocols.includes(url.protocol.replace(':', ''))) {
124
- results.push({
125
- rule: `${fieldName}_url_protocol`,
126
- valid: false,
127
- message: validation.message || `URL must use one of: ${validation.protocols.join(', ')}`,
128
- severity: 'error',
129
- fields: [fieldName],
130
- });
131
- }
132
- }
133
- catch {
134
- results.push({
135
- rule: `${fieldName}_url_format`,
136
- valid: false,
137
- message: validation.message || 'Invalid URL format',
138
- severity: 'error',
139
- fields: [fieldName],
140
- });
141
- }
142
- }
143
- // Pattern validation
144
- if (validation.pattern) {
145
- try {
146
- const pattern = new RegExp(validation.pattern);
147
- if (!pattern.test(String(value))) {
148
- results.push({
149
- rule: `${fieldName}_pattern`,
150
- valid: false,
151
- message: validation.message || 'Value does not match required pattern',
152
- severity: 'error',
153
- fields: [fieldName],
154
- });
155
- }
156
- }
157
- catch (error) {
158
- results.push({
159
- rule: `${fieldName}_pattern`,
160
- valid: false,
161
- message: `Invalid regex pattern: ${validation.pattern}`,
162
- severity: 'error',
163
- fields: [fieldName],
164
- });
165
- }
166
- }
167
- // Min/Max validation
168
- if (validation.min !== undefined && value < validation.min) {
169
- results.push({
170
- rule: `${fieldName}_min`,
171
- valid: false,
172
- message: validation.message || `Value must be at least ${validation.min}`,
173
- severity: 'error',
174
- fields: [fieldName],
175
- });
176
- }
177
- if (validation.max !== undefined && value > validation.max) {
178
- results.push({
179
- rule: `${fieldName}_max`,
180
- valid: false,
181
- message: validation.message || `Value must be at most ${validation.max}`,
182
- severity: 'error',
183
- fields: [fieldName],
184
- });
185
- }
186
- // Length validation
187
- const strValue = String(value);
188
- if (validation.min_length !== undefined && strValue.length < validation.min_length) {
189
- results.push({
190
- rule: `${fieldName}_min_length`,
191
- valid: false,
192
- message: validation.message || `Must be at least ${validation.min_length} characters`,
193
- severity: 'error',
194
- fields: [fieldName],
195
- });
196
- }
197
- if (validation.max_length !== undefined && strValue.length > validation.max_length) {
198
- results.push({
199
- rule: `${fieldName}_max_length`,
200
- valid: false,
201
- message: validation.message || `Must be at most ${validation.max_length} characters`,
202
- severity: 'error',
203
- fields: [fieldName],
204
- });
205
- }
206
- }
207
- // Legacy min/max from fieldConfig
208
- if (fieldConfig.min !== undefined && value < fieldConfig.min) {
209
- results.push({
210
- rule: `${fieldName}_min`,
211
- valid: false,
212
- message: `Value must be at least ${fieldConfig.min}`,
213
- severity: 'error',
214
- fields: [fieldName],
215
- });
216
- }
217
- if (fieldConfig.max !== undefined && value > fieldConfig.max) {
218
- results.push({
219
- rule: `${fieldName}_max`,
220
- valid: false,
221
- message: `Value must be at most ${fieldConfig.max}`,
222
- severity: 'error',
223
- fields: [fieldName],
224
- });
225
- }
226
- return results;
227
- }
228
- /**
229
- * Check if a rule should be applied based on triggers and conditions.
230
- */
231
- shouldApplyRule(rule, context) {
232
- // Check trigger
233
- if (rule.trigger && !rule.trigger.includes(context.operation)) {
234
- return false;
235
- }
236
- // Check fields (for updates)
237
- if (rule.fields && rule.fields.length > 0 && context.changedFields) {
238
- const hasChangedField = rule.fields.some(f => context.changedFields.includes(f));
239
- if (!hasChangedField) {
240
- return false;
241
- }
242
- }
243
- // Check apply_when condition
244
- if (rule.apply_when) {
245
- return this.evaluateCondition(rule.apply_when, context.record);
246
- }
247
- return true;
248
- }
249
- /**
250
- * Validate cross-field rule.
251
- */
252
- async validateCrossField(rule, context) {
253
- if (!rule.rule) {
254
- return { rule: rule.name, valid: true };
255
- }
256
- const valid = this.evaluateCondition(rule.rule, context.record);
257
- return {
258
- rule: rule.name,
259
- valid,
260
- message: valid ? undefined : this.formatMessage(rule.message, context.record),
261
- error_code: rule.error_code,
262
- severity: rule.severity || 'error',
263
- };
264
- }
265
- /**
266
- * Validate state machine transitions.
267
- */
268
- async validateStateMachine(rule, context) {
269
- var _a;
270
- // Only validate on update
271
- if (context.operation !== 'update' || !context.previousRecord) {
272
- return { rule: rule.name, valid: true };
273
- }
274
- const oldState = context.previousRecord[rule.field];
275
- const newState = context.record[rule.field];
276
- // If state hasn't changed, validation passes
277
- if (oldState === newState) {
278
- return { rule: rule.name, valid: true };
279
- }
280
- // Check if transition is allowed
281
- const transitions = (_a = rule.transitions) === null || _a === void 0 ? void 0 : _a[oldState];
282
- if (!transitions) {
283
- return {
284
- rule: rule.name,
285
- valid: false,
286
- message: this.formatMessage(rule.message, { old_status: oldState, new_status: newState }),
287
- error_code: rule.error_code,
288
- severity: rule.severity || 'error',
289
- fields: [rule.field],
290
- };
291
- }
292
- // Handle both array and object format
293
- let allowedNext = [];
294
- if (Array.isArray(transitions)) {
295
- allowedNext = transitions;
296
- }
297
- else if (typeof transitions === 'object' && 'allowed_next' in transitions) {
298
- allowedNext = transitions.allowed_next || [];
299
- }
300
- const isAllowed = allowedNext.includes(newState);
301
- return {
302
- rule: rule.name,
303
- valid: isAllowed,
304
- message: isAllowed ? undefined : this.formatMessage(rule.message, { old_status: oldState, new_status: newState }),
305
- error_code: rule.error_code,
306
- severity: rule.severity || 'error',
307
- fields: [rule.field],
308
- };
309
- }
310
- /**
311
- * Validate uniqueness by checking database for existing values.
312
- */
313
- async validateUniqueness(rule, context) {
314
- var _a, _b;
315
- // Check if API is available for database access
316
- if (!context.api) {
317
- // If no API provided, we can't validate - pass by default
318
- return {
319
- rule: rule.name,
320
- valid: true,
321
- };
322
- }
323
- // Get object name from context metadata
324
- if (!((_a = context.metadata) === null || _a === void 0 ? void 0 : _a.objectName)) {
325
- return {
326
- rule: rule.name,
327
- valid: false,
328
- message: 'Object name not provided in validation context',
329
- severity: rule.severity || 'error',
330
- };
331
- }
332
- const objectName = context.metadata.objectName;
333
- // Determine fields to check for uniqueness
334
- const fieldsToCheck = rule.fields || (rule.field ? [rule.field] : []);
335
- if (fieldsToCheck.length === 0) {
336
- return {
337
- rule: rule.name,
338
- valid: false,
339
- message: 'No fields specified for uniqueness validation',
340
- severity: rule.severity || 'error',
341
- };
342
- }
343
- // Build query filter
344
- const filters = {};
345
- // Add field conditions
346
- for (const field of fieldsToCheck) {
347
- const fieldValue = context.record[field];
348
- // Skip validation if field value is null/undefined (no value to check uniqueness for)
349
- if (fieldValue === null || fieldValue === undefined) {
350
- return {
351
- rule: rule.name,
352
- valid: true,
353
- };
354
- }
355
- // Handle case sensitivity for string values
356
- if (typeof fieldValue === 'string' && rule.case_sensitive === false) {
357
- // NOTE: Case-insensitive comparison requires driver-specific implementation
358
- // Some drivers support regex (MongoDB), others use LOWER() function (SQL)
359
- // For now, we use exact match - driver adapters should implement case-insensitive logic
360
- filters[field] = fieldValue;
361
- }
362
- else {
363
- filters[field] = fieldValue;
364
- }
365
- }
366
- // Apply scope conditions if specified
367
- if (rule.scope) {
368
- // Evaluate scope condition and add to filters
369
- const scopeFields = this.extractFieldsFromCondition(rule.scope);
370
- for (const field of scopeFields) {
371
- if (context.record[field] !== undefined) {
372
- filters[field] = context.record[field];
373
- }
374
- }
375
- }
376
- // Exclude current record for update operations
377
- if (context.operation === 'update' && ((_b = context.previousRecord) === null || _b === void 0 ? void 0 : _b._id)) {
378
- filters._id = { $ne: context.previousRecord._id };
379
- }
380
- try {
381
- // Query database to count existing records with same field values
382
- const count = await context.api.count(objectName, filters);
383
- const valid = count === 0;
384
- return {
385
- rule: rule.name,
386
- valid,
387
- message: valid ? undefined : this.formatMessage(rule.message, context.record),
388
- error_code: rule.error_code,
389
- severity: rule.severity || 'error',
390
- fields: fieldsToCheck,
391
- };
392
- }
393
- catch (error) {
394
- // If query fails, treat as validation error
395
- return {
396
- rule: rule.name,
397
- valid: false,
398
- message: `Uniqueness check failed: ${error instanceof Error ? error.message : 'Unknown error'}`,
399
- severity: rule.severity || 'error',
400
- fields: fieldsToCheck,
401
- };
402
- }
403
- }
404
- /**
405
- * Extract field names from a validation condition.
406
- */
407
- extractFieldsFromCondition(condition) {
408
- const fields = [];
409
- if (condition.field) {
410
- fields.push(condition.field);
411
- }
412
- if (condition.all_of) {
413
- for (const subcondition of condition.all_of) {
414
- fields.push(...this.extractFieldsFromCondition(subcondition));
415
- }
416
- }
417
- if (condition.any_of) {
418
- for (const subcondition of condition.any_of) {
419
- fields.push(...this.extractFieldsFromCondition(subcondition));
420
- }
421
- }
422
- return fields;
423
- }
424
- /**
425
- * Validate business rule by evaluating constraint conditions.
426
- */
427
- async validateBusinessRule(rule, context) {
428
- if (!rule.constraint) {
429
- // No constraint specified, validation passes
430
- return {
431
- rule: rule.name,
432
- valid: true,
433
- };
434
- }
435
- const constraint = rule.constraint;
436
- let valid = true;
437
- // Evaluate all_of conditions (all must be true)
438
- if (constraint.all_of && constraint.all_of.length > 0) {
439
- valid = constraint.all_of.every(condition => this.evaluateCondition(condition, context.record));
440
- if (!valid) {
441
- return {
442
- rule: rule.name,
443
- valid: false,
444
- message: this.formatMessage(rule.message, context.record),
445
- error_code: rule.error_code,
446
- severity: rule.severity || 'error',
447
- };
448
- }
449
- }
450
- // Evaluate any_of conditions (at least one must be true)
451
- if (constraint.any_of && constraint.any_of.length > 0) {
452
- valid = constraint.any_of.some(condition => this.evaluateCondition(condition, context.record));
453
- if (!valid) {
454
- return {
455
- rule: rule.name,
456
- valid: false,
457
- message: this.formatMessage(rule.message, context.record),
458
- error_code: rule.error_code,
459
- severity: rule.severity || 'error',
460
- };
461
- }
462
- }
463
- // Evaluate expression if provided (basic implementation)
464
- if (constraint.expression) {
465
- // For now, we'll treat expression validation as a stub
466
- // Full implementation would require safe expression evaluation
467
- // This could be extended to use a safe expression evaluator in the future
468
- valid = true;
469
- }
470
- // Evaluate then_require conditions (conditional required fields)
471
- if (constraint.then_require && constraint.then_require.length > 0) {
472
- for (const condition of constraint.then_require) {
473
- const conditionMet = this.evaluateCondition(condition, context.record);
474
- if (!conditionMet) {
475
- return {
476
- rule: rule.name,
477
- valid: false,
478
- message: this.formatMessage(rule.message, context.record),
479
- error_code: rule.error_code,
480
- severity: rule.severity || 'error',
481
- };
482
- }
483
- }
484
- }
485
- return {
486
- rule: rule.name,
487
- valid,
488
- message: valid ? undefined : this.formatMessage(rule.message, context.record),
489
- error_code: rule.error_code,
490
- severity: rule.severity || 'error',
491
- };
492
- }
493
- /**
494
- * Validate custom rule (stub - requires function execution).
495
- */
496
- async validateCustom(rule, context) {
497
- // TODO: Implement custom validator execution
498
- // This requires safe function evaluation
499
- // Stub: Pass silently until implementation is complete
500
- return {
501
- rule: rule.name,
502
- valid: true,
503
- };
504
- }
505
- /**
506
- * Evaluate a validation condition.
507
- */
508
- evaluateCondition(condition, record) {
509
- // Handle logical operators
510
- if (condition.all_of) {
511
- return condition.all_of.every(c => this.evaluateCondition(c, record));
512
- }
513
- if (condition.any_of) {
514
- return condition.any_of.some(c => this.evaluateCondition(c, record));
515
- }
516
- // Handle expression
517
- if (condition.expression) {
518
- // TODO: Implement safe expression evaluation
519
- return true;
520
- }
521
- // Handle field comparison
522
- if (condition.field && condition.operator !== undefined) {
523
- const fieldValue = record[condition.field];
524
- // Use compare_to if specified (cross-field comparison), otherwise use value
525
- const compareValue = condition.compare_to !== undefined
526
- ? record[condition.compare_to]
527
- : condition.value;
528
- return this.compareValues(fieldValue, condition.operator, compareValue);
529
- }
530
- return true;
531
- }
532
- /**
533
- * Compare two values using an operator.
534
- */
535
- compareValues(a, operator, b) {
536
- switch (operator) {
537
- case '=':
538
- return a === b;
539
- case '!=':
540
- return a !== b;
541
- case '>':
542
- return a > b;
543
- case '>=':
544
- return a >= b;
545
- case '<':
546
- return a < b;
547
- case '<=':
548
- return a <= b;
549
- case 'in':
550
- return Array.isArray(b) && b.includes(a);
551
- case 'not_in':
552
- return Array.isArray(b) && !b.includes(a);
553
- case 'contains': {
554
- if (a == null || b == null) {
555
- return false;
556
- }
557
- const strA = String(a);
558
- const strB = String(b);
559
- return strA.includes(strB);
560
- }
561
- case 'not_contains': {
562
- if (a == null || b == null) {
563
- return false;
564
- }
565
- const strA = String(a);
566
- const strB = String(b);
567
- return !strA.includes(strB);
568
- }
569
- case 'starts_with': {
570
- if (a == null || b == null) {
571
- return false;
572
- }
573
- const strA = String(a);
574
- const strB = String(b);
575
- return strA.startsWith(strB);
576
- }
577
- case 'ends_with': {
578
- if (a == null || b == null) {
579
- return false;
580
- }
581
- const strA = String(a);
582
- const strB = String(b);
583
- return strA.endsWith(strB);
584
- }
585
- default:
586
- return false;
587
- }
588
- }
589
- /**
590
- * Format validation message with template variables.
591
- */
592
- formatMessage(message, context) {
593
- var _a;
594
- // Handle i18n messages
595
- if (typeof message === 'object') {
596
- // Try preferred language first
597
- const preferredLanguage = (_a = this.options.language) !== null && _a !== void 0 ? _a : 'en';
598
- let messageText = message[preferredLanguage];
599
- // Try fallback languages if preferred not available
600
- if (!messageText && this.options.languageFallback) {
601
- for (const lang of this.options.languageFallback) {
602
- if (message[lang]) {
603
- messageText = message[lang];
604
- break;
605
- }
606
- }
607
- }
608
- // Fallback to first available message
609
- message = messageText || Object.values(message)[0];
610
- }
611
- // Replace template variables
612
- return message.replace(/\{\{(\w+(?:\.\w+)*)\}\}/g, (match, path) => {
613
- const value = this.getNestedValue(context, path);
614
- return value !== undefined ? String(value) : match;
615
- });
616
- }
617
- /**
618
- * Get nested value from object by path.
619
- */
620
- getNestedValue(obj, path) {
621
- return path.split('.').reduce((current, key) => current === null || current === void 0 ? void 0 : current[key], obj);
622
- }
623
- }
624
- exports.Validator = Validator;
625
- //# sourceMappingURL=validator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"validator.js","sourceRoot":"","sources":["../src/validator.ts"],"names":[],"mappings":"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"}