*/ public static function requiredMappings(string $clientIdAlias = 'client_id', string $clientRegionAlias = 'client_region'): array { return [ 'aiv_client_id' => [ 'source_key' => 'aiv_client_id', 'target' => 'meta_data:' . $clientIdAlias, 'transform' => 'text', 'enabled' => true, ], 'aiv_client_region' => [ 'source_key' => 'aiv_client_region', 'target' => 'meta_data:' . $clientRegionAlias, 'transform' => 'text', 'enabled' => true, ], ]; } /** * @param array> $existing * * @return array> */ public static function merge(array $existing, string $clientIdAlias = 'client_id', string $clientRegionAlias = 'client_region'): array { $required = self::requiredMappings($clientIdAlias, $clientRegionAlias); $result = []; foreach ($existing as $row) { if (!is_array($row)) { continue; } $sourceKey = trim((string) ($row['source_key'] ?? '')); if (isset($required[$sourceKey])) { if (!isset($result[$sourceKey])) { $result[$sourceKey] = $required[$sourceKey]; } continue; } $result[] = $row; } foreach ($required as $sourceKey => $mapping) { $result[$sourceKey] = $mapping; } return array_values($result); } /** * @param array $fields * @param string[] $requiredAliases * * @return string[] */ public static function missingCustomAliases(array $fields, array $requiredAliases): array { $available = []; foreach ($fields as $field) { if (!is_array($field) || 'custom' !== ($field['source'] ?? null)) { continue; } $alias = trim((string) ($field['alias'] ?? '')); if ('' !== $alias) { $available[$alias] = true; } } return array_values(array_filter( $requiredAliases, static fn (string $alias): bool => !isset($available[$alias]) )); } }