Automattic\WooCommerce\Vendor\GraphQL\Utils
BreakingChangesFinder::findFieldsThatChangedTypeOnObjectOrInterfaceTypes
Method of the class: BreakingChangesFinder{}
No Hooks.
Returns
Array
Usage
$result = BreakingChangesFinder::findFieldsThatChangedTypeOnObjectOrInterfaceTypes( $oldSchema, $newSchema ): array;
BreakingChangesFinder::findFieldsThatChangedTypeOnObjectOrInterfaceTypes() BreakingChangesFinder::findFieldsThatChangedTypeOnObjectOrInterfaceTypes code WC 10.9.1
public static function findFieldsThatChangedTypeOnObjectOrInterfaceTypes(
Schema $oldSchema,
Schema $newSchema
): array {
$oldTypeMap = $oldSchema->getTypeMap();
$newTypeMap = $newSchema->getTypeMap();
$breakingChanges = [];
foreach ($oldTypeMap as $typeName => $oldType) {
$newType = $newTypeMap[$typeName] ?? null;
if (
! $oldType instanceof ObjectType && ! $oldType instanceof InterfaceType
|| ! $newType instanceof ObjectType && ! $newType instanceof InterfaceType
|| ! ($newType instanceof $oldType)
) {
continue;
}
$oldTypeFieldsDef = $oldType->getFields();
$newTypeFieldsDef = $newType->getFields();
foreach ($oldTypeFieldsDef as $fieldName => $fieldDefinition) {
// Check if the field is missing on the type in the new schema.
if (! isset($newTypeFieldsDef[$fieldName])) {
$breakingChanges[] = [
'type' => self::BREAKING_CHANGE_FIELD_REMOVED,
'description' => "{$typeName}.{$fieldName} was removed.",
];
} else {
$oldFieldType = $oldTypeFieldsDef[$fieldName]->getType();
$newFieldType = $newTypeFieldsDef[$fieldName]->getType();
$isSafe = self::isChangeSafeForObjectOrInterfaceField(
$oldFieldType,
$newFieldType
);
if (! $isSafe) {
$breakingChanges[] = [
'type' => self::BREAKING_CHANGE_FIELD_CHANGED_KIND,
'description' => "{$typeName}.{$fieldName} changed type from {$oldFieldType} to {$newFieldType}.",
];
}
}
}
}
return $breakingChanges;
}