@graphql-inspector/diff-command 0.0.0-canary.58ffd99 → 0.0.0-canary.7db8980
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/index.d.ts +4 -2
- package/{index.cjs.js → index.js} +71 -46
- package/{index.esm.js → index.mjs} +71 -46
- package/package.json +17 -7
- package/index.cjs.js.map +0 -1
- package/index.esm.js.map +0 -1
package/index.d.ts
CHANGED
|
@@ -1,16 +1,18 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { CommandFactory, GlobalArgs } from '@graphql-inspector/commands';
|
|
2
2
|
import { GraphQLSchema } from 'graphql';
|
|
3
3
|
export { CommandFactory };
|
|
4
4
|
export declare function handler(input: {
|
|
5
5
|
oldSchema: GraphQLSchema;
|
|
6
6
|
newSchema: GraphQLSchema;
|
|
7
7
|
onComplete?: string;
|
|
8
|
+
onUsage?: string;
|
|
8
9
|
rules?: Array<string | number>;
|
|
9
|
-
}): void
|
|
10
|
+
}): Promise<void>;
|
|
10
11
|
declare const _default: CommandFactory<{}, {
|
|
11
12
|
oldSchema: string;
|
|
12
13
|
newSchema: string;
|
|
13
14
|
rule?: (string | number)[] | undefined;
|
|
14
15
|
onComplete?: string | undefined;
|
|
16
|
+
onUsage?: string | undefined;
|
|
15
17
|
} & GlobalArgs>;
|
|
16
18
|
export default _default;
|
|
@@ -4,47 +4,49 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
const tslib = require('tslib');
|
|
6
6
|
const commands = require('@graphql-inspector/commands');
|
|
7
|
-
const logger = require('@graphql-inspector/logger');
|
|
8
7
|
const core = require('@graphql-inspector/core');
|
|
8
|
+
const logger = require('@graphql-inspector/logger');
|
|
9
9
|
const fs = require('fs');
|
|
10
10
|
|
|
11
11
|
function handler(input) {
|
|
12
|
-
|
|
13
|
-
? resolveCompletionHandler(input.onComplete)
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
12
|
+
return tslib.__awaiter(this, void 0, void 0, function* () {
|
|
13
|
+
const onComplete = input.onComplete ? resolveCompletionHandler(input.onComplete) : failOnBreakingChanges;
|
|
14
|
+
const rules = input.rules
|
|
15
|
+
? input.rules
|
|
16
|
+
.filter(isString)
|
|
17
|
+
.map((name) => {
|
|
18
|
+
const rule = resolveRule(name);
|
|
19
|
+
if (!rule) {
|
|
20
|
+
throw new Error(`\Rule '${name}' does not exist!\n`);
|
|
21
|
+
}
|
|
22
|
+
return rule;
|
|
23
|
+
})
|
|
24
|
+
.filter(f => f)
|
|
25
|
+
: [];
|
|
26
|
+
const changes = yield core.diff(input.oldSchema, input.newSchema, rules, {
|
|
27
|
+
checkUsage: input.onUsage ? resolveUsageHandler(input.onUsage) : undefined,
|
|
28
|
+
});
|
|
29
|
+
if (changes.length === 0) {
|
|
30
|
+
logger.Logger.success('No changes detected');
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
logger.Logger.log(`\nDetected the following changes (${changes.length}) between schemas:\n`);
|
|
34
|
+
const breakingChanges = changes.filter(change => change.criticality.level === core.CriticalityLevel.Breaking);
|
|
35
|
+
const dangerousChanges = changes.filter(change => change.criticality.level === core.CriticalityLevel.Dangerous);
|
|
36
|
+
const nonBreakingChanges = changes.filter(change => change.criticality.level === core.CriticalityLevel.NonBreaking);
|
|
37
|
+
if (breakingChanges.length) {
|
|
38
|
+
reportBreakingChanges(breakingChanges);
|
|
39
|
+
}
|
|
40
|
+
if (dangerousChanges.length) {
|
|
41
|
+
reportDangerousChanges(dangerousChanges);
|
|
42
|
+
}
|
|
43
|
+
if (nonBreakingChanges.length) {
|
|
44
|
+
reportNonBreakingChanges(nonBreakingChanges);
|
|
45
|
+
}
|
|
46
|
+
onComplete({ breakingChanges, dangerousChanges, nonBreakingChanges });
|
|
47
|
+
});
|
|
46
48
|
}
|
|
47
|
-
const index = commands.createCommand(
|
|
49
|
+
const index = commands.createCommand(api => {
|
|
48
50
|
const { loaders } = api;
|
|
49
51
|
return {
|
|
50
52
|
command: 'diff <oldSchema> <newSchema>',
|
|
@@ -70,27 +72,40 @@ const index = commands.createCommand((api) => {
|
|
|
70
72
|
describe: 'Handle Completion',
|
|
71
73
|
type: 'string',
|
|
72
74
|
},
|
|
75
|
+
onUsage: {
|
|
76
|
+
describe: 'Checks usage of schema',
|
|
77
|
+
type: 'string',
|
|
78
|
+
},
|
|
73
79
|
});
|
|
74
80
|
},
|
|
75
81
|
handler(args) {
|
|
82
|
+
var _a;
|
|
76
83
|
return tslib.__awaiter(this, void 0, void 0, function* () {
|
|
77
84
|
try {
|
|
78
85
|
const oldSchemaPointer = args.oldSchema;
|
|
79
86
|
const newSchemaPointer = args.newSchema;
|
|
80
|
-
const
|
|
87
|
+
const apolloFederation = args.federation || false;
|
|
88
|
+
const aws = args.aws || false;
|
|
89
|
+
const method = ((_a = args.method) === null || _a === void 0 ? void 0 : _a.toUpperCase()) || 'POST';
|
|
90
|
+
const { headers, leftHeaders, rightHeaders, token } = commands.parseGlobalArgs(args);
|
|
91
|
+
const oldSchemaHeaders = Object.assign(Object.assign({}, (headers !== null && headers !== void 0 ? headers : {})), (leftHeaders !== null && leftHeaders !== void 0 ? leftHeaders : {}));
|
|
92
|
+
const newSchemaHeaders = Object.assign(Object.assign({}, (headers !== null && headers !== void 0 ? headers : {})), (rightHeaders !== null && rightHeaders !== void 0 ? rightHeaders : {}));
|
|
81
93
|
const oldSchema = yield loaders.loadSchema(oldSchemaPointer, {
|
|
82
|
-
headers,
|
|
94
|
+
headers: oldSchemaHeaders,
|
|
83
95
|
token,
|
|
84
|
-
|
|
96
|
+
method,
|
|
97
|
+
}, apolloFederation, aws);
|
|
85
98
|
const newSchema = yield loaders.loadSchema(newSchemaPointer, {
|
|
86
|
-
headers,
|
|
99
|
+
headers: newSchemaHeaders,
|
|
87
100
|
token,
|
|
88
|
-
|
|
89
|
-
|
|
101
|
+
method,
|
|
102
|
+
}, apolloFederation, aws);
|
|
103
|
+
yield handler({
|
|
90
104
|
oldSchema,
|
|
91
105
|
newSchema,
|
|
92
106
|
rules: args.rule,
|
|
93
107
|
onComplete: args.onComplete,
|
|
108
|
+
onUsage: args.onUsage,
|
|
94
109
|
});
|
|
95
110
|
}
|
|
96
111
|
catch (error) {
|
|
@@ -117,21 +132,21 @@ function sortChanges(changes) {
|
|
|
117
132
|
function reportBreakingChanges(changes) {
|
|
118
133
|
const label = logger.symbols.error;
|
|
119
134
|
const sorted = sortChanges(changes);
|
|
120
|
-
sorted.forEach(
|
|
135
|
+
sorted.forEach(change => {
|
|
121
136
|
logger.Logger.log(`${label} ${logger.bolderize(change.message)}`);
|
|
122
137
|
});
|
|
123
138
|
}
|
|
124
139
|
function reportDangerousChanges(changes) {
|
|
125
140
|
const label = logger.symbols.warning;
|
|
126
141
|
const sorted = sortChanges(changes);
|
|
127
|
-
sorted.forEach(
|
|
142
|
+
sorted.forEach(change => {
|
|
128
143
|
logger.Logger.log(`${label} ${logger.bolderize(change.message)}`);
|
|
129
144
|
});
|
|
130
145
|
}
|
|
131
146
|
function reportNonBreakingChanges(changes) {
|
|
132
147
|
const label = logger.symbols.success;
|
|
133
148
|
const sorted = sortChanges(changes);
|
|
134
|
-
sorted.forEach(
|
|
149
|
+
sorted.forEach(change => {
|
|
135
150
|
logger.Logger.log(`${label} ${logger.bolderize(change.message)}`);
|
|
136
151
|
});
|
|
137
152
|
}
|
|
@@ -153,6 +168,17 @@ function resolveCompletionHandler(name) {
|
|
|
153
168
|
const mod = require(filepath);
|
|
154
169
|
return (mod === null || mod === void 0 ? void 0 : mod.default) || mod;
|
|
155
170
|
}
|
|
171
|
+
function resolveUsageHandler(name) {
|
|
172
|
+
const filepath = commands.ensureAbsolute(name);
|
|
173
|
+
try {
|
|
174
|
+
require.resolve(filepath);
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
throw new Error(`UsageHandler '${name}' does not exist!`);
|
|
178
|
+
}
|
|
179
|
+
const mod = require(filepath);
|
|
180
|
+
return (mod === null || mod === void 0 ? void 0 : mod.default) || mod;
|
|
181
|
+
}
|
|
156
182
|
function failOnBreakingChanges({ breakingChanges }) {
|
|
157
183
|
const breakingCount = breakingChanges.length;
|
|
158
184
|
if (breakingCount) {
|
|
@@ -169,4 +195,3 @@ function isString(val) {
|
|
|
169
195
|
|
|
170
196
|
exports.default = index;
|
|
171
197
|
exports.handler = handler;
|
|
172
|
-
//# sourceMappingURL=index.cjs.js.map
|
|
@@ -1,46 +1,48 @@
|
|
|
1
1
|
import { __awaiter } from 'tslib';
|
|
2
2
|
import { createCommand, parseGlobalArgs, ensureAbsolute } from '@graphql-inspector/commands';
|
|
3
|
-
import { Logger, symbols, bolderize } from '@graphql-inspector/logger';
|
|
4
3
|
import { diff, CriticalityLevel, DiffRule } from '@graphql-inspector/core';
|
|
4
|
+
import { Logger, symbols, bolderize } from '@graphql-inspector/logger';
|
|
5
5
|
import { existsSync } from 'fs';
|
|
6
6
|
|
|
7
7
|
function handler(input) {
|
|
8
|
-
|
|
9
|
-
? resolveCompletionHandler(input.onComplete)
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
8
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
9
|
+
const onComplete = input.onComplete ? resolveCompletionHandler(input.onComplete) : failOnBreakingChanges;
|
|
10
|
+
const rules = input.rules
|
|
11
|
+
? input.rules
|
|
12
|
+
.filter(isString)
|
|
13
|
+
.map((name) => {
|
|
14
|
+
const rule = resolveRule(name);
|
|
15
|
+
if (!rule) {
|
|
16
|
+
throw new Error(`\Rule '${name}' does not exist!\n`);
|
|
17
|
+
}
|
|
18
|
+
return rule;
|
|
19
|
+
})
|
|
20
|
+
.filter(f => f)
|
|
21
|
+
: [];
|
|
22
|
+
const changes = yield diff(input.oldSchema, input.newSchema, rules, {
|
|
23
|
+
checkUsage: input.onUsage ? resolveUsageHandler(input.onUsage) : undefined,
|
|
24
|
+
});
|
|
25
|
+
if (changes.length === 0) {
|
|
26
|
+
Logger.success('No changes detected');
|
|
27
|
+
return;
|
|
28
|
+
}
|
|
29
|
+
Logger.log(`\nDetected the following changes (${changes.length}) between schemas:\n`);
|
|
30
|
+
const breakingChanges = changes.filter(change => change.criticality.level === CriticalityLevel.Breaking);
|
|
31
|
+
const dangerousChanges = changes.filter(change => change.criticality.level === CriticalityLevel.Dangerous);
|
|
32
|
+
const nonBreakingChanges = changes.filter(change => change.criticality.level === CriticalityLevel.NonBreaking);
|
|
33
|
+
if (breakingChanges.length) {
|
|
34
|
+
reportBreakingChanges(breakingChanges);
|
|
35
|
+
}
|
|
36
|
+
if (dangerousChanges.length) {
|
|
37
|
+
reportDangerousChanges(dangerousChanges);
|
|
38
|
+
}
|
|
39
|
+
if (nonBreakingChanges.length) {
|
|
40
|
+
reportNonBreakingChanges(nonBreakingChanges);
|
|
41
|
+
}
|
|
42
|
+
onComplete({ breakingChanges, dangerousChanges, nonBreakingChanges });
|
|
43
|
+
});
|
|
42
44
|
}
|
|
43
|
-
const index = createCommand(
|
|
45
|
+
const index = createCommand(api => {
|
|
44
46
|
const { loaders } = api;
|
|
45
47
|
return {
|
|
46
48
|
command: 'diff <oldSchema> <newSchema>',
|
|
@@ -66,27 +68,40 @@ const index = createCommand((api) => {
|
|
|
66
68
|
describe: 'Handle Completion',
|
|
67
69
|
type: 'string',
|
|
68
70
|
},
|
|
71
|
+
onUsage: {
|
|
72
|
+
describe: 'Checks usage of schema',
|
|
73
|
+
type: 'string',
|
|
74
|
+
},
|
|
69
75
|
});
|
|
70
76
|
},
|
|
71
77
|
handler(args) {
|
|
78
|
+
var _a;
|
|
72
79
|
return __awaiter(this, void 0, void 0, function* () {
|
|
73
80
|
try {
|
|
74
81
|
const oldSchemaPointer = args.oldSchema;
|
|
75
82
|
const newSchemaPointer = args.newSchema;
|
|
76
|
-
const
|
|
83
|
+
const apolloFederation = args.federation || false;
|
|
84
|
+
const aws = args.aws || false;
|
|
85
|
+
const method = ((_a = args.method) === null || _a === void 0 ? void 0 : _a.toUpperCase()) || 'POST';
|
|
86
|
+
const { headers, leftHeaders, rightHeaders, token } = parseGlobalArgs(args);
|
|
87
|
+
const oldSchemaHeaders = Object.assign(Object.assign({}, (headers !== null && headers !== void 0 ? headers : {})), (leftHeaders !== null && leftHeaders !== void 0 ? leftHeaders : {}));
|
|
88
|
+
const newSchemaHeaders = Object.assign(Object.assign({}, (headers !== null && headers !== void 0 ? headers : {})), (rightHeaders !== null && rightHeaders !== void 0 ? rightHeaders : {}));
|
|
77
89
|
const oldSchema = yield loaders.loadSchema(oldSchemaPointer, {
|
|
78
|
-
headers,
|
|
90
|
+
headers: oldSchemaHeaders,
|
|
79
91
|
token,
|
|
80
|
-
|
|
92
|
+
method,
|
|
93
|
+
}, apolloFederation, aws);
|
|
81
94
|
const newSchema = yield loaders.loadSchema(newSchemaPointer, {
|
|
82
|
-
headers,
|
|
95
|
+
headers: newSchemaHeaders,
|
|
83
96
|
token,
|
|
84
|
-
|
|
85
|
-
|
|
97
|
+
method,
|
|
98
|
+
}, apolloFederation, aws);
|
|
99
|
+
yield handler({
|
|
86
100
|
oldSchema,
|
|
87
101
|
newSchema,
|
|
88
102
|
rules: args.rule,
|
|
89
103
|
onComplete: args.onComplete,
|
|
104
|
+
onUsage: args.onUsage,
|
|
90
105
|
});
|
|
91
106
|
}
|
|
92
107
|
catch (error) {
|
|
@@ -113,21 +128,21 @@ function sortChanges(changes) {
|
|
|
113
128
|
function reportBreakingChanges(changes) {
|
|
114
129
|
const label = symbols.error;
|
|
115
130
|
const sorted = sortChanges(changes);
|
|
116
|
-
sorted.forEach(
|
|
131
|
+
sorted.forEach(change => {
|
|
117
132
|
Logger.log(`${label} ${bolderize(change.message)}`);
|
|
118
133
|
});
|
|
119
134
|
}
|
|
120
135
|
function reportDangerousChanges(changes) {
|
|
121
136
|
const label = symbols.warning;
|
|
122
137
|
const sorted = sortChanges(changes);
|
|
123
|
-
sorted.forEach(
|
|
138
|
+
sorted.forEach(change => {
|
|
124
139
|
Logger.log(`${label} ${bolderize(change.message)}`);
|
|
125
140
|
});
|
|
126
141
|
}
|
|
127
142
|
function reportNonBreakingChanges(changes) {
|
|
128
143
|
const label = symbols.success;
|
|
129
144
|
const sorted = sortChanges(changes);
|
|
130
|
-
sorted.forEach(
|
|
145
|
+
sorted.forEach(change => {
|
|
131
146
|
Logger.log(`${label} ${bolderize(change.message)}`);
|
|
132
147
|
});
|
|
133
148
|
}
|
|
@@ -149,6 +164,17 @@ function resolveCompletionHandler(name) {
|
|
|
149
164
|
const mod = require(filepath);
|
|
150
165
|
return (mod === null || mod === void 0 ? void 0 : mod.default) || mod;
|
|
151
166
|
}
|
|
167
|
+
function resolveUsageHandler(name) {
|
|
168
|
+
const filepath = ensureAbsolute(name);
|
|
169
|
+
try {
|
|
170
|
+
require.resolve(filepath);
|
|
171
|
+
}
|
|
172
|
+
catch (error) {
|
|
173
|
+
throw new Error(`UsageHandler '${name}' does not exist!`);
|
|
174
|
+
}
|
|
175
|
+
const mod = require(filepath);
|
|
176
|
+
return (mod === null || mod === void 0 ? void 0 : mod.default) || mod;
|
|
177
|
+
}
|
|
152
178
|
function failOnBreakingChanges({ breakingChanges }) {
|
|
153
179
|
const breakingCount = breakingChanges.length;
|
|
154
180
|
if (breakingCount) {
|
|
@@ -165,4 +191,3 @@ function isString(val) {
|
|
|
165
191
|
|
|
166
192
|
export default index;
|
|
167
193
|
export { handler };
|
|
168
|
-
//# sourceMappingURL=index.esm.js.map
|
package/package.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@graphql-inspector/diff-command",
|
|
3
|
-
"version": "0.0.0-canary.
|
|
3
|
+
"version": "0.0.0-canary.7db8980",
|
|
4
4
|
"description": "Compare GraphQL Schemas",
|
|
5
5
|
"sideEffects": false,
|
|
6
6
|
"peerDependencies": {
|
|
7
|
-
"graphql": "^0.13.0 || ^14.0.0 || ^15.0.0"
|
|
7
|
+
"graphql": "^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0"
|
|
8
8
|
},
|
|
9
9
|
"dependencies": {
|
|
10
|
-
"@graphql-inspector/commands": "0.0.0-canary.
|
|
11
|
-
"@graphql-inspector/core": "0.0.0-canary.
|
|
12
|
-
"@graphql-inspector/logger": "0.0.0-canary.
|
|
10
|
+
"@graphql-inspector/commands": "0.0.0-canary.7db8980",
|
|
11
|
+
"@graphql-inspector/core": "0.0.0-canary.7db8980",
|
|
12
|
+
"@graphql-inspector/logger": "0.0.0-canary.7db8980",
|
|
13
13
|
"tslib": "^2.0.0"
|
|
14
14
|
},
|
|
15
15
|
"repository": {
|
|
@@ -29,10 +29,20 @@
|
|
|
29
29
|
"url": "https://github.com/kamilkisiela"
|
|
30
30
|
},
|
|
31
31
|
"license": "MIT",
|
|
32
|
-
"main": "index.
|
|
33
|
-
"module": "index.
|
|
32
|
+
"main": "index.js",
|
|
33
|
+
"module": "index.mjs",
|
|
34
34
|
"typings": "index.d.ts",
|
|
35
35
|
"typescript": {
|
|
36
36
|
"definition": "index.d.ts"
|
|
37
|
+
},
|
|
38
|
+
"exports": {
|
|
39
|
+
".": {
|
|
40
|
+
"require": "./index.js",
|
|
41
|
+
"import": "./index.mjs"
|
|
42
|
+
},
|
|
43
|
+
"./*": {
|
|
44
|
+
"require": "./*.js",
|
|
45
|
+
"import": "./*.mjs"
|
|
46
|
+
}
|
|
37
47
|
}
|
|
38
48
|
}
|
package/index.cjs.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs.js","sources":["../../dist/commands/diff/src/index.js"],"sourcesContent":["import { __awaiter } from \"tslib\";\nimport { createCommand, ensureAbsolute, parseGlobalArgs, } from '@graphql-inspector/commands';\nimport { symbols, Logger, bolderize } from '@graphql-inspector/logger';\nimport { diff as diffSchema, CriticalityLevel, DiffRule, } from '@graphql-inspector/core';\nimport { existsSync } from 'fs';\nexport function handler(input) {\n const onComplete = input.onComplete\n ? resolveCompletionHandler(input.onComplete)\n : failOnBreakingChanges;\n const rules = input.rules\n ? input.rules\n .filter(isString)\n .map((name) => {\n const rule = resolveRule(name);\n if (!rule) {\n throw new Error(`\\Rule '${name}' does not exist!\\n`);\n }\n return rule;\n })\n .filter((f) => f)\n : [];\n const changes = diffSchema(input.oldSchema, input.newSchema, rules);\n if (changes.length === 0) {\n Logger.success('No changes detected');\n return;\n }\n Logger.log(`\\nDetected the following changes (${changes.length}) between schemas:\\n`);\n const breakingChanges = changes.filter((change) => change.criticality.level === CriticalityLevel.Breaking);\n const dangerousChanges = changes.filter((change) => change.criticality.level === CriticalityLevel.Dangerous);\n const nonBreakingChanges = changes.filter((change) => change.criticality.level === CriticalityLevel.NonBreaking);\n if (breakingChanges.length) {\n reportBreakingChanges(breakingChanges);\n }\n if (dangerousChanges.length) {\n reportDangerousChanges(dangerousChanges);\n }\n if (nonBreakingChanges.length) {\n reportNonBreakingChanges(nonBreakingChanges);\n }\n onComplete({ breakingChanges, dangerousChanges, nonBreakingChanges });\n}\nexport default createCommand((api) => {\n const { loaders } = api;\n return {\n command: 'diff <oldSchema> <newSchema>',\n describe: 'Compare two GraphQL Schemas',\n builder(yargs) {\n return yargs\n .positional('oldSchema', {\n describe: 'Point to an old schema',\n type: 'string',\n demandOption: true,\n })\n .positional('newSchema', {\n describe: 'Point to a new schema',\n type: 'string',\n demandOption: true,\n })\n .options({\n rule: {\n describe: 'Add rules',\n array: true,\n },\n onComplete: {\n describe: 'Handle Completion',\n type: 'string',\n },\n });\n },\n handler(args) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n const oldSchemaPointer = args.oldSchema;\n const newSchemaPointer = args.newSchema;\n const { headers, token } = parseGlobalArgs(args);\n const oldSchema = yield loaders.loadSchema(oldSchemaPointer, {\n headers,\n token,\n });\n const newSchema = yield loaders.loadSchema(newSchemaPointer, {\n headers,\n token,\n });\n handler({\n oldSchema,\n newSchema,\n rules: args.rule,\n onComplete: args.onComplete,\n });\n }\n catch (error) {\n Logger.error(error);\n throw error;\n }\n });\n },\n };\n});\nfunction sortChanges(changes) {\n return changes.slice().sort((a, b) => {\n const aPath = a.path || '';\n const bPath = b.path || '';\n if (aPath > bPath) {\n return 1;\n }\n if (bPath > aPath) {\n return -1;\n }\n return 0;\n });\n}\nfunction reportBreakingChanges(changes) {\n const label = symbols.error;\n const sorted = sortChanges(changes);\n sorted.forEach((change) => {\n Logger.log(`${label} ${bolderize(change.message)}`);\n });\n}\nfunction reportDangerousChanges(changes) {\n const label = symbols.warning;\n const sorted = sortChanges(changes);\n sorted.forEach((change) => {\n Logger.log(`${label} ${bolderize(change.message)}`);\n });\n}\nfunction reportNonBreakingChanges(changes) {\n const label = symbols.success;\n const sorted = sortChanges(changes);\n sorted.forEach((change) => {\n Logger.log(`${label} ${bolderize(change.message)}`);\n });\n}\nfunction resolveRule(name) {\n const filepath = ensureAbsolute(name);\n if (existsSync(filepath)) {\n return require(filepath);\n }\n return DiffRule[name];\n}\nfunction resolveCompletionHandler(name) {\n const filepath = ensureAbsolute(name);\n try {\n require.resolve(filepath);\n }\n catch (error) {\n throw new Error(`CompletionHandler '${name}' does not exist!`);\n }\n const mod = require(filepath);\n return (mod === null || mod === void 0 ? void 0 : mod.default) || mod;\n}\nfunction failOnBreakingChanges({ breakingChanges }) {\n const breakingCount = breakingChanges.length;\n if (breakingCount) {\n Logger.error(`Detected ${breakingCount} breaking change${breakingCount > 1 ? 's' : ''}`);\n process.exit(1);\n }\n else {\n Logger.success('No breaking changes detected');\n }\n}\nfunction isString(val) {\n return typeof val === 'string';\n}\n//# sourceMappingURL=index.js.map"],"names":["diffSchema","Logger","CriticalityLevel","createCommand","__awaiter","parseGlobalArgs","symbols","bolderize","ensureAbsolute","existsSync","DiffRule"],"mappings":"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"}
|
package/index.esm.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../../dist/commands/diff/src/index.js"],"sourcesContent":["import { __awaiter } from \"tslib\";\nimport { createCommand, ensureAbsolute, parseGlobalArgs, } from '@graphql-inspector/commands';\nimport { symbols, Logger, bolderize } from '@graphql-inspector/logger';\nimport { diff as diffSchema, CriticalityLevel, DiffRule, } from '@graphql-inspector/core';\nimport { existsSync } from 'fs';\nexport function handler(input) {\n const onComplete = input.onComplete\n ? resolveCompletionHandler(input.onComplete)\n : failOnBreakingChanges;\n const rules = input.rules\n ? input.rules\n .filter(isString)\n .map((name) => {\n const rule = resolveRule(name);\n if (!rule) {\n throw new Error(`\\Rule '${name}' does not exist!\\n`);\n }\n return rule;\n })\n .filter((f) => f)\n : [];\n const changes = diffSchema(input.oldSchema, input.newSchema, rules);\n if (changes.length === 0) {\n Logger.success('No changes detected');\n return;\n }\n Logger.log(`\\nDetected the following changes (${changes.length}) between schemas:\\n`);\n const breakingChanges = changes.filter((change) => change.criticality.level === CriticalityLevel.Breaking);\n const dangerousChanges = changes.filter((change) => change.criticality.level === CriticalityLevel.Dangerous);\n const nonBreakingChanges = changes.filter((change) => change.criticality.level === CriticalityLevel.NonBreaking);\n if (breakingChanges.length) {\n reportBreakingChanges(breakingChanges);\n }\n if (dangerousChanges.length) {\n reportDangerousChanges(dangerousChanges);\n }\n if (nonBreakingChanges.length) {\n reportNonBreakingChanges(nonBreakingChanges);\n }\n onComplete({ breakingChanges, dangerousChanges, nonBreakingChanges });\n}\nexport default createCommand((api) => {\n const { loaders } = api;\n return {\n command: 'diff <oldSchema> <newSchema>',\n describe: 'Compare two GraphQL Schemas',\n builder(yargs) {\n return yargs\n .positional('oldSchema', {\n describe: 'Point to an old schema',\n type: 'string',\n demandOption: true,\n })\n .positional('newSchema', {\n describe: 'Point to a new schema',\n type: 'string',\n demandOption: true,\n })\n .options({\n rule: {\n describe: 'Add rules',\n array: true,\n },\n onComplete: {\n describe: 'Handle Completion',\n type: 'string',\n },\n });\n },\n handler(args) {\n return __awaiter(this, void 0, void 0, function* () {\n try {\n const oldSchemaPointer = args.oldSchema;\n const newSchemaPointer = args.newSchema;\n const { headers, token } = parseGlobalArgs(args);\n const oldSchema = yield loaders.loadSchema(oldSchemaPointer, {\n headers,\n token,\n });\n const newSchema = yield loaders.loadSchema(newSchemaPointer, {\n headers,\n token,\n });\n handler({\n oldSchema,\n newSchema,\n rules: args.rule,\n onComplete: args.onComplete,\n });\n }\n catch (error) {\n Logger.error(error);\n throw error;\n }\n });\n },\n };\n});\nfunction sortChanges(changes) {\n return changes.slice().sort((a, b) => {\n const aPath = a.path || '';\n const bPath = b.path || '';\n if (aPath > bPath) {\n return 1;\n }\n if (bPath > aPath) {\n return -1;\n }\n return 0;\n });\n}\nfunction reportBreakingChanges(changes) {\n const label = symbols.error;\n const sorted = sortChanges(changes);\n sorted.forEach((change) => {\n Logger.log(`${label} ${bolderize(change.message)}`);\n });\n}\nfunction reportDangerousChanges(changes) {\n const label = symbols.warning;\n const sorted = sortChanges(changes);\n sorted.forEach((change) => {\n Logger.log(`${label} ${bolderize(change.message)}`);\n });\n}\nfunction reportNonBreakingChanges(changes) {\n const label = symbols.success;\n const sorted = sortChanges(changes);\n sorted.forEach((change) => {\n Logger.log(`${label} ${bolderize(change.message)}`);\n });\n}\nfunction resolveRule(name) {\n const filepath = ensureAbsolute(name);\n if (existsSync(filepath)) {\n return require(filepath);\n }\n return DiffRule[name];\n}\nfunction resolveCompletionHandler(name) {\n const filepath = ensureAbsolute(name);\n try {\n require.resolve(filepath);\n }\n catch (error) {\n throw new Error(`CompletionHandler '${name}' does not exist!`);\n }\n const mod = require(filepath);\n return (mod === null || mod === void 0 ? void 0 : mod.default) || mod;\n}\nfunction failOnBreakingChanges({ breakingChanges }) {\n const breakingCount = breakingChanges.length;\n if (breakingCount) {\n Logger.error(`Detected ${breakingCount} breaking change${breakingCount > 1 ? 's' : ''}`);\n process.exit(1);\n }\n else {\n Logger.success('No breaking changes detected');\n }\n}\nfunction isString(val) {\n return typeof val === 'string';\n}\n//# sourceMappingURL=index.js.map"],"names":["diffSchema"],"mappings":"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"}
|