@graphql-inspector/core 4.0.2 → 4.0.3
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/ast/document.js +40 -0
- package/cjs/coverage/index.js +128 -0
- package/cjs/coverage/output/json.js +7 -0
- package/cjs/diff/argument.js +25 -0
- package/cjs/diff/changes/argument.js +48 -0
- package/cjs/diff/changes/change.js +75 -0
- package/cjs/diff/changes/directive.js +124 -0
- package/cjs/diff/changes/enum.js +75 -0
- package/cjs/diff/changes/field.js +166 -0
- package/cjs/diff/changes/input.js +98 -0
- package/cjs/diff/changes/object.js +28 -0
- package/cjs/diff/changes/schema.js +40 -0
- package/cjs/diff/changes/type.js +72 -0
- package/cjs/diff/changes/union.js +28 -0
- package/cjs/diff/directive.js +41 -0
- package/cjs/diff/enum.js +34 -0
- package/cjs/diff/field.js +54 -0
- package/cjs/diff/index.js +22 -0
- package/cjs/diff/input.js +47 -0
- package/cjs/diff/interface.js +20 -0
- package/cjs/diff/object.js +33 -0
- package/cjs/diff/onComplete/types.js +0 -0
- package/cjs/diff/rules/config.js +0 -0
- package/cjs/diff/rules/consider-usage.js +39 -0
- package/cjs/diff/rules/dangerous-breaking.js +13 -0
- package/cjs/diff/rules/ignore-description-changes.js +21 -0
- package/cjs/diff/rules/index.js +8 -0
- package/cjs/diff/rules/safe-unreachable.js +19 -0
- package/cjs/diff/rules/suppress-removal-of-deprecated-field.js +58 -0
- package/cjs/diff/rules/types.js +0 -0
- package/cjs/diff/schema.js +107 -0
- package/cjs/diff/union.js +18 -0
- package/cjs/index.js +27 -0
- package/cjs/package.json +1 -0
- package/cjs/similar/index.js +57 -0
- package/cjs/utils/apollo.js +21 -0
- package/cjs/utils/compare.js +91 -0
- package/cjs/utils/graphql.js +194 -0
- package/cjs/utils/is-deprecated.js +17 -0
- package/cjs/utils/path.js +7 -0
- package/cjs/utils/string.js +70 -0
- package/cjs/validate/alias-count.js +37 -0
- package/cjs/validate/complexity.js +39 -0
- package/cjs/validate/directive-count.js +37 -0
- package/cjs/validate/index.js +143 -0
- package/cjs/validate/query-depth.js +103 -0
- package/cjs/validate/token-count.js +55 -0
- package/esm/ast/document.js +36 -0
- package/esm/coverage/index.js +124 -0
- package/esm/coverage/output/json.js +3 -0
- package/esm/diff/argument.js +21 -0
- package/esm/diff/changes/argument.js +42 -0
- package/esm/diff/changes/change.js +72 -0
- package/esm/diff/changes/directive.js +111 -0
- package/esm/diff/changes/enum.js +66 -0
- package/esm/diff/changes/field.js +150 -0
- package/esm/diff/changes/input.js +88 -0
- package/esm/diff/changes/object.js +23 -0
- package/esm/diff/changes/schema.js +34 -0
- package/esm/diff/changes/type.js +63 -0
- package/esm/diff/changes/union.js +23 -0
- package/esm/diff/directive.js +37 -0
- package/esm/diff/enum.js +30 -0
- package/esm/diff/field.js +50 -0
- package/esm/diff/index.js +18 -0
- package/esm/diff/input.js +43 -0
- package/esm/diff/interface.js +16 -0
- package/esm/diff/object.js +29 -0
- package/esm/diff/onComplete/types.js +0 -0
- package/esm/diff/rules/config.js +0 -0
- package/esm/diff/rules/consider-usage.js +35 -0
- package/esm/diff/rules/dangerous-breaking.js +9 -0
- package/esm/diff/rules/ignore-description-changes.js +17 -0
- package/esm/diff/rules/index.js +5 -0
- package/esm/diff/rules/safe-unreachable.js +15 -0
- package/esm/diff/rules/suppress-removal-of-deprecated-field.js +54 -0
- package/esm/diff/rules/types.js +0 -0
- package/esm/diff/schema.js +103 -0
- package/esm/diff/union.js +14 -0
- package/esm/index.js +11 -0
- package/esm/similar/index.js +53 -0
- package/esm/utils/apollo.js +16 -0
- package/esm/utils/compare.js +82 -0
- package/esm/utils/graphql.js +181 -0
- package/esm/utils/is-deprecated.js +13 -0
- package/esm/utils/path.js +3 -0
- package/esm/utils/string.js +64 -0
- package/esm/validate/alias-count.js +32 -0
- package/esm/validate/complexity.js +34 -0
- package/esm/validate/directive-count.js +32 -0
- package/esm/validate/index.js +139 -0
- package/esm/validate/query-depth.js +97 -0
- package/esm/validate/token-count.js +50 -0
- package/package.json +30 -9
- package/typings/ast/document.d.ts +15 -0
- package/typings/coverage/index.d.ts +51 -0
- package/typings/coverage/output/json.d.cts +2 -0
- package/{coverage → typings/coverage}/output/json.d.ts +1 -1
- package/typings/diff/argument.d.cts +3 -0
- package/{diff → typings/diff}/argument.d.ts +1 -1
- package/typings/diff/changes/argument.d.cts +5 -0
- package/{diff → typings/diff}/changes/argument.d.ts +1 -1
- package/typings/diff/changes/change.d.ts +69 -0
- package/typings/diff/changes/directive.d.cts +12 -0
- package/{diff → typings/diff}/changes/directive.d.ts +1 -1
- package/typings/diff/changes/enum.d.cts +8 -0
- package/{diff → typings/diff}/changes/enum.d.ts +1 -1
- package/typings/diff/changes/field.d.cts +15 -0
- package/{diff → typings/diff}/changes/field.d.ts +1 -1
- package/typings/diff/changes/input.d.cts +9 -0
- package/{diff → typings/diff}/changes/input.d.ts +1 -1
- package/typings/diff/changes/object.d.cts +4 -0
- package/{diff → typings/diff}/changes/object.d.ts +1 -1
- package/typings/diff/changes/schema.d.cts +5 -0
- package/{diff → typings/diff}/changes/schema.d.ts +1 -1
- package/typings/diff/changes/type.d.cts +8 -0
- package/{diff → typings/diff}/changes/type.d.ts +1 -1
- package/typings/diff/changes/union.d.cts +4 -0
- package/{diff → typings/diff}/changes/union.d.ts +1 -1
- package/typings/diff/directive.d.cts +3 -0
- package/{diff → typings/diff}/directive.d.ts +1 -1
- package/typings/diff/enum.d.cts +3 -0
- package/{diff → typings/diff}/enum.d.ts +1 -1
- package/typings/diff/field.d.cts +3 -0
- package/{diff → typings/diff}/field.d.ts +1 -1
- package/typings/diff/index.d.cts +9 -0
- package/typings/diff/index.d.ts +9 -0
- package/typings/diff/input.d.cts +3 -0
- package/{diff → typings/diff}/input.d.ts +1 -1
- package/typings/diff/interface.d.cts +3 -0
- package/{diff → typings/diff}/interface.d.ts +1 -1
- package/typings/diff/object.d.cts +3 -0
- package/{diff → typings/diff}/object.d.ts +1 -1
- package/typings/diff/onComplete/types.d.cts +7 -0
- package/typings/diff/onComplete/types.d.ts +7 -0
- package/typings/diff/rules/config.d.cts +2 -0
- package/typings/diff/rules/config.d.ts +2 -0
- package/typings/diff/rules/consider-usage.d.cts +29 -0
- package/{diff → typings/diff}/rules/consider-usage.d.ts +2 -2
- package/typings/diff/rules/dangerous-breaking.d.cts +2 -0
- package/{diff → typings/diff}/rules/dangerous-breaking.d.ts +1 -1
- package/typings/diff/rules/ignore-description-changes.d.cts +2 -0
- package/{diff → typings/diff}/rules/ignore-description-changes.d.ts +1 -1
- package/typings/diff/rules/index.d.cts +5 -0
- package/typings/diff/rules/index.d.ts +5 -0
- package/typings/diff/rules/safe-unreachable.d.cts +2 -0
- package/{diff → typings/diff}/rules/safe-unreachable.d.ts +1 -1
- package/typings/diff/rules/suppress-removal-of-deprecated-field.d.cts +2 -0
- package/{diff → typings/diff}/rules/suppress-removal-of-deprecated-field.d.ts +1 -1
- package/typings/diff/rules/types.d.cts +8 -0
- package/{diff → typings/diff}/rules/types.d.ts +2 -2
- package/typings/diff/schema.d.cts +4 -0
- package/{diff → typings/diff}/schema.d.ts +2 -2
- package/typings/diff/union.d.cts +3 -0
- package/{diff → typings/diff}/union.d.ts +1 -1
- package/typings/index.d.cts +12 -0
- package/typings/index.d.ts +12 -0
- package/typings/similar/index.d.cts +6 -0
- package/{similar → typings/similar}/index.d.ts +1 -1
- package/typings/utils/apollo.d.ts +5 -0
- package/typings/utils/compare.d.ts +22 -0
- package/typings/utils/graphql.d.ts +11 -0
- package/typings/utils/is-deprecated.d.cts +2 -0
- package/{utils → typings/utils}/is-deprecated.d.ts +1 -1
- package/typings/utils/path.d.ts +1 -0
- package/typings/utils/string.d.ts +14 -0
- package/typings/validate/alias-count.d.ts +10 -0
- package/typings/validate/complexity.d.cts +16 -0
- package/{validate → typings/validate}/complexity.d.ts +1 -1
- package/typings/validate/directive-count.d.ts +10 -0
- package/typings/validate/index.d.ts +49 -0
- package/typings/validate/query-depth.d.ts +15 -0
- package/typings/validate/token-count.d.ts +12 -0
- package/diff/index.d.ts +0 -9
- package/diff/onComplete/types.d.ts +0 -7
- package/diff/rules/config.d.ts +0 -2
- package/diff/rules/index.d.ts +0 -5
- package/index.d.ts +0 -12
- package/index.js +0 -2075
- package/index.mjs +0 -2061
- /package/{ast/document.d.ts → typings/ast/document.d.cts} +0 -0
- /package/{coverage/index.d.ts → typings/coverage/index.d.cts} +0 -0
- /package/{diff/changes/change.d.ts → typings/diff/changes/change.d.cts} +0 -0
- /package/{utils/apollo.d.ts → typings/utils/apollo.d.cts} +0 -0
- /package/{utils/compare.d.ts → typings/utils/compare.d.cts} +0 -0
- /package/{utils/graphql.d.ts → typings/utils/graphql.d.cts} +0 -0
- /package/{utils/path.d.ts → typings/utils/path.d.cts} +0 -0
- /package/{utils/string.d.ts → typings/utils/string.d.cts} +0 -0
- /package/{validate/alias-count.d.ts → typings/validate/alias-count.d.cts} +0 -0
- /package/{validate/directive-count.d.ts → typings/validate/directive-count.d.cts} +0 -0
- /package/{validate/index.d.ts → typings/validate/index.d.cts} +0 -0
- /package/{validate/query-depth.d.ts → typings/validate/query-depth.d.cts} +0 -0
- /package/{validate/token-count.d.ts → typings/validate/token-count.d.cts} +0 -0
|
@@ -0,0 +1,166 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fieldArgumentRemoved = exports.fieldArgumentAdded = exports.fieldTypeChanged = exports.fieldDeprecationReasonRemoved = exports.fieldDeprecationReasonAdded = exports.fieldDeprecationReasonChanged = exports.fieldDeprecationRemoved = exports.fieldDeprecationAdded = exports.fieldDescriptionRemoved = exports.fieldDescriptionAdded = exports.fieldDescriptionChanged = exports.fieldAdded = exports.fieldRemoved = void 0;
|
|
4
|
+
const graphql_1 = require("graphql");
|
|
5
|
+
const graphql_js_1 = require("../../utils/graphql.js");
|
|
6
|
+
const is_deprecated_js_1 = require("../../utils/is-deprecated.js");
|
|
7
|
+
const change_js_1 = require("./change.js");
|
|
8
|
+
function fieldRemoved(type, field) {
|
|
9
|
+
const entity = (0, graphql_1.isInterfaceType)(type) ? 'interface' : 'object type';
|
|
10
|
+
return {
|
|
11
|
+
criticality: {
|
|
12
|
+
level: change_js_1.CriticalityLevel.Breaking,
|
|
13
|
+
reason: field.deprecationReason
|
|
14
|
+
? `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.`
|
|
15
|
+
: `Removing a field is a breaking change. It is preferable to deprecate the field before removing it.`,
|
|
16
|
+
},
|
|
17
|
+
type: change_js_1.ChangeType.FieldRemoved,
|
|
18
|
+
message: `Field '${field.name}' ${(0, is_deprecated_js_1.isDeprecated)(field) ? '(deprecated) ' : ''}was removed from ${entity} '${type.name}'`,
|
|
19
|
+
path: [type.name, field.name].join('.'),
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
exports.fieldRemoved = fieldRemoved;
|
|
23
|
+
function fieldAdded(type, field) {
|
|
24
|
+
const entity = (0, graphql_1.isInterfaceType)(type) ? 'interface' : 'object type';
|
|
25
|
+
return {
|
|
26
|
+
criticality: {
|
|
27
|
+
level: change_js_1.CriticalityLevel.NonBreaking,
|
|
28
|
+
},
|
|
29
|
+
type: change_js_1.ChangeType.FieldAdded,
|
|
30
|
+
message: `Field '${field.name}' was added to ${entity} '${type.name}'`,
|
|
31
|
+
path: [type.name, field.name].join('.'),
|
|
32
|
+
};
|
|
33
|
+
}
|
|
34
|
+
exports.fieldAdded = fieldAdded;
|
|
35
|
+
function fieldDescriptionChanged(type, oldField, newField) {
|
|
36
|
+
return {
|
|
37
|
+
criticality: {
|
|
38
|
+
level: change_js_1.CriticalityLevel.NonBreaking,
|
|
39
|
+
},
|
|
40
|
+
type: change_js_1.ChangeType.FieldDescriptionChanged,
|
|
41
|
+
message: `Field '${type.name}.${oldField.name}' description changed from '${oldField.description}' to '${newField.description}'`,
|
|
42
|
+
path: [type.name, oldField.name].join('.'),
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
exports.fieldDescriptionChanged = fieldDescriptionChanged;
|
|
46
|
+
function fieldDescriptionAdded(type, field) {
|
|
47
|
+
return {
|
|
48
|
+
criticality: {
|
|
49
|
+
level: change_js_1.CriticalityLevel.NonBreaking,
|
|
50
|
+
},
|
|
51
|
+
type: change_js_1.ChangeType.FieldDescriptionAdded,
|
|
52
|
+
message: `Field '${type.name}.${field.name}' has description '${field.description}'`,
|
|
53
|
+
path: [type.name, field.name].join('.'),
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
exports.fieldDescriptionAdded = fieldDescriptionAdded;
|
|
57
|
+
function fieldDescriptionRemoved(type, field) {
|
|
58
|
+
return {
|
|
59
|
+
criticality: {
|
|
60
|
+
level: change_js_1.CriticalityLevel.NonBreaking,
|
|
61
|
+
},
|
|
62
|
+
type: change_js_1.ChangeType.FieldDescriptionRemoved,
|
|
63
|
+
message: `Description was removed from field '${type.name}.${field.name}'`,
|
|
64
|
+
path: [type.name, field.name].join('.'),
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
exports.fieldDescriptionRemoved = fieldDescriptionRemoved;
|
|
68
|
+
function fieldDeprecationAdded(type, field) {
|
|
69
|
+
return {
|
|
70
|
+
criticality: {
|
|
71
|
+
level: change_js_1.CriticalityLevel.NonBreaking,
|
|
72
|
+
},
|
|
73
|
+
type: change_js_1.ChangeType.FieldDeprecationAdded,
|
|
74
|
+
message: `Field '${type.name}.${field.name}' is deprecated`,
|
|
75
|
+
path: [type.name, field.name].join('.'),
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
exports.fieldDeprecationAdded = fieldDeprecationAdded;
|
|
79
|
+
function fieldDeprecationRemoved(type, field) {
|
|
80
|
+
return {
|
|
81
|
+
criticality: {
|
|
82
|
+
level: change_js_1.CriticalityLevel.Dangerous,
|
|
83
|
+
},
|
|
84
|
+
type: change_js_1.ChangeType.FieldDeprecationRemoved,
|
|
85
|
+
message: `Field '${type.name}.${field.name}' is no longer deprecated`,
|
|
86
|
+
path: [type.name, field.name].join('.'),
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
exports.fieldDeprecationRemoved = fieldDeprecationRemoved;
|
|
90
|
+
function fieldDeprecationReasonChanged(type, oldField, newField) {
|
|
91
|
+
return {
|
|
92
|
+
criticality: {
|
|
93
|
+
level: change_js_1.CriticalityLevel.NonBreaking,
|
|
94
|
+
},
|
|
95
|
+
type: change_js_1.ChangeType.FieldDeprecationReasonChanged,
|
|
96
|
+
message: `Deprecation reason on field '${type.name}.${newField.name}' has changed from '${oldField.deprecationReason}' to '${newField.deprecationReason}'`,
|
|
97
|
+
path: [type.name, oldField.name].join('.'),
|
|
98
|
+
};
|
|
99
|
+
}
|
|
100
|
+
exports.fieldDeprecationReasonChanged = fieldDeprecationReasonChanged;
|
|
101
|
+
function fieldDeprecationReasonAdded(type, field) {
|
|
102
|
+
return {
|
|
103
|
+
criticality: {
|
|
104
|
+
level: change_js_1.CriticalityLevel.NonBreaking,
|
|
105
|
+
},
|
|
106
|
+
type: change_js_1.ChangeType.FieldDeprecationReasonAdded,
|
|
107
|
+
message: `Field '${type.name}.${field.name}' has deprecation reason '${field.deprecationReason}'`,
|
|
108
|
+
path: [type.name, field.name].join('.'),
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
exports.fieldDeprecationReasonAdded = fieldDeprecationReasonAdded;
|
|
112
|
+
function fieldDeprecationReasonRemoved(type, field) {
|
|
113
|
+
return {
|
|
114
|
+
criticality: {
|
|
115
|
+
level: change_js_1.CriticalityLevel.NonBreaking,
|
|
116
|
+
},
|
|
117
|
+
type: change_js_1.ChangeType.FieldDeprecationReasonRemoved,
|
|
118
|
+
message: `Deprecation reason was removed from field '${type.name}.${field.name}'`,
|
|
119
|
+
path: [type.name, field.name].join('.'),
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
exports.fieldDeprecationReasonRemoved = fieldDeprecationReasonRemoved;
|
|
123
|
+
function fieldTypeChanged(type, oldField, newField) {
|
|
124
|
+
return {
|
|
125
|
+
criticality: {
|
|
126
|
+
level: (0, graphql_js_1.safeChangeForField)(oldField.type, newField.type)
|
|
127
|
+
? change_js_1.CriticalityLevel.NonBreaking
|
|
128
|
+
: change_js_1.CriticalityLevel.Breaking,
|
|
129
|
+
},
|
|
130
|
+
type: change_js_1.ChangeType.FieldTypeChanged,
|
|
131
|
+
message: `Field '${type}.${oldField.name}' changed type from '${oldField.type}' to '${newField.type}'`,
|
|
132
|
+
path: [type.name, oldField.name].join('.'),
|
|
133
|
+
};
|
|
134
|
+
}
|
|
135
|
+
exports.fieldTypeChanged = fieldTypeChanged;
|
|
136
|
+
function fieldArgumentAdded(type, field, arg) {
|
|
137
|
+
const isBreaking = (0, graphql_1.isNonNullType)(arg.type) && typeof arg.defaultValue === 'undefined';
|
|
138
|
+
const defaultValueMsg = typeof arg.defaultValue === 'undefined' ? ' ' : ' (with default value) ';
|
|
139
|
+
return {
|
|
140
|
+
criticality: isBreaking
|
|
141
|
+
? {
|
|
142
|
+
level: change_js_1.CriticalityLevel.Breaking,
|
|
143
|
+
reason: `Adding a required argument to an existing field is a breaking change because it will cause existing uses of this field to error.`,
|
|
144
|
+
}
|
|
145
|
+
: {
|
|
146
|
+
level: change_js_1.CriticalityLevel.Dangerous,
|
|
147
|
+
reason: `Adding a new argument to an existing field may involve a change in resolve function logic that potentially may cause some side effects.`,
|
|
148
|
+
},
|
|
149
|
+
type: change_js_1.ChangeType.FieldArgumentAdded,
|
|
150
|
+
message: `Argument '${arg.name}: ${arg.type}'${defaultValueMsg}added to field '${type.name}.${field.name}'`,
|
|
151
|
+
path: [type.name, field.name, arg.name].join('.'),
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
exports.fieldArgumentAdded = fieldArgumentAdded;
|
|
155
|
+
function fieldArgumentRemoved(type, field, arg) {
|
|
156
|
+
return {
|
|
157
|
+
criticality: {
|
|
158
|
+
level: change_js_1.CriticalityLevel.Breaking,
|
|
159
|
+
reason: `Removing a field argument is a breaking change because it will cause existing queries that use this argument to error.`,
|
|
160
|
+
},
|
|
161
|
+
type: change_js_1.ChangeType.FieldArgumentRemoved,
|
|
162
|
+
message: `Argument '${arg.name}: ${arg.type}' was removed from field '${type.name}.${field.name}'`,
|
|
163
|
+
path: [type.name, field.name, arg.name].join('.'),
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
exports.fieldArgumentRemoved = fieldArgumentRemoved;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.inputFieldTypeChanged = exports.inputFieldDefaultValueChanged = exports.inputFieldDescriptionChanged = exports.inputFieldDescriptionRemoved = exports.inputFieldDescriptionAdded = exports.inputFieldAdded = exports.inputFieldRemoved = void 0;
|
|
4
|
+
const graphql_1 = require("graphql");
|
|
5
|
+
const graphql_js_1 = require("../../utils/graphql.js");
|
|
6
|
+
const is_deprecated_js_1 = require("../../utils/is-deprecated.js");
|
|
7
|
+
const string_js_1 = require("../../utils/string.js");
|
|
8
|
+
const change_js_1 = require("./change.js");
|
|
9
|
+
function inputFieldRemoved(input, field) {
|
|
10
|
+
return {
|
|
11
|
+
criticality: {
|
|
12
|
+
level: change_js_1.CriticalityLevel.Breaking,
|
|
13
|
+
reason: 'Removing an input field will cause existing queries that use this input field to error.',
|
|
14
|
+
},
|
|
15
|
+
type: change_js_1.ChangeType.InputFieldRemoved,
|
|
16
|
+
message: `Input field '${field.name}' ${(0, is_deprecated_js_1.isDeprecated)(field) ? '(deprecated) ' : ''}was removed from input object type '${input.name}'`,
|
|
17
|
+
path: [input.name, field.name].join('.'),
|
|
18
|
+
};
|
|
19
|
+
}
|
|
20
|
+
exports.inputFieldRemoved = inputFieldRemoved;
|
|
21
|
+
function inputFieldAdded(input, field) {
|
|
22
|
+
return {
|
|
23
|
+
criticality: (0, graphql_1.isNonNullType)(field.type)
|
|
24
|
+
? {
|
|
25
|
+
level: change_js_1.CriticalityLevel.Breaking,
|
|
26
|
+
reason: 'Adding a required input field to an existing input object type is a breaking change because it will cause existing uses of this input object type to error.',
|
|
27
|
+
}
|
|
28
|
+
: {
|
|
29
|
+
level: change_js_1.CriticalityLevel.Dangerous,
|
|
30
|
+
},
|
|
31
|
+
type: change_js_1.ChangeType.InputFieldAdded,
|
|
32
|
+
message: `Input field '${field.name}' was added to input object type '${input.name}'`,
|
|
33
|
+
path: [input.name, field.name].join('.'),
|
|
34
|
+
};
|
|
35
|
+
}
|
|
36
|
+
exports.inputFieldAdded = inputFieldAdded;
|
|
37
|
+
function inputFieldDescriptionAdded(type, field) {
|
|
38
|
+
return {
|
|
39
|
+
criticality: {
|
|
40
|
+
level: change_js_1.CriticalityLevel.NonBreaking,
|
|
41
|
+
},
|
|
42
|
+
type: change_js_1.ChangeType.InputFieldDescriptionAdded,
|
|
43
|
+
message: `Input field '${type.name}.${field.name}' has description '${field.description}'`,
|
|
44
|
+
path: [type.name, field.name].join('.'),
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
exports.inputFieldDescriptionAdded = inputFieldDescriptionAdded;
|
|
48
|
+
function inputFieldDescriptionRemoved(type, field) {
|
|
49
|
+
return {
|
|
50
|
+
criticality: {
|
|
51
|
+
level: change_js_1.CriticalityLevel.NonBreaking,
|
|
52
|
+
},
|
|
53
|
+
type: change_js_1.ChangeType.InputFieldDescriptionRemoved,
|
|
54
|
+
message: `Description was removed from input field '${type.name}.${field.name}'`,
|
|
55
|
+
path: [type.name, field.name].join('.'),
|
|
56
|
+
};
|
|
57
|
+
}
|
|
58
|
+
exports.inputFieldDescriptionRemoved = inputFieldDescriptionRemoved;
|
|
59
|
+
function inputFieldDescriptionChanged(input, oldField, newField) {
|
|
60
|
+
return {
|
|
61
|
+
criticality: {
|
|
62
|
+
level: change_js_1.CriticalityLevel.NonBreaking,
|
|
63
|
+
},
|
|
64
|
+
type: change_js_1.ChangeType.InputFieldDescriptionChanged,
|
|
65
|
+
message: `Input field '${input.name}.${oldField.name}' description changed from '${oldField.description}' to '${newField.description}'`,
|
|
66
|
+
path: [input.name, oldField.name].join('.'),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
exports.inputFieldDescriptionChanged = inputFieldDescriptionChanged;
|
|
70
|
+
function inputFieldDefaultValueChanged(input, oldField, newField) {
|
|
71
|
+
return {
|
|
72
|
+
criticality: {
|
|
73
|
+
level: change_js_1.CriticalityLevel.Dangerous,
|
|
74
|
+
reason: 'Changing the default value for an argument may change the runtime behavior of a field if it was never provided.',
|
|
75
|
+
},
|
|
76
|
+
type: change_js_1.ChangeType.InputFieldDefaultValueChanged,
|
|
77
|
+
message: `Input field '${input.name}.${oldField.name}' default value changed from '${(0, string_js_1.safeString)(oldField.defaultValue)}' to '${(0, string_js_1.safeString)(newField.defaultValue)}'`,
|
|
78
|
+
path: [input.name, oldField.name].join('.'),
|
|
79
|
+
};
|
|
80
|
+
}
|
|
81
|
+
exports.inputFieldDefaultValueChanged = inputFieldDefaultValueChanged;
|
|
82
|
+
function inputFieldTypeChanged(input, oldField, newField) {
|
|
83
|
+
return {
|
|
84
|
+
criticality: (0, graphql_js_1.safeChangeForInputValue)(oldField.type, newField.type)
|
|
85
|
+
? {
|
|
86
|
+
level: change_js_1.CriticalityLevel.NonBreaking,
|
|
87
|
+
reason: 'Changing an input field from non-null to null is considered non-breaking.',
|
|
88
|
+
}
|
|
89
|
+
: {
|
|
90
|
+
level: change_js_1.CriticalityLevel.Breaking,
|
|
91
|
+
reason: 'Changing the type of an input field can cause existing queries that use this field to error.',
|
|
92
|
+
},
|
|
93
|
+
type: change_js_1.ChangeType.InputFieldTypeChanged,
|
|
94
|
+
message: `Input field '${input.name}.${oldField.name}' changed type from '${oldField.type.toString()}' to '${newField.type.toString()}'`,
|
|
95
|
+
path: [input.name, oldField.name].join('.'),
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
exports.inputFieldTypeChanged = inputFieldTypeChanged;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.objectTypeInterfaceRemoved = exports.objectTypeInterfaceAdded = void 0;
|
|
4
|
+
const change_js_1 = require("./change.js");
|
|
5
|
+
function objectTypeInterfaceAdded(iface, type) {
|
|
6
|
+
return {
|
|
7
|
+
criticality: {
|
|
8
|
+
level: change_js_1.CriticalityLevel.Dangerous,
|
|
9
|
+
reason: 'Adding an interface to an object type may break existing clients that were not programming defensively against a new possible type.',
|
|
10
|
+
},
|
|
11
|
+
type: change_js_1.ChangeType.ObjectTypeInterfaceAdded,
|
|
12
|
+
message: `'${type.name}' object implements '${iface.name}' interface`,
|
|
13
|
+
path: type.name,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
exports.objectTypeInterfaceAdded = objectTypeInterfaceAdded;
|
|
17
|
+
function objectTypeInterfaceRemoved(iface, type) {
|
|
18
|
+
return {
|
|
19
|
+
criticality: {
|
|
20
|
+
level: change_js_1.CriticalityLevel.Breaking,
|
|
21
|
+
reason: 'Removing an interface from an object type can cause existing queries that use this in a fragment spread to error.',
|
|
22
|
+
},
|
|
23
|
+
type: change_js_1.ChangeType.ObjectTypeInterfaceRemoved,
|
|
24
|
+
message: `'${type.name}' object type no longer implements '${iface.name}' interface`,
|
|
25
|
+
path: type.name,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
exports.objectTypeInterfaceRemoved = objectTypeInterfaceRemoved;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.schemaSubscriptionTypeChanged = exports.schemaMutationTypeChanged = exports.schemaQueryTypeChanged = void 0;
|
|
4
|
+
const change_js_1 = require("./change.js");
|
|
5
|
+
function schemaQueryTypeChanged(oldSchema, newSchema) {
|
|
6
|
+
const oldName = (oldSchema.getQueryType() || {}).name || 'unknown';
|
|
7
|
+
const newName = (newSchema.getQueryType() || {}).name || 'unknown';
|
|
8
|
+
return {
|
|
9
|
+
criticality: {
|
|
10
|
+
level: change_js_1.CriticalityLevel.Breaking,
|
|
11
|
+
},
|
|
12
|
+
type: change_js_1.ChangeType.SchemaQueryTypeChanged,
|
|
13
|
+
message: `Schema query root has changed from '${oldName}' to '${newName}'`,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
exports.schemaQueryTypeChanged = schemaQueryTypeChanged;
|
|
17
|
+
function schemaMutationTypeChanged(oldSchema, newSchema) {
|
|
18
|
+
const oldName = (oldSchema.getMutationType() || {}).name || 'unknown';
|
|
19
|
+
const newName = (newSchema.getMutationType() || {}).name || 'unknown';
|
|
20
|
+
return {
|
|
21
|
+
criticality: {
|
|
22
|
+
level: change_js_1.CriticalityLevel.Breaking,
|
|
23
|
+
},
|
|
24
|
+
type: change_js_1.ChangeType.SchemaMutationTypeChanged,
|
|
25
|
+
message: `Schema mutation root has changed from '${oldName}' to '${newName}'`,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
exports.schemaMutationTypeChanged = schemaMutationTypeChanged;
|
|
29
|
+
function schemaSubscriptionTypeChanged(oldSchema, newSchema) {
|
|
30
|
+
const oldName = (oldSchema.getSubscriptionType() || {}).name || 'unknown';
|
|
31
|
+
const newName = (newSchema.getSubscriptionType() || {}).name || 'unknown';
|
|
32
|
+
return {
|
|
33
|
+
criticality: {
|
|
34
|
+
level: change_js_1.CriticalityLevel.Breaking,
|
|
35
|
+
},
|
|
36
|
+
type: change_js_1.ChangeType.SchemaSubscriptionTypeChanged,
|
|
37
|
+
message: `Schema subscription root has changed from '${oldName}' to '${newName}'`,
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
exports.schemaSubscriptionTypeChanged = schemaSubscriptionTypeChanged;
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.typeDescriptionAdded = exports.typeDescriptionRemoved = exports.typeDescriptionChanged = exports.typeKindChanged = exports.typeAdded = exports.typeRemoved = void 0;
|
|
4
|
+
const graphql_js_1 = require("../../utils/graphql.js");
|
|
5
|
+
const change_js_1 = require("./change.js");
|
|
6
|
+
function typeRemoved(type) {
|
|
7
|
+
return {
|
|
8
|
+
criticality: {
|
|
9
|
+
level: change_js_1.CriticalityLevel.Breaking,
|
|
10
|
+
},
|
|
11
|
+
type: change_js_1.ChangeType.TypeRemoved,
|
|
12
|
+
message: `Type '${type.name}' was removed`,
|
|
13
|
+
path: type.name,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
exports.typeRemoved = typeRemoved;
|
|
17
|
+
function typeAdded(type) {
|
|
18
|
+
return {
|
|
19
|
+
criticality: {
|
|
20
|
+
level: change_js_1.CriticalityLevel.NonBreaking,
|
|
21
|
+
},
|
|
22
|
+
type: change_js_1.ChangeType.TypeAdded,
|
|
23
|
+
message: `Type '${type.name}' was added`,
|
|
24
|
+
path: type.name,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
exports.typeAdded = typeAdded;
|
|
28
|
+
function typeKindChanged(oldType, newType) {
|
|
29
|
+
return {
|
|
30
|
+
criticality: {
|
|
31
|
+
level: change_js_1.CriticalityLevel.Breaking,
|
|
32
|
+
reason: `Changing the kind of a type is a breaking change because it can cause existing queries to error. For example, turning an object type to a scalar type would break queries that define a selection set for this type.`,
|
|
33
|
+
},
|
|
34
|
+
type: change_js_1.ChangeType.TypeKindChanged,
|
|
35
|
+
message: `'${oldType.name}' kind changed from '${(0, graphql_js_1.getKind)(oldType)}' to '${(0, graphql_js_1.getKind)(newType)}'`,
|
|
36
|
+
path: oldType.name,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
exports.typeKindChanged = typeKindChanged;
|
|
40
|
+
function typeDescriptionChanged(oldType, newType) {
|
|
41
|
+
return {
|
|
42
|
+
criticality: {
|
|
43
|
+
level: change_js_1.CriticalityLevel.NonBreaking,
|
|
44
|
+
},
|
|
45
|
+
type: change_js_1.ChangeType.TypeDescriptionChanged,
|
|
46
|
+
message: `Description '${oldType.description}' on type '${oldType.name}' has changed to '${newType.description}'`,
|
|
47
|
+
path: oldType.name,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
exports.typeDescriptionChanged = typeDescriptionChanged;
|
|
51
|
+
function typeDescriptionRemoved(type) {
|
|
52
|
+
return {
|
|
53
|
+
criticality: {
|
|
54
|
+
level: change_js_1.CriticalityLevel.NonBreaking,
|
|
55
|
+
},
|
|
56
|
+
type: change_js_1.ChangeType.TypeDescriptionRemoved,
|
|
57
|
+
message: `Description '${type.description}' was removed from object type '${type.name}'`,
|
|
58
|
+
path: type.name,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
exports.typeDescriptionRemoved = typeDescriptionRemoved;
|
|
62
|
+
function typeDescriptionAdded(type) {
|
|
63
|
+
return {
|
|
64
|
+
criticality: {
|
|
65
|
+
level: change_js_1.CriticalityLevel.NonBreaking,
|
|
66
|
+
},
|
|
67
|
+
type: change_js_1.ChangeType.TypeDescriptionAdded,
|
|
68
|
+
message: `Object type '${type.name}' has description '${type.description}'`,
|
|
69
|
+
path: type.name,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
exports.typeDescriptionAdded = typeDescriptionAdded;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.unionMemberAdded = exports.unionMemberRemoved = void 0;
|
|
4
|
+
const change_js_1 = require("./change.js");
|
|
5
|
+
function unionMemberRemoved(union, type) {
|
|
6
|
+
return {
|
|
7
|
+
criticality: {
|
|
8
|
+
level: change_js_1.CriticalityLevel.Breaking,
|
|
9
|
+
reason: 'Removing a union member from a union can cause existing queries that use this union member in a fragment spread to error.',
|
|
10
|
+
},
|
|
11
|
+
type: change_js_1.ChangeType.UnionMemberRemoved,
|
|
12
|
+
message: `Member '${type.name}' was removed from Union type '${union.name}'`,
|
|
13
|
+
path: union.name,
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
exports.unionMemberRemoved = unionMemberRemoved;
|
|
17
|
+
function unionMemberAdded(union, type) {
|
|
18
|
+
return {
|
|
19
|
+
criticality: {
|
|
20
|
+
level: change_js_1.CriticalityLevel.Dangerous,
|
|
21
|
+
reason: 'Adding a possible type to Unions may break existing clients that were not programming defensively against a new possible type.',
|
|
22
|
+
},
|
|
23
|
+
type: change_js_1.ChangeType.UnionMemberAdded,
|
|
24
|
+
message: `Member '${type.name}' was added to Union type '${union.name}'`,
|
|
25
|
+
path: union.name,
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
exports.unionMemberAdded = unionMemberAdded;
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.changesInDirective = void 0;
|
|
4
|
+
const compare_js_1 = require("../utils/compare.js");
|
|
5
|
+
const directive_js_1 = require("./changes/directive.js");
|
|
6
|
+
function changesInDirective(oldDirective, newDirective, addChange) {
|
|
7
|
+
if ((0, compare_js_1.isNotEqual)(oldDirective.description, newDirective.description)) {
|
|
8
|
+
addChange((0, directive_js_1.directiveDescriptionChanged)(oldDirective, newDirective));
|
|
9
|
+
}
|
|
10
|
+
const locations = {
|
|
11
|
+
added: (0, compare_js_1.diffArrays)(newDirective.locations, oldDirective.locations),
|
|
12
|
+
removed: (0, compare_js_1.diffArrays)(oldDirective.locations, newDirective.locations),
|
|
13
|
+
};
|
|
14
|
+
// locations added
|
|
15
|
+
locations.added.forEach(location => addChange((0, directive_js_1.directiveLocationAdded)(newDirective, location)));
|
|
16
|
+
// locations removed
|
|
17
|
+
locations.removed.forEach(location => addChange((0, directive_js_1.directiveLocationRemoved)(oldDirective, location)));
|
|
18
|
+
(0, compare_js_1.compareLists)(oldDirective.args, newDirective.args, {
|
|
19
|
+
onAdded(arg) {
|
|
20
|
+
addChange((0, directive_js_1.directiveArgumentAdded)(newDirective, arg));
|
|
21
|
+
},
|
|
22
|
+
onRemoved(arg) {
|
|
23
|
+
addChange((0, directive_js_1.directiveArgumentRemoved)(oldDirective, arg));
|
|
24
|
+
},
|
|
25
|
+
onMutual(arg) {
|
|
26
|
+
changesInDirectiveArgument(oldDirective, arg.oldVersion, arg.newVersion, addChange);
|
|
27
|
+
},
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
exports.changesInDirective = changesInDirective;
|
|
31
|
+
function changesInDirectiveArgument(directive, oldArg, newArg, addChange) {
|
|
32
|
+
if ((0, compare_js_1.isNotEqual)(oldArg.description, newArg.description)) {
|
|
33
|
+
addChange((0, directive_js_1.directiveArgumentDescriptionChanged)(directive, oldArg, newArg));
|
|
34
|
+
}
|
|
35
|
+
if ((0, compare_js_1.isNotEqual)(oldArg.defaultValue, newArg.defaultValue)) {
|
|
36
|
+
addChange((0, directive_js_1.directiveArgumentDefaultValueChanged)(directive, oldArg, newArg));
|
|
37
|
+
}
|
|
38
|
+
if ((0, compare_js_1.isNotEqual)(oldArg.type.toString(), newArg.type.toString())) {
|
|
39
|
+
addChange((0, directive_js_1.directiveArgumentTypeChanged)(directive, oldArg, newArg));
|
|
40
|
+
}
|
|
41
|
+
}
|
package/cjs/diff/enum.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.changesInEnum = void 0;
|
|
4
|
+
const compare_js_1 = require("../utils/compare.js");
|
|
5
|
+
const enum_js_1 = require("./changes/enum.js");
|
|
6
|
+
function changesInEnum(oldEnum, newEnum, addChange) {
|
|
7
|
+
(0, compare_js_1.compareLists)(oldEnum.getValues(), newEnum.getValues(), {
|
|
8
|
+
onAdded(value) {
|
|
9
|
+
addChange((0, enum_js_1.enumValueAdded)(newEnum, value));
|
|
10
|
+
},
|
|
11
|
+
onRemoved(value) {
|
|
12
|
+
addChange((0, enum_js_1.enumValueRemoved)(oldEnum, value));
|
|
13
|
+
},
|
|
14
|
+
onMutual(value) {
|
|
15
|
+
const oldValue = value.oldVersion;
|
|
16
|
+
const newValue = value.newVersion;
|
|
17
|
+
if ((0, compare_js_1.isNotEqual)(oldValue.description, newValue.description)) {
|
|
18
|
+
addChange((0, enum_js_1.enumValueDescriptionChanged)(newEnum, oldValue, newValue));
|
|
19
|
+
}
|
|
20
|
+
if ((0, compare_js_1.isNotEqual)(oldValue.deprecationReason, newValue.deprecationReason)) {
|
|
21
|
+
if ((0, compare_js_1.isVoid)(oldValue.deprecationReason)) {
|
|
22
|
+
addChange((0, enum_js_1.enumValueDeprecationReasonAdded)(newEnum, oldValue, newValue));
|
|
23
|
+
}
|
|
24
|
+
else if ((0, compare_js_1.isVoid)(newValue.deprecationReason)) {
|
|
25
|
+
addChange((0, enum_js_1.enumValueDeprecationReasonRemoved)(newEnum, oldValue, newValue));
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
addChange((0, enum_js_1.enumValueDeprecationReasonChanged)(newEnum, oldValue, newValue));
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
exports.changesInEnum = changesInEnum;
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.changesInField = void 0;
|
|
4
|
+
const compare_js_1 = require("../utils/compare.js");
|
|
5
|
+
const is_deprecated_js_1 = require("../utils/is-deprecated.js");
|
|
6
|
+
const argument_js_1 = require("./argument.js");
|
|
7
|
+
const field_js_1 = require("./changes/field.js");
|
|
8
|
+
function changesInField(type, oldField, newField, addChange) {
|
|
9
|
+
if ((0, compare_js_1.isNotEqual)(oldField.description, newField.description)) {
|
|
10
|
+
if ((0, compare_js_1.isVoid)(oldField.description)) {
|
|
11
|
+
addChange((0, field_js_1.fieldDescriptionAdded)(type, newField));
|
|
12
|
+
}
|
|
13
|
+
else if ((0, compare_js_1.isVoid)(newField.description)) {
|
|
14
|
+
addChange((0, field_js_1.fieldDescriptionRemoved)(type, oldField));
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
addChange((0, field_js_1.fieldDescriptionChanged)(type, oldField, newField));
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
if ((0, compare_js_1.isNotEqual)((0, is_deprecated_js_1.isDeprecated)(oldField), (0, is_deprecated_js_1.isDeprecated)(newField))) {
|
|
21
|
+
if ((0, is_deprecated_js_1.isDeprecated)(newField)) {
|
|
22
|
+
addChange((0, field_js_1.fieldDeprecationAdded)(type, newField));
|
|
23
|
+
}
|
|
24
|
+
else {
|
|
25
|
+
addChange((0, field_js_1.fieldDeprecationRemoved)(type, oldField));
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
if ((0, compare_js_1.isNotEqual)(oldField.deprecationReason, newField.deprecationReason)) {
|
|
29
|
+
if ((0, compare_js_1.isVoid)(oldField.deprecationReason)) {
|
|
30
|
+
addChange((0, field_js_1.fieldDeprecationReasonAdded)(type, newField));
|
|
31
|
+
}
|
|
32
|
+
else if ((0, compare_js_1.isVoid)(newField.deprecationReason)) {
|
|
33
|
+
addChange((0, field_js_1.fieldDeprecationReasonRemoved)(type, oldField));
|
|
34
|
+
}
|
|
35
|
+
else {
|
|
36
|
+
addChange((0, field_js_1.fieldDeprecationReasonChanged)(type, oldField, newField));
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
if ((0, compare_js_1.isNotEqual)(oldField.type.toString(), newField.type.toString())) {
|
|
40
|
+
addChange((0, field_js_1.fieldTypeChanged)(type, oldField, newField));
|
|
41
|
+
}
|
|
42
|
+
(0, compare_js_1.compareLists)(oldField.args, newField.args, {
|
|
43
|
+
onAdded(arg) {
|
|
44
|
+
addChange((0, field_js_1.fieldArgumentAdded)(type, newField, arg));
|
|
45
|
+
},
|
|
46
|
+
onRemoved(arg) {
|
|
47
|
+
addChange((0, field_js_1.fieldArgumentRemoved)(type, oldField, arg));
|
|
48
|
+
},
|
|
49
|
+
onMutual(arg) {
|
|
50
|
+
(0, argument_js_1.changesInArgument)(type, oldField, arg.oldVersion, arg.newVersion, addChange);
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
exports.changesInField = changesInField;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.diff = exports.DiffRule = void 0;
|
|
4
|
+
const tslib_1 = require("tslib");
|
|
5
|
+
const rules = tslib_1.__importStar(require("./rules/index.js"));
|
|
6
|
+
const schema_js_1 = require("./schema.js");
|
|
7
|
+
tslib_1.__exportStar(require("./rules/types.js"), exports);
|
|
8
|
+
exports.DiffRule = rules;
|
|
9
|
+
tslib_1.__exportStar(require("./onComplete/types.js"), exports);
|
|
10
|
+
function diff(oldSchema, newSchema, rules = [], config) {
|
|
11
|
+
const changes = (0, schema_js_1.diffSchema)(oldSchema, newSchema);
|
|
12
|
+
return rules.reduce((prev, rule) => tslib_1.__awaiter(this, void 0, void 0, function* () {
|
|
13
|
+
const prevChanges = yield prev;
|
|
14
|
+
return rule({
|
|
15
|
+
changes: prevChanges,
|
|
16
|
+
oldSchema,
|
|
17
|
+
newSchema,
|
|
18
|
+
config,
|
|
19
|
+
});
|
|
20
|
+
}), Promise.resolve(changes));
|
|
21
|
+
}
|
|
22
|
+
exports.diff = diff;
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.changesInInputObject = void 0;
|
|
4
|
+
const compare_js_1 = require("../utils/compare.js");
|
|
5
|
+
const input_js_1 = require("./changes/input.js");
|
|
6
|
+
function changesInInputObject(oldInput, newInput, addChange) {
|
|
7
|
+
const oldFields = oldInput.getFields();
|
|
8
|
+
const newFields = newInput.getFields();
|
|
9
|
+
(0, compare_js_1.compareLists)(Object.values(oldFields), Object.values(newFields), {
|
|
10
|
+
onAdded(field) {
|
|
11
|
+
addChange((0, input_js_1.inputFieldAdded)(newInput, field));
|
|
12
|
+
},
|
|
13
|
+
onRemoved(field) {
|
|
14
|
+
addChange((0, input_js_1.inputFieldRemoved)(oldInput, field));
|
|
15
|
+
},
|
|
16
|
+
onMutual(field) {
|
|
17
|
+
changesInInputField(oldInput, field.oldVersion, field.newVersion, addChange);
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
exports.changesInInputObject = changesInInputObject;
|
|
22
|
+
function changesInInputField(input, oldField, newField, addChange) {
|
|
23
|
+
if ((0, compare_js_1.isNotEqual)(oldField.description, newField.description)) {
|
|
24
|
+
if ((0, compare_js_1.isVoid)(oldField.description)) {
|
|
25
|
+
addChange((0, input_js_1.inputFieldDescriptionAdded)(input, newField));
|
|
26
|
+
}
|
|
27
|
+
else if ((0, compare_js_1.isVoid)(newField.description)) {
|
|
28
|
+
addChange((0, input_js_1.inputFieldDescriptionRemoved)(input, oldField));
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
addChange((0, input_js_1.inputFieldDescriptionChanged)(input, oldField, newField));
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
if ((0, compare_js_1.isNotEqual)(oldField.defaultValue, newField.defaultValue)) {
|
|
35
|
+
if (Array.isArray(oldField.defaultValue) && Array.isArray(newField.defaultValue)) {
|
|
36
|
+
if ((0, compare_js_1.diffArrays)(oldField.defaultValue, newField.defaultValue).length > 0) {
|
|
37
|
+
addChange((0, input_js_1.inputFieldDefaultValueChanged)(input, oldField, newField));
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
else if (JSON.stringify(oldField.defaultValue) !== JSON.stringify(newField.defaultValue)) {
|
|
41
|
+
addChange((0, input_js_1.inputFieldDefaultValueChanged)(input, oldField, newField));
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if ((0, compare_js_1.isNotEqual)(oldField.type.toString(), newField.type.toString())) {
|
|
45
|
+
addChange((0, input_js_1.inputFieldTypeChanged)(input, oldField, newField));
|
|
46
|
+
}
|
|
47
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.changesInInterface = void 0;
|
|
4
|
+
const compare_js_1 = require("../utils/compare.js");
|
|
5
|
+
const field_js_1 = require("./changes/field.js");
|
|
6
|
+
const field_js_2 = require("./field.js");
|
|
7
|
+
function changesInInterface(oldInterface, newInterface, addChange) {
|
|
8
|
+
(0, compare_js_1.compareLists)(Object.values(oldInterface.getFields()), Object.values(newInterface.getFields()), {
|
|
9
|
+
onAdded(field) {
|
|
10
|
+
addChange((0, field_js_1.fieldAdded)(newInterface, field));
|
|
11
|
+
},
|
|
12
|
+
onRemoved(field) {
|
|
13
|
+
addChange((0, field_js_1.fieldRemoved)(oldInterface, field));
|
|
14
|
+
},
|
|
15
|
+
onMutual(field) {
|
|
16
|
+
(0, field_js_2.changesInField)(oldInterface, field.oldVersion, field.newVersion, addChange);
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
exports.changesInInterface = changesInInterface;
|