@graphql-inspector/cli 3.4.13-alpha-20230417141810-fd2d33e7 → 3.4.13
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/README.md +3 -3
- package/cjs/action/src/run.js +1 -1
- package/cjs/commands/commands/src/index.js +7 -8
- package/cjs/commands/diff/src/index.js +6 -6
- package/cjs/commands/docs/src/index.js +1 -3
- package/cjs/commands/serve/src/fake.js +4 -4
- package/cjs/commands/serve/src/index.js +8 -7
- package/cjs/commands/similar/src/index.js +2 -2
- package/cjs/commands/validate/src/index.js +4 -4
- package/cjs/core/src/ast/document.js +2 -2
- package/cjs/core/src/coverage/index.js +7 -7
- 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/directive.js +2 -4
- package/cjs/core/src/diff/rules/consider-usage.js +3 -3
- package/cjs/core/src/index.js +63 -1
- package/cjs/core/src/similar/index.js +2 -2
- package/cjs/core/src/utils/compare.js +3 -9
- package/cjs/core/src/utils/is-deprecated.js +1 -1
- package/cjs/core/src/utils/string.js +5 -2
- package/cjs/core/src/validate/complexity.js +1 -1
- package/cjs/core/src/validate/directive-count.js +1 -1
- package/cjs/core/src/validate/index.js +12 -11
- package/cjs/core/src/validate/query-depth.js +1 -1
- package/cjs/github/src/helpers/config.js +6 -2
- package/cjs/github/src/helpers/utils.js +1 -1
- package/cjs/loaders/loaders/src/index.js +1 -2
- package/esm/action/src/run.js +1 -1
- package/esm/commands/commands/src/index.js +7 -8
- package/esm/commands/diff/src/index.js +6 -6
- package/esm/commands/docs/src/index.js +1 -4
- package/esm/commands/serve/src/fake.js +4 -4
- package/esm/commands/serve/src/index.js +8 -7
- package/esm/commands/similar/src/index.js +2 -2
- package/esm/commands/validate/src/index.js +4 -4
- package/esm/core/src/ast/document.js +2 -2
- package/esm/core/src/coverage/index.js +7 -7
- 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/directive.js +2 -4
- package/esm/core/src/diff/rules/consider-usage.js +3 -3
- package/esm/core/src/index.js +9 -0
- package/esm/core/src/similar/index.js +2 -2
- package/esm/core/src/utils/compare.js +3 -9
- package/esm/core/src/utils/is-deprecated.js +1 -1
- package/esm/core/src/utils/string.js +5 -2
- package/esm/core/src/validate/complexity.js +1 -1
- package/esm/core/src/validate/directive-count.js +1 -1
- package/esm/core/src/validate/index.js +12 -11
- package/esm/core/src/validate/query-depth.js +1 -1
- package/esm/github/src/helpers/config.js +6 -2
- package/esm/github/src/helpers/utils.js +1 -1
- package/esm/loaders/loaders/src/index.js +1 -2
- package/package.json +20 -20
- 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,42 +1,100 @@
|
|
|
1
1
|
import { safeChangeForInputValue } from '../../utils/graphql.js';
|
|
2
2
|
import { safeString } from '../../utils/string.js';
|
|
3
|
-
import { ChangeType, CriticalityLevel } from './change.js';
|
|
4
|
-
|
|
3
|
+
import { ChangeType, CriticalityLevel, } from './change.js';
|
|
4
|
+
function buildFieldArgumentDescriptionChangedMessage(args) {
|
|
5
|
+
return `Description for argument '${args.argumentName}' on field '${args.typeName}.${args.fieldName}' changed from '${args.oldDescription}' to '${args.newDescription}'`;
|
|
6
|
+
}
|
|
7
|
+
export function fieldArgumentDescriptionChangedFromMeta(args) {
|
|
5
8
|
return {
|
|
9
|
+
type: ChangeType.FieldArgumentDescriptionChanged,
|
|
6
10
|
criticality: {
|
|
7
11
|
level: CriticalityLevel.NonBreaking,
|
|
8
12
|
},
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
path: [
|
|
13
|
+
message: buildFieldArgumentDescriptionChangedMessage(args.meta),
|
|
14
|
+
meta: args.meta,
|
|
15
|
+
path: [args.meta.typeName, args.meta.fieldName, args.meta.argumentName].join('.'),
|
|
12
16
|
};
|
|
13
17
|
}
|
|
14
|
-
export function
|
|
18
|
+
export function fieldArgumentDescriptionChanged(type, field, oldArg, newArg) {
|
|
19
|
+
var _a, _b;
|
|
20
|
+
return fieldArgumentDescriptionChangedFromMeta({
|
|
21
|
+
type: ChangeType.FieldArgumentDescriptionChanged,
|
|
22
|
+
meta: {
|
|
23
|
+
typeName: type.name,
|
|
24
|
+
fieldName: field.name,
|
|
25
|
+
argumentName: oldArg.name,
|
|
26
|
+
oldDescription: (_a = oldArg.description) !== null && _a !== void 0 ? _a : null,
|
|
27
|
+
newDescription: (_b = newArg.description) !== null && _b !== void 0 ? _b : null,
|
|
28
|
+
},
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
function buildFieldArgumentDefaultChangedMessage(args) {
|
|
32
|
+
return args.oldDefaultValue === undefined
|
|
33
|
+
? `Default value '${args.newDefaultValue}' was added to argument '${args.argumentName}' on field '${args.typeName}.${args.fieldName}'`
|
|
34
|
+
: `Default value for argument '${args.argumentName}' on field '${args.typeName}.${args.fieldName}' changed from '${args.oldDefaultValue}' to '${args.newDefaultValue}'`;
|
|
35
|
+
}
|
|
36
|
+
const fieldArgumentDefaultChangedCriticalityDangerousReason = 'Changing the default value for an argument may change the runtime behaviour of a field if it was never provided.';
|
|
37
|
+
export function fieldArgumentDefaultChangedFromMeta(args) {
|
|
15
38
|
return {
|
|
39
|
+
type: ChangeType.FieldArgumentDefaultChanged,
|
|
16
40
|
criticality: {
|
|
17
41
|
level: CriticalityLevel.Dangerous,
|
|
18
|
-
reason:
|
|
42
|
+
reason: fieldArgumentDefaultChangedCriticalityDangerousReason,
|
|
19
43
|
},
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
: `Default value for argument '${newArg.name}' on field '${type.name}.${field.name}' changed from '${safeString(oldArg.defaultValue)}' to '${safeString(newArg.defaultValue)}'`,
|
|
24
|
-
path: [type.name, field.name, oldArg.name].join('.'),
|
|
44
|
+
message: buildFieldArgumentDefaultChangedMessage(args.meta),
|
|
45
|
+
meta: args.meta,
|
|
46
|
+
path: [args.meta.typeName, args.meta.fieldName, args.meta.argumentName].join('.'),
|
|
25
47
|
};
|
|
26
48
|
}
|
|
27
|
-
export function
|
|
49
|
+
export function fieldArgumentDefaultChanged(type, field, oldArg, newArg) {
|
|
50
|
+
const meta = {
|
|
51
|
+
typeName: type.name,
|
|
52
|
+
fieldName: field.name,
|
|
53
|
+
argumentName: newArg.name,
|
|
54
|
+
};
|
|
55
|
+
if (oldArg.defaultValue !== undefined) {
|
|
56
|
+
meta.oldDefaultValue = safeString(oldArg.defaultValue);
|
|
57
|
+
}
|
|
58
|
+
if (newArg.defaultValue !== undefined) {
|
|
59
|
+
meta.newDefaultValue = safeString(newArg.defaultValue);
|
|
60
|
+
}
|
|
61
|
+
return fieldArgumentDefaultChangedFromMeta({
|
|
62
|
+
type: ChangeType.FieldArgumentDefaultChanged,
|
|
63
|
+
meta,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
function buildFieldArgumentTypeChangedMessage(args) {
|
|
67
|
+
return `Type for argument '${args.argumentName}' on field '${args.typeName}.${args.fieldName}' changed from '${args.oldArgumentType}' to '${args.newArgumentType}'`;
|
|
68
|
+
}
|
|
69
|
+
const fieldArgumentTypeChangedCriticalityNonBreakingReason = `Changing an input field from non-null to null is considered non-breaking.`;
|
|
70
|
+
const fieldArgumentTypeChangedCriticalityBreakingReason = `Changing the type of a field's argument can cause existing queries that use this argument to error.`;
|
|
71
|
+
export function fieldArgumentTypeChangedFromMeta(args) {
|
|
28
72
|
return {
|
|
29
|
-
|
|
73
|
+
type: ChangeType.FieldArgumentTypeChanged,
|
|
74
|
+
criticality: args.meta.isSafeArgumentTypeChange
|
|
30
75
|
? {
|
|
31
76
|
level: CriticalityLevel.NonBreaking,
|
|
32
|
-
reason:
|
|
77
|
+
reason: fieldArgumentTypeChangedCriticalityNonBreakingReason,
|
|
33
78
|
}
|
|
34
79
|
: {
|
|
35
80
|
level: CriticalityLevel.Breaking,
|
|
36
|
-
reason:
|
|
81
|
+
reason: fieldArgumentTypeChangedCriticalityBreakingReason,
|
|
37
82
|
},
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
path: [
|
|
83
|
+
message: buildFieldArgumentTypeChangedMessage(args.meta),
|
|
84
|
+
meta: args.meta,
|
|
85
|
+
path: [args.meta.typeName, args.meta.fieldName, args.meta.argumentName].join('.'),
|
|
41
86
|
};
|
|
42
87
|
}
|
|
88
|
+
export function fieldArgumentTypeChanged(type, field, oldArg, newArg) {
|
|
89
|
+
return fieldArgumentTypeChangedFromMeta({
|
|
90
|
+
type: ChangeType.FieldArgumentTypeChanged,
|
|
91
|
+
meta: {
|
|
92
|
+
typeName: type.name,
|
|
93
|
+
fieldName: field.name,
|
|
94
|
+
argumentName: newArg.name,
|
|
95
|
+
oldArgumentType: oldArg.type.toString(),
|
|
96
|
+
newArgumentType: newArg.type.toString(),
|
|
97
|
+
isSafeArgumentTypeChange: safeChangeForInputValue(oldArg.type, newArg.type),
|
|
98
|
+
},
|
|
99
|
+
});
|
|
100
|
+
}
|
|
@@ -1,111 +1,270 @@
|
|
|
1
1
|
import { isNonNullType } from 'graphql';
|
|
2
2
|
import { safeChangeForInputValue } from '../../utils/graphql.js';
|
|
3
|
-
import {
|
|
4
|
-
|
|
3
|
+
import { safeString } from '../../utils/string.js';
|
|
4
|
+
import { ChangeType, CriticalityLevel, } from './change.js';
|
|
5
|
+
function buildDirectiveRemovedMessage(args) {
|
|
6
|
+
return `Directive '${args.removedDirectiveName}' was removed`;
|
|
7
|
+
}
|
|
8
|
+
const directiveRemovedCriticalityBreakingReason = `A directive could be in use of a client application. Removing it could break the client application.`;
|
|
9
|
+
export function directiveRemovedFromMeta(args) {
|
|
5
10
|
return {
|
|
6
11
|
criticality: {
|
|
7
12
|
level: CriticalityLevel.Breaking,
|
|
13
|
+
reason: directiveRemovedCriticalityBreakingReason,
|
|
8
14
|
},
|
|
9
15
|
type: ChangeType.DirectiveRemoved,
|
|
10
|
-
message:
|
|
11
|
-
path: `@${
|
|
16
|
+
message: buildDirectiveRemovedMessage(args.meta),
|
|
17
|
+
path: `@${args.meta.removedDirectiveName}`,
|
|
18
|
+
meta: args.meta,
|
|
12
19
|
};
|
|
13
20
|
}
|
|
14
|
-
export function
|
|
21
|
+
export function directiveRemoved(directive) {
|
|
22
|
+
return directiveRemovedFromMeta({
|
|
23
|
+
type: ChangeType.DirectiveRemoved,
|
|
24
|
+
meta: {
|
|
25
|
+
removedDirectiveName: directive.name,
|
|
26
|
+
},
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
function buildDirectiveAddedMessage(args) {
|
|
30
|
+
return `Directive '${args.addedDirectiveName}' was added`;
|
|
31
|
+
}
|
|
32
|
+
export function directiveAddedFromMeta(args) {
|
|
15
33
|
return {
|
|
16
34
|
criticality: {
|
|
17
35
|
level: CriticalityLevel.NonBreaking,
|
|
18
36
|
},
|
|
19
37
|
type: ChangeType.DirectiveAdded,
|
|
20
|
-
message:
|
|
21
|
-
path: `@${
|
|
38
|
+
message: buildDirectiveAddedMessage(args.meta),
|
|
39
|
+
path: `@${args.meta.addedDirectiveName}`,
|
|
40
|
+
meta: args.meta,
|
|
22
41
|
};
|
|
23
42
|
}
|
|
24
|
-
export function
|
|
43
|
+
export function directiveAdded(directive) {
|
|
44
|
+
return directiveAddedFromMeta({
|
|
45
|
+
type: ChangeType.DirectiveAdded,
|
|
46
|
+
meta: {
|
|
47
|
+
addedDirectiveName: directive.name,
|
|
48
|
+
},
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
function buildDirectiveDescriptionChangedMessage(args) {
|
|
52
|
+
var _a, _b;
|
|
53
|
+
return `Directive '${args.directiveName}' description changed from '${(_a = args.oldDirectiveDescription) !== null && _a !== void 0 ? _a : 'undefined'}' to '${(_b = args.newDirectiveDescription) !== null && _b !== void 0 ? _b : 'undefined'}'`;
|
|
54
|
+
}
|
|
55
|
+
export function directiveDescriptionChangedFromMeta(args) {
|
|
25
56
|
return {
|
|
26
57
|
criticality: {
|
|
27
58
|
level: CriticalityLevel.NonBreaking,
|
|
28
59
|
},
|
|
29
60
|
type: ChangeType.DirectiveDescriptionChanged,
|
|
30
|
-
message:
|
|
31
|
-
path: `@${
|
|
61
|
+
message: buildDirectiveDescriptionChangedMessage(args.meta),
|
|
62
|
+
path: `@${args.meta.directiveName}`,
|
|
63
|
+
meta: args.meta,
|
|
32
64
|
};
|
|
33
65
|
}
|
|
34
|
-
export function
|
|
66
|
+
export function directiveDescriptionChanged(oldDirective, newDirective) {
|
|
67
|
+
var _a, _b;
|
|
68
|
+
return directiveDescriptionChangedFromMeta({
|
|
69
|
+
type: ChangeType.DirectiveDescriptionChanged,
|
|
70
|
+
meta: {
|
|
71
|
+
directiveName: oldDirective.name,
|
|
72
|
+
oldDirectiveDescription: (_a = oldDirective.description) !== null && _a !== void 0 ? _a : null,
|
|
73
|
+
newDirectiveDescription: (_b = newDirective.description) !== null && _b !== void 0 ? _b : null,
|
|
74
|
+
},
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
function buildDirectiveLocationAddedMessage(args) {
|
|
78
|
+
return `Location '${args.addedDirectiveLocation}' was added to directive '${args.directiveName}'`;
|
|
79
|
+
}
|
|
80
|
+
export function directiveLocationAddedFromMeta(args) {
|
|
35
81
|
return {
|
|
36
82
|
criticality: {
|
|
37
83
|
level: CriticalityLevel.NonBreaking,
|
|
38
84
|
},
|
|
39
85
|
type: ChangeType.DirectiveLocationAdded,
|
|
40
|
-
message:
|
|
41
|
-
path: `@${
|
|
86
|
+
message: buildDirectiveLocationAddedMessage(args.meta),
|
|
87
|
+
path: `@${args.meta.directiveName}`,
|
|
88
|
+
meta: args.meta,
|
|
42
89
|
};
|
|
43
90
|
}
|
|
44
|
-
export function
|
|
91
|
+
export function directiveLocationAdded(directive, location) {
|
|
92
|
+
return directiveLocationAddedFromMeta({
|
|
93
|
+
type: ChangeType.DirectiveLocationAdded,
|
|
94
|
+
meta: {
|
|
95
|
+
directiveName: directive.name,
|
|
96
|
+
addedDirectiveLocation: location.toString(),
|
|
97
|
+
},
|
|
98
|
+
});
|
|
99
|
+
}
|
|
100
|
+
function buildDirectiveLocationRemovedMessage(args) {
|
|
101
|
+
return `Location '${args.removedDirectiveLocation}' was removed from directive '${args.directiveName}'`;
|
|
102
|
+
}
|
|
103
|
+
const directiveLocationRemovedBreakingReason = `A directive could be in use of a client application. Removing it could break the client application.`;
|
|
104
|
+
export function directiveLocationRemovedFromMeta(args) {
|
|
45
105
|
return {
|
|
46
106
|
criticality: {
|
|
47
107
|
level: CriticalityLevel.Breaking,
|
|
108
|
+
reason: directiveLocationRemovedBreakingReason,
|
|
48
109
|
},
|
|
49
110
|
type: ChangeType.DirectiveLocationRemoved,
|
|
50
|
-
message:
|
|
51
|
-
path: `@${
|
|
111
|
+
message: buildDirectiveLocationRemovedMessage(args.meta),
|
|
112
|
+
path: `@${args.meta.directiveName}`,
|
|
113
|
+
meta: args.meta,
|
|
52
114
|
};
|
|
53
115
|
}
|
|
54
|
-
export function
|
|
55
|
-
return {
|
|
56
|
-
|
|
57
|
-
|
|
116
|
+
export function directiveLocationRemoved(directive, location) {
|
|
117
|
+
return directiveLocationRemovedFromMeta({
|
|
118
|
+
type: ChangeType.DirectiveLocationRemoved,
|
|
119
|
+
meta: {
|
|
120
|
+
directiveName: directive.name,
|
|
121
|
+
removedDirectiveLocation: location.toString(),
|
|
58
122
|
},
|
|
123
|
+
});
|
|
124
|
+
}
|
|
125
|
+
const directiveArgumentAddedBreakingReason = `A directive could be in use of a client application. Adding a non-nullable argument will break those clients.`;
|
|
126
|
+
const directiveArgumentNonBreakingReason = `A directive could be in use of a client application. Adding a non-nullable argument will break those clients.`;
|
|
127
|
+
export function directiveArgumentAddedFromMeta(args) {
|
|
128
|
+
return {
|
|
129
|
+
criticality: args.meta.addedDirectiveArgumentTypeIsNonNull
|
|
130
|
+
? {
|
|
131
|
+
level: CriticalityLevel.Breaking,
|
|
132
|
+
reason: directiveArgumentAddedBreakingReason,
|
|
133
|
+
}
|
|
134
|
+
: {
|
|
135
|
+
level: CriticalityLevel.NonBreaking,
|
|
136
|
+
reason: directiveArgumentNonBreakingReason,
|
|
137
|
+
},
|
|
59
138
|
type: ChangeType.DirectiveArgumentAdded,
|
|
60
|
-
message: `Argument '${
|
|
61
|
-
path: `@${
|
|
139
|
+
message: `Argument '${args.meta.addedDirectiveArgumentName}' was added to directive '${args.meta.directiveName}'`,
|
|
140
|
+
path: `@${args.meta.directiveName}`,
|
|
141
|
+
meta: args.meta,
|
|
62
142
|
};
|
|
63
143
|
}
|
|
64
|
-
export function
|
|
144
|
+
export function directiveArgumentAdded(directive, arg) {
|
|
145
|
+
return directiveArgumentAddedFromMeta({
|
|
146
|
+
type: ChangeType.DirectiveArgumentAdded,
|
|
147
|
+
meta: {
|
|
148
|
+
directiveName: directive.name,
|
|
149
|
+
addedDirectiveArgumentName: arg.name,
|
|
150
|
+
addedDirectiveArgumentTypeIsNonNull: isNonNullType(arg.type),
|
|
151
|
+
},
|
|
152
|
+
});
|
|
153
|
+
}
|
|
154
|
+
function buildDirectiveArgumentRemovedMessage(args) {
|
|
155
|
+
return `Argument '${args.removedDirectiveArgumentName}' was removed from directive '${args.directiveName}'`;
|
|
156
|
+
}
|
|
157
|
+
const directiveArgumentRemovedBreakingReason = `A directive argument could be in use of a client application. Removing the argument can break client applications.`;
|
|
158
|
+
export function directiveArgumentRemovedFromMeta(args) {
|
|
65
159
|
return {
|
|
66
160
|
criticality: {
|
|
67
161
|
level: CriticalityLevel.Breaking,
|
|
162
|
+
reason: directiveArgumentRemovedBreakingReason,
|
|
68
163
|
},
|
|
69
164
|
type: ChangeType.DirectiveArgumentRemoved,
|
|
70
|
-
message:
|
|
71
|
-
path: `@${
|
|
165
|
+
message: buildDirectiveArgumentRemovedMessage(args.meta),
|
|
166
|
+
path: `@${args.meta.directiveName}.${args.meta.removedDirectiveArgumentName}`,
|
|
167
|
+
meta: args.meta,
|
|
72
168
|
};
|
|
73
169
|
}
|
|
74
|
-
export function
|
|
170
|
+
export function directiveArgumentRemoved(directive, arg) {
|
|
171
|
+
return directiveArgumentRemovedFromMeta({
|
|
172
|
+
type: ChangeType.DirectiveArgumentRemoved,
|
|
173
|
+
meta: {
|
|
174
|
+
directiveName: directive.name,
|
|
175
|
+
removedDirectiveArgumentName: arg.name,
|
|
176
|
+
},
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
function buildDirectiveArgumentDescriptionChangedMessage(args) {
|
|
180
|
+
return `Description for argument '${args.directiveArgumentName}' on directive '${args.directiveName}' changed from '${args.oldDirectiveArgumentDescription}' to '${args.newDirectiveArgumentDescription}'`;
|
|
181
|
+
}
|
|
182
|
+
export function directiveArgumentDescriptionChangedFromMeta(args) {
|
|
75
183
|
return {
|
|
76
184
|
criticality: {
|
|
77
185
|
level: CriticalityLevel.NonBreaking,
|
|
78
186
|
},
|
|
79
187
|
type: ChangeType.DirectiveArgumentDescriptionChanged,
|
|
80
|
-
message:
|
|
81
|
-
path: `@${
|
|
188
|
+
message: buildDirectiveArgumentDescriptionChangedMessage(args.meta),
|
|
189
|
+
path: `@${args.meta.directiveName}.${args.meta.directiveArgumentName}`,
|
|
190
|
+
meta: args.meta,
|
|
82
191
|
};
|
|
83
192
|
}
|
|
84
|
-
export function
|
|
193
|
+
export function directiveArgumentDescriptionChanged(directive, oldArg, newArg) {
|
|
194
|
+
var _a, _b;
|
|
195
|
+
return directiveArgumentDescriptionChangedFromMeta({
|
|
196
|
+
type: ChangeType.DirectiveArgumentDescriptionChanged,
|
|
197
|
+
meta: {
|
|
198
|
+
directiveName: directive.name,
|
|
199
|
+
directiveArgumentName: oldArg.name,
|
|
200
|
+
oldDirectiveArgumentDescription: (_a = oldArg.description) !== null && _a !== void 0 ? _a : null,
|
|
201
|
+
newDirectiveArgumentDescription: (_b = newArg.description) !== null && _b !== void 0 ? _b : null,
|
|
202
|
+
},
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
function buildDirectiveArgumentDefaultValueChanged(args) {
|
|
206
|
+
return args.oldDirectiveArgumentDefaultValue === undefined
|
|
207
|
+
? `Default value '${args.newDirectiveArgumentDefaultValue}' was added to argument '${args.directiveArgumentName}' on directive '${args.directiveName}'`
|
|
208
|
+
: `Default value for argument '${args.directiveArgumentName}' on directive '${args.directiveName}' changed from '${args.oldDirectiveArgumentDefaultValue}' to '${args.newDirectiveArgumentDefaultValue}'`;
|
|
209
|
+
}
|
|
210
|
+
const directiveArgumentDefaultValueChangedDangerousReason = 'Changing the default value for an argument may change the runtime behaviour of a field if it was never provided.';
|
|
211
|
+
export function directiveArgumentDefaultValueChangedFromMeta(args) {
|
|
85
212
|
return {
|
|
86
213
|
criticality: {
|
|
87
214
|
level: CriticalityLevel.Dangerous,
|
|
88
|
-
reason:
|
|
215
|
+
reason: directiveArgumentDefaultValueChangedDangerousReason,
|
|
89
216
|
},
|
|
90
217
|
type: ChangeType.DirectiveArgumentDefaultValueChanged,
|
|
91
|
-
message:
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
path: `@${directive.name}.${oldArg.name}`,
|
|
218
|
+
message: buildDirectiveArgumentDefaultValueChanged(args.meta),
|
|
219
|
+
path: `@${args.meta.directiveName}.${args.meta.directiveArgumentName}`,
|
|
220
|
+
meta: args.meta,
|
|
95
221
|
};
|
|
96
222
|
}
|
|
97
|
-
export function
|
|
223
|
+
export function directiveArgumentDefaultValueChanged(directive, oldArg, newArg) {
|
|
224
|
+
const meta = {
|
|
225
|
+
directiveName: directive.name,
|
|
226
|
+
directiveArgumentName: oldArg.name,
|
|
227
|
+
};
|
|
228
|
+
if (oldArg.defaultValue !== undefined) {
|
|
229
|
+
meta.oldDirectiveArgumentDefaultValue = safeString(oldArg.defaultValue);
|
|
230
|
+
}
|
|
231
|
+
if (newArg.defaultValue !== undefined) {
|
|
232
|
+
meta.newDirectiveArgumentDefaultValue = safeString(newArg.defaultValue);
|
|
233
|
+
}
|
|
234
|
+
return directiveArgumentDefaultValueChangedFromMeta({
|
|
235
|
+
type: ChangeType.DirectiveArgumentDefaultValueChanged,
|
|
236
|
+
meta,
|
|
237
|
+
});
|
|
238
|
+
}
|
|
239
|
+
function buildDirectiveArgumentTypeChangedMessage(args) {
|
|
240
|
+
return `Type for argument '${args.meta.directiveArgumentName}' on directive '${args.meta.directiveName}' changed from '${args.meta.oldDirectiveArgumentType}' to '${args.meta.newDirectiveArgumentType}'`;
|
|
241
|
+
}
|
|
242
|
+
const directiveArgumentTypeChangedNonBreakingReason = 'Changing an input field from non-null to null is considered non-breaking.';
|
|
243
|
+
export function directiveArgumentTypeChangedFromMeta(args) {
|
|
98
244
|
return {
|
|
99
|
-
criticality:
|
|
245
|
+
criticality: args.meta.isSafeDirectiveArgumentTypeChange
|
|
100
246
|
? {
|
|
101
247
|
level: CriticalityLevel.NonBreaking,
|
|
102
|
-
reason:
|
|
248
|
+
reason: directiveArgumentTypeChangedNonBreakingReason,
|
|
103
249
|
}
|
|
104
250
|
: {
|
|
105
251
|
level: CriticalityLevel.Breaking,
|
|
106
252
|
},
|
|
107
253
|
type: ChangeType.DirectiveArgumentTypeChanged,
|
|
108
|
-
message:
|
|
109
|
-
path: `@${
|
|
254
|
+
message: buildDirectiveArgumentTypeChangedMessage(args),
|
|
255
|
+
path: `@${args.meta.directiveName}.${args.meta.directiveArgumentName}`,
|
|
256
|
+
meta: args.meta,
|
|
110
257
|
};
|
|
111
258
|
}
|
|
259
|
+
export function directiveArgumentTypeChanged(directive, oldArg, newArg) {
|
|
260
|
+
return directiveArgumentTypeChangedFromMeta({
|
|
261
|
+
type: ChangeType.DirectiveArgumentTypeChanged,
|
|
262
|
+
meta: {
|
|
263
|
+
directiveName: directive.name,
|
|
264
|
+
directiveArgumentName: oldArg.name,
|
|
265
|
+
oldDirectiveArgumentType: oldArg.type.toString(),
|
|
266
|
+
newDirectiveArgumentType: newArg.type.toString(),
|
|
267
|
+
isSafeDirectiveArgumentTypeChange: safeChangeForInputValue(oldArg.type, newArg.type),
|
|
268
|
+
},
|
|
269
|
+
});
|
|
270
|
+
}
|
|
@@ -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
|
+
}
|