UNPKG

@graphql-inspector/action

Version:

GraphQL Inspector functionality for GitHub Actions

179 lines (178 loc) • 8.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.requiredMatchMetaMap = void 0; exports.isChangeEqual = isChangeEqual; /** * One case that stands out is if the change is to add a repeatable directive, but the * comparison first adds a directive, and then adds repeatable. * * To solve this, eat distinct change to a schema must be tracked separately. This is already * happening, but DIRECTIVE_ADDED does include metadata for repeatability... This should * likely be deprecated from that change type to keep these changes discrete. Same goes for * directive locations. */ exports.requiredMatchMetaMap = { DIRECTIVE_ADDED: ['addedDirectiveName'], DIRECTIVE_ARGUMENT_ADDED: [ 'addedDirectiveArgumentName', 'addedDirectiveArgumentType', 'directiveName', ], DIRECTIVE_ARGUMENT_DEFAULT_VALUE_CHANGED: [ 'directiveArgumentName', 'directiveName', 'newDirectiveArgumentDefaultValue', ], DIRECTIVE_ARGUMENT_DESCRIPTION_CHANGED: [ 'directiveArgumentName', 'directiveName', 'newDirectiveArgumentDescription', ], DIRECTIVE_ARGUMENT_REMOVED: ['directiveName', 'removedDirectiveArgumentName'], DIRECTIVE_ARGUMENT_TYPE_CHANGED: [ 'directiveArgumentName', 'directiveName', 'newDirectiveArgumentType', ], DIRECTIVE_DESCRIPTION_CHANGED: ['directiveName', 'newDirectiveDescription'], DIRECTIVE_LOCATION_ADDED: ['addedDirectiveLocation', 'directiveName'], DIRECTIVE_LOCATION_REMOVED: ['directiveName', 'removedDirectiveLocation'], DIRECTIVE_REMOVED: ['removedDirectiveName'], DIRECTIVE_REPEATABLE_ADDED: ['directiveName'], DIRECTIVE_REPEATABLE_REMOVED: ['directiveName'], DIRECTIVE_USAGE_ARGUMENT_ADDED: [ 'addedArgumentName', 'directiveName', 'parentArgumentName', 'parentEnumValueName', 'parentFieldName', 'parentTypeName', ], DIRECTIVE_USAGE_ARGUMENT_DEFINITION_ADDED: [ 'addedDirectiveName', 'argumentName', 'fieldName', 'typeName', ], DIRECTIVE_USAGE_ARGUMENT_DEFINITION_REMOVED: [ 'argumentName', 'fieldName', 'removedDirectiveName', 'typeName', ], DIRECTIVE_USAGE_ARGUMENT_REMOVED: [ 'directiveName', 'parentArgumentName', 'parentEnumValueName', 'parentFieldName', 'parentTypeName', 'removedArgumentName', ], DIRECTIVE_USAGE_ENUM_ADDED: ['addedDirectiveName', 'enumName'], // Should this also match on repeat times also...? DIRECTIVE_USAGE_ENUM_REMOVED: ['enumName', 'removedDirectiveName'], DIRECTIVE_USAGE_ENUM_VALUE_ADDED: ['addedDirectiveName', 'enumName', 'enumValueName'], DIRECTIVE_USAGE_ENUM_VALUE_REMOVED: ['enumName', 'enumValueName', 'removedDirectiveName'], DIRECTIVE_USAGE_FIELD_ADDED: ['addedDirectiveName', 'fieldName', 'typeName'], DIRECTIVE_USAGE_FIELD_DEFINITION_ADDED: ['addedDirectiveName', 'fieldName', 'typeName'], DIRECTIVE_USAGE_FIELD_DEFINITION_REMOVED: ['fieldName', 'removedDirectiveName', 'typeName'], DIRECTIVE_USAGE_FIELD_REMOVED: ['fieldName', 'removedDirectiveName', 'typeName'], DIRECTIVE_USAGE_INPUT_FIELD_DEFINITION_ADDED: [ 'addedDirectiveName', 'inputFieldName', 'inputObjectName', 'inputFieldType', ], DIRECTIVE_USAGE_INPUT_FIELD_DEFINITION_REMOVED: [ 'inputFieldName', 'inputObjectName', 'removedDirectiveName', ], DIRECTIVE_USAGE_INPUT_OBJECT_ADDED: [ 'addedDirectiveName', 'addedInputFieldName', 'inputObjectName', ], DIRECTIVE_USAGE_INPUT_OBJECT_REMOVED: [ 'inputObjectName', 'removedDirectiveName', 'removedInputFieldName', ], DIRECTIVE_USAGE_INTERFACE_ADDED: ['addedDirectiveName', 'interfaceName'], DIRECTIVE_USAGE_INTERFACE_REMOVED: ['interfaceName', 'removedDirectiveName'], DIRECTIVE_USAGE_OBJECT_ADDED: ['addedDirectiveName', 'objectName'], DIRECTIVE_USAGE_OBJECT_REMOVED: ['objectName', 'removedDirectiveName'], DIRECTIVE_USAGE_SCALAR_ADDED: ['addedDirectiveName', 'scalarName'], DIRECTIVE_USAGE_SCALAR_REMOVED: ['removedDirectiveName', 'scalarName'], DIRECTIVE_USAGE_SCHEMA_ADDED: ['addedDirectiveName'], DIRECTIVE_USAGE_SCHEMA_REMOVED: ['removedDirectiveName'], DIRECTIVE_USAGE_UNION_MEMBER_ADDED: [ 'addedDirectiveName', 'addedUnionMemberTypeName', 'unionName', ], DIRECTIVE_USAGE_UNION_MEMBER_REMOVED: [ 'removedDirectiveName', 'removedUnionMemberTypeName', 'unionName', ], ENUM_VALUE_ADDED: ['addedEnumValueName', 'enumName'], ENUM_VALUE_DEPRECATION_REASON_ADDED: ['addedValueDeprecationReason', 'enumName', 'enumValueName'], ENUM_VALUE_DEPRECATION_REASON_CHANGED: [ 'enumName', 'enumValueName', 'newEnumValueDeprecationReason', ], ENUM_VALUE_DEPRECATION_REASON_REMOVED: ['enumName', 'enumValueName'], ENUM_VALUE_DESCRIPTION_CHANGED: ['enumName', 'enumValueName', 'newEnumValueDescription'], ENUM_VALUE_REMOVED: ['enumName', 'removedEnumValueName'], FIELD_ADDED: ['addedFieldName', 'typeName'], FIELD_ARGUMENT_ADDED: ['addedArgumentName', 'addedArgumentType', 'fieldName', 'typeName'], FIELD_ARGUMENT_DEFAULT_CHANGED: ['argumentName', 'fieldName', 'newDefaultValue', 'typeName'], FIELD_ARGUMENT_DESCRIPTION_CHANGED: ['argumentName', 'fieldName', 'newDescription', 'typeName'], FIELD_ARGUMENT_REMOVED: ['fieldName', 'removedFieldArgumentName', 'typeName'], FIELD_ARGUMENT_TYPE_CHANGED: ['argumentName', 'fieldName', 'newArgumentType', 'typeName'], FIELD_DEPRECATION_ADDED: ['fieldName', 'typeName'], FIELD_DEPRECATION_REASON_ADDED: ['addedDeprecationReason', 'fieldName', 'typeName'], FIELD_DEPRECATION_REASON_CHANGED: ['fieldName', 'newDeprecationReason', 'typeName'], FIELD_DEPRECATION_REASON_REMOVED: ['fieldName', 'fieldName'], FIELD_DEPRECATION_REMOVED: ['fieldName', 'typeName'], FIELD_DESCRIPTION_ADDED: ['addedDescription', 'fieldName', 'typeName'], FIELD_DESCRIPTION_CHANGED: ['fieldName', 'newDescription', 'typeName'], FIELD_DESCRIPTION_REMOVED: ['fieldName', 'typeName'], FIELD_REMOVED: ['removedFieldName', 'typeName'], FIELD_TYPE_CHANGED: ['fieldName', 'newFieldType', 'typeName'], INPUT_FIELD_ADDED: ['addedInputFieldName', 'addedInputFieldType', 'inputName'], INPUT_FIELD_DEFAULT_VALUE_CHANGED: ['inputFieldName', 'inputName', 'newDefaultValue'], INPUT_FIELD_DESCRIPTION_ADDED: ['addedInputFieldDescription', 'inputFieldName', 'inputName'], INPUT_FIELD_DESCRIPTION_CHANGED: ['inputFieldName', 'inputName', 'newInputFieldDescription'], INPUT_FIELD_DESCRIPTION_REMOVED: ['inputFieldName', 'inputName'], INPUT_FIELD_REMOVED: ['inputName', 'removedFieldName'], INPUT_FIELD_TYPE_CHANGED: ['inputFieldName', 'inputName', 'newInputFieldType'], OBJECT_TYPE_INTERFACE_ADDED: ['addedInterfaceName', 'objectTypeName'], OBJECT_TYPE_INTERFACE_REMOVED: ['objectTypeName', 'removedInterfaceName'], SCHEMA_MUTATION_TYPE_CHANGED: ['newMutationTypeName'], SCHEMA_QUERY_TYPE_CHANGED: ['newQueryTypeName'], SCHEMA_SUBSCRIPTION_TYPE_CHANGED: ['newSubscriptionTypeName'], TYPE_ADDED: ['addedTypeKind', 'addedTypeName'], TYPE_DESCRIPTION_ADDED: ['addedTypeDescription', 'typeName'], TYPE_DESCRIPTION_CHANGED: ['newTypeDescription', 'typeName'], TYPE_DESCRIPTION_REMOVED: ['typeName'], TYPE_KIND_CHANGED: ['newTypeKind', 'typeName'], TYPE_REMOVED: ['removedTypeName'], UNION_MEMBER_ADDED: ['addedUnionMemberTypeName', 'unionName'], UNION_MEMBER_REMOVED: ['removedUnionMemberTypeName', 'unionName'], }; /** * @throws {Error} if there is no matching change type. */ function isChangeEqual(a, b) { if (a.type !== b.type || a.path !== b.path) { return false; } const required = exports.requiredMatchMetaMap[b.type]; if (!required) { // this should not occur throw new Error('Unhandled change type found'); } return required.every(key => a.meta[key] === b.meta[key]); }