@graphql-inspector/diff-command 0.0.0-canary.485af9a → 0.0.0-canary.4c9888f

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 CHANGED
@@ -5,12 +5,15 @@ 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;
17
+ assumeValidSDL?: boolean | undefined;
15
18
  } & GlobalArgs>;
16
19
  export default _default;
@@ -9,40 +9,44 @@ const logger = require('@graphql-inspector/logger');
9
9
  const fs = require('fs');
10
10
 
11
11
  function handler(input) {
12
- const onComplete = input.onComplete
13
- ? resolveCompletionHandler(input.onComplete)
14
- : failOnBreakingChanges;
15
- const rules = input.rules
16
- ? input.rules
17
- .filter(isString)
18
- .map((name) => {
19
- const rule = resolveRule(name);
20
- if (!rule) {
21
- throw new Error(`\Rule '${name}' does not exist!\n`);
22
- }
23
- return rule;
24
- })
25
- .filter((f) => f)
26
- : [];
27
- const changes = core.diff(input.oldSchema, input.newSchema, rules);
28
- if (changes.length === 0) {
29
- logger.Logger.success('No changes detected');
30
- return;
31
- }
32
- logger.Logger.log(`\nDetected the following changes (${changes.length}) between schemas:\n`);
33
- const breakingChanges = changes.filter((change) => change.criticality.level === core.CriticalityLevel.Breaking);
34
- const dangerousChanges = changes.filter((change) => change.criticality.level === core.CriticalityLevel.Dangerous);
35
- const nonBreakingChanges = changes.filter((change) => change.criticality.level === core.CriticalityLevel.NonBreaking);
36
- if (breakingChanges.length) {
37
- reportBreakingChanges(breakingChanges);
38
- }
39
- if (dangerousChanges.length) {
40
- reportDangerousChanges(dangerousChanges);
41
- }
42
- if (nonBreakingChanges.length) {
43
- reportNonBreakingChanges(nonBreakingChanges);
44
- }
45
- onComplete({ breakingChanges, dangerousChanges, nonBreakingChanges });
12
+ return tslib.__awaiter(this, void 0, void 0, function* () {
13
+ const onComplete = input.onComplete
14
+ ? resolveCompletionHandler(input.onComplete)
15
+ : failOnBreakingChanges;
16
+ const rules = input.rules
17
+ ? input.rules
18
+ .filter(isString)
19
+ .map((name) => {
20
+ const rule = resolveRule(name);
21
+ if (!rule) {
22
+ throw new Error(`\Rule '${name}' does not exist!\n`);
23
+ }
24
+ return rule;
25
+ })
26
+ .filter((f) => f)
27
+ : [];
28
+ const changes = yield core.diff(input.oldSchema, input.newSchema, rules, {
29
+ checkUsage: input.onUsage ? resolveUsageHandler(input.onUsage) : undefined,
30
+ });
31
+ if (changes.length === 0) {
32
+ logger.Logger.success('No changes detected');
33
+ return;
34
+ }
35
+ logger.Logger.log(`\nDetected the following changes (${changes.length}) between schemas:\n`);
36
+ const breakingChanges = changes.filter((change) => change.criticality.level === core.CriticalityLevel.Breaking);
37
+ const dangerousChanges = changes.filter((change) => change.criticality.level === core.CriticalityLevel.Dangerous);
38
+ const nonBreakingChanges = changes.filter((change) => change.criticality.level === core.CriticalityLevel.NonBreaking);
39
+ if (breakingChanges.length) {
40
+ reportBreakingChanges(breakingChanges);
41
+ }
42
+ if (dangerousChanges.length) {
43
+ reportDangerousChanges(dangerousChanges);
44
+ }
45
+ if (nonBreakingChanges.length) {
46
+ reportNonBreakingChanges(nonBreakingChanges);
47
+ }
48
+ onComplete({ breakingChanges, dangerousChanges, nonBreakingChanges });
49
+ });
46
50
  }
47
51
  const index = commands.createCommand((api) => {
48
52
  const { loaders } = api;
@@ -70,35 +74,48 @@ const index = commands.createCommand((api) => {
70
74
  describe: 'Handle Completion',
71
75
  type: 'string',
72
76
  },
77
+ onUsage: {
78
+ describe: 'Checks usage of schema',
79
+ type: 'string',
80
+ },
81
+ assumeValidSDL: {
82
+ describe: "Set to true to assume the SDL is valid. Missing directive definitions will be accepted",
83
+ type: 'boolean',
84
+ default: false,
85
+ },
73
86
  });
74
87
  },
75
88
  handler(args) {
76
- var _a;
89
+ var _a, _b;
77
90
  return tslib.__awaiter(this, void 0, void 0, function* () {
78
91
  try {
79
92
  const oldSchemaPointer = args.oldSchema;
80
93
  const newSchemaPointer = args.newSchema;
81
94
  const apolloFederation = args.federation || false;
82
95
  const aws = args.aws || false;
83
- const method = ((_a = args.method) === null || _a === void 0 ? void 0 : _a.toUpperCase()) || 'POST';
96
+ const assumeValidSDL = (_a = args.assumeValidSDL) !== null && _a !== void 0 ? _a : false;
97
+ const method = ((_b = args.method) === null || _b === void 0 ? void 0 : _b.toUpperCase()) || 'POST';
84
98
  const { headers, leftHeaders, rightHeaders, token } = commands.parseGlobalArgs(args);
85
99
  const oldSchemaHeaders = Object.assign(Object.assign({}, (headers !== null && headers !== void 0 ? headers : {})), (leftHeaders !== null && leftHeaders !== void 0 ? leftHeaders : {}));
86
100
  const newSchemaHeaders = Object.assign(Object.assign({}, (headers !== null && headers !== void 0 ? headers : {})), (rightHeaders !== null && rightHeaders !== void 0 ? rightHeaders : {}));
87
101
  const oldSchema = yield loaders.loadSchema(oldSchemaPointer, {
88
- oldSchemaHeaders,
102
+ headers: oldSchemaHeaders,
89
103
  token,
90
104
  method,
105
+ assumeValidSDL,
91
106
  }, apolloFederation, aws);
92
107
  const newSchema = yield loaders.loadSchema(newSchemaPointer, {
93
- newSchemaHeaders,
108
+ headers: newSchemaHeaders,
94
109
  token,
95
110
  method,
111
+ assumeValidSDL,
96
112
  }, apolloFederation, aws);
97
- handler({
113
+ yield handler({
98
114
  oldSchema,
99
115
  newSchema,
100
116
  rules: args.rule,
101
117
  onComplete: args.onComplete,
118
+ onUsage: args.onUsage,
102
119
  });
103
120
  }
104
121
  catch (error) {
@@ -161,6 +178,17 @@ function resolveCompletionHandler(name) {
161
178
  const mod = require(filepath);
162
179
  return (mod === null || mod === void 0 ? void 0 : mod.default) || mod;
163
180
  }
181
+ function resolveUsageHandler(name) {
182
+ const filepath = commands.ensureAbsolute(name);
183
+ try {
184
+ require.resolve(filepath);
185
+ }
186
+ catch (error) {
187
+ throw new Error(`UsageHandler '${name}' does not exist!`);
188
+ }
189
+ const mod = require(filepath);
190
+ return (mod === null || mod === void 0 ? void 0 : mod.default) || mod;
191
+ }
164
192
  function failOnBreakingChanges({ breakingChanges }) {
165
193
  const breakingCount = breakingChanges.length;
166
194
  if (breakingCount) {
@@ -177,4 +205,3 @@ function isString(val) {
177
205
 
178
206
  exports.default = index;
179
207
  exports.handler = handler;
180
- //# sourceMappingURL=index.cjs.js.map
@@ -5,40 +5,44 @@ import { Logger, symbols, bolderize } from '@graphql-inspector/logger';
5
5
  import { existsSync } from 'fs';
6
6
 
7
7
  function handler(input) {
8
- const onComplete = input.onComplete
9
- ? resolveCompletionHandler(input.onComplete)
10
- : failOnBreakingChanges;
11
- const rules = input.rules
12
- ? input.rules
13
- .filter(isString)
14
- .map((name) => {
15
- const rule = resolveRule(name);
16
- if (!rule) {
17
- throw new Error(`\Rule '${name}' does not exist!\n`);
18
- }
19
- return rule;
20
- })
21
- .filter((f) => f)
22
- : [];
23
- const changes = diff(input.oldSchema, input.newSchema, rules);
24
- if (changes.length === 0) {
25
- Logger.success('No changes detected');
26
- return;
27
- }
28
- Logger.log(`\nDetected the following changes (${changes.length}) between schemas:\n`);
29
- const breakingChanges = changes.filter((change) => change.criticality.level === CriticalityLevel.Breaking);
30
- const dangerousChanges = changes.filter((change) => change.criticality.level === CriticalityLevel.Dangerous);
31
- const nonBreakingChanges = changes.filter((change) => change.criticality.level === CriticalityLevel.NonBreaking);
32
- if (breakingChanges.length) {
33
- reportBreakingChanges(breakingChanges);
34
- }
35
- if (dangerousChanges.length) {
36
- reportDangerousChanges(dangerousChanges);
37
- }
38
- if (nonBreakingChanges.length) {
39
- reportNonBreakingChanges(nonBreakingChanges);
40
- }
41
- onComplete({ breakingChanges, dangerousChanges, nonBreakingChanges });
8
+ return __awaiter(this, void 0, void 0, function* () {
9
+ const onComplete = input.onComplete
10
+ ? resolveCompletionHandler(input.onComplete)
11
+ : failOnBreakingChanges;
12
+ const rules = input.rules
13
+ ? input.rules
14
+ .filter(isString)
15
+ .map((name) => {
16
+ const rule = resolveRule(name);
17
+ if (!rule) {
18
+ throw new Error(`\Rule '${name}' does not exist!\n`);
19
+ }
20
+ return rule;
21
+ })
22
+ .filter((f) => f)
23
+ : [];
24
+ const changes = yield diff(input.oldSchema, input.newSchema, rules, {
25
+ checkUsage: input.onUsage ? resolveUsageHandler(input.onUsage) : undefined,
26
+ });
27
+ if (changes.length === 0) {
28
+ Logger.success('No changes detected');
29
+ return;
30
+ }
31
+ Logger.log(`\nDetected the following changes (${changes.length}) between schemas:\n`);
32
+ const breakingChanges = changes.filter((change) => change.criticality.level === CriticalityLevel.Breaking);
33
+ const dangerousChanges = changes.filter((change) => change.criticality.level === CriticalityLevel.Dangerous);
34
+ const nonBreakingChanges = changes.filter((change) => change.criticality.level === CriticalityLevel.NonBreaking);
35
+ if (breakingChanges.length) {
36
+ reportBreakingChanges(breakingChanges);
37
+ }
38
+ if (dangerousChanges.length) {
39
+ reportDangerousChanges(dangerousChanges);
40
+ }
41
+ if (nonBreakingChanges.length) {
42
+ reportNonBreakingChanges(nonBreakingChanges);
43
+ }
44
+ onComplete({ breakingChanges, dangerousChanges, nonBreakingChanges });
45
+ });
42
46
  }
43
47
  const index = createCommand((api) => {
44
48
  const { loaders } = api;
@@ -66,35 +70,48 @@ const index = createCommand((api) => {
66
70
  describe: 'Handle Completion',
67
71
  type: 'string',
68
72
  },
73
+ onUsage: {
74
+ describe: 'Checks usage of schema',
75
+ type: 'string',
76
+ },
77
+ assumeValidSDL: {
78
+ describe: "Set to true to assume the SDL is valid. Missing directive definitions will be accepted",
79
+ type: 'boolean',
80
+ default: false,
81
+ },
69
82
  });
70
83
  },
71
84
  handler(args) {
72
- var _a;
85
+ var _a, _b;
73
86
  return __awaiter(this, void 0, void 0, function* () {
74
87
  try {
75
88
  const oldSchemaPointer = args.oldSchema;
76
89
  const newSchemaPointer = args.newSchema;
77
90
  const apolloFederation = args.federation || false;
78
91
  const aws = args.aws || false;
79
- const method = ((_a = args.method) === null || _a === void 0 ? void 0 : _a.toUpperCase()) || 'POST';
92
+ const assumeValidSDL = (_a = args.assumeValidSDL) !== null && _a !== void 0 ? _a : false;
93
+ const method = ((_b = args.method) === null || _b === void 0 ? void 0 : _b.toUpperCase()) || 'POST';
80
94
  const { headers, leftHeaders, rightHeaders, token } = parseGlobalArgs(args);
81
95
  const oldSchemaHeaders = Object.assign(Object.assign({}, (headers !== null && headers !== void 0 ? headers : {})), (leftHeaders !== null && leftHeaders !== void 0 ? leftHeaders : {}));
82
96
  const newSchemaHeaders = Object.assign(Object.assign({}, (headers !== null && headers !== void 0 ? headers : {})), (rightHeaders !== null && rightHeaders !== void 0 ? rightHeaders : {}));
83
97
  const oldSchema = yield loaders.loadSchema(oldSchemaPointer, {
84
- oldSchemaHeaders,
98
+ headers: oldSchemaHeaders,
85
99
  token,
86
100
  method,
101
+ assumeValidSDL,
87
102
  }, apolloFederation, aws);
88
103
  const newSchema = yield loaders.loadSchema(newSchemaPointer, {
89
- newSchemaHeaders,
104
+ headers: newSchemaHeaders,
90
105
  token,
91
106
  method,
107
+ assumeValidSDL,
92
108
  }, apolloFederation, aws);
93
- handler({
109
+ yield handler({
94
110
  oldSchema,
95
111
  newSchema,
96
112
  rules: args.rule,
97
113
  onComplete: args.onComplete,
114
+ onUsage: args.onUsage,
98
115
  });
99
116
  }
100
117
  catch (error) {
@@ -157,6 +174,17 @@ function resolveCompletionHandler(name) {
157
174
  const mod = require(filepath);
158
175
  return (mod === null || mod === void 0 ? void 0 : mod.default) || mod;
159
176
  }
177
+ function resolveUsageHandler(name) {
178
+ const filepath = ensureAbsolute(name);
179
+ try {
180
+ require.resolve(filepath);
181
+ }
182
+ catch (error) {
183
+ throw new Error(`UsageHandler '${name}' does not exist!`);
184
+ }
185
+ const mod = require(filepath);
186
+ return (mod === null || mod === void 0 ? void 0 : mod.default) || mod;
187
+ }
160
188
  function failOnBreakingChanges({ breakingChanges }) {
161
189
  const breakingCount = breakingChanges.length;
162
190
  if (breakingCount) {
@@ -173,4 +201,3 @@ function isString(val) {
173
201
 
174
202
  export default index;
175
203
  export { handler };
176
- //# 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.485af9a",
3
+ "version": "0.0.0-canary.4c9888f",
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.485af9a",
11
- "@graphql-inspector/core": "0.0.0-canary.485af9a",
12
- "@graphql-inspector/logger": "0.0.0-canary.485af9a",
10
+ "@graphql-inspector/commands": "0.0.0-canary.4c9888f",
11
+ "@graphql-inspector/core": "0.0.0-canary.4c9888f",
12
+ "@graphql-inspector/logger": "0.0.0-canary.4c9888f",
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.cjs.js",
33
- "module": "index.esm.js",
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 { CriticalityLevel, diff as diffSchema, DiffRule, } from '@graphql-inspector/core';\nimport { bolderize, Logger, symbols } from '@graphql-inspector/logger';\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 var _a;\n return __awaiter(this, void 0, void 0, function* () {\n try {\n const oldSchemaPointer = args.oldSchema;\n const newSchemaPointer = args.newSchema;\n const apolloFederation = args.federation || false;\n const aws = args.aws || false;\n const method = ((_a = args.method) === null || _a === void 0 ? void 0 : _a.toUpperCase()) || 'POST';\n const { headers, leftHeaders, rightHeaders, token } = parseGlobalArgs(args);\n const oldSchemaHeaders = Object.assign(Object.assign({}, (headers !== null && headers !== void 0 ? headers : {})), (leftHeaders !== null && leftHeaders !== void 0 ? leftHeaders : {}));\n const newSchemaHeaders = Object.assign(Object.assign({}, (headers !== null && headers !== void 0 ? headers : {})), (rightHeaders !== null && rightHeaders !== void 0 ? rightHeaders : {}));\n const oldSchema = yield loaders.loadSchema(oldSchemaPointer, {\n oldSchemaHeaders,\n token,\n method,\n }, apolloFederation, aws);\n const newSchema = yield loaders.loadSchema(newSchemaPointer, {\n newSchemaHeaders,\n token,\n method,\n }, apolloFederation, aws);\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 { CriticalityLevel, diff as diffSchema, DiffRule, } from '@graphql-inspector/core';\nimport { bolderize, Logger, symbols } from '@graphql-inspector/logger';\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 var _a;\n return __awaiter(this, void 0, void 0, function* () {\n try {\n const oldSchemaPointer = args.oldSchema;\n const newSchemaPointer = args.newSchema;\n const apolloFederation = args.federation || false;\n const aws = args.aws || false;\n const method = ((_a = args.method) === null || _a === void 0 ? void 0 : _a.toUpperCase()) || 'POST';\n const { headers, leftHeaders, rightHeaders, token } = parseGlobalArgs(args);\n const oldSchemaHeaders = Object.assign(Object.assign({}, (headers !== null && headers !== void 0 ? headers : {})), (leftHeaders !== null && leftHeaders !== void 0 ? leftHeaders : {}));\n const newSchemaHeaders = Object.assign(Object.assign({}, (headers !== null && headers !== void 0 ? headers : {})), (rightHeaders !== null && rightHeaders !== void 0 ? rightHeaders : {}));\n const oldSchema = yield loaders.loadSchema(oldSchemaPointer, {\n oldSchemaHeaders,\n token,\n method,\n }, apolloFederation, aws);\n const newSchema = yield loaders.loadSchema(newSchemaPointer, {\n newSchemaHeaders,\n token,\n method,\n }, apolloFederation, aws);\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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"}