@graphql-inspector/cli 3.4.12 → 3.4.13-alpha-20230413084834-8074e32d
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/cjs/core/src/diff/changes/argument.js +80 -19
- package/cjs/core/src/diff/changes/directive.js +208 -39
- package/cjs/core/src/diff/changes/enum.js +123 -25
- package/cjs/core/src/diff/changes/field.js +260 -69
- package/cjs/core/src/diff/changes/input.js +153 -34
- package/cjs/core/src/diff/changes/object.js +37 -9
- package/cjs/core/src/diff/changes/schema.js +55 -13
- package/cjs/core/src/diff/changes/type.js +106 -19
- package/cjs/core/src/diff/changes/union.js +35 -7
- package/cjs/core/src/diff/rules/consider-usage.js +1 -1
- package/cjs/core/src/index.js +63 -1
- package/cjs/core/src/utils/is-deprecated.js +1 -1
- package/cjs/core/src/utils/string.js +3 -0
- package/cjs/github/src/helpers/config.js +6 -2
- package/cjs/github/src/helpers/utils.js +1 -1
- package/esm/core/src/diff/changes/argument.js +77 -19
- package/esm/core/src/diff/changes/directive.js +198 -39
- package/esm/core/src/diff/changes/enum.js +117 -25
- package/esm/core/src/diff/changes/field.js +240 -62
- package/esm/core/src/diff/changes/input.js +145 -34
- package/esm/core/src/diff/changes/object.js +35 -9
- package/esm/core/src/diff/changes/schema.js +50 -11
- package/esm/core/src/diff/changes/type.js +100 -19
- package/esm/core/src/diff/changes/union.js +33 -7
- package/esm/core/src/diff/rules/consider-usage.js +1 -1
- package/esm/core/src/index.js +9 -0
- package/esm/core/src/utils/is-deprecated.js +1 -1
- package/esm/core/src/utils/string.js +3 -0
- package/esm/github/src/helpers/config.js +6 -2
- package/esm/github/src/helpers/utils.js +1 -1
- package/package.json +7 -7
- package/typings/core/src/diff/changes/argument.d.cts +52 -4
- package/typings/core/src/diff/changes/argument.d.ts +52 -4
- package/typings/core/src/diff/changes/change.d.cts +500 -2
- package/typings/core/src/diff/changes/change.d.ts +500 -2
- package/typings/core/src/diff/changes/directive.d.cts +147 -11
- package/typings/core/src/diff/changes/directive.d.ts +147 -11
- package/typings/core/src/diff/changes/enum.d.cts +75 -7
- package/typings/core/src/diff/changes/enum.d.ts +75 -7
- package/typings/core/src/diff/changes/field.d.cts +189 -14
- package/typings/core/src/diff/changes/field.d.ts +189 -14
- package/typings/core/src/diff/changes/input.d.cts +112 -8
- package/typings/core/src/diff/changes/input.d.ts +112 -8
- package/typings/core/src/diff/changes/object.d.cts +29 -3
- package/typings/core/src/diff/changes/object.d.ts +29 -3
- package/typings/core/src/diff/changes/schema.d.cts +37 -4
- package/typings/core/src/diff/changes/schema.d.ts +37 -4
- package/typings/core/src/diff/changes/type.d.cts +80 -7
- package/typings/core/src/diff/changes/type.d.ts +80 -7
- package/typings/core/src/diff/changes/union.d.cts +29 -3
- package/typings/core/src/diff/changes/union.d.ts +29 -3
- package/typings/core/src/index.d.cts +10 -0
- package/typings/core/src/index.d.ts +10 -0
- package/typings/core/src/utils/is-deprecated.d.cts +1 -1
- package/typings/core/src/utils/is-deprecated.d.ts +1 -1
- package/typings/core/src/utils/string.d.cts +1 -1
- package/typings/core/src/utils/string.d.ts +1 -1
- package/typings/core/utils/testing.d.cts +2 -2
- package/typings/core/utils/testing.d.ts +2 -2
- package/typings/github/src/helpers/utils.d.cts +1 -1
- package/typings/github/src/helpers/utils.d.ts +1 -1
|
@@ -1,66 +1,158 @@
|
|
|
1
1
|
import { isDeprecated } from '../../utils/is-deprecated.js';
|
|
2
|
-
import { ChangeType, CriticalityLevel } from './change.js';
|
|
3
|
-
|
|
2
|
+
import { ChangeType, CriticalityLevel, } from './change.js';
|
|
3
|
+
function buildEnumValueRemovedMessage(args) {
|
|
4
|
+
return `Enum value '${args.removedEnumValueName}' ${args.isEnumValueDeprecated ? '(deprecated) ' : ''}was removed from enum '${args.enumName}'`;
|
|
5
|
+
}
|
|
6
|
+
const enumValueRemovedCriticalityBreakingReason = `Removing an enum value will cause existing queries that use this enum value to error.`;
|
|
7
|
+
export function enumValueRemovedFromMeta(args) {
|
|
4
8
|
return {
|
|
9
|
+
type: ChangeType.EnumValueRemoved,
|
|
5
10
|
criticality: {
|
|
6
11
|
level: CriticalityLevel.Breaking,
|
|
7
|
-
reason:
|
|
12
|
+
reason: enumValueRemovedCriticalityBreakingReason,
|
|
8
13
|
},
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
path: [
|
|
14
|
+
message: buildEnumValueRemovedMessage(args.meta),
|
|
15
|
+
meta: args.meta,
|
|
16
|
+
path: [args.meta.enumName, args.meta.removedEnumValueName].join('.'),
|
|
12
17
|
};
|
|
13
18
|
}
|
|
14
|
-
export function
|
|
19
|
+
export function enumValueRemoved(oldEnum, value) {
|
|
20
|
+
return enumValueRemovedFromMeta({
|
|
21
|
+
type: ChangeType.EnumValueRemoved,
|
|
22
|
+
meta: {
|
|
23
|
+
enumName: oldEnum.name,
|
|
24
|
+
removedEnumValueName: value.name,
|
|
25
|
+
isEnumValueDeprecated: isDeprecated(value),
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
function buildEnumValueAddedMessage(args) {
|
|
30
|
+
return `Enum value '${args.meta.addedEnumValueName}' was added to enum '${args.meta.enumName}'`;
|
|
31
|
+
}
|
|
32
|
+
const enumValueAddedCriticalityDangerousReason = `Adding an enum value may break existing clients that were not programming defensively against an added case when querying an enum.`;
|
|
33
|
+
export function enumValueAddedFromMeta(args) {
|
|
15
34
|
return {
|
|
35
|
+
type: ChangeType.EnumValueAdded,
|
|
16
36
|
criticality: {
|
|
17
37
|
level: CriticalityLevel.Dangerous,
|
|
18
|
-
reason:
|
|
38
|
+
reason: enumValueAddedCriticalityDangerousReason,
|
|
19
39
|
},
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
path: [
|
|
40
|
+
message: buildEnumValueAddedMessage(args),
|
|
41
|
+
meta: args.meta,
|
|
42
|
+
path: [args.meta.enumName, args.meta.addedEnumValueName].join('.'),
|
|
23
43
|
};
|
|
24
44
|
}
|
|
25
|
-
export function
|
|
45
|
+
export function enumValueAdded(newEnum, value) {
|
|
46
|
+
return enumValueAddedFromMeta({
|
|
47
|
+
type: ChangeType.EnumValueAdded,
|
|
48
|
+
meta: {
|
|
49
|
+
enumName: newEnum.name,
|
|
50
|
+
addedEnumValueName: value.name,
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
function buildEnumValueDescriptionChangedMessage(args) {
|
|
55
|
+
var _a, _b, _c;
|
|
56
|
+
return args.oldEnumValueDescription === null
|
|
57
|
+
? `Description '${(_a = args.newEnumValueDescription) !== null && _a !== void 0 ? _a : 'undefined'}' was added to enum value '${args.enumName}.${args.enumValueName}'`
|
|
58
|
+
: `Description for enum value '${args.enumName}.${args.enumValueName}' changed from '${(_b = args.oldEnumValueDescription) !== null && _b !== void 0 ? _b : 'undefined'}' to '${(_c = args.newEnumValueDescription) !== null && _c !== void 0 ? _c : 'undefined'}'`;
|
|
59
|
+
}
|
|
60
|
+
export function enumValueDescriptionChangedFromMeta(args) {
|
|
26
61
|
return {
|
|
27
62
|
criticality: {
|
|
28
63
|
level: CriticalityLevel.NonBreaking,
|
|
29
64
|
},
|
|
30
65
|
type: ChangeType.EnumValueDescriptionChanged,
|
|
31
|
-
message:
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
path: [newEnum.name, oldValue.name].join('.'),
|
|
66
|
+
message: buildEnumValueDescriptionChangedMessage(args.meta),
|
|
67
|
+
path: [args.meta.enumName, args.meta.enumValueName].join('.'),
|
|
68
|
+
meta: args.meta,
|
|
35
69
|
};
|
|
36
70
|
}
|
|
37
|
-
export function
|
|
71
|
+
export function enumValueDescriptionChanged(newEnum, oldValue, newValue) {
|
|
72
|
+
var _a, _b;
|
|
73
|
+
return enumValueDescriptionChangedFromMeta({
|
|
74
|
+
type: ChangeType.EnumValueDescriptionChanged,
|
|
75
|
+
meta: {
|
|
76
|
+
enumName: newEnum.name,
|
|
77
|
+
enumValueName: oldValue.name,
|
|
78
|
+
oldEnumValueDescription: (_a = oldValue.description) !== null && _a !== void 0 ? _a : null,
|
|
79
|
+
newEnumValueDescription: (_b = newValue.description) !== null && _b !== void 0 ? _b : null,
|
|
80
|
+
},
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
function buildEnumValueDeprecationChangedMessage(args) {
|
|
84
|
+
return `Enum value '${args.enumName}.${args.enumValueName}' deprecation reason changed from '${args.oldEnumValueDeprecationReason}' to '${args.newEnumValueDeprecationReason}'`;
|
|
85
|
+
}
|
|
86
|
+
export function enumValueDeprecationReasonChangedFromMeta(args) {
|
|
38
87
|
return {
|
|
39
88
|
criticality: {
|
|
40
89
|
level: CriticalityLevel.NonBreaking,
|
|
41
90
|
},
|
|
42
91
|
type: ChangeType.EnumValueDeprecationReasonChanged,
|
|
43
|
-
message:
|
|
44
|
-
path: [
|
|
92
|
+
message: buildEnumValueDeprecationChangedMessage(args.meta),
|
|
93
|
+
path: [args.meta.enumName, args.meta.enumValueName].join('.'),
|
|
94
|
+
meta: args.meta,
|
|
45
95
|
};
|
|
46
96
|
}
|
|
47
|
-
export function
|
|
97
|
+
export function enumValueDeprecationReasonChanged(newEnum, oldValue, newValue) {
|
|
98
|
+
var _a, _b;
|
|
99
|
+
return enumValueDeprecationReasonChangedFromMeta({
|
|
100
|
+
type: ChangeType.EnumValueDeprecationReasonChanged,
|
|
101
|
+
meta: {
|
|
102
|
+
enumName: newEnum.name,
|
|
103
|
+
enumValueName: oldValue.name,
|
|
104
|
+
oldEnumValueDeprecationReason: (_a = oldValue.deprecationReason) !== null && _a !== void 0 ? _a : '',
|
|
105
|
+
newEnumValueDeprecationReason: (_b = newValue.deprecationReason) !== null && _b !== void 0 ? _b : '',
|
|
106
|
+
},
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
function buildEnumValueDeprecationReasonAddedMessage(args) {
|
|
110
|
+
return `Enum value '${args.enumName}.${args.enumValueName}' was deprecated with reason '${args.addedValueDeprecationReason}'`;
|
|
111
|
+
}
|
|
112
|
+
export function enumValueDeprecationReasonAddedFromMeta(args) {
|
|
48
113
|
return {
|
|
49
114
|
criticality: {
|
|
50
115
|
level: CriticalityLevel.NonBreaking,
|
|
51
116
|
},
|
|
52
117
|
type: ChangeType.EnumValueDeprecationReasonAdded,
|
|
53
|
-
message:
|
|
54
|
-
path: [
|
|
118
|
+
message: buildEnumValueDeprecationReasonAddedMessage(args.meta),
|
|
119
|
+
path: [args.meta.enumName, args.meta.enumValueName].join('.'),
|
|
120
|
+
meta: args.meta,
|
|
55
121
|
};
|
|
56
122
|
}
|
|
57
|
-
export function
|
|
123
|
+
export function enumValueDeprecationReasonAdded(newEnum, oldValue, newValue) {
|
|
124
|
+
var _a;
|
|
125
|
+
return enumValueDeprecationReasonAddedFromMeta({
|
|
126
|
+
type: ChangeType.EnumValueDeprecationReasonAdded,
|
|
127
|
+
meta: {
|
|
128
|
+
enumName: newEnum.name,
|
|
129
|
+
enumValueName: oldValue.name,
|
|
130
|
+
addedValueDeprecationReason: (_a = newValue.deprecationReason) !== null && _a !== void 0 ? _a : '',
|
|
131
|
+
},
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
function buildEnumValueDeprecationReasonRemovedMessage(args) {
|
|
135
|
+
return `Deprecation reason was removed from enum value '${args.enumName}.${args.enumValueName}'`;
|
|
136
|
+
}
|
|
137
|
+
export function enumValueDeprecationReasonRemovedFromMeta(args) {
|
|
58
138
|
return {
|
|
59
139
|
criticality: {
|
|
60
140
|
level: CriticalityLevel.NonBreaking,
|
|
61
141
|
},
|
|
62
142
|
type: ChangeType.EnumValueDeprecationReasonRemoved,
|
|
63
|
-
message:
|
|
64
|
-
path: [
|
|
143
|
+
message: buildEnumValueDeprecationReasonRemovedMessage(args.meta),
|
|
144
|
+
path: [args.meta.enumName, args.meta.enumValueName].join('.'),
|
|
145
|
+
meta: args.meta,
|
|
65
146
|
};
|
|
66
147
|
}
|
|
148
|
+
export function enumValueDeprecationReasonRemoved(newEnum, oldValue, _newValue) {
|
|
149
|
+
var _a;
|
|
150
|
+
return enumValueDeprecationReasonRemovedFromMeta({
|
|
151
|
+
type: ChangeType.EnumValueDeprecationReasonRemoved,
|
|
152
|
+
meta: {
|
|
153
|
+
enumName: newEnum.name,
|
|
154
|
+
enumValueName: oldValue.name,
|
|
155
|
+
removedEnumValueDeprecationReason: (_a = oldValue.deprecationReason) !== null && _a !== void 0 ? _a : '',
|
|
156
|
+
},
|
|
157
|
+
});
|
|
158
|
+
}
|
|
@@ -1,150 +1,328 @@
|
|
|
1
1
|
import { isInterfaceType, isNonNullType, } from 'graphql';
|
|
2
2
|
import { safeChangeForField } from '../../utils/graphql.js';
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
import { ChangeType, CriticalityLevel, } from './change.js';
|
|
4
|
+
function buildFieldRemovedMessage(args) {
|
|
5
|
+
return `Field '${args.removedFieldName}' ${args.isRemovedFieldDeprecated ? '(deprecated) ' : ''}was removed from ${args.typeType} '${args.typeName}'`;
|
|
6
|
+
}
|
|
7
|
+
export function fieldRemovedFromMeta(args) {
|
|
7
8
|
return {
|
|
9
|
+
type: ChangeType.FieldRemoved,
|
|
8
10
|
criticality: {
|
|
9
11
|
level: CriticalityLevel.Breaking,
|
|
10
|
-
reason:
|
|
12
|
+
reason: args.meta.isRemovedFieldDeprecated
|
|
11
13
|
? `Removing a deprecated field is a breaking change. Before removing it, you may want to look at the field's usage to see the impact of removing the field.`
|
|
12
14
|
: `Removing a field is a breaking change. It is preferable to deprecate the field before removing it.`,
|
|
13
15
|
},
|
|
16
|
+
message: buildFieldRemovedMessage(args.meta),
|
|
17
|
+
meta: args.meta,
|
|
18
|
+
path: [args.meta.typeName, args.meta.removedFieldName].join('.'),
|
|
19
|
+
};
|
|
20
|
+
}
|
|
21
|
+
export function fieldRemoved(type, field) {
|
|
22
|
+
const entity = isInterfaceType(type) ? 'interface' : 'object type';
|
|
23
|
+
return fieldRemovedFromMeta({
|
|
14
24
|
type: ChangeType.FieldRemoved,
|
|
15
|
-
|
|
16
|
-
|
|
25
|
+
meta: {
|
|
26
|
+
typeName: type.name,
|
|
27
|
+
removedFieldName: field.name,
|
|
28
|
+
isRemovedFieldDeprecated: field.deprecationReason != null,
|
|
29
|
+
typeType: entity,
|
|
30
|
+
},
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
function buildFieldAddedMessage(args) {
|
|
34
|
+
return `Field '${args.addedFieldName}' was added to ${args.typeType} '${args.typeName}'`;
|
|
35
|
+
}
|
|
36
|
+
export function fieldAddedFromMeta(args) {
|
|
37
|
+
return {
|
|
38
|
+
type: ChangeType.FieldAdded,
|
|
39
|
+
criticality: {
|
|
40
|
+
level: CriticalityLevel.NonBreaking,
|
|
41
|
+
},
|
|
42
|
+
message: buildFieldAddedMessage(args.meta),
|
|
43
|
+
meta: args.meta,
|
|
44
|
+
path: [args.meta.typeName, args.meta.addedFieldName].join('.'),
|
|
17
45
|
};
|
|
18
46
|
}
|
|
19
47
|
export function fieldAdded(type, field) {
|
|
20
48
|
const entity = isInterfaceType(type) ? 'interface' : 'object type';
|
|
49
|
+
return fieldAddedFromMeta({
|
|
50
|
+
type: ChangeType.FieldAdded,
|
|
51
|
+
meta: {
|
|
52
|
+
typeName: type.name,
|
|
53
|
+
addedFieldName: field.name,
|
|
54
|
+
typeType: entity,
|
|
55
|
+
},
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
function buildFieldDescriptionChangedMessage(args) {
|
|
59
|
+
return `Field '${args.typeName}.${args.fieldName}' description changed from '${args.oldDescription}' to '${args.newDescription}'`;
|
|
60
|
+
}
|
|
61
|
+
export function fieldDescriptionChangedFromMeta(args) {
|
|
21
62
|
return {
|
|
63
|
+
type: ChangeType.FieldDescriptionChanged,
|
|
22
64
|
criticality: {
|
|
23
65
|
level: CriticalityLevel.NonBreaking,
|
|
24
66
|
},
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
path: [
|
|
67
|
+
message: buildFieldDescriptionChangedMessage(args.meta),
|
|
68
|
+
meta: args.meta,
|
|
69
|
+
path: [args.meta.typeName, args.meta.fieldName].join('.'),
|
|
28
70
|
};
|
|
29
71
|
}
|
|
30
72
|
export function fieldDescriptionChanged(type, oldField, newField) {
|
|
73
|
+
var _a, _b;
|
|
74
|
+
return fieldDescriptionChangedFromMeta({
|
|
75
|
+
type: ChangeType.FieldDescriptionChanged,
|
|
76
|
+
meta: {
|
|
77
|
+
fieldName: oldField.name,
|
|
78
|
+
typeName: type.name,
|
|
79
|
+
oldDescription: (_a = oldField.description) !== null && _a !== void 0 ? _a : '',
|
|
80
|
+
newDescription: (_b = newField.description) !== null && _b !== void 0 ? _b : '',
|
|
81
|
+
},
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
function buildFieldDescriptionAddedMessage(args) {
|
|
85
|
+
return `Field '${args.typeName}.${args.fieldName}' has description '${args.addedDescription}'`;
|
|
86
|
+
}
|
|
87
|
+
export function fieldDescriptionAddedFromMeta(args) {
|
|
31
88
|
return {
|
|
89
|
+
type: ChangeType.FieldDescriptionAdded,
|
|
32
90
|
criticality: {
|
|
33
91
|
level: CriticalityLevel.NonBreaking,
|
|
34
92
|
},
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
path: [
|
|
93
|
+
message: buildFieldDescriptionAddedMessage(args.meta),
|
|
94
|
+
meta: args.meta,
|
|
95
|
+
path: [args.meta.typeName, args.meta.fieldName].join('.'),
|
|
38
96
|
};
|
|
39
97
|
}
|
|
40
98
|
export function fieldDescriptionAdded(type, field) {
|
|
99
|
+
var _a;
|
|
100
|
+
return fieldDescriptionAddedFromMeta({
|
|
101
|
+
type: ChangeType.FieldDescriptionAdded,
|
|
102
|
+
meta: {
|
|
103
|
+
typeName: type.name,
|
|
104
|
+
fieldName: field.name,
|
|
105
|
+
addedDescription: (_a = field.description) !== null && _a !== void 0 ? _a : '',
|
|
106
|
+
},
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
function buildFieldDescriptionRemovedMessage(args) {
|
|
110
|
+
return `Description was removed from field '${args.typeName}.${args.fieldName}'`;
|
|
111
|
+
}
|
|
112
|
+
export function fieldDescriptionRemovedFromMeta(args) {
|
|
41
113
|
return {
|
|
114
|
+
type: ChangeType.FieldDescriptionRemoved,
|
|
42
115
|
criticality: {
|
|
43
116
|
level: CriticalityLevel.NonBreaking,
|
|
44
117
|
},
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
path: [
|
|
118
|
+
message: buildFieldDescriptionRemovedMessage(args.meta),
|
|
119
|
+
meta: args.meta,
|
|
120
|
+
path: [args.meta.typeName, args.meta.fieldName].join('.'),
|
|
48
121
|
};
|
|
49
122
|
}
|
|
50
123
|
export function fieldDescriptionRemoved(type, field) {
|
|
124
|
+
return fieldDescriptionRemovedFromMeta({
|
|
125
|
+
type: ChangeType.FieldDescriptionRemoved,
|
|
126
|
+
meta: {
|
|
127
|
+
typeName: type.name,
|
|
128
|
+
fieldName: field.name,
|
|
129
|
+
},
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
function buildFieldDeprecatedAddedMessage(args) {
|
|
133
|
+
return `Field '${args.typeName}.${args.fieldName}' is deprecated`;
|
|
134
|
+
}
|
|
135
|
+
export function fieldDeprecationAddedFromMeta(args) {
|
|
51
136
|
return {
|
|
137
|
+
type: ChangeType.FieldDeprecationAdded,
|
|
52
138
|
criticality: {
|
|
53
139
|
level: CriticalityLevel.NonBreaking,
|
|
54
140
|
},
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
path: [
|
|
141
|
+
message: buildFieldDeprecatedAddedMessage(args.meta),
|
|
142
|
+
meta: args.meta,
|
|
143
|
+
path: [args.meta.typeName, args.meta.fieldName].join('.'),
|
|
58
144
|
};
|
|
59
145
|
}
|
|
60
146
|
export function fieldDeprecationAdded(type, field) {
|
|
147
|
+
return fieldDeprecationAddedFromMeta({
|
|
148
|
+
type: ChangeType.FieldDeprecationAdded,
|
|
149
|
+
meta: {
|
|
150
|
+
typeName: type.name,
|
|
151
|
+
fieldName: field.name,
|
|
152
|
+
},
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
export function fieldDeprecationRemovedFromMeta(args) {
|
|
61
156
|
return {
|
|
157
|
+
type: ChangeType.FieldDeprecationRemoved,
|
|
62
158
|
criticality: {
|
|
63
|
-
level: CriticalityLevel.
|
|
159
|
+
level: CriticalityLevel.Dangerous,
|
|
64
160
|
},
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
path: [
|
|
161
|
+
message: `Field '${args.meta.typeName}.${args.meta.fieldName}' is no longer deprecated`,
|
|
162
|
+
meta: args.meta,
|
|
163
|
+
path: [args.meta.typeName, args.meta.fieldName].join('.'),
|
|
68
164
|
};
|
|
69
165
|
}
|
|
70
166
|
export function fieldDeprecationRemoved(type, field) {
|
|
167
|
+
return fieldDeprecationRemovedFromMeta({
|
|
168
|
+
type: ChangeType.FieldDeprecationRemoved,
|
|
169
|
+
meta: {
|
|
170
|
+
fieldName: field.name,
|
|
171
|
+
typeName: type.name,
|
|
172
|
+
},
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
function buildFieldDeprecationReasonChangedMessage(args) {
|
|
176
|
+
return `Deprecation reason on field '${args.typeName}.${args.fieldName}' has changed from '${args.oldDeprecationReason}' to '${args.newDeprecationReason}'`;
|
|
177
|
+
}
|
|
178
|
+
export function fieldDeprecationReasonChangedFromMeta(args) {
|
|
71
179
|
return {
|
|
180
|
+
type: ChangeType.FieldDeprecationReasonChanged,
|
|
72
181
|
criticality: {
|
|
73
|
-
level: CriticalityLevel.
|
|
182
|
+
level: CriticalityLevel.NonBreaking,
|
|
74
183
|
},
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
path: [
|
|
184
|
+
message: buildFieldDeprecationReasonChangedMessage(args.meta),
|
|
185
|
+
meta: args.meta,
|
|
186
|
+
path: [args.meta.typeName, args.meta.fieldName].join('.'),
|
|
78
187
|
};
|
|
79
188
|
}
|
|
80
189
|
export function fieldDeprecationReasonChanged(type, oldField, newField) {
|
|
190
|
+
var _a, _b;
|
|
191
|
+
return fieldDeprecationReasonChangedFromMeta({
|
|
192
|
+
type: ChangeType.FieldDeprecationReasonChanged,
|
|
193
|
+
meta: {
|
|
194
|
+
fieldName: newField.name,
|
|
195
|
+
typeName: type.name,
|
|
196
|
+
newDeprecationReason: (_a = newField.deprecationReason) !== null && _a !== void 0 ? _a : '',
|
|
197
|
+
oldDeprecationReason: (_b = oldField.deprecationReason) !== null && _b !== void 0 ? _b : '',
|
|
198
|
+
},
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
function buildFieldDeprecationReasonAddedMessage(args) {
|
|
202
|
+
return `Field '${args.typeName}.${args.fieldName}' has deprecation reason '${args.addedDeprecationReason}'`;
|
|
203
|
+
}
|
|
204
|
+
export function fieldDeprecationReasonAddedFromMeta(args) {
|
|
81
205
|
return {
|
|
206
|
+
type: ChangeType.FieldDeprecationReasonAdded,
|
|
82
207
|
criticality: {
|
|
83
208
|
level: CriticalityLevel.NonBreaking,
|
|
84
209
|
},
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
path: [
|
|
210
|
+
message: buildFieldDeprecationReasonAddedMessage(args.meta),
|
|
211
|
+
meta: args.meta,
|
|
212
|
+
path: [args.meta.typeName, args.meta.fieldName].join('.'),
|
|
88
213
|
};
|
|
89
214
|
}
|
|
90
215
|
export function fieldDeprecationReasonAdded(type, field) {
|
|
216
|
+
var _a;
|
|
217
|
+
return fieldDeprecationReasonAddedFromMeta({
|
|
218
|
+
type: ChangeType.FieldDeprecationReasonAdded,
|
|
219
|
+
meta: {
|
|
220
|
+
typeName: type.name,
|
|
221
|
+
fieldName: field.name,
|
|
222
|
+
addedDeprecationReason: (_a = field.deprecationReason) !== null && _a !== void 0 ? _a : '',
|
|
223
|
+
},
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
export function fieldDeprecationReasonRemovedFromMeta(args) {
|
|
91
227
|
return {
|
|
228
|
+
type: ChangeType.FieldDeprecationReasonRemoved,
|
|
92
229
|
criticality: {
|
|
93
230
|
level: CriticalityLevel.NonBreaking,
|
|
94
231
|
},
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
path: [
|
|
232
|
+
message: `Deprecation reason was removed from field '${args.meta.typeName}.${args.meta.fieldName}'`,
|
|
233
|
+
meta: args.meta,
|
|
234
|
+
path: [args.meta.typeName, args.meta.fieldName].join('.'),
|
|
98
235
|
};
|
|
99
236
|
}
|
|
100
237
|
export function fieldDeprecationReasonRemoved(type, field) {
|
|
238
|
+
return fieldDeprecationReasonRemovedFromMeta({
|
|
239
|
+
type: ChangeType.FieldDeprecationReasonRemoved,
|
|
240
|
+
meta: {
|
|
241
|
+
typeName: type.name,
|
|
242
|
+
fieldName: field.name,
|
|
243
|
+
},
|
|
244
|
+
});
|
|
245
|
+
}
|
|
246
|
+
function buildFieldTypeChangedMessage(args) {
|
|
247
|
+
return `Field '${args.meta.typeName}.${args.meta.fieldName}' changed type from '${args.meta.oldFieldType}' to '${args.meta.newFieldType}'`;
|
|
248
|
+
}
|
|
249
|
+
export function fieldTypeChangedFromMeta(args) {
|
|
101
250
|
return {
|
|
251
|
+
type: ChangeType.FieldTypeChanged,
|
|
102
252
|
criticality: {
|
|
103
|
-
level:
|
|
253
|
+
level: args.meta.isSafeFieldTypeChange
|
|
254
|
+
? CriticalityLevel.NonBreaking
|
|
255
|
+
: CriticalityLevel.Breaking,
|
|
104
256
|
},
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
path: [
|
|
257
|
+
message: buildFieldTypeChangedMessage(args),
|
|
258
|
+
meta: args.meta,
|
|
259
|
+
path: [args.meta.typeName, args.meta.fieldName].join('.'),
|
|
108
260
|
};
|
|
109
261
|
}
|
|
110
262
|
export function fieldTypeChanged(type, oldField, newField) {
|
|
263
|
+
return fieldTypeChangedFromMeta({
|
|
264
|
+
type: ChangeType.FieldTypeChanged,
|
|
265
|
+
meta: {
|
|
266
|
+
typeName: type.name,
|
|
267
|
+
fieldName: oldField.name,
|
|
268
|
+
oldFieldType: oldField.type.toString(),
|
|
269
|
+
newFieldType: newField.type.toString(),
|
|
270
|
+
isSafeFieldTypeChange: safeChangeForField(oldField.type, newField.type),
|
|
271
|
+
},
|
|
272
|
+
});
|
|
273
|
+
}
|
|
274
|
+
function buildFieldArgumentAddedMessage(args) {
|
|
275
|
+
return `Argument '${args.addedArgumentName}: ${args.addedArgumentType}'${args.hasDefaultValue ? ' (with default value) ' : ' '}added to field '${args.typeName}.${args.fieldName}'`;
|
|
276
|
+
}
|
|
277
|
+
export function fieldArgumentAddedFromMeta(args) {
|
|
111
278
|
return {
|
|
279
|
+
type: ChangeType.FieldArgumentAdded,
|
|
112
280
|
criticality: {
|
|
113
|
-
level:
|
|
114
|
-
? CriticalityLevel.
|
|
115
|
-
: CriticalityLevel.
|
|
281
|
+
level: args.meta.isAddedFieldArgumentBreaking
|
|
282
|
+
? CriticalityLevel.Breaking
|
|
283
|
+
: CriticalityLevel.Dangerous,
|
|
116
284
|
},
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
path: [
|
|
285
|
+
message: buildFieldArgumentAddedMessage(args.meta),
|
|
286
|
+
meta: args.meta,
|
|
287
|
+
path: [args.meta.typeName, args.meta.fieldName, args.meta.addedArgumentName].join('.'),
|
|
120
288
|
};
|
|
121
289
|
}
|
|
122
290
|
export function fieldArgumentAdded(type, field, arg) {
|
|
123
291
|
const isBreaking = isNonNullType(arg.type) && typeof arg.defaultValue === 'undefined';
|
|
124
|
-
|
|
125
|
-
return {
|
|
126
|
-
criticality: isBreaking
|
|
127
|
-
? {
|
|
128
|
-
level: CriticalityLevel.Breaking,
|
|
129
|
-
reason: `Adding a required argument to an existing field is a breaking change because it will cause existing uses of this field to error.`,
|
|
130
|
-
}
|
|
131
|
-
: {
|
|
132
|
-
level: CriticalityLevel.Dangerous,
|
|
133
|
-
reason: `Adding a new argument to an existing field may involve a change in resolve function logic that potentially may cause some side effects.`,
|
|
134
|
-
},
|
|
292
|
+
return fieldArgumentAddedFromMeta({
|
|
135
293
|
type: ChangeType.FieldArgumentAdded,
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
294
|
+
meta: {
|
|
295
|
+
typeName: type.name,
|
|
296
|
+
fieldName: field.name,
|
|
297
|
+
addedArgumentName: arg.name,
|
|
298
|
+
addedArgumentType: arg.type.toString(),
|
|
299
|
+
hasDefaultValue: arg.defaultValue != null,
|
|
300
|
+
isAddedFieldArgumentBreaking: isBreaking,
|
|
301
|
+
},
|
|
302
|
+
});
|
|
139
303
|
}
|
|
140
|
-
|
|
304
|
+
function buildFieldArgumentRemovedMessage(args) {
|
|
305
|
+
return `Argument '${args.meta.removedFieldArgumentName}: ${args.meta.removedFieldType}' was removed from field '${args.meta.typeName}.${args.meta.fieldName}'`;
|
|
306
|
+
}
|
|
307
|
+
export function fieldArgumentRemovedFromMeta(args) {
|
|
141
308
|
return {
|
|
309
|
+
type: ChangeType.FieldArgumentRemoved,
|
|
142
310
|
criticality: {
|
|
143
311
|
level: CriticalityLevel.Breaking,
|
|
144
|
-
reason: `Removing a field argument is a breaking change because it will cause existing queries that use this argument to error.`,
|
|
145
312
|
},
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
path: [
|
|
313
|
+
message: buildFieldArgumentRemovedMessage(args),
|
|
314
|
+
meta: args.meta,
|
|
315
|
+
path: [args.meta.typeName, args.meta.fieldName, args.meta.removedFieldArgumentName].join('.'),
|
|
149
316
|
};
|
|
150
317
|
}
|
|
318
|
+
export function fieldArgumentRemoved(type, field, arg) {
|
|
319
|
+
return fieldArgumentRemovedFromMeta({
|
|
320
|
+
type: ChangeType.FieldArgumentRemoved,
|
|
321
|
+
meta: {
|
|
322
|
+
typeName: type.name,
|
|
323
|
+
fieldName: field.name,
|
|
324
|
+
removedFieldArgumentName: arg.name,
|
|
325
|
+
removedFieldType: arg.type.toString(),
|
|
326
|
+
},
|
|
327
|
+
});
|
|
328
|
+
}
|