* Process field values with deduplication, defaults, and sorting
( rawValues: Set<string>, filters: FieldFilter )
| 19 | * Process field values with deduplication, defaults, and sorting |
| 20 | */ |
| 21 | static processValues( |
| 22 | rawValues: Set<string>, |
| 23 | filters: FieldFilter |
| 24 | ): ProcessedValues { |
| 25 | const totalProcessed = rawValues.size; |
| 26 | let values = Array.from(rawValues).filter( |
| 27 | (value) => !this.isUnresolvedFieldToken(value), |
| 28 | ); |
| 29 | |
| 30 | // Apply deduplication |
| 31 | const deduplicationOptions: DeduplicationOptions = { |
| 32 | strategy: filters.caseSensitive ? 'case-sensitive' : 'case-insensitive', |
| 33 | preserveFirstOccurrence: true, |
| 34 | sortResult: true |
| 35 | }; |
| 36 | |
| 37 | const deduplicationResult = FieldValueDeduplicator.deduplicate(values, deduplicationOptions); |
| 38 | values = deduplicationResult.values; |
| 39 | |
| 40 | // Handle default values |
| 41 | const { processedValues, hasDefault } = this.applyDefaultValues(values, filters); |
| 42 | values = processedValues; |
| 43 | |
| 44 | return { |
| 45 | values, |
| 46 | hasDefaultValue: hasDefault, |
| 47 | duplicatesRemoved: deduplicationResult.duplicatesRemoved, |
| 48 | totalProcessed |
| 49 | }; |
| 50 | } |
| 51 | |
| 52 | private static isUnresolvedFieldToken(value: string): boolean { |
| 53 | return this.unresolvedFieldTokenRegex.test(value.trim()); |
no test coverage detected