@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
|
@@ -31,7 +31,7 @@ const considerUsage = ({ changes, config }) => tslib_1.__awaiter(void 0, void 0,
|
|
|
31
31
|
if (change.criticality.level === change_js_1.CriticalityLevel.Breaking &&
|
|
32
32
|
change.path &&
|
|
33
33
|
suppressedPaths.some(p => change.path.startsWith(p))) {
|
|
34
|
-
return Object.assign(Object.assign({}, change), { criticality: Object.assign(Object.assign({}, change.criticality), { level: change_js_1.CriticalityLevel.Dangerous }), message: `${change.message} (non-breaking based on usage)` });
|
|
34
|
+
return Object.assign(Object.assign({}, change), { criticality: Object.assign(Object.assign({}, change.criticality), { level: change_js_1.CriticalityLevel.Dangerous, isSafeBasedOnUsage: true }), message: `${change.message} (non-breaking based on usage)` });
|
|
35
35
|
}
|
|
36
36
|
return change;
|
|
37
37
|
});
|
package/cjs/core/src/index.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.calculateTokenCount = exports.countDepth = exports.countDirectives = exports.calculateOperationComplexity = exports.countAliases = exports.validate = exports.getTypePrefix = exports.similar = exports.CriticalityLevel = exports.ChangeType = exports.DiffRule = exports.diff = void 0;
|
|
3
|
+
exports.inputFieldDefaultValueChangedFromMeta = exports.inputFieldDescriptionChangedFromMeta = exports.inputFieldDescriptionRemovedFromMeta = exports.inputFieldDescriptionAddedFromMeta = exports.inputFieldAddedFromMeta = exports.inputFieldRemovedFromMeta = exports.fieldArgumentRemovedFromMeta = exports.fieldArgumentAddedFromMeta = exports.fieldTypeChangedFromMeta = exports.fieldDeprecationReasonRemovedFromMeta = exports.fieldDeprecationReasonAddedFromMeta = exports.fieldDeprecationReasonChangedFromMeta = exports.fieldDeprecationRemovedFromMeta = exports.fieldDeprecationAddedFromMeta = exports.fieldDescriptionRemovedFromMeta = exports.fieldDescriptionAddedFromMeta = exports.fieldDescriptionChangedFromMeta = exports.fieldAddedFromMeta = exports.fieldRemovedFromMeta = exports.enumValueDeprecationReasonRemovedFromMeta = exports.enumValueDeprecationReasonAddedFromMeta = exports.enumValueDeprecationReasonChangedFromMeta = exports.enumValueDescriptionChangedFromMeta = exports.enumValueAddedFromMeta = exports.enumValueRemovedFromMeta = exports.directiveArgumentTypeChangedFromMeta = exports.directiveArgumentDefaultValueChangedFromMeta = exports.directiveArgumentDescriptionChangedFromMeta = exports.directiveArgumentRemovedFromMeta = exports.directiveArgumentAddedFromMeta = exports.directiveLocationRemovedFromMeta = exports.directiveLocationAddedFromMeta = exports.directiveDescriptionChangedFromMeta = exports.directiveAddedFromMeta = exports.directiveRemovedFromMeta = exports.fieldArgumentTypeChangedFromMeta = exports.fieldArgumentDefaultChangedFromMeta = exports.fieldArgumentDescriptionChangedFromMeta = exports.calculateTokenCount = exports.countDepth = exports.countDirectives = exports.calculateOperationComplexity = exports.countAliases = exports.validate = exports.getTypePrefix = exports.similar = exports.CriticalityLevel = exports.ChangeType = exports.DiffRule = exports.diff = void 0;
|
|
4
|
+
exports.buildUnionMemberAddedMessageFromMeta = exports.unionMemberRemovedFromMeta = exports.typeDescriptionAddedFromMeta = exports.typeDescriptionRemovedFromMeta = exports.typeDescriptionChangedFromMeta = exports.typeKindChangedFromMeta = exports.typeAddedFromMeta = exports.typeRemovedFromMeta = exports.schemaSubscriptionTypeChangedFromMeta = exports.schemaMutationTypeChangedFromMeta = exports.schemaQueryTypeChangedFromMeta = exports.objectTypeInterfaceRemovedFromMeta = exports.objectTypeInterfaceAddedFromMeta = exports.inputFieldTypeChangedFromMeta = void 0;
|
|
4
5
|
const tslib_1 = require("tslib");
|
|
5
6
|
tslib_1.__exportStar(require("./coverage/index.js"), exports);
|
|
6
7
|
var index_js_1 = require("./diff/index.js");
|
|
@@ -25,3 +26,64 @@ var query_depth_js_1 = require("./validate/query-depth.js");
|
|
|
25
26
|
Object.defineProperty(exports, "countDepth", { enumerable: true, get: function () { return query_depth_js_1.countDepth; } });
|
|
26
27
|
var token_count_js_1 = require("./validate/token-count.js");
|
|
27
28
|
Object.defineProperty(exports, "calculateTokenCount", { enumerable: true, get: function () { return token_count_js_1.calculateTokenCount; } });
|
|
29
|
+
var argument_js_1 = require("./diff/changes/argument.js");
|
|
30
|
+
Object.defineProperty(exports, "fieldArgumentDescriptionChangedFromMeta", { enumerable: true, get: function () { return argument_js_1.fieldArgumentDescriptionChangedFromMeta; } });
|
|
31
|
+
Object.defineProperty(exports, "fieldArgumentDefaultChangedFromMeta", { enumerable: true, get: function () { return argument_js_1.fieldArgumentDefaultChangedFromMeta; } });
|
|
32
|
+
Object.defineProperty(exports, "fieldArgumentTypeChangedFromMeta", { enumerable: true, get: function () { return argument_js_1.fieldArgumentTypeChangedFromMeta; } });
|
|
33
|
+
var directive_js_1 = require("./diff/changes/directive.js");
|
|
34
|
+
Object.defineProperty(exports, "directiveRemovedFromMeta", { enumerable: true, get: function () { return directive_js_1.directiveRemovedFromMeta; } });
|
|
35
|
+
Object.defineProperty(exports, "directiveAddedFromMeta", { enumerable: true, get: function () { return directive_js_1.directiveAddedFromMeta; } });
|
|
36
|
+
Object.defineProperty(exports, "directiveDescriptionChangedFromMeta", { enumerable: true, get: function () { return directive_js_1.directiveDescriptionChangedFromMeta; } });
|
|
37
|
+
Object.defineProperty(exports, "directiveLocationAddedFromMeta", { enumerable: true, get: function () { return directive_js_1.directiveLocationAddedFromMeta; } });
|
|
38
|
+
Object.defineProperty(exports, "directiveLocationRemovedFromMeta", { enumerable: true, get: function () { return directive_js_1.directiveLocationRemovedFromMeta; } });
|
|
39
|
+
Object.defineProperty(exports, "directiveArgumentAddedFromMeta", { enumerable: true, get: function () { return directive_js_1.directiveArgumentAddedFromMeta; } });
|
|
40
|
+
Object.defineProperty(exports, "directiveArgumentRemovedFromMeta", { enumerable: true, get: function () { return directive_js_1.directiveArgumentRemovedFromMeta; } });
|
|
41
|
+
Object.defineProperty(exports, "directiveArgumentDescriptionChangedFromMeta", { enumerable: true, get: function () { return directive_js_1.directiveArgumentDescriptionChangedFromMeta; } });
|
|
42
|
+
Object.defineProperty(exports, "directiveArgumentDefaultValueChangedFromMeta", { enumerable: true, get: function () { return directive_js_1.directiveArgumentDefaultValueChangedFromMeta; } });
|
|
43
|
+
Object.defineProperty(exports, "directiveArgumentTypeChangedFromMeta", { enumerable: true, get: function () { return directive_js_1.directiveArgumentTypeChangedFromMeta; } });
|
|
44
|
+
var enum_js_1 = require("./diff/changes/enum.js");
|
|
45
|
+
Object.defineProperty(exports, "enumValueRemovedFromMeta", { enumerable: true, get: function () { return enum_js_1.enumValueRemovedFromMeta; } });
|
|
46
|
+
Object.defineProperty(exports, "enumValueAddedFromMeta", { enumerable: true, get: function () { return enum_js_1.enumValueAddedFromMeta; } });
|
|
47
|
+
Object.defineProperty(exports, "enumValueDescriptionChangedFromMeta", { enumerable: true, get: function () { return enum_js_1.enumValueDescriptionChangedFromMeta; } });
|
|
48
|
+
Object.defineProperty(exports, "enumValueDeprecationReasonChangedFromMeta", { enumerable: true, get: function () { return enum_js_1.enumValueDeprecationReasonChangedFromMeta; } });
|
|
49
|
+
Object.defineProperty(exports, "enumValueDeprecationReasonAddedFromMeta", { enumerable: true, get: function () { return enum_js_1.enumValueDeprecationReasonAddedFromMeta; } });
|
|
50
|
+
Object.defineProperty(exports, "enumValueDeprecationReasonRemovedFromMeta", { enumerable: true, get: function () { return enum_js_1.enumValueDeprecationReasonRemovedFromMeta; } });
|
|
51
|
+
var field_js_1 = require("./diff/changes/field.js");
|
|
52
|
+
Object.defineProperty(exports, "fieldRemovedFromMeta", { enumerable: true, get: function () { return field_js_1.fieldRemovedFromMeta; } });
|
|
53
|
+
Object.defineProperty(exports, "fieldAddedFromMeta", { enumerable: true, get: function () { return field_js_1.fieldAddedFromMeta; } });
|
|
54
|
+
Object.defineProperty(exports, "fieldDescriptionChangedFromMeta", { enumerable: true, get: function () { return field_js_1.fieldDescriptionChangedFromMeta; } });
|
|
55
|
+
Object.defineProperty(exports, "fieldDescriptionAddedFromMeta", { enumerable: true, get: function () { return field_js_1.fieldDescriptionAddedFromMeta; } });
|
|
56
|
+
Object.defineProperty(exports, "fieldDescriptionRemovedFromMeta", { enumerable: true, get: function () { return field_js_1.fieldDescriptionRemovedFromMeta; } });
|
|
57
|
+
Object.defineProperty(exports, "fieldDeprecationAddedFromMeta", { enumerable: true, get: function () { return field_js_1.fieldDeprecationAddedFromMeta; } });
|
|
58
|
+
Object.defineProperty(exports, "fieldDeprecationRemovedFromMeta", { enumerable: true, get: function () { return field_js_1.fieldDeprecationRemovedFromMeta; } });
|
|
59
|
+
Object.defineProperty(exports, "fieldDeprecationReasonChangedFromMeta", { enumerable: true, get: function () { return field_js_1.fieldDeprecationReasonChangedFromMeta; } });
|
|
60
|
+
Object.defineProperty(exports, "fieldDeprecationReasonAddedFromMeta", { enumerable: true, get: function () { return field_js_1.fieldDeprecationReasonAddedFromMeta; } });
|
|
61
|
+
Object.defineProperty(exports, "fieldDeprecationReasonRemovedFromMeta", { enumerable: true, get: function () { return field_js_1.fieldDeprecationReasonRemovedFromMeta; } });
|
|
62
|
+
Object.defineProperty(exports, "fieldTypeChangedFromMeta", { enumerable: true, get: function () { return field_js_1.fieldTypeChangedFromMeta; } });
|
|
63
|
+
Object.defineProperty(exports, "fieldArgumentAddedFromMeta", { enumerable: true, get: function () { return field_js_1.fieldArgumentAddedFromMeta; } });
|
|
64
|
+
Object.defineProperty(exports, "fieldArgumentRemovedFromMeta", { enumerable: true, get: function () { return field_js_1.fieldArgumentRemovedFromMeta; } });
|
|
65
|
+
var input_js_1 = require("./diff/changes/input.js");
|
|
66
|
+
Object.defineProperty(exports, "inputFieldRemovedFromMeta", { enumerable: true, get: function () { return input_js_1.inputFieldRemovedFromMeta; } });
|
|
67
|
+
Object.defineProperty(exports, "inputFieldAddedFromMeta", { enumerable: true, get: function () { return input_js_1.inputFieldAddedFromMeta; } });
|
|
68
|
+
Object.defineProperty(exports, "inputFieldDescriptionAddedFromMeta", { enumerable: true, get: function () { return input_js_1.inputFieldDescriptionAddedFromMeta; } });
|
|
69
|
+
Object.defineProperty(exports, "inputFieldDescriptionRemovedFromMeta", { enumerable: true, get: function () { return input_js_1.inputFieldDescriptionRemovedFromMeta; } });
|
|
70
|
+
Object.defineProperty(exports, "inputFieldDescriptionChangedFromMeta", { enumerable: true, get: function () { return input_js_1.inputFieldDescriptionChangedFromMeta; } });
|
|
71
|
+
Object.defineProperty(exports, "inputFieldDefaultValueChangedFromMeta", { enumerable: true, get: function () { return input_js_1.inputFieldDefaultValueChangedFromMeta; } });
|
|
72
|
+
Object.defineProperty(exports, "inputFieldTypeChangedFromMeta", { enumerable: true, get: function () { return input_js_1.inputFieldTypeChangedFromMeta; } });
|
|
73
|
+
var object_js_1 = require("./diff/changes/object.js");
|
|
74
|
+
Object.defineProperty(exports, "objectTypeInterfaceAddedFromMeta", { enumerable: true, get: function () { return object_js_1.objectTypeInterfaceAddedFromMeta; } });
|
|
75
|
+
Object.defineProperty(exports, "objectTypeInterfaceRemovedFromMeta", { enumerable: true, get: function () { return object_js_1.objectTypeInterfaceRemovedFromMeta; } });
|
|
76
|
+
var schema_js_1 = require("./diff/changes/schema.js");
|
|
77
|
+
Object.defineProperty(exports, "schemaQueryTypeChangedFromMeta", { enumerable: true, get: function () { return schema_js_1.schemaQueryTypeChangedFromMeta; } });
|
|
78
|
+
Object.defineProperty(exports, "schemaMutationTypeChangedFromMeta", { enumerable: true, get: function () { return schema_js_1.schemaMutationTypeChangedFromMeta; } });
|
|
79
|
+
Object.defineProperty(exports, "schemaSubscriptionTypeChangedFromMeta", { enumerable: true, get: function () { return schema_js_1.schemaSubscriptionTypeChangedFromMeta; } });
|
|
80
|
+
var type_js_1 = require("./diff/changes/type.js");
|
|
81
|
+
Object.defineProperty(exports, "typeRemovedFromMeta", { enumerable: true, get: function () { return type_js_1.typeRemovedFromMeta; } });
|
|
82
|
+
Object.defineProperty(exports, "typeAddedFromMeta", { enumerable: true, get: function () { return type_js_1.typeAddedFromMeta; } });
|
|
83
|
+
Object.defineProperty(exports, "typeKindChangedFromMeta", { enumerable: true, get: function () { return type_js_1.typeKindChangedFromMeta; } });
|
|
84
|
+
Object.defineProperty(exports, "typeDescriptionChangedFromMeta", { enumerable: true, get: function () { return type_js_1.typeDescriptionChangedFromMeta; } });
|
|
85
|
+
Object.defineProperty(exports, "typeDescriptionRemovedFromMeta", { enumerable: true, get: function () { return type_js_1.typeDescriptionRemovedFromMeta; } });
|
|
86
|
+
Object.defineProperty(exports, "typeDescriptionAddedFromMeta", { enumerable: true, get: function () { return type_js_1.typeDescriptionAddedFromMeta; } });
|
|
87
|
+
var union_js_1 = require("./diff/changes/union.js");
|
|
88
|
+
Object.defineProperty(exports, "unionMemberRemovedFromMeta", { enumerable: true, get: function () { return union_js_1.unionMemberRemovedFromMeta; } });
|
|
89
|
+
Object.defineProperty(exports, "buildUnionMemberAddedMessageFromMeta", { enumerable: true, get: function () { return union_js_1.buildUnionMemberAddedMessageFromMeta; } });
|
|
@@ -4,7 +4,7 @@ exports.isDeprecated = void 0;
|
|
|
4
4
|
function isDeprecated(fieldOrEnumValue) {
|
|
5
5
|
var _a, _b;
|
|
6
6
|
if ('isDeprecated' in fieldOrEnumValue) {
|
|
7
|
-
return fieldOrEnumValue['isDeprecated'];
|
|
7
|
+
return !!fieldOrEnumValue['isDeprecated'];
|
|
8
8
|
}
|
|
9
9
|
if (fieldOrEnumValue.deprecationReason != null) {
|
|
10
10
|
return true;
|
|
@@ -63,6 +63,9 @@ function wordLetterPairs(str) {
|
|
|
63
63
|
return flattenDeep(pairs);
|
|
64
64
|
}
|
|
65
65
|
function safeString(obj) {
|
|
66
|
+
if (typeof obj === 'string') {
|
|
67
|
+
return JSON.stringify(obj);
|
|
68
|
+
}
|
|
66
69
|
return (0, object_inspect_1.default)(obj)
|
|
67
70
|
.replace(/\[Object: null prototype\] /g, '')
|
|
68
71
|
.replace(/(^')|('$)/g, '');
|
|
@@ -87,12 +87,16 @@ function createConfig(rawConfig, setConfigKind, branches = [], fallbackBranch =
|
|
|
87
87
|
return config;
|
|
88
88
|
}
|
|
89
89
|
for (const branch of branches) {
|
|
90
|
-
|
|
90
|
+
if (config == null) {
|
|
91
|
+
config = findConfigByBranch(branch, normalizedConfig, false);
|
|
92
|
+
}
|
|
91
93
|
if (config) {
|
|
92
94
|
break;
|
|
93
95
|
}
|
|
94
96
|
}
|
|
95
|
-
|
|
97
|
+
if (config == null) {
|
|
98
|
+
config = getGlobalConfig(rawConfig, fallbackBranch);
|
|
99
|
+
}
|
|
96
100
|
return config;
|
|
97
101
|
}
|
|
98
102
|
exports.createConfig = createConfig;
|
|
@@ -27,7 +27,7 @@ function filterChangesByLevel(level) {
|
|
|
27
27
|
return (change) => change.criticality.level === level;
|
|
28
28
|
}
|
|
29
29
|
exports.filterChangesByLevel = filterChangesByLevel;
|
|
30
|
-
function createSummary(changes, summaryLimit, isLegacyConfig) {
|
|
30
|
+
function createSummary(changes, summaryLimit, isLegacyConfig = false) {
|
|
31
31
|
const breakingChanges = changes.filter(filterChangesByLevel(core_1.CriticalityLevel.Breaking));
|
|
32
32
|
const dangerousChanges = changes.filter(filterChangesByLevel(core_1.CriticalityLevel.Dangerous));
|
|
33
33
|
const safeChanges = changes.filter(filterChangesByLevel(core_1.CriticalityLevel.NonBreaking));
|
|
@@ -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
|
+
}
|