mirror of
https://github.com/retailcrm/graphql-php.git
synced 2025-02-06 07:49:24 +03:00
finish mechanical conversions
This commit is contained in:
parent
a1325eeb3f
commit
af60f1ee4d
@ -245,61 +245,41 @@ class FindBreakingChanges
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param $oldSchema
|
* @param Schema $oldSchema
|
||||||
* @param $newSchema
|
* @param Schema $newSchema
|
||||||
*
|
*
|
||||||
* @return array
|
* @return array
|
||||||
*/
|
*/
|
||||||
private static function findFieldsThatChangedTypeOnObjectOrInterfaceTypes(
|
private static function findFieldsThatChangedTypeOnObjectOrInterfaceTypes(Schema $oldSchema, Schema $newSchema)
|
||||||
$oldSchema, $newSchema
|
|
||||||
)
|
|
||||||
{
|
{
|
||||||
/*const oldTypeMap = oldSchema.getTypeMap();
|
$oldTypeMap = $oldSchema->getTypeMap();
|
||||||
const newTypeMap = newSchema.getTypeMap();
|
$newTypeMap = $newSchema->getTypeMap();
|
||||||
|
|
||||||
const breakingFieldChanges = [];
|
$breakingFieldChanges = [];
|
||||||
Object.keys(oldTypeMap).forEach(typeName => {
|
foreach ($oldTypeMap as $typeName => $oldType) {
|
||||||
const oldType = oldTypeMap[typeName];
|
$newType = isset($newTypeMap[$typeName]) ? $newTypeMap[$typeName] : null;
|
||||||
const newType = newTypeMap[typeName];
|
if (!($oldType instanceof ObjectType || $oldType instanceof InterfaceType) || !($newType instanceof $oldType)) {
|
||||||
if (
|
continue;
|
||||||
!(oldType instanceof GraphQLObjectType ||
|
|
||||||
oldType instanceof GraphQLInterfaceType) ||
|
|
||||||
!(newType instanceof oldType.constructor)
|
|
||||||
) {
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
$oldTypeFieldsDef = $oldType->getFields();
|
||||||
const oldTypeFieldsDef = oldType.getFields();
|
$newTypeFieldsDef = $newType->getFields();
|
||||||
const newTypeFieldsDef = newType.getFields();
|
foreach ($oldTypeFieldsDef as $fieldName => $fieldDefinition) {
|
||||||
Object.keys(oldTypeFieldsDef).forEach(fieldName => {
|
if (!isset($newTypeFieldsDef[$fieldName])) {
|
||||||
// Check if the field is missing on the type in the new schema.
|
$breakingFieldChanges[] = ['type' => self::BREAKING_CHANGE_FIELD_REMOVED, 'description' => "${typeName}->${fieldName} was removed."];
|
||||||
if (!(fieldName in newTypeFieldsDef)) {
|
|
||||||
breakingFieldChanges.push({
|
|
||||||
type: BreakingChangeType.FIELD_REMOVED,
|
|
||||||
description: `${typeName}.${fieldName} was removed.`,
|
|
||||||
});
|
|
||||||
} else {
|
} else {
|
||||||
const oldFieldType = oldTypeFieldsDef[fieldName].type;
|
$oldFieldType = $oldTypeFieldsDef[$fieldName]->getType();
|
||||||
const newFieldType = newTypeFieldsDef[fieldName].type;
|
$newfieldType = $newTypeFieldsDef[$fieldName]->getType();
|
||||||
const isSafe =
|
$isSafe = self::isChangeSafeForObjectOrInterfaceField($oldFieldType, $newfieldType);
|
||||||
isChangeSafeForObjectOrInterfaceField(oldFieldType, newFieldType);
|
if (!$isSafe) {
|
||||||
if (!isSafe) {
|
|
||||||
const oldFieldTypeString = isNamedType(oldFieldType) ?
|
$oldFieldTypeString = self::isNamedType($oldFieldType) ? $oldFieldType->name : $oldFieldType;
|
||||||
oldFieldType.name :
|
$newFieldTypeString = self::isNamedType($newfieldType) ? $newfieldType->name : $newfieldType;
|
||||||
oldFieldType.toString();
|
$breakingFieldChanges[] = ['type' => self::BREAKING_CHANGE_FIELD_CHANGED, 'description' => "${typeName}->${fieldName} changed type from ${oldFieldTypeString} to ${newFieldTypeString}"];
|
||||||
const newFieldTypeString = isNamedType(newFieldType) ?
|
|
||||||
newFieldType.name :
|
|
||||||
newFieldType.toString();
|
|
||||||
breakingFieldChanges.push({
|
|
||||||
type: BreakingChangeType.FIELD_CHANGED_KIND,
|
|
||||||
description: `${typeName}.${fieldName} changed type from ` +
|
|
||||||
`${oldFieldTypeString} to ${newFieldTypeString}.`,
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
}
|
||||||
});
|
}
|
||||||
return breakingFieldChanges;*/
|
return $breakingFieldChanges;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -312,65 +292,40 @@ class FindBreakingChanges
|
|||||||
Schema $oldSchema, Schema $newSchema
|
Schema $oldSchema, Schema $newSchema
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
/* const oldTypeMap = oldSchema.getTypeMap();
|
$oldTypeMap = $oldSchema->getTypeMap();
|
||||||
const newTypeMap = newSchema.getTypeMap();
|
$newTypeMap = $newSchema->getTypeMap();
|
||||||
|
|
||||||
const breakingFieldChanges = [];
|
$breakingFieldChanges = [];
|
||||||
Object.keys(oldTypeMap).forEach(typeName => {
|
foreach ($oldTypeMap as $typeName => $oldType) {
|
||||||
const oldType = oldTypeMap[typeName];
|
$newType = isset($newTypeMap[$typeName]) ? $newTypeMap[$typeName] : null;
|
||||||
const newType = newTypeMap[typeName];
|
if (!($oldType instanceof InputObjectType) || !($newType instanceof InputObjectType)) {
|
||||||
if (
|
continue;
|
||||||
!(oldType instanceof GraphQLInputObjectType) ||
|
|
||||||
!(newType instanceof GraphQLInputObjectType)
|
|
||||||
) {
|
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
$oldTypeFieldsDef = $oldType->getFields();
|
||||||
const oldTypeFieldsDef = oldType.getFields();
|
$newTypeFieldsDef = $newType->getFields();
|
||||||
const newTypeFieldsDef = newType.getFields();
|
foreach ($oldTypeFieldsDef as $fieldName => $fieldDefinition) {
|
||||||
Object.keys(oldTypeFieldsDef).forEach(fieldName => {
|
if (!isset($newTypeFieldsDef[$fieldName])) {
|
||||||
// Check if the field is missing on the type in the new schema.
|
$breakingFieldChanges[] = ['type' => self::BREAKING_CHANGE_FIELD_REMOVED, 'description' => "${typeName}->${fieldName} was removed."];
|
||||||
if (!(fieldName in newTypeFieldsDef)) {
|
|
||||||
breakingFieldChanges.push({
|
|
||||||
type: BreakingChangeType.FIELD_REMOVED,
|
|
||||||
description: `${typeName}.${fieldName} was removed.`,
|
|
||||||
});
|
|
||||||
} else {
|
} else {
|
||||||
const oldFieldType = oldTypeFieldsDef[fieldName].type;
|
$oldFieldType = $oldTypeFieldsDef[$fieldName]->getType();
|
||||||
const newFieldType = newTypeFieldsDef[fieldName].type;
|
$newfieldType = $newTypeFieldsDef[$fieldName]->getType();
|
||||||
|
$isSafe = self::isChangeSafeForInputObjectFieldOrFieldArg($oldFieldType, $newfieldType);
|
||||||
|
if (!$isSafe) {
|
||||||
|
$oldFieldTypeString = self::isNamedType($oldFieldType) ? $oldFieldType->name : $oldFieldType;
|
||||||
|
$newFieldTypeString = self::isNamedType($newfieldType) ? $newfieldType->name : $newfieldType;
|
||||||
|
$breakingFieldChanges[] = ['type' => self::BREAKING_CHANGE_FIELD_CHANGED, 'description' => "${typeName}->${fieldName} changed type from ${oldFieldTypeString} to ${newFieldTypeString}"];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
foreach ($newTypeFieldsDef as $fieldName => $fieldDef) {
|
||||||
|
if (!isset($oldTypeFieldsDef[$fieldName]) && $fieldDef->getType() instanceof NonNull) {
|
||||||
|
$newTypeName = $newType->name;
|
||||||
|
$breakingFieldChanges[] = ['type' => self::BREAKING_CHANGE_NON_NULL_INPUT_FIELD_ADDED, 'description' => "A non-null field ${fieldName} on input type ${$newTypeName} was added"];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return $breakingFieldChanges;
|
||||||
|
|
||||||
const isSafe =
|
|
||||||
isChangeSafeForInputObjectFieldOrFieldArg(oldFieldType, newFieldType);
|
|
||||||
if (!isSafe) {
|
|
||||||
const oldFieldTypeString = isNamedType(oldFieldType) ?
|
|
||||||
oldFieldType.name :
|
|
||||||
oldFieldType.toString();
|
|
||||||
const newFieldTypeString = isNamedType(newFieldType) ?
|
|
||||||
newFieldType.name :
|
|
||||||
newFieldType.toString();
|
|
||||||
breakingFieldChanges.push({
|
|
||||||
type: BreakingChangeType.FIELD_CHANGED_KIND,
|
|
||||||
description: `${typeName}.${fieldName} changed type from ` +
|
|
||||||
`${oldFieldTypeString} to ${newFieldTypeString}.`,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
|
||||||
// Check if a non-null field was added to the input object type
|
|
||||||
Object.keys(newTypeFieldsDef).forEach(fieldName => {
|
|
||||||
if (
|
|
||||||
!(fieldName in oldTypeFieldsDef) &&
|
|
||||||
newTypeFieldsDef[fieldName].type instanceof GraphQLNonNull
|
|
||||||
) {
|
|
||||||
breakingFieldChanges.push({
|
|
||||||
type: BreakingChangeType.NON_NULL_INPUT_FIELD_ADDED,
|
|
||||||
description: `A non-null field ${fieldName} on ` +
|
|
||||||
`input type ${newType.name} was added.`,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
});
|
|
||||||
return breakingFieldChanges;*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static function isChangeSafeForObjectOrInterfaceField(
|
private static function isChangeSafeForObjectOrInterfaceField(
|
||||||
|
Loading…
x
Reference in New Issue
Block a user