@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
|
@@ -12,11 +12,9 @@ function changesInDirective(oldDirective, newDirective, addChange) {
|
|
|
12
12
|
removed: (0, compare_js_1.diffArrays)(oldDirective.locations, newDirective.locations),
|
|
13
13
|
};
|
|
14
14
|
// locations added
|
|
15
|
-
|
|
16
|
-
addChange((0, directive_js_1.directiveLocationAdded)(newDirective, location));
|
|
15
|
+
locations.added.forEach(location => addChange((0, directive_js_1.directiveLocationAdded)(newDirective, location)));
|
|
17
16
|
// locations removed
|
|
18
|
-
|
|
19
|
-
addChange((0, directive_js_1.directiveLocationRemoved)(oldDirective, location));
|
|
17
|
+
locations.removed.forEach(location => addChange((0, directive_js_1.directiveLocationRemoved)(oldDirective, location)));
|
|
20
18
|
(0, compare_js_1.compareLists)(oldDirective.args, newDirective.args, {
|
|
21
19
|
onAdded(arg) {
|
|
22
20
|
addChange((0, directive_js_1.directiveArgumentAdded)(newDirective, arg));
|
|
@@ -9,7 +9,7 @@ const considerUsage = ({ changes, config }) => tslib_1.__awaiter(void 0, void 0,
|
|
|
9
9
|
throw new Error(`considerUsage rule is missing config`);
|
|
10
10
|
}
|
|
11
11
|
const collectedBreakingField = [];
|
|
12
|
-
|
|
12
|
+
changes.forEach(change => {
|
|
13
13
|
if (change.criticality.level === change_js_1.CriticalityLevel.Breaking && change.path) {
|
|
14
14
|
const [typeName, fieldName, argumentName] = (0, path_js_1.parsePath)(change.path);
|
|
15
15
|
collectedBreakingField.push({
|
|
@@ -18,7 +18,7 @@ const considerUsage = ({ changes, config }) => tslib_1.__awaiter(void 0, void 0,
|
|
|
18
18
|
argument: argumentName,
|
|
19
19
|
});
|
|
20
20
|
}
|
|
21
|
-
}
|
|
21
|
+
});
|
|
22
22
|
// True if safe to break, false otherwise
|
|
23
23
|
const usageList = yield config.checkUsage(collectedBreakingField);
|
|
24
24
|
// turns an array of booleans into an array of `Type.Field` strings
|
|
@@ -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; } });
|
|
@@ -16,7 +16,7 @@ function similar(schema, typeName, threshold = 0.4) {
|
|
|
16
16
|
if (typeof typeName !== 'undefined' && !targets.some(t => t.typeId === typeName)) {
|
|
17
17
|
throw new Error(`Type '${typeName}' doesn't exist`);
|
|
18
18
|
}
|
|
19
|
-
|
|
19
|
+
(typeName ? [{ typeId: typeName, value: '' }] : targets).forEach(source => {
|
|
20
20
|
const sourceType = schema.getType(source.typeId);
|
|
21
21
|
const matchWith = targets.filter(target => schema.getType(target.typeId).astNode.kind === sourceType.astNode.kind &&
|
|
22
22
|
target.typeId !== source.typeId);
|
|
@@ -26,7 +26,7 @@ function similar(schema, typeName, threshold = 0.4) {
|
|
|
26
26
|
results[source.typeId] = found;
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
|
-
}
|
|
29
|
+
});
|
|
30
30
|
return results;
|
|
31
31
|
}
|
|
32
32
|
exports.similar = similar;
|
|
@@ -73,19 +73,13 @@ function compareLists(oldList, newList, callbacks) {
|
|
|
73
73
|
}
|
|
74
74
|
if (callbacks) {
|
|
75
75
|
if (callbacks.onAdded) {
|
|
76
|
-
|
|
77
|
-
callbacks.onAdded(item);
|
|
78
|
-
}
|
|
76
|
+
added.forEach(callbacks.onAdded);
|
|
79
77
|
}
|
|
80
78
|
if (callbacks.onRemoved) {
|
|
81
|
-
|
|
82
|
-
callbacks.onRemoved(item);
|
|
83
|
-
}
|
|
79
|
+
removed.forEach(callbacks.onRemoved);
|
|
84
80
|
}
|
|
85
81
|
if (callbacks.onMutual) {
|
|
86
|
-
|
|
87
|
-
callbacks.onMutual(item);
|
|
88
|
-
}
|
|
82
|
+
mutual.forEach(callbacks.onMutual);
|
|
89
83
|
}
|
|
90
84
|
}
|
|
91
85
|
return {
|
|
@@ -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;
|
|
@@ -16,7 +16,7 @@ function compareTwoStrings(str1, str2) {
|
|
|
16
16
|
const pairs2 = wordLetterPairs(str2);
|
|
17
17
|
const union = pairs1.length + pairs2.length;
|
|
18
18
|
let intersection = 0;
|
|
19
|
-
|
|
19
|
+
pairs1.forEach(pair1 => {
|
|
20
20
|
for (let i = 0, pair2; (pair2 = pairs2[i]); i++) {
|
|
21
21
|
if (pair1 !== pair2)
|
|
22
22
|
continue;
|
|
@@ -24,7 +24,7 @@ function compareTwoStrings(str1, str2) {
|
|
|
24
24
|
pairs2.splice(i, 1);
|
|
25
25
|
break;
|
|
26
26
|
}
|
|
27
|
-
}
|
|
27
|
+
});
|
|
28
28
|
return (intersection * 2) / union;
|
|
29
29
|
}
|
|
30
30
|
function findBestMatch(mainString, targetStrings) {
|
|
@@ -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, '');
|
|
@@ -26,7 +26,7 @@ function calculateOperationComplexity(node, config, getFragmentByName, depth = 0
|
|
|
26
26
|
calculateOperationComplexity(child, config, getFragmentByName, depth + 1);
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
|
-
if (node.kind
|
|
29
|
+
if (node.kind == graphql_1.Kind.FRAGMENT_SPREAD) {
|
|
30
30
|
const fragment = getFragmentByName(node.name.value);
|
|
31
31
|
if (fragment) {
|
|
32
32
|
cost +=
|
|
@@ -26,7 +26,7 @@ function countDirectives(node, getFragmentByName) {
|
|
|
26
26
|
directives += countDirectives(child, getFragmentByName);
|
|
27
27
|
}
|
|
28
28
|
}
|
|
29
|
-
if (node.kind
|
|
29
|
+
if (node.kind == graphql_1.Kind.FRAGMENT_SPREAD) {
|
|
30
30
|
const fragment = getFragmentByName(node.name.value);
|
|
31
31
|
if (fragment) {
|
|
32
32
|
directives += countDirectives(fragment, getFragmentByName);
|
|
@@ -19,24 +19,25 @@ function validate(schema, sources, options) {
|
|
|
19
19
|
const fragments = [];
|
|
20
20
|
const fragmentNames = [];
|
|
21
21
|
const graph = new dependency_graph_1.DepGraph({ circular: true });
|
|
22
|
-
|
|
23
|
-
|
|
22
|
+
documents.forEach(doc => {
|
|
23
|
+
doc.fragments.forEach(fragment => {
|
|
24
24
|
fragmentNames.push(fragment.node.name.value);
|
|
25
25
|
fragments.push(fragment);
|
|
26
26
|
graph.addNode(fragment.node.name.value, fragment.node);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
fragments.forEach(fragment => {
|
|
30
30
|
const depends = extractFragments((0, graphql_1.print)(fragment.node));
|
|
31
31
|
if (depends) {
|
|
32
|
-
|
|
32
|
+
depends.forEach(name => {
|
|
33
33
|
graph.addDependency(fragment.node.name.value, name);
|
|
34
|
-
}
|
|
34
|
+
});
|
|
35
35
|
}
|
|
36
|
-
}
|
|
37
|
-
|
|
36
|
+
});
|
|
37
|
+
documents
|
|
38
38
|
// since we include fragments, validate only operations
|
|
39
|
-
.filter(doc => doc.hasOperations)
|
|
39
|
+
.filter(doc => doc.hasOperations)
|
|
40
|
+
.forEach(doc => {
|
|
40
41
|
const docWithOperations = {
|
|
41
42
|
kind: graphql_1.Kind.DOCUMENT,
|
|
42
43
|
definitions: doc.operations.map(d => d.node),
|
|
@@ -116,7 +117,7 @@ function validate(schema, sources, options) {
|
|
|
116
117
|
deprecated,
|
|
117
118
|
});
|
|
118
119
|
}
|
|
119
|
-
}
|
|
120
|
+
});
|
|
120
121
|
return invalidDocuments;
|
|
121
122
|
}
|
|
122
123
|
exports.validate = validate;
|
|
@@ -92,7 +92,7 @@ function countDepth(node, parentDepth, getFragmentReference) {
|
|
|
92
92
|
depth = Math.max(depth, countDepth(child, parentDepth + 1, getFragmentReference));
|
|
93
93
|
}
|
|
94
94
|
}
|
|
95
|
-
if (node.kind
|
|
95
|
+
if (node.kind == graphql_1.Kind.FRAGMENT_SPREAD) {
|
|
96
96
|
const fragment = getFragmentReference(node.name.value);
|
|
97
97
|
if (fragment) {
|
|
98
98
|
depth = Math.max(depth, countDepth(fragment, parentDepth + 1, getFragmentReference));
|
|
@@ -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));
|
|
@@ -76,8 +76,7 @@ class LoadersRegistry {
|
|
|
76
76
|
exports.LoadersRegistry = LoadersRegistry;
|
|
77
77
|
function useLoaders(config) {
|
|
78
78
|
const loaders = new LoadersRegistry();
|
|
79
|
-
|
|
80
|
-
loaders.registerModule(loaderName);
|
|
79
|
+
config.loaders.forEach(loaderName => loaders.registerModule(loaderName));
|
|
81
80
|
return loaders;
|
|
82
81
|
}
|
|
83
82
|
exports.useLoaders = useLoaders;
|
package/esm/action/src/run.js
CHANGED
|
@@ -79,7 +79,7 @@ export function run() {
|
|
|
79
79
|
}
|
|
80
80
|
}
|
|
81
81
|
let [schemaRef, schemaPath] = schemaPointer.split(':');
|
|
82
|
-
if (useMerge && (pullRequest === null || pullRequest === void 0 ? void 0 : pullRequest.state)
|
|
82
|
+
if (useMerge && (pullRequest === null || pullRequest === void 0 ? void 0 : pullRequest.state) == 'open') {
|
|
83
83
|
ref = `refs/pull/${pullRequest.number}/merge`;
|
|
84
84
|
workspace = undefined;
|
|
85
85
|
core.info(`EXPERIMENTAL - Using Pull Request ${ref}`);
|
|
@@ -20,26 +20,25 @@ export function parseGlobalArgs(args) {
|
|
|
20
20
|
const leftHeaders = {};
|
|
21
21
|
const rightHeaders = {};
|
|
22
22
|
if (args.header) {
|
|
23
|
-
|
|
23
|
+
args.header.forEach(header => {
|
|
24
24
|
const [name, ...values] = header.split(':');
|
|
25
25
|
headers[name] = values.join('');
|
|
26
|
-
}
|
|
26
|
+
});
|
|
27
27
|
}
|
|
28
28
|
if (args.leftHeader) {
|
|
29
|
-
|
|
29
|
+
args.leftHeader.forEach(leftHeader => {
|
|
30
30
|
const [lname, ...lvalues] = leftHeader.split(':');
|
|
31
31
|
leftHeaders[lname] = lvalues.join('');
|
|
32
|
-
}
|
|
32
|
+
});
|
|
33
33
|
}
|
|
34
34
|
if (args.rightHeader) {
|
|
35
|
-
|
|
35
|
+
args.rightHeader.forEach(rightHeader => {
|
|
36
36
|
const [rname, ...rvalues] = rightHeader.split(':');
|
|
37
37
|
rightHeaders[rname] = rvalues.join('');
|
|
38
|
-
}
|
|
38
|
+
});
|
|
39
39
|
}
|
|
40
40
|
if (args.require) {
|
|
41
|
-
|
|
42
|
-
require(mod);
|
|
41
|
+
args.require.forEach(mod => require(mod));
|
|
43
42
|
}
|
|
44
43
|
return { headers, leftHeaders, rightHeaders, token: args.token };
|
|
45
44
|
}
|
|
@@ -129,23 +129,23 @@ function sortChanges(changes) {
|
|
|
129
129
|
function reportBreakingChanges(changes) {
|
|
130
130
|
const label = symbols.error;
|
|
131
131
|
const sorted = sortChanges(changes);
|
|
132
|
-
|
|
132
|
+
sorted.forEach(change => {
|
|
133
133
|
Logger.log(`${label} ${bolderize(change.message)}`);
|
|
134
|
-
}
|
|
134
|
+
});
|
|
135
135
|
}
|
|
136
136
|
function reportDangerousChanges(changes) {
|
|
137
137
|
const label = symbols.warning;
|
|
138
138
|
const sorted = sortChanges(changes);
|
|
139
|
-
|
|
139
|
+
sorted.forEach(change => {
|
|
140
140
|
Logger.log(`${label} ${bolderize(change.message)}`);
|
|
141
|
-
}
|
|
141
|
+
});
|
|
142
142
|
}
|
|
143
143
|
function reportNonBreakingChanges(changes) {
|
|
144
144
|
const label = symbols.success;
|
|
145
145
|
const sorted = sortChanges(changes);
|
|
146
|
-
|
|
146
|
+
sorted.forEach(change => {
|
|
147
147
|
Logger.log(`${label} ${bolderize(change.message)}`);
|
|
148
|
-
}
|
|
148
|
+
});
|
|
149
149
|
}
|
|
150
150
|
function resolveRule(name) {
|
|
151
151
|
const filepath = ensureAbsolute(name);
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
1
|
import open from 'open';
|
|
3
2
|
import { createCommand } from '@graphql-inspector/commands';
|
|
4
3
|
export default createCommand(() => {
|
|
@@ -6,9 +5,7 @@ export default createCommand(() => {
|
|
|
6
5
|
command: ['docs', 'website'],
|
|
7
6
|
describe: 'Open Documentation',
|
|
8
7
|
handler() {
|
|
9
|
-
return
|
|
10
|
-
return yield open('https://graphql-inspector.com');
|
|
11
|
-
});
|
|
8
|
+
return open('https://graphql-inspector.com');
|
|
12
9
|
},
|
|
13
10
|
};
|
|
14
11
|
});
|
|
@@ -153,17 +153,17 @@ function assignResolveType(type) {
|
|
|
153
153
|
}
|
|
154
154
|
function forEachField(schema, fn) {
|
|
155
155
|
const typeMap = schema.getTypeMap();
|
|
156
|
-
|
|
156
|
+
Object.keys(typeMap).forEach(typeName => {
|
|
157
157
|
const type = typeMap[typeName];
|
|
158
158
|
// TODO: maybe have an option to include these?
|
|
159
159
|
if (!getNamedType(type).name.startsWith('__') && type instanceof GraphQLObjectType) {
|
|
160
160
|
const fields = type.getFields();
|
|
161
|
-
|
|
161
|
+
Object.keys(fields).forEach(fieldName => {
|
|
162
162
|
const field = fields[fieldName];
|
|
163
163
|
fn(field, typeName, fieldName);
|
|
164
|
-
}
|
|
164
|
+
});
|
|
165
165
|
}
|
|
166
|
-
}
|
|
166
|
+
});
|
|
167
167
|
}
|
|
168
168
|
class MockList {
|
|
169
169
|
// wrappedFunction can return another MockList or a value
|
|
@@ -1,9 +1,8 @@
|
|
|
1
1
|
import { __awaiter } from "tslib";
|
|
2
|
-
import { createServer } from 'http';
|
|
3
|
-
import { createYoga } from 'graphql-yoga';
|
|
4
2
|
import open from 'open';
|
|
5
3
|
import { createCommand, parseGlobalArgs, } from '@graphql-inspector/commands';
|
|
6
4
|
import { Logger } from '@graphql-inspector/logger';
|
|
5
|
+
import { createServer } from '@graphql-yoga/node';
|
|
7
6
|
import { fake } from './fake.js';
|
|
8
7
|
export default createCommand(api => {
|
|
9
8
|
const { loaders } = api;
|
|
@@ -41,16 +40,18 @@ export default createCommand(api => {
|
|
|
41
40
|
const port = args.port;
|
|
42
41
|
try {
|
|
43
42
|
fake(schema);
|
|
44
|
-
const
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
43
|
+
const server = createServer({
|
|
44
|
+
schema,
|
|
45
|
+
port,
|
|
46
|
+
cors: true,
|
|
47
|
+
logging: false,
|
|
48
48
|
});
|
|
49
|
+
yield server.start();
|
|
49
50
|
const url = `http://localhost:${port}`;
|
|
50
51
|
Logger.success(`GraphQL API: ${url}`);
|
|
51
52
|
yield open(url);
|
|
52
53
|
const shutdown = () => {
|
|
53
|
-
server.
|
|
54
|
+
server.stop();
|
|
54
55
|
process.exit(0);
|
|
55
56
|
};
|
|
56
57
|
process.on('SIGINT', shutdown);
|
|
@@ -20,9 +20,9 @@ export function handler({ schema, writePath, type, threshold, }) {
|
|
|
20
20
|
Logger.log('');
|
|
21
21
|
Logger.log(`${prefix} ${sourceType}`);
|
|
22
22
|
Logger.log(printResult(name, matches.bestMatch.rating));
|
|
23
|
-
|
|
23
|
+
matches.ratings.forEach(match => {
|
|
24
24
|
Logger.log(printResult(match.target.typeId, match.rating));
|
|
25
|
-
}
|
|
25
|
+
});
|
|
26
26
|
}
|
|
27
27
|
}
|
|
28
28
|
if (shouldWrite) {
|
|
@@ -226,13 +226,13 @@ function printInvalidDocuments(invalidDocuments, listKey, isError = false, silen
|
|
|
226
226
|
if (silent) {
|
|
227
227
|
return;
|
|
228
228
|
}
|
|
229
|
-
|
|
229
|
+
invalidDocuments.forEach(doc => {
|
|
230
230
|
if (doc.errors.length) {
|
|
231
|
-
|
|
231
|
+
renderErrors(doc.source.name, doc[listKey], isError).forEach(line => {
|
|
232
232
|
Logger.log(line);
|
|
233
|
-
}
|
|
233
|
+
});
|
|
234
234
|
}
|
|
235
|
-
}
|
|
235
|
+
});
|
|
236
236
|
}
|
|
237
237
|
function renderErrors(sourceName, errors, isError = false) {
|
|
238
238
|
const errorsAsString = errors.map(e => ` - ${bolderize(e.message)}`).join('\n');
|
|
@@ -10,7 +10,7 @@ export function readDocument(source) {
|
|
|
10
10
|
const documentNode = parse(source.body);
|
|
11
11
|
const filepath = source.name;
|
|
12
12
|
const definitions = documentNode.definitions || [];
|
|
13
|
-
|
|
13
|
+
definitions.forEach((node) => {
|
|
14
14
|
if (isOperation(node)) {
|
|
15
15
|
result.operations.push({
|
|
16
16
|
node,
|
|
@@ -23,7 +23,7 @@ export function readDocument(source) {
|
|
|
23
23
|
source: filepath,
|
|
24
24
|
});
|
|
25
25
|
}
|
|
26
|
-
}
|
|
26
|
+
});
|
|
27
27
|
result.hasFragments = result.fragments.length > 0;
|
|
28
28
|
result.hasOperations = result.operations.length > 0;
|
|
29
29
|
return result;
|
|
@@ -83,22 +83,22 @@ export function coverage(schema, sources) {
|
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
85
|
const documents = coverage.sources.map(readDocument);
|
|
86
|
-
|
|
86
|
+
documents.forEach((doc, i) => {
|
|
87
87
|
const source = coverage.sources[i];
|
|
88
|
-
|
|
88
|
+
doc.operations.forEach(op => {
|
|
89
89
|
visit(op.node, visitWithTypeInfo(typeInfo, visitor(source)));
|
|
90
|
-
}
|
|
91
|
-
|
|
90
|
+
});
|
|
91
|
+
doc.fragments.forEach(fr => {
|
|
92
92
|
visit(fr.node, visitWithTypeInfo(typeInfo, visitor(source)));
|
|
93
|
-
}
|
|
94
|
-
}
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
95
|
for (const key in coverage.types) {
|
|
96
96
|
const me = coverage.types[key];
|
|
97
97
|
processStats(me);
|
|
98
98
|
coverage.stats.numTypes++;
|
|
99
99
|
if (me.fieldsCountCovered > 0)
|
|
100
100
|
coverage.stats.numTypesCovered++;
|
|
101
|
-
if (me.fieldsCount
|
|
101
|
+
if (me.fieldsCount == me.fieldsCountCovered)
|
|
102
102
|
coverage.stats.numTypesCoveredFully++;
|
|
103
103
|
coverage.stats.numFields += me.fieldsCount;
|
|
104
104
|
coverage.stats.numFiledsCovered += me.fieldsCountCovered;
|