Skip to content

Commit 83dfa4e

Browse files
committed
Consistency; adjust schema operation type logic
1 parent 6f2756b commit 83dfa4e

File tree

8 files changed

+46
-13
lines changed

8 files changed

+46
-13
lines changed

packages/core/__tests__/diff/schema.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -833,7 +833,7 @@ test('adding root type should not be breaking', async () => {
833833
[
834834
{
835835
"criticality": {
836-
"level": "BREAKING",
836+
"level": "NON_BREAKING",
837837
},
838838
"message": "Schema subscription root has changed from 'unknown' to 'Subscription'",
839839
"meta": {

packages/core/src/diff/changes/directive-usage.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -895,7 +895,7 @@ function isOfKind<K extends keyof KindToPayload>(
895895
return kind === expectedKind;
896896
}
897897

898-
export function directiveUsageArgumentAdded(args: DirectiveUsageArgumentAddedChange): Change {
898+
export function directiveUsageArgumentAddedFromMeta(args: DirectiveUsageArgumentAddedChange): Change {
899899
return {
900900
type: ChangeType.DirectiveUsageArgumentAdded,
901901
criticality: {
@@ -916,7 +916,7 @@ export function directiveUsageArgumentAdded(args: DirectiveUsageArgumentAddedCha
916916
};
917917
}
918918

919-
export function directiveUsageArgumentRemoved(args: DirectiveUsageArgumentRemovedChange): Change {
919+
export function directiveUsageArgumentRemovedFromMeta(args: DirectiveUsageArgumentRemovedChange): Change {
920920
return {
921921
type: ChangeType.DirectiveUsageArgumentRemoved,
922922
criticality: {
@@ -949,7 +949,7 @@ export function directiveUsageChanged(
949949
compareLists(oldDirective?.arguments || [], newDirective.arguments || [], {
950950
onAdded(argument) {
951951
addChange(
952-
directiveUsageArgumentAdded({
952+
directiveUsageArgumentAddedFromMeta({
953953
type: ChangeType.DirectiveUsageArgumentAdded,
954954
meta: {
955955
addedArgumentName: argument.name.value,
@@ -966,7 +966,7 @@ export function directiveUsageChanged(
966966
},
967967

968968
onMutual(argument) {
969-
directiveUsageArgumentAdded({
969+
directiveUsageArgumentAddedFromMeta({
970970
type: ChangeType.DirectiveUsageArgumentAdded,
971971
meta: {
972972
addedArgumentName: argument.newVersion.name.value,
@@ -984,7 +984,7 @@ export function directiveUsageChanged(
984984

985985
onRemoved(argument) {
986986
addChange(
987-
directiveUsageArgumentRemoved({
987+
directiveUsageArgumentRemovedFromMeta({
988988
type: ChangeType.DirectiveUsageArgumentRemoved,
989989
meta: {
990990
removedArgumentName: argument.name.value,

packages/core/src/diff/changes/schema.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ export function schemaQueryTypeChangedFromMeta(args: SchemaQueryTypeChangedChang
1616
return {
1717
type: ChangeType.SchemaQueryTypeChanged,
1818
criticality: {
19-
level: CriticalityLevel.Breaking,
19+
level: args.meta.oldQueryTypeName === 'unknown' ? CriticalityLevel.NonBreaking : CriticalityLevel.Breaking,
2020
},
2121
message: buildSchemaQueryTypeChangedMessage(args.meta),
2222
meta: args.meta,
@@ -49,7 +49,7 @@ export function schemaMutationTypeChangedFromMeta(args: SchemaMutationTypeChange
4949
return {
5050
type: ChangeType.SchemaMutationTypeChanged,
5151
criticality: {
52-
level: CriticalityLevel.Breaking,
52+
level: args.meta.oldMutationTypeName === 'unknown' ? CriticalityLevel.NonBreaking : CriticalityLevel.Breaking,
5353
},
5454
message: buildSchemaMutationTypeChangedMessage(args.meta),
5555
meta: args.meta,
@@ -82,7 +82,7 @@ export function schemaSubscriptionTypeChangedFromMeta(args: SchemaSubscriptionTy
8282
return {
8383
type: ChangeType.SchemaSubscriptionTypeChanged,
8484
criticality: {
85-
level: CriticalityLevel.Breaking,
85+
level: args.meta.oldSubscriptionTypeName === 'unknown' ? CriticalityLevel.NonBreaking : CriticalityLevel.Breaking,
8686
},
8787
message: buildSchemaSubscriptionTypeChangedMessage(args.meta),
8888
meta: args.meta,

packages/core/src/diff/input.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export function changesInInputObject(
2626

2727
compareLists(Object.values(oldFields), Object.values(newFields), {
2828
onAdded(field) {
29-
addChange(inputFieldAdded(newInput, field, oldInput === null));
29+
addChange(inputFieldAdded(newInput, field, oldInput == null));
3030
changesInInputField(newInput, null, field, addChange);
3131
},
3232
onRemoved(field) {

packages/core/src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ export {
5656
directiveUsageSchemaRemovedFromMeta,
5757
directiveUsageUnionMemberAddedFromMeta,
5858
directiveUsageUnionMemberRemovedFromMeta,
59+
directiveUsageArgumentRemovedFromMeta,
60+
directiveUsageArgumentAddedFromMeta
5961
} from './diff/changes/directive-usage.js';
6062
export {
6163
directiveRemovedFromMeta,

packages/core/src/utils/compare.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -78,13 +78,13 @@ export function compareLists<T extends { name: string | NameNode }>(
7878
const mutual: Array<{ newVersion: T; oldVersion: T }> = [];
7979

8080
for (const oldItem of oldList) {
81-
const newItem = newMap[extractName(oldItem.name)];
82-
if (newItem === undefined) {
81+
const newItem = newMap[extractName(oldItem.name)] ?? null;
82+
if (newItem === null) {
8383
removed.push(oldItem);
8484
} else {
8585
mutual.push({
8686
newVersion: newItem,
87-
oldVersion: oldItem,
87+
oldVersion: oldItem ?? null,
8888
});
8989
}
9090
}

packages/patch/src/__tests__/fields.test.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,20 @@ describe('fields', () => {
4545
await expectPatchToMatch(before, after);
4646
});
4747

48+
test('fieldAdded to new type', async () => {
49+
const before = /* GraphQL */ `
50+
scalar Foo
51+
`;
52+
const after = /* GraphQL */ `
53+
scalar Foo
54+
type Product {
55+
id: ID!
56+
name: String
57+
}
58+
`;
59+
await expectPatchToMatch(before, after);
60+
});
61+
4862
test('fieldArgumentAdded', async () => {
4963
const before = /* GraphQL */ `
5064
scalar ChatSession

packages/patch/src/__tests__/inputs.test.ts

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,23 @@ describe('inputs', () => {
1616
await expectPatchToMatch(before, after);
1717
});
1818

19+
test('inputFieldAdded to new input', async () => {
20+
const before = /* GraphQL */ `
21+
scalar Foo
22+
`;
23+
const after = /* GraphQL */ `
24+
scalar Foo
25+
input FooInput {
26+
id: ID!
27+
other: String
28+
}
29+
type Query {
30+
foo(foo: FooInput): Foo
31+
}
32+
`;
33+
const changes = await expectPatchToMatch(before, after);
34+
});
35+
1936
test('inputFieldRemoved', async () => {
2037
const before = /* GraphQL */ `
2138
input FooInput {

0 commit comments

Comments
 (0)